aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--widgets/misc/e-selection-model.c31
-rw-r--r--widgets/misc/e-selection-model.h8
-rw-r--r--widgets/table/e-table-item.c7
-rw-r--r--widgets/table/e-table.c6
-rw-r--r--widgets/table/e-table.h3
-rw-r--r--widgets/table/e-tree.c6
-rw-r--r--widgets/table/e-tree.h3
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_ */