commit 2104ae8068fb9aeb35f80ab29555b413e3096df0
Author: Jean-Marc Lasgouttes <[email protected]>
Date:   Thu Jun 30 14:13:57 2022 +0200

    Fixup c30b0aac: protect against bad recursion
    
    Adding this particular line created bad redraw interactions. See
    thread on lyx-devel here:
    https://marc.info/?l=lyx-devel&m=165648365808777&w=2
    
    The code is reorganized a bit:
    
    - the part of updateGUI() that (en|dis)abled elements is not moved to
      updateBottons ; the rest is renamed updateWorkAreas()
    
    - only updateButtons is called now in eventFilter
    
    - finally the recursion curse is fixed now in updateWorkAreas() by
      setting the old_buffer value _before_ calling copy_params. This
      avoid recursion if some bad update were to happen again.
---
 src/frontends/qt/FindAndReplace.cpp |   37 ++++++++++++++++++-----------------
 src/frontends/qt/FindAndReplace.h   |    2 +-
 2 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/src/frontends/qt/FindAndReplace.cpp 
b/src/frontends/qt/FindAndReplace.cpp
index a06cd1f..f9016f1 100644
--- a/src/frontends/qt/FindAndReplace.cpp
+++ b/src/frontends/qt/FindAndReplace.cpp
@@ -86,7 +86,7 @@ void 
FindAndReplaceWidget::dockLocationChanged(Qt::DockWidgetArea area)
 
 bool FindAndReplaceWidget::eventFilter(QObject * obj, QEvent * event)
 {
-       updateGUI();
+       updateButtons();
        if (event->type() != QEvent::KeyPress
                  || (obj != find_work_area_ && obj != replace_work_area_))
                return QWidget::eventFilter(obj, event);
@@ -644,13 +644,6 @@ bool FindAndReplaceWidget::initialiseParams(std::string 
const & /*params*/)
 }
 
 
-void FindAndReplace::updateView()
-{
-       widget_->updateGUI();
-       widget_->updateButtons();
-}
-
-
 FindAndReplace::FindAndReplace(GuiView & parent,
                               Qt::DockWidgetArea area,
                               Qt::WindowFlags flags)
@@ -683,25 +676,17 @@ bool FindAndReplace::initialiseParams(std::string const & 
params)
 }
 
 
-void FindAndReplaceWidget::updateGUI()
+void FindAndReplaceWidget::updateWorkAreas()
 {
        BufferView * bv = view_.documentBufferView();
        if (bv) {
                if (old_buffer_ != &bv->buffer()) {
+                               old_buffer_ = &bv->buffer();
                                copy_params(*bv, find_work_area_->bufferView());
                                copy_params(*bv, 
replace_work_area_->bufferView());
-                               old_buffer_ = &bv->buffer();
                }
        } else
                old_buffer_ = nullptr;
-
-       bool const find_enabled = 
!find_work_area_->bufferView().buffer().empty();
-       findNextPB->setEnabled(find_enabled);
-       bool const replace_enabled = find_enabled && bv && 
!bv->buffer().isReadonly();
-       replaceLabel->setEnabled(replace_enabled);
-       replace_work_area_->setEnabled(replace_enabled);
-       replacePB->setEnabled(replace_enabled);
-       replaceallPB->setEnabled(replace_enabled);
 }
 
 
@@ -718,6 +703,22 @@ void FindAndReplaceWidget::updateButtons()
                replacePB->setText(qt_("Rep&lace >"));
                replacePB->setToolTip(qt_("Replace and find next occurrence 
(Enter, backwards: Shift+Enter)"));
        }
+
+       BufferView * bv = view_.documentBufferView();
+       bool const find_enabled = 
!find_work_area_->bufferView().buffer().empty();
+       findNextPB->setEnabled(find_enabled);
+       bool const replace_enabled = find_enabled && bv && 
!bv->buffer().isReadonly();
+       replaceLabel->setEnabled(replace_enabled);
+       replace_work_area_->setEnabled(replace_enabled);
+       replacePB->setEnabled(replace_enabled);
+       replaceallPB->setEnabled(replace_enabled);
+}
+
+
+void FindAndReplace::updateView()
+{
+       widget_->updateWorkAreas();
+       widget_->updateButtons();
 }
 
 
diff --git a/src/frontends/qt/FindAndReplace.h 
b/src/frontends/qt/FindAndReplace.h
index 3bb4007..07c03ea 100644
--- a/src/frontends/qt/FindAndReplace.h
+++ b/src/frontends/qt/FindAndReplace.h
@@ -33,7 +33,7 @@ class FindAndReplaceWidget : public QTabWidget, public 
Ui::FindAndReplaceUi
 public:
        FindAndReplaceWidget(GuiView & view);
        bool initialiseParams(std::string const & params);
-       void updateGUI();
+       void updateWorkAreas();
        void updateButtons();
 
        // return true if \c wa is one if the adv. F&R workareas
-- 
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to