--- sheet-control-gui-priv.h.orig	2017-12-01 00:00:37.000000000 +0100
+++ sheet-control-gui-priv.h	2018-01-11 00:48:06.072530867 +0100
@@ -36,7 +36,7 @@
 	int              vpos, hpos;    /* Handle positions */
 	guint		 pane_drag_handler;
 	int              screen_width, screen_height;
-	guint            scroll_bar_timer;
+	int              saved_width, saved_height;
 
 	/* SheetObject support */
 	GHashTable	 *selected_objects;
--- sheet-control-gui.c.orig	2017-12-02 22:47:55.000000001 +0100
+++ sheet-control-gui.c	2018-01-11 01:06:04.402604400 +0100
@@ -472,8 +472,8 @@
  * 3) It only uses pane-0 because that is the only one that can scroll in both
  * dimensions.  The others are of fixed size.
  */
-static gboolean
-scg_scrollbar_config_real (SheetControl const *sc)
+static void
+scg_scrollbar_config (SheetControl const *sc)
 {
 	SheetControlGUI *scg = GNM_SCG (sc);
 	GtkAdjustment *va = scg->va;
@@ -514,22 +514,21 @@
 			 MAX (gtk_adjustment_get_page_size (ha) - 3.0, 1.0),
 			 last_col - pane->first.col + 1);
 	}
-
-	scg->scroll_bar_timer = 0;
-	return FALSE;
 }
 
 
 static void
-scg_scrollbar_config (SheetControl *sc)
+scg_size_allocate(SheetControl *sc, GtkAllocation *allocation)
 {
 	SheetControlGUI *scg = GNM_SCG (sc);
 	/* See bug 789412 */
-	if (!scg->scroll_bar_timer)
-		scg->scroll_bar_timer =
-			g_timeout_add (1,
-				       (GSourceFunc) scg_scrollbar_config_real,
-				       scg);
+	if (    scg->saved_height == allocation->height
+	    &&  scg->saved_width  == allocation->width) return;
+
+	scg->saved_height= allocation->height;
+	scg->saved_width = allocation->width;
+
+	scg_scrollbar_config(sc);
 }
 
 void
@@ -1722,7 +1721,7 @@
 
 		g_signal_connect_data (G_OBJECT (scg->grid),
 			"size-allocate",
-			G_CALLBACK (scg_scrollbar_config), scg, NULL,
+			G_CALLBACK (scg_size_allocate), scg, NULL,
 			G_CONNECT_AFTER | G_CONNECT_SWAPPED);
 		g_signal_connect_object (G_OBJECT (scg->grid),
 			"destroy",
@@ -1849,11 +1848,6 @@
 		scg->pane_drag_handler = 0;
 	}
 
-	if (scg->scroll_bar_timer) {
-		g_source_remove (scg->scroll_bar_timer);
-		scg->scroll_bar_timer = 0;
-	}
-
 	scg_comment_timer_clear (scg);
 
 	if (scg->delayedMovement.timer != 0) {
