From 543b33d52255b74980108967e55422a77152a48f Mon Sep 17 00:00:00 2001 From: John Darrington Date: Tue, 3 Jul 2007 05:49:53 +0000 Subject: [PATCH] Removed some gtksheet features that were causing problems for us when autoscrolling the datasheet. --- lib/gtksheet/ChangeLog | 7 ++++++- lib/gtksheet/gtksheet.c | 42 +++++++++++++++++----------------------- lib/gtksheet/gtksheet.h | 4 +--- src/ui/gui/ChangeLog | 5 +++++ src/ui/gui/data-editor.c | 13 +++++++++---- src/ui/gui/data-sheet.c | 2 ++ 6 files changed, 41 insertions(+), 32 deletions(-) diff --git a/lib/gtksheet/ChangeLog b/lib/gtksheet/ChangeLog index 84a622d2..cb859a39 100644 --- a/lib/gtksheet/ChangeLog +++ b/lib/gtksheet/ChangeLog @@ -1,4 +1,9 @@ - 28 June 2007 John Darrington +03 July 2007 John Darrington + + * gtksheet.c gtksheet.h: Removed the autoscroll-on-select feature + that was causing us grief. + +28 June 2007 John Darrington * gtksheet.c: Removed some features that we dont use, to get better speed. diff --git a/lib/gtksheet/gtksheet.c b/lib/gtksheet/gtksheet.c index bf6f765c..57ae79df 100644 --- a/lib/gtksheet/gtksheet.c +++ b/lib/gtksheet/gtksheet.c @@ -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; diff --git a/lib/gtksheet/gtksheet.h b/lib/gtksheet/gtksheet.h index 8d1e77fe..f6e42016 100644 --- a/lib/gtksheet/gtksheet.h +++ b/lib/gtksheet/gtksheet.h @@ -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, diff --git a/src/ui/gui/ChangeLog b/src/ui/gui/ChangeLog index c3b28138..9635af92 100644 --- a/src/ui/gui/ChangeLog +++ b/src/ui/gui/ChangeLog @@ -1,3 +1,8 @@ +2007-07-03 John Darrington + + * data-editor.c data-sheet.c: Turned off autoscrolling, and + manually move to cell on column click instead. + 2007-06-29 John Darrington * data-editor.c data-editor.glade psppire-data-store.c diff --git a/src/ui/gui/data-editor.c b/src/ui/gui/data-editor.c index a8b3d5e3..cce4c521 100644 --- a/src/ui/gui/data-editor.c +++ b/src/ui/gui/data-editor.c @@ -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; } diff --git a/src/ui/gui/data-sheet.c b/src/ui/gui/data-sheet.c index 8d77bdef..3d018d0f 100644 --- a/src/ui/gui/data-sheet.c +++ b/src/ui/gui/data-sheet.c @@ -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; -- 2.30.2