diff options
-rw-r--r-- | widgets/misc/e-selection-model.c | 31 | ||||
-rw-r--r-- | widgets/misc/e-selection-model.h | 8 | ||||
-rw-r--r-- | widgets/table/e-table-item.c | 7 | ||||
-rw-r--r-- | widgets/table/e-table.c | 6 | ||||
-rw-r--r-- | widgets/table/e-table.h | 3 | ||||
-rw-r--r-- | widgets/table/e-tree.c | 6 | ||||
-rw-r--r-- | widgets/table/e-tree.h | 3 |
7 files changed, 62 insertions, 2 deletions
diff --git a/widgets/misc/e-selection-model.c b/widgets/misc/e-selection-model.c index 3fd28a7db2..e8b19fc618 100644 --- a/widgets/misc/e-selection-model.c +++ b/widgets/misc/e-selection-model.c @@ -117,6 +117,7 @@ e_selection_model_init (ESelectionModel *selection) { selection->mode = GTK_SELECTION_MULTIPLE; selection->cursor_mode = E_CURSOR_SIMPLE; + selection->old_selection = -1; } static void @@ -376,6 +377,8 @@ e_selection_model_do_something (ESelectionModel *selection, gint ctrl_p = state & GDK_CONTROL_MASK; int row_count; + selection->old_selection = -1; + if (row == -1 && col != -1) row = 0; if (col == -1 && row != -1) @@ -428,6 +431,8 @@ e_selection_model_maybe_do_something (ESelectionModel *selection, guint col, GdkModifierType state) { + selection->old_selection = -1; + if (e_selection_model_is_row_selected(selection, row)) { e_selection_model_change_cursor(selection, row, col); gtk_signal_emit(GTK_OBJECT(selection), @@ -440,6 +445,28 @@ e_selection_model_maybe_do_something (ESelectionModel *selection, } void +e_selection_model_right_click_down (ESelectionModel *selection, + guint row, + guint col, + GdkModifierType state) +{ + if (selection->mode == GTK_SELECTION_SINGLE) { + selection->old_selection = e_selection_model_cursor_row (selection); + e_selection_model_select_single_row (selection, row); + } else { + e_selection_model_maybe_do_something (selection, row, col, state); + } +} + +void +e_selection_model_right_click_up (ESelectionModel *selection) +{ + if (selection->mode == GTK_SELECTION_SINGLE && selection->old_selection != -1) { + e_selection_model_select_single_row (selection, selection->old_selection); + } +} + +void e_selection_model_select_as_key_press (ESelectionModel *selection, guint row, guint col, @@ -450,6 +477,8 @@ e_selection_model_select_as_key_press (ESelectionModel *selection, gint shift_p = state & GDK_SHIFT_MASK; gint ctrl_p = state & GDK_CONTROL_MASK; + selection->old_selection = -1; + switch (selection->mode) { case GTK_SELECTION_BROWSE: if (shift_p) { @@ -514,6 +543,8 @@ gint e_selection_model_key_press (ESelectionModel *selection, GdkEventKey *key) { + selection->old_selection = -1; + switch (key->keyval) { case GDK_Up: case GDK_KP_Up: diff --git a/widgets/misc/e-selection-model.h b/widgets/misc/e-selection-model.h index 6ab5db9ee6..7282357abd 100644 --- a/widgets/misc/e-selection-model.h +++ b/widgets/misc/e-selection-model.h @@ -36,6 +36,8 @@ typedef struct { GtkSelectionMode mode; ECursorMode cursor_mode; + + int old_selection; } ESelectionModel; typedef struct { @@ -70,7 +72,6 @@ typedef struct { void (*selection_changed) (ESelectionModel *esm); } ESelectionModelClass; - GtkType e_selection_model_get_type (void); void e_selection_model_do_something (ESelectionModel *esm, guint row, @@ -80,6 +81,11 @@ gboolean e_selection_model_maybe_do_something (ESelectionModel *esm, guint row, guint col, GdkModifierType state); +void e_selection_model_right_click_down (ESelectionModel *selection, + guint row, + guint col, + GdkModifierType state); +void e_selection_model_right_click_up (ESelectionModel *selection); gint e_selection_model_key_press (ESelectionModel *esm, GdkEventKey *key); void e_selection_model_select_as_key_press (ESelectionModel *esm, diff --git a/widgets/table/e-table-item.c b/widgets/table/e-table-item.c index 869254b703..a69db6f84d 100644 --- a/widgets/table/e-table-item.c +++ b/widgets/table/e-table-item.c @@ -1823,10 +1823,12 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e) if (!find_cell (eti, e->button.x, e->button.y, &col, &row, &x1, &y1)) return TRUE; - e_selection_model_maybe_do_something(E_SELECTION_MODEL (eti->selection), view_to_model_row(eti, row), view_to_model_col(eti, col), 0); + e_selection_model_right_click_down(E_SELECTION_MODEL (eti->selection), view_to_model_row(eti, row), view_to_model_col(eti, col), 0); gtk_signal_emit (GTK_OBJECT (eti), eti_signals [RIGHT_CLICK], row, view_to_model_col(eti, col), e, &return_val); + if (!return_val) + e_selection_model_right_click_up(E_SELECTION_MODEL (eti->selection)); break; case 4: case 5: @@ -1893,6 +1895,9 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e) d(g_print ("Release\n")); break; case 3: + e_selection_model_right_click_up(E_SELECTION_MODEL (eti->selection)); + return_val = TRUE; + break; case 4: case 5: return FALSE; diff --git a/widgets/table/e-table.c b/widgets/table/e-table.c index 3751bae479..3aba1105ec 100644 --- a/widgets/table/e-table.c +++ b/widgets/table/e-table.c @@ -1406,6 +1406,12 @@ e_table_get_printable (ETable *e_table) return e_table_group_get_printable(e_table->group); } +void +e_table_right_click_up (ETable *table) +{ + e_selection_model_right_click_up(E_SELECTION_MODEL(table->selection)); +} + static void et_get_arg (GtkObject *o, GtkArg *arg, guint arg_id) { diff --git a/widgets/table/e-table.h b/widgets/table/e-table.h index e2550d1392..be2942a751 100644 --- a/widgets/table/e-table.h +++ b/widgets/table/e-table.h @@ -295,6 +295,9 @@ GdkDragContext *e_table_drag_begin (ETable *table, void e_table_select_all (ETable *table); void e_table_invert_selection (ETable *table); +/* This function is only needed in single_selection_mode. */ +void e_table_right_click_up (ETable *table); + END_GNOME_DECLS #endif /* _E_TABLE_H_ */ diff --git a/widgets/table/e-tree.c b/widgets/table/e-tree.c index 35cb532e6c..5efebec1fd 100644 --- a/widgets/table/e-tree.c +++ b/widgets/table/e-tree.c @@ -1528,6 +1528,12 @@ e_tree_get_tooltip (ETree *et) return E_CANVAS(et->priv->table_canvas)->tooltip_window; } +void +e_tree_right_click_up (ETree *et) +{ + e_selection_model_right_click_up(et->priv->selection); +} + /** * e_tree_get_model: * @et: the ETree diff --git a/widgets/table/e-tree.h b/widgets/table/e-tree.h index 4b73ff9dcb..b34c9d1a8f 100644 --- a/widgets/table/e-tree.h +++ b/widgets/table/e-tree.h @@ -259,6 +259,9 @@ void e_tree_load_expanded_state (ETree *et, int e_tree_row_count (ETree *et); GtkWidget *e_tree_get_tooltip (ETree *et); +/* This function is only needed in single_selection_mode. */ +void e_tree_right_click_up (ETree *et); + END_GNOME_DECLS #endif /* _E_TREE_H_ */ |