Removed some gtksheet features that were causing problems for us when
authorJohn Darrington <john@darrington.wattle.id.au>
Tue, 3 Jul 2007 05:49:53 +0000 (05:49 +0000)
committerJohn Darrington <john@darrington.wattle.id.au>
Tue, 3 Jul 2007 05:49:53 +0000 (05:49 +0000)
autoscrolling the datasheet.

lib/gtksheet/ChangeLog
lib/gtksheet/gtksheet.c
lib/gtksheet/gtksheet.h
src/ui/gui/ChangeLog
src/ui/gui/data-editor.c
src/ui/gui/data-sheet.c

index 84a622d2a7712f8b2808839868181ec82f687cd3..cb859a397eb9d6f3c28d9f32bb159573311e2e81 100644 (file)
@@ -1,4 +1,9 @@
-       28 June 2007 John Darrington <john@darrington.wattle.id.au>
+03 July 2007 John Darrington <john@darrington.wattle.id.au>
+
+       * gtksheet.c gtksheet.h: Removed the autoscroll-on-select feature 
+       that was causing us grief.
+
+28 June 2007 John Darrington <john@darrington.wattle.id.au>
 
         * gtksheet.c: Removed some features that we dont use, to get better 
        speed.
index bf6f765c316204118784bcc58878ef90464b1d45..57ae79dfe36d3abb03c3164f5d55df41bb012ec8 100644 (file)
@@ -95,7 +95,6 @@ enum
 
 #define CELL_SPACING 1
 #define DRAG_WIDTH 6
-#define TIMEOUT_SCROLL 20
 #define TIMEOUT_FLASH 200
 #define TIME_INTERVAL 8
 #define COLUMN_MIN_WIDTH 10
@@ -644,7 +643,6 @@ static gint gtk_sheet_cell_isvisible                 (GtkSheet * sheet,
                                                  gint row, gint column);
 /* Clipped Range */
 
-static gint gtk_sheet_scroll                    (gpointer data);
 static gint gtk_sheet_flash                     (gpointer data);
 
 /* Drawing Routines */
