From 650c4690b2040f83c032b67a271b996f876fdc50 Mon Sep 17 00:00:00 2001 From: Ettore Perazzoli Date: Tue, 25 Sep 2001 21:24:22 +0000 Subject: Commit patch from Chris to implement e_tree_right_click_up() for correct right-click behavior in single selection mode. svn path=/trunk/; revision=13123 --- widgets/misc/e-selection-model.c | 31 +++++++++++++++++++++++++++++++ widgets/misc/e-selection-model.h | 8 +++++++- 2 files changed, 38 insertions(+), 1 deletion(-) (limited to 'widgets/misc') 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), @@ -439,6 +444,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, @@ -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, -- cgit v1.2.3