aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/table/e-table.c
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/table/e-table.c')
-rw-r--r--widgets/table/e-table.c49
1 files changed, 17 insertions, 32 deletions
diff --git a/widgets/table/e-table.c b/widgets/table/e-table.c
index 4474d3e093..dca3a74049 100644
--- a/widgets/table/e-table.c
+++ b/widgets/table/e-table.c
@@ -480,43 +480,28 @@ group_key_press (ETableGroup *etg, int row, int col, GdkEvent *event, ETable *et
{
int return_val = 0;
GdkEventKey *key = (GdkEventKey *) event;
- GdkEventButton click;
+ int y, row_local, col_local;
+ GtkAdjustment *vadj;
+
switch (key->keyval) {
case GDK_Page_Down:
- gtk_adjustment_set_value(
- gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas)),
- CLAMP(gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->value +
- (gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->page_size - 20),
- 0,
- gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->upper -
- gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->page_size));
- click.type = GDK_BUTTON_PRESS;
- click.window = GTK_LAYOUT (et->table_canvas)->bin_window;
- click.send_event = key->send_event;
- click.time = key->time;
- click.x = 30;
- click.y = gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->page_size - 1;
- click.state = key->state;
- click.button = 1;
- gtk_widget_event(GTK_WIDGET(et->table_canvas),
- (GdkEvent *) &click);
+ vadj = gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas));
+ y = CLAMP(vadj->value + (2 * vadj->page_size - 20), 0, vadj->upper);
+ y -= vadj->value;
+ e_table_get_cell_at (et, 30, y, &row_local, &col_local);
+ row_local = e_table_view_to_model_row (et, row_local);
+ col_local = e_selection_model_cursor_col(E_SELECTION_MODEL (et->selection));
+ e_selection_model_do_something(E_SELECTION_MODEL (et->selection), row_local, col_local, key->state);
return_val = 1;
break;
case GDK_Page_Up:
- gtk_adjustment_set_value(
- gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas)),
- gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->value -
- (gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas))->page_size - 20));
- click.type = GDK_BUTTON_PRESS;
- click.window = GTK_LAYOUT (et->table_canvas)->bin_window;
- click.send_event = key->send_event;
- click.time = key->time;
- click.x = 30;
- click.y = 1;
- click.state = key->state;
- click.button = 1;
- gtk_widget_event(GTK_WIDGET(et->table_canvas),
- (GdkEvent *) &click);
+ vadj = gtk_layout_get_vadjustment (GTK_LAYOUT (et->table_canvas));
+ y = CLAMP(vadj->value - (vadj->page_size - 20), 0, vadj->upper);
+ y -= vadj->value;
+ e_table_get_cell_at (et, 30, y, &row_local, &col_local);
+ row_local = e_table_view_to_model_row (et, row_local);
+ col_local = e_selection_model_cursor_col(E_SELECTION_MODEL (et->selection));
+ e_selection_model_do_something(E_SELECTION_MODEL (et->selection), row_local, col_local, key->state);
return_val = 1;
break;
default: