]> git.lyx.org Git - lyx.git/commitdiff
Partially fix bug #10827. Patch from Daniel, slightly modified by me.
authorRichard Kimberly Heck <rikiheck@lyx.org>
Sun, 4 Dec 2022 03:41:26 +0000 (22:41 -0500)
committerRichard Kimberly Heck <rikiheck@lyx.org>
Sun, 4 Dec 2022 03:44:05 +0000 (22:44 -0500)
src/frontends/qt/GuiDialog.cpp
src/frontends/qt/GuiDialog.h
src/frontends/qt/GuiDocument.cpp
src/frontends/qt/GuiDocument.h

index 3426c799b315788ba00d98e9fe03db5d15f91199..70d086c7f8ca23d37f7c3a3f6184719aaec87d62 100644 (file)
@@ -27,7 +27,7 @@ namespace frontend {
 
 GuiDialog::GuiDialog(GuiView & lv, QString const & name, QString const & title)
        : QDialog(&lv), Dialog(lv, name, title), updating_(false),
-         is_closing_(false)
+      is_closing_(false), apply_stopped_(false)
 {
        connect(&lv, SIGNAL(bufferViewChanged()),
                this, SLOT(onBufferViewChanged()));
@@ -52,7 +52,10 @@ void GuiDialog::setButtonsValid(bool valid)
 
 void GuiDialog::slotApply()
 {
+       setApplyStopped(false);
        apply();
+       if (applyStopped())
+               return;
        bc().apply();
 }
 
@@ -67,7 +70,10 @@ void GuiDialog::slotAutoApply()
 void GuiDialog::slotOK()
 {
        is_closing_ = true;
+       setApplyStopped(false);
        apply();
+       if (applyStopped())
+               return;
        is_closing_ = false;
        hideView();
        bc().ok();
index 572ff536cd05ab0cf55399ab0d168376ca710e09..160357dbc64d02da00fa55be4d28a27faac241c8 100644 (file)
@@ -74,6 +74,9 @@ public:
         */
        void setButtonsValid(bool valid);
 
+       // Set whether to stop the apply process
+       void setApplyStopped(bool stop) { apply_stopped_ = stop; };
+
        /** \name Dialog Components
         *  Methods to access the various components making up a dialog.
         */
@@ -115,6 +118,10 @@ private:
        bool updating_;
 
        bool is_closing_;
+
+       /// stop the apply process?
+       bool applyStopped() { return apply_stopped_; };
+       bool apply_stopped_;
 };
 
 
index 83581d0bd53f54646780fbf3fe1f9f22c40e233e..6da810f64890e011f61bbe6dcff7ac74a9142bbd 100644 (file)
@@ -657,23 +657,18 @@ void LocalLayout::hideConvert()
 
 void LocalLayout::textChanged()
 {
-       // Flashy red bold text
-       static const QString ivpar("<p style=\"color: #c00000; font-weight: bold; text-align:left\">"
-                                  "%1</p>");
-       static const QString message = ivpar.arg(qt_("Validation required!"));
+       validLB->setText("");
        string const layout =
                fromqstr(locallayoutTE->document()->toPlainText().trimmed());
 
        if (layout.empty()) {
                validated_ = true;
                validatePB->setEnabled(false);
-               validLB->setText("");
                hideConvert();
                changed();
        } else if (!validatePB->isEnabled()) {
                // if that's already enabled, we shouldn't need to do anything.
                validated_ = false;
-               validLB->setText(message);
                validatePB->setEnabled(true);
                hideConvert();
                changed();
@@ -3418,6 +3413,16 @@ bool GuiDocument::isChildIncluded(string const & child)
 
 void GuiDocument::applyView()
 {
+       // auto-validate local layout
+       if (!localLayout->isValid()) {
+               localLayout->validate();
+               if (!localLayout->isValid()) {
+                       setApplyStopped(true);
+                       docPS->setCurrentPanel(N_("Local Layout"));
+                       return;
+               }
+       }
+
        // preamble
        preambleModule->apply(bp_);
        localLayout->apply(bp_);
@@ -4849,7 +4854,6 @@ bool GuiDocument::isValid()
 {
        return
                validateListingsParameters().isEmpty() &&
-               localLayout->isValid() &&
                !localLayout->editing() &&
                !preambleModule->editing() &&
                (
index b6a51c5b748707b18e7043d542e12d739c0e5b68..5d06226b238ea2febed890f6cb451643421ad646 100644 (file)
@@ -388,6 +388,7 @@ public:
        LocalLayout(QWidget * parent);
        void update(BufferParams const & params, BufferId id);
        void apply(BufferParams & params);
+       void validate();
        bool isValid() const { return validated_; }
        bool editing() const { return (bool)tempfile_; }
 
@@ -396,7 +397,6 @@ Q_SIGNALS:
        void changed();
 
 private:
-       void validate();
        void convert();
        void hideConvert();
 private Q_SLOTS: