aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/misc
diff options
context:
space:
mode:
authorEttore Perazzoli <ettore@src.gnome.org>2001-09-26 05:24:22 +0800
committerEttore Perazzoli <ettore@src.gnome.org>2001-09-26 05:24:22 +0800
commit650c4690b2040f83c032b67a271b996f876fdc50 (patch)
tree0261f48453ee539fca02031f81d67943d4608960 /widgets/misc
parenta413337c28972fc703e73b90dd23b076f4857560 (diff)
downloadgsoc2013-evolution-650c4690b2040f83c032b67a271b996f876fdc50.tar
gsoc2013-evolution-650c4690b2040f83c032b67a271b996f876fdc50.tar.gz
gsoc2013-evolution-650c4690b2040f83c032b67a271b996f876fdc50.tar.bz2
gsoc2013-evolution-650c4690b2040f83c032b67a271b996f876fdc50.tar.lz
gsoc2013-evolution-650c4690b2040f83c032b67a271b996f876fdc50.tar.xz
gsoc2013-evolution-650c4690b2040f83c032b67a271b996f876fdc50.tar.zst
gsoc2013-evolution-650c4690b2040f83c032b67a271b996f876fdc50.zip
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
Diffstat (limited to 'widgets/misc')
-rw-r--r--widgets/misc/e-selection-model.c31
-rw-r--r--widgets/misc/e-selection-model.h8
2 files changed, 38 insertions, 1 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,