commit 2f9d3233960c3dd362e2800e1675a094743b5c43
Author: Guillaume Munch <g...@lyx.org>
Date:   Sat Apr 30 00:25:46 2016 +0100

    TocWidget: Fix perf regression
    
    4d1ad336 fixed #9754 but caused perf issues by cancelling the gains of 
having a
    timer (introduced after #7138). This introduces in GuiToc::enableView() a
    lightweight check of whether the widget should be updated. The logic is 
inspired
    from GuiViewSource::enableView().

diff --git a/src/frontends/qt4/GuiToc.cpp b/src/frontends/qt4/GuiToc.cpp
index f603c56..7d9b1e5 100644
--- a/src/frontends/qt4/GuiToc.cpp
+++ b/src/frontends/qt4/GuiToc.cpp
@@ -66,9 +66,12 @@ void GuiToc::dispatchParams()
 }
 
 
-void GuiToc::enableView(bool /*enable*/)
+void GuiToc::enableView(bool enable)
 {
-       widget_->updateViewForce();
+       widget_->checkModelChanged();
+       if (!enable)
+               // In the opposite case, updateView() will be called anyway.
+               widget_->updateViewForce();
 }
 
 
diff --git a/src/frontends/qt4/TocWidget.cpp b/src/frontends/qt4/TocWidget.cpp
index 24bc433..e3693b7 100644
--- a/src/frontends/qt4/TocWidget.cpp
+++ b/src/frontends/qt4/TocWidget.cpp
@@ -452,6 +452,14 @@ void TocWidget::updateViewForce()
 }
 
 
+void TocWidget::checkModelChanged()
+{
+       if (!gui_view_.documentBufferView() ||
+           gui_view_.tocModels().model(current_type_) != tocTV->model())
+               updateViewForce();
+}
+
+
 void TocWidget::filterContents()
 {
        if (!tocTV->model())
diff --git a/src/frontends/qt4/TocWidget.h b/src/frontends/qt4/TocWidget.h
index 962c21a..39a6c29 100644
--- a/src/frontends/qt4/TocWidget.h
+++ b/src/frontends/qt4/TocWidget.h
@@ -42,6 +42,8 @@ public:
        ///
        bool getStatus(Cursor & cur, FuncRequest const & fr, FuncStatus & 
status)
                const;
+       // update the view when the model has changed
+       void checkModelChanged();
 
 public Q_SLOTS:
        /// Schedule new update of the display unless already scheduled.

Reply via email to