summaryrefslogtreecommitdiff
path: root/src/nautilus-list-view.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nautilus-list-view.c')
-rw-r--r--src/nautilus-list-view.c57
1 files changed, 11 insertions, 46 deletions
diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c
index 3ae90ef8d..7731f407c 100644
--- a/src/nautilus-list-view.c
+++ b/src/nautilus-list-view.c
@@ -625,9 +625,9 @@ on_tree_view_multi_press_gesture_pressed (GtkGestureMultiPress *gesture,
gdk_event_get_state (event, &state);
- if (button == GDK_BUTTON_SECONDARY)
+ if (path_selected)
{
- if (path_selected)
+ if ((state & GDK_SHIFT_MASK) == 0)
{
/* We're going to filter out some situations where
* we can't let the default code run because all
@@ -637,7 +637,10 @@ on_tree_view_multi_press_gesture_pressed (GtkGestureMultiPress *gesture,
*/
call_parent = FALSE;
}
- else if ((state & GDK_CONTROL_MASK) != 0)
+ }
+ else
+ {
+ if ((state & GDK_CONTROL_MASK) != 0)
{
/* If CTRL is pressed, we don't allow the parent
* class to handle it, since GtkTreeView doesn't
@@ -676,7 +679,10 @@ on_tree_view_multi_press_gesture_pressed (GtkGestureMultiPress *gesture,
}
g_list_free_full (selected_rows, (GDestroyNotify) gtk_tree_path_free);
}
- else if (on_expander)
+
+ if (button == GDK_BUTTON_SECONDARY &&
+ on_expander &&
+ !button_event_modifies_selection (event))
{
/* If the right click happened on an expander, we should
* fully change the selection on that row solely.
@@ -685,48 +691,6 @@ on_tree_view_multi_press_gesture_pressed (GtkGestureMultiPress *gesture,
}
}
- if ((button == GDK_BUTTON_PRIMARY || button == GDK_BUTTON_MIDDLE) &&
- ((state & GDK_CONTROL_MASK) != 0 || (state & GDK_SHIFT_MASK) == 0))
- {
- view->details->row_selected_on_button_down = path_selected;
-
- if (path_selected)
- {
- call_parent = on_expander;
- }
- else if ((state & GDK_CONTROL_MASK) != 0)
- {
- call_parent = FALSE;
- if ((state & GDK_SHIFT_MASK) != 0)
- {
- gtk_tree_view_get_cursor (tree_view, &cursor, NULL);
- if (cursor != NULL)
- {
- gtk_tree_selection_select_range (selection, cursor, path);
- }
- else
- {
- gtk_tree_selection_select_path (selection, path);
- }
- }
- else
- {
- gtk_tree_selection_select_path (selection, path);
- }
- selected_rows = gtk_tree_selection_get_selected_rows (selection, NULL);
-
- /* This unselects everything */
- gtk_tree_view_set_cursor (tree_view, path, NULL, FALSE);
-
- /* So select it again */
- for (GList *l = selected_rows; l != NULL; l = l->next)
- {
- gtk_tree_selection_select_path (selection, l->data);
- }
- g_list_free_full (selected_rows, (GDestroyNotify) gtk_tree_path_free);
- }
- }
-
if (is_simple_click && on_expander)
{
/* Need to let the event propagate down, since propagating up
@@ -755,6 +719,7 @@ on_tree_view_multi_press_gesture_pressed (GtkGestureMultiPress *gesture,
view->details->drag_button = button;
view->details->drag_x = bin_x;
view->details->drag_y = bin_y;
+ view->details->row_selected_on_button_down = path_selected;
}
if (button == GDK_BUTTON_SECONDARY)