[LyX/master] Improve stats update times for buffer switches and toolbar toggles.

Pavel Sanda sanda at lyx.org
Fri Apr 5 21:00:37 UTC 2024


commit 77273303a5e22df45239d705e830baa5c0c3fcf1
Author: Pavel Sanda <sanda at lyx.org>
Date:   Fri Apr 5 22:59:07 2024 +0200

    Improve stats update times for buffer switches and toolbar toggles.
---
 src/BufferView.cpp           | 12 ++++++++++++
 src/BufferView.h             |  2 ++
 src/frontends/qt/GuiView.cpp | 10 ++++++++++
 3 files changed, 24 insertions(+)

diff --git a/src/BufferView.cpp b/src/BufferView.cpp
index 92f231c227..b5bf6d6ea1 100644
--- a/src/BufferView.cpp
+++ b/src/BufferView.cpp
@@ -303,6 +303,7 @@ struct BufferView::Private
 	int stats_ref_value_w_ = 0;
 	int stats_ref_value_c_ = 0;
 	int stats_ref_value_nb_ = 0;
+	bool stats_update_trigger_ = false;
 
 };
 
@@ -2032,6 +2033,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
 		break;
 
 	case LFUN_STATISTICS_REFERENCE_CLAMP: {
+		d->stats_update_trigger_ = true;
 		if  (cmd.argument() == "reset") {
 			d->stats_ref_value_w_ = d->stats_ref_value_c_ = d->stats_ref_value_nb_ = 0;
 			break;
@@ -3936,4 +3938,14 @@ bool BufferView::clickableInset() const
 	return d->clickable_inset_;
 }
 
+
+bool BufferView::stats_update_trigger()
+{
+	if (d->stats_update_trigger_) {
+		d->stats_update_trigger_ = false;
+		return true;
+	}
+	return false;
+}
+
 } // namespace lyx
diff --git a/src/BufferView.h b/src/BufferView.h
index 6821efeb20..bfd523aa57 100644
--- a/src/BufferView.h
+++ b/src/BufferView.h
@@ -406,6 +406,8 @@ public:
 	int stats_ref_value_w() const;
 	int stats_ref_value_c() const;
 	int stats_ref_value_nb() const;
+	//signals need for update in gui
+	bool stats_update_trigger();
 
 private:
 	/// noncopyable
diff --git a/src/frontends/qt/GuiView.cpp b/src/frontends/qt/GuiView.cpp
index ac0606e985..6f15d73626 100644
--- a/src/frontends/qt/GuiView.cpp
+++ b/src/frontends/qt/GuiView.cpp
@@ -555,6 +555,8 @@ public:
 	bool already_in_selection_ = false;
 	/// Maximum size of "short" selection for which we can update with faster timer_rate
 	int const max_sel_chars = 5000;
+	/// equivalent time_to_update = 0; but better to see it the code
+	bool stats_update_trigger_ = false;
 
 };
 
@@ -1454,6 +1456,12 @@ void GuiView::showStats()
 		return;
 	}
 
+	// UI toggle, buffer change, etc
+	if (bv->stats_update_trigger() || d.stats_update_trigger_) {
+		d.stats_update_trigger_ = false;
+		d.time_to_update = 0;
+	}
+
 	Cursor const & cur = bv->cursor();
 
 	// we start new selection and need faster update
@@ -1587,6 +1595,7 @@ void GuiView::onBufferViewChanged()
 			     && zoom_slider_->value() < zoom_slider_->maximum());
 	zoom_out_->setEnabled(currentBufferView()
 			      && zoom_slider_->value() > zoom_slider_->minimum());
+	d.stats_update_trigger_ = true;
 }
 
 
@@ -5162,6 +5171,7 @@ bool GuiView::lfunUiToggle(string const & ui_component)
 	} else
 		return false;
 	stat_counts_->setVisible(statsEnabled());
+	d.stats_update_trigger_ = true;
 	return true;
 }
 


More information about the lyx-cvs mailing list