[gnumeric] Scrollbar sheet objects: make orientation consistent across views.



commit 840dcbd2caa617656780cf30aa916fe6602c0912
Author: Morten Welinder <terra gnome org>
Date:   Wed May 13 22:45:37 2009 -0400

    Scrollbar sheet objects: make orientation consistent across views.
---
 ChangeLog                 |    6 ++++++
 NEWS                      |    1 +
 src/sheet-object-widget.c |   21 +++++++++++++++++----
 3 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index e4e8cf2..c23aeb4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-05-13  Morten Welinder  <terra gnome org>
+
+	* src/sheet-object-widget.c (sheet_widget_scrollbar_create_widget):
+	Record whether the scrollbar is horizontal or vertical so
+	different views will have the same orientation.
+
 2009-05-12  Morten Welinder  <terra gnome org>
 
 	* src/gutils.c (gnm_debug_flag): New function.
diff --git a/NEWS b/NEWS
index df2a3ad..8a758b7 100644
--- a/NEWS
+++ b/NEWS
@@ -24,6 +24,7 @@ Morten:
 	* Cache large ranges, possibly sorted.
 	* Add progress display for OO import.
 	* Improve ssindex' coverage.
+	* Fix problem with scrollbar sheet widgets.  [Part of #166487]
 
 Paul Fitzpatrick:
 	* Extend ssconvert to also merge multiple sheets.  [#581616]
diff --git a/src/sheet-object-widget.c b/src/sheet-object-widget.c
index 6b3be07..3e2b687 100644
--- a/src/sheet-object-widget.c
+++ b/src/sheet-object-widget.c
@@ -1246,7 +1246,11 @@ SOW_MAKE_TYPE (adjustment, Adjustment,
 #define SHEET_WIDGET_SCROLLBAR(obj)	(G_TYPE_CHECK_INSTANCE_CAST((obj), SHEET_WIDGET_SCROLLBAR_TYPE, SheetWidgetScrollbar))
 #define DEP_TO_SCROLLBAR(d_ptr)		(SheetWidgetScrollbar *)(((char *)d_ptr) - G_STRUCT_OFFSET(SheetWidgetScrollbar, dep))
 
-typedef SheetWidgetAdjustment		SheetWidgetScrollbar;
+typedef struct {
+	SheetWidgetAdjustment adjustment;
+	int horizontal;
+} SheetWidgetScrollbar;
+
 typedef SheetWidgetAdjustmentClass	SheetWidgetScrollbarClass;
 
 static GtkWidget *
@@ -1254,15 +1258,18 @@ sheet_widget_scrollbar_create_widget (SheetObjectWidget *sow)
 {
 	SheetObject *so = SHEET_OBJECT (sow);
 	SheetWidgetAdjustment *swa = SHEET_WIDGET_ADJUSTMENT (sow);
+	SheetWidgetScrollbar *sws = SHEET_WIDGET_SCROLLBAR (sow);
 	GtkWidget *bar;
 
 	/* TODO : this is not exactly accurate, but should catch the worst of it
 	 * However we do not have a way to handle resizes.
 	 */
-	gboolean is_horizontal = range_width (&so->anchor.cell_bound) > range_height (&so->anchor.cell_bound);
+	if (sws->horizontal == -1)
+		sws->horizontal = (range_width (&so->anchor.cell_bound) >
+				   range_height (&so->anchor.cell_bound));
 
 	swa->being_updated = TRUE;
-	bar = is_horizontal
+	bar = sws->horizontal
 		? gtk_hscrollbar_new (swa->adjustment)
 		: gtk_vscrollbar_new (swa->adjustment);
 	GTK_WIDGET_UNSET_FLAGS (bar, GTK_CAN_FOCUS);
@@ -1282,6 +1289,12 @@ sheet_widget_scrollbar_user_config (SheetObject *so, SheetControl *sc)
 }
 
 static void
+sheet_widget_scrollbar_init (SheetWidgetScrollbar *sws)
+{
+	sws->horizontal = -1; /* Undecided. */
+}
+
+static void
 sheet_widget_scrollbar_class_init (SheetObjectWidgetClass *sow_class)
 {
         sow_class->create_widget = &sheet_widget_scrollbar_create_widget;
@@ -1289,7 +1302,7 @@ sheet_widget_scrollbar_class_init (SheetObjectWidgetClass *sow_class)
 }
 
 GSF_CLASS (SheetWidgetScrollbar, sheet_widget_scrollbar,
-	   &sheet_widget_scrollbar_class_init, NULL,
+	   &sheet_widget_scrollbar_class_init, sheet_widget_scrollbar_init,
 	   SHEET_WIDGET_ADJUSTMENT_TYPE)
 
 /****************************************************************************/



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]