[gnumeric] GUI: Improve workaround for scrollbar bug.
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] GUI: Improve workaround for scrollbar bug.
- Date: Thu, 11 Jan 2018 14:30:51 +0000 (UTC)
commit 541ea2bf7bcb350972e43f5ab9dd59046c667a28
Author: Morten Welinder <terra gnome org>
Date: Thu Jan 11 09:30:08 2018 -0500
GUI: Improve workaround for scrollbar bug.
This prevents an update storm.
ChangeLog | 6 ++++++
NEWS | 1 +
src/sheet-control-gui.c | 30 ++++++++++++++++++++++++++++--
3 files changed, 35 insertions(+), 2 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index b844101..821dd08 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2018-01-11 Morten Welinder <terra gnome org>
+
+ * src/sheet-control-gui.c (scg_scrollbar_config_real): Be careful
+ not to trigger an update storm when nothing changes. Fixes
+ #792417.
+
2018-01-01 Morten Welinder <terra gnome org>
* src/expr.c (gnm_expr_simplify_if): Remove non-working,
diff --git a/NEWS b/NEWS
index 0a2781a..75ed6d5 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,7 @@ Morten:
* Fix ISREF.
* Some internal array formula code cleanups.
* Fix problem with stopping a glpk solver.
+ * Improve workaround for gtk+ scrollbar bug. [#792417]
--------------------------------------------------------------------------
Gnumeric 1.12.38
diff --git a/src/sheet-control-gui.c b/src/sheet-control-gui.c
index f56ff1d..3b76fa3 100644
--- a/src/sheet-control-gui.c
+++ b/src/sheet-control-gui.c
@@ -455,6 +455,32 @@ scg_resize_virt (SheetControl *sc, gboolean force_scroll)
scg_resize ((SheetControlGUI *)sc, force_scroll);
}
+static void
+gnm_adjustment_configure (GtkAdjustment *adjustment,
+ gdouble value,
+ gdouble lower,
+ gdouble upper,
+ gdouble step_increment,
+ gdouble page_increment,
+ gdouble page_size)
+{
+ g_object_freeze_notify (G_OBJECT (adjustment));
+
+ // These do nothing if value isn't changed
+ gtk_adjustment_set_lower (adjustment, lower);
+ gtk_adjustment_set_upper (adjustment, upper);
+ gtk_adjustment_set_step_increment (adjustment, step_increment);
+ gtk_adjustment_set_page_increment (adjustment, page_increment);
+ gtk_adjustment_set_page_size (adjustment, page_size);
+
+ g_object_thaw_notify (G_OBJECT (adjustment));
+
+ // These fire signals if nothing changes, so check by hand
+ if (!(gtk_adjustment_get_value (adjustment) == value))
+ gtk_adjustment_set_value (adjustment, value);
+
+}
+
/**
* scg_scrollbar_config :
* @sc:
@@ -492,7 +518,7 @@ scg_scrollbar_config_real (SheetControl const *sc)
max_row = sheet->rows.max_used;
if (max_row < sheet->max_object_extent.row)
max_row = sheet->max_object_extent.row;
- gtk_adjustment_configure
+ gnm_adjustment_configure
(va,
pane->first.row,
sv_is_frozen (sv) ? sv->unfrozen_top_left.row : 0,
@@ -505,7 +531,7 @@ scg_scrollbar_config_real (SheetControl const *sc)
max_col = sheet->cols.max_used;
if (max_col < sheet->max_object_extent.col)
max_col = sheet->max_object_extent.col;
- gtk_adjustment_configure
+ gnm_adjustment_configure
(ha,
pane->first.col,
sv_is_frozen (sv) ? sv->unfrozen_top_left.col : 0,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]