autoscrolling the datasheet.
- 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.
* gtksheet.c: Removed some features that we dont use, to get better
speed.
#define CELL_SPACING 1
#define DRAG_WIDTH 6
#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
#define TIMEOUT_FLASH 200
#define TIME_INTERVAL 8
#define COLUMN_MIN_WIDTH 10
gint row, gint column);
/* Clipped Range */
gint row, gint column);
/* Clipped Range */
-static gint gtk_sheet_scroll (gpointer data);
static gint gtk_sheet_flash (gpointer data);
/* Drawing Routines */
static gint gtk_sheet_flash (gpointer data);
/* Drawing Routines */
-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);
gint row, gint column);
static void gtk_sheet_real_select_range (GtkSheet * sheet,
const GtkSheetRange * range);
-gtk_sheet_moveto (GtkSheet * sheet,
+gtk_sheet_moveto (GtkSheet *sheet,
gint row,
gint column,
gfloat row_align,
gint row,
gint column,
gfloat row_align,
if (!GTK_SHEET_IN_CLIP (sheet)) return;
GTK_SHEET_UNSET_FLAGS (sheet, GTK_SHEET_IN_CLIP);
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);
gtk_timeout_remove (sheet->clip_timer);
gtk_sheet_range_draw (sheet, &sheet->clip_range);
void
gtk_sheet_get_visible_range (GtkSheet *sheet, GtkSheetRange *range)
{
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);
g_return_if_fail (sheet != NULL);
g_return_if_fail (GTK_IS_SHEET (sheet)) ;
g_return_if_fail (range != NULL);
range->col0 = MIN_VISIBLE_COLUMN (sheet);
range->rowi = MAX_VISIBLE_ROW (sheet);
range->coli = MAX_VISIBLE_COLUMN (sheet);
range->col0 = MIN_VISIBLE_COLUMN (sheet);
range->rowi = MAX_VISIBLE_ROW (sheet);
range->coli = MAX_VISIBLE_COLUMN (sheet);
- if (sheet->timer)
- {
- gtk_timeout_remove (sheet->timer);
- sheet->timer = 0;
- }
-
if (sheet->clip_timer)
{
gtk_timeout_remove (sheet->clip_timer);
if (sheet->clip_timer)
{
gtk_timeout_remove (sheet->clip_timer);
-gtk_sheet_get_pixel_info (GtkSheet * sheet,
+gtk_sheet_get_pixel_info (GtkSheet *sheet,
- gint * row,
- gint * column)
+ gint *row,
+ gint *column)
+ gint trow = -1;
+ gint tcol = -1;
g_return_val_if_fail (sheet != NULL, 0);
g_return_val_if_fail (GTK_IS_SHEET (sheet), 0);
g_return_val_if_fail (sheet != NULL, 0);
g_return_val_if_fail (GTK_IS_SHEET (sheet), 0);
gtk_sheet_button_press (GtkWidget * widget,
GdkEventButton * event)
{
gtk_sheet_button_press (GtkWidget * widget,
GdkEventButton * event)
{
GDK_BUTTON_RELEASE_MASK,
NULL, NULL, event->time);
gtk_grab_add (GTK_WIDGET (sheet));
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 &&
gtk_widget_grab_focus (GTK_WIDGET (sheet));
if (sheet->selection_mode != GTK_SELECTION_SINGLE &&
{
gtk_widget_get_pointer (widget, &x, &y);
column = COLUMN_FROM_XPIXEL (sheet, x);
{
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));
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);
}
gtk_widget_grab_focus (GTK_WIDGET (sheet));
GTK_SHEET_SET_FLAGS (sheet, GTK_SHEET_IN_SELECTION);
}
{
gtk_sheet_click_cell (sheet, row, - 1, &veto);
gtk_grab_add (GTK_WIDGET (sheet));
{
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);
}
gtk_widget_grab_focus (GTK_WIDGET (sheet));
GTK_SHEET_SET_FLAGS (sheet, GTK_SHEET_IN_SELECTION);
}
static gint
gtk_sheet_scroll (gpointer data)
{
static gint
gtk_sheet_scroll (gpointer data)
{
GDK_THREADS_LEAVE ();
return TRUE;
GDK_THREADS_LEAVE ();
return TRUE;
static void
gtk_sheet_click_cell (GtkSheet *sheet, gint row, gint column, gboolean *veto)
static void
gtk_sheet_click_cell (GtkSheet *sheet, gint row, gint column, gboolean *veto)
if (GTK_SHEET_IN_SELECTION)
gdk_pointer_ungrab (event->time);
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);
gtk_grab_remove (GTK_WIDGET (sheet));
GTK_SHEET_UNSET_FLAGS (sheet, GTK_SHEET_IN_SELECTION);
gtk_sheet_move_query (GtkSheet *sheet, gint row, gint column)
{
gint row_move, column_move;
gtk_sheet_move_query (GtkSheet *sheet, gint row, gint column)
{
gint row_move, column_move;
/* expanding selection */
GtkSheetCell selection_cell;
/* expanding selection */
GtkSheetCell selection_cell;
- /* timer for automatic scroll during selection */
- gint32 timer;
/* timer for flashing clipped range */
gint32 clip_timer;
gint interval;
/* timer for flashing clipped range */
gint32 clip_timer;
gint interval;
* 1.0 being bottom or right; if row or column is negative then there
* is no change */
void
* 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,
gint row,
gint column,
gfloat row_align,
+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
2007-06-29 John Darrington <john@darrington.wattle.id.au>
* data-editor.c data-editor.glade psppire-data-store.c
G_CALLBACK (reference_manual),
e->window);
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,"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"),
"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),
g_signal_connect (get_widget_assert (de->xml, "variable_sheet"),
"select-row",
GTK_SIGNAL_FUNC (enable_edit_clear),
click2row (GtkWidget *w, gint row, gpointer data)
{
struct data_editor *de = data;
click2row (GtkWidget *w, gint row, gpointer data)
{
struct data_editor *de = data;
+ GtkSheetRange visible_range;
gint current_row, current_column;
gint current_row, current_column;
gtk_sheet_set_active_cell (GTK_SHEET (data_sheet), current_row, row);
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);
+ }
+
gtk_sheet_set_model (GTK_SHEET (sheet), G_SHEET_MODEL (the_data_store));
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;
gtk_widget_show (sheet);
return sheet;