@@ -667,7 +665,7 @@ static void gtk_sheet_range_draw_selection   (GtkSheet *sheet,
 
 /* Selection */
 
-static gint gtk_sheet_move_query                (GtkSheet *sheet,
+static gboolean gtk_sheet_move_query                    (GtkSheet *sheet,
                                                  gint row, gint column);
 static void gtk_sheet_real_select_range         (GtkSheet * sheet,
                                                  const GtkSheetRange * range);
@@ -2010,7 +2008,7 @@ gtk_sheet_row_titles_visible (GtkSheet *sheet)
 }
 
 void
-gtk_sheet_moveto (GtkSheet * sheet,
+gtk_sheet_moveto (GtkSheet *sheet,
                  gint row,
                  gint column,
                  gfloat row_align,
@@ -2248,6 +2246,7 @@ gtk_sheet_unclip_range (GtkSheet *sheet)
   if (!GTK_SHEET_IN_CLIP (sheet)) return;
 
   GTK_SHEET_UNSET_FLAGS (sheet, GTK_SHEET_IN_CLIP);
+
   gtk_timeout_remove (sheet->clip_timer);
   gtk_sheet_range_draw (sheet, &sheet->clip_range);
 
@@ -2443,7 +2442,6 @@ gtk_sheet_cell_isvisible (GtkSheet * sheet,
 void
 gtk_sheet_get_visible_range (GtkSheet *sheet, GtkSheetRange *range)
 {
-
   g_return_if_fail (sheet != NULL);
   g_return_if_fail (GTK_IS_SHEET (sheet)) ;
   g_return_if_fail (range != NULL);
@@ -2452,7 +2450,6 @@ gtk_sheet_get_visible_range (GtkSheet *sheet, GtkSheetRange *range)
   range->col0 = MIN_VISIBLE_COLUMN (sheet);
   range->rowi = MAX_VISIBLE_ROW (sheet);
   range->coli = MAX_VISIBLE_COLUMN (sheet);
-
 }
 
 GtkAdjustment *
@@ -2626,12 +2623,6 @@ gtk_sheet_destroy (GtkObject * object)
       sheet->button = NULL;
     }
 
-  if (sheet->timer)
-    {
-      gtk_timeout_remove (sheet->timer);
-      sheet->timer = 0;
-    }
-
   if (sheet->clip_timer)
     {
       gtk_timeout_remove (sheet->clip_timer);
@@ -3813,13 +3804,14 @@ gtk_sheet_cell_get_state (GtkSheet *sheet, gint row, gint col)
 }
 
 gboolean
-gtk_sheet_get_pixel_info (GtkSheet * sheet,
+gtk_sheet_get_pixel_info (GtkSheet *sheet,
                          gint x,
                          gint y,
-                         gint * row,
-                         gint * column)
+                         gint *row,
+                         gint *column)
 {
-  gint trow, tcol;
+  gint trow = -1;
+  gint tcol = -1;
 
   g_return_val_if_fail (sheet != NULL, 0);
   g_return_val_if_fail (GTK_IS_SHEET (sheet), 0);
@@ -4837,7 +4829,7 @@ gtk_sheet_expose (GtkWidget * widget,
 }
 
 
-static gint
+static gboolean
 gtk_sheet_button_press (GtkWidget * widget,
                        GdkEventButton * event)
 {
@@ -4936,7 +4928,11 @@ gtk_sheet_button_press (GtkWidget * widget,
                        GDK_BUTTON_RELEASE_MASK,
                        NULL, NULL, event->time);
       gtk_grab_add (GTK_WIDGET (sheet));
-      sheet->timer = gtk_timeout_add (TIMEOUT_SCROLL, gtk_sheet_scroll, sheet);
+
+      /* This seems to be a kludge to work around a problem where the sheet
+        scrolls to another position.  The timeout scrolls it back to its
+        original posn.          JMD 3 July 2007
+      */
       gtk_widget_grab_focus (GTK_WIDGET (sheet));
 
       if (sheet->selection_mode != GTK_SELECTION_SINGLE &&
@@ -5007,11 +5003,11 @@ gtk_sheet_button_press (GtkWidget * widget,
     {
       gtk_widget_get_pointer (widget, &x, &y);
       column = COLUMN_FROM_XPIXEL (sheet, x);
+
       if (xxx_column_is_sensitive (sheet, column))
        {
          gtk_sheet_click_cell (sheet, - 1, column, &veto);
          gtk_grab_add (GTK_WIDGET (sheet));
-         sheet->timer = gtk_timeout_add (TIMEOUT_SCROLL, gtk_sheet_scroll, sheet);
          gtk_widget_grab_focus (GTK_WIDGET (sheet));
          GTK_SHEET_SET_FLAGS (sheet, GTK_SHEET_IN_SELECTION);
        }
@@ -5025,7 +5021,6 @@ gtk_sheet_button_press (GtkWidget * widget,
        {
          gtk_sheet_click_cell (sheet, row, - 1, &veto);
          gtk_grab_add (GTK_WIDGET (sheet));
-         sheet->timer = gtk_timeout_add (TIMEOUT_SCROLL, gtk_sheet_scroll, sheet);
          gtk_widget_grab_focus (GTK_WIDGET (sheet));
          GTK_SHEET_SET_FLAGS (sheet, GTK_SHEET_IN_SELECTION);
        }
@@ -5034,6 +5029,7 @@ gtk_sheet_button_press (GtkWidget * widget,
   return TRUE;
 }
 
+#if 0
 static gint
 gtk_sheet_scroll (gpointer data)
 {
@@ -5062,8 +5058,8 @@ gtk_sheet_scroll (gpointer data)
   GDK_THREADS_LEAVE ();
 
   return TRUE;
-
 }
+#endif
 
 static void
 gtk_sheet_click_cell (GtkSheet *sheet, gint row, gint column, gboolean *veto)
@@ -5268,8 +5264,6 @@ gtk_sheet_button_release (GtkWidget * widget,
 
   if (GTK_SHEET_IN_SELECTION)
     gdk_pointer_ungrab (event->time);
-  if (sheet->timer)
-    gtk_timeout_remove (sheet->timer);
   gtk_grab_remove (GTK_WIDGET (sheet));
 
   GTK_SHEET_UNSET_FLAGS (sheet, GTK_SHEET_IN_SELECTION);
@@ -5545,7 +5539,7 @@ gtk_sheet_motion (GtkWidget * widget,
   return TRUE;
 }
 
-static gint
+static gboolean
 gtk_sheet_move_query (GtkSheet *sheet, gint row, gint column)
 {
   gint row_move, column_move;
index 8d1e77fe83e4fde12134540ea819e88d6df3691b..f6e420166af1a965c23747ed1c3004c91742e988 100644 (file)
@@ -154,8 +154,6 @@ struct _GtkSheet{
   /* expanding selection */
   GtkSheetCell selection_cell;
 
-  /* timer for automatic scroll during selection */
-  gint32 timer;
   /* timer for flashing clipped range */
   gint32 clip_timer;
   gint interval;
@@ -441,7 +439,7 @@ gtk_sheet_row_button_justify                (GtkSheet *sheet,
  * 1.0 being bottom or right; if row or column is negative then there
  * is no change */
 void
-gtk_sheet_moveto (GtkSheet * sheet,
+gtk_sheet_moveto (GtkSheet *sheet,
                  gint row,
                  gint column,
                  gfloat row_align,
index c3b28138eaba2faab054abd14e99f010ff14ab8f..9635af92d615cba29c60a0216809987c4811aeb1 100644 (file)
@@ -1,3 +1,8 @@
+2007-07-03  John Darrington <john@darrington.wattle.id.au>
+       
+       * data-editor.c data-sheet.c: Turned off autoscrolling, and 
+       manually move to cell on column click instead.
+
 2007-06-29  John Darrington <john@darrington.wattle.id.au>
 
        * data-editor.c data-editor.glade psppire-data-store.c 
index a8b3d5e3549fd4555ea42390b603c9fde03c5e70..cce4c521b29b0ed524c78e7ffbda341ff8d2d30b 100644 (file)
@@ -433,20 +433,16 @@ new_data_editor (void)
                    G_CALLBACK (reference_manual),
                    e->window);
 
-
-
   g_signal_connect (get_widget_assert (de->xml,"data_sheet"),
                    "double-click-column",
                    G_CALLBACK (click2column),
                    de);
 
-
   g_signal_connect (get_widget_assert (de->xml, "variable_sheet"),
                    "double-click-row",
                    GTK_SIGNAL_FUNC (click2row),
                    de);
 
-
   g_signal_connect (get_widget_assert (de->xml, "variable_sheet"),
                    "select-row",
                    GTK_SIGNAL_FUNC (enable_edit_clear),
@@ -542,6 +538,7 @@ static gboolean
 click2row (GtkWidget *w, gint row, gpointer data)
 {
   struct data_editor *de = data;
+  GtkSheetRange visible_range;
 
   gint current_row, current_column;
 
@@ -554,6 +551,14 @@ click2row (GtkWidget *w, gint row, gpointer data)
 
   gtk_sheet_set_active_cell (GTK_SHEET (data_sheet), current_row, row);
 
+  gtk_sheet_get_visible_range (GTK_SHEET (data_sheet), &visible_range);
+
+  if ( row < visible_range.col0 || row > visible_range.coli)
+    {
+      gtk_sheet_moveto (GTK_SHEET (data_sheet),
+                       current_row, row, 0, 0);
+    }
+
   return FALSE;
 }
 
index 8d77bdefda93705875a0bb7be045d596535265c5..3d018d0f2c5c40f6440194f1649625badac663d3 100644 (file)
@@ -137,6 +137,8 @@ psppire_data_sheet_create (gchar *widget_name, gchar *string1, gchar *string2,
 
   gtk_sheet_set_model (GTK_SHEET (sheet), G_SHEET_MODEL (the_data_store));
 
+  gtk_sheet_set_autoscroll (GTK_SHEET (sheet), FALSE);
+
   gtk_widget_show (sheet);
 
   return sheet;