summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Soriano <csoriano1618@gmail.com>2018-03-14 15:20:51 +0000
committerCarlos Soriano <csoriano1618@gmail.com>2018-03-14 15:20:51 +0000
commit212b41890700435b180917fafa3b95f2ba4acf38 (patch)
treeef611ffd1ac76b26afc6837d334fca0a9da8c423
parentdd03b7cbe678600dc0bd87b91af95e9e5a501559 (diff)
parentb431c5920ce8c427f8a45244b739eaa60423eec0 (diff)
downloadnautilus-212b41890700435b180917fafa3b95f2ba4acf38.tar.gz
Merge branch 'longpress_new_view' into 'master'
NautilusViewIconController: Add longpress gesture to open context menu Closes #221 See merge request GNOME/nautilus!68
-rw-r--r--src/nautilus-view-icon-controller.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/nautilus-view-icon-controller.c b/src/nautilus-view-icon-controller.c
index 8912ace7d..9e69925c2 100644
--- a/src/nautilus-view-icon-controller.c
+++ b/src/nautilus-view-icon-controller.c
@@ -747,6 +747,61 @@ on_button_press_event (GtkWidget *widget,
return GDK_EVENT_STOP;
}
+static void
+on_longpress_gesture_pressed_callback (GtkGestureLongPress *gesture,
+ gdouble x,
+ gdouble y,
+ gpointer user_data)
+{
+ NautilusViewIconController *self;
+ g_autoptr (GList) selection = NULL;
+ GtkWidget *child_at_pos;
+ GdkEventButton *event_button;
+ GdkEventSequence *event_sequence;
+ GdkEvent *event;
+
+ event_sequence = gtk_gesture_get_last_updated_sequence (GTK_GESTURE (gesture));
+ event = (GdkEvent *) gtk_gesture_get_last_event (GTK_GESTURE (gesture), event_sequence);
+
+ self = NAUTILUS_VIEW_ICON_CONTROLLER (user_data);
+ event_button = (GdkEventButton *) event;
+
+ /* Need to update the selection so the popup has the right actions enabled */
+ selection = nautilus_view_get_selection (NAUTILUS_VIEW (self));
+ child_at_pos = GTK_WIDGET (gtk_flow_box_get_child_at_pos (GTK_FLOW_BOX (self->view_ui),
+ event_button->x, event_button->y));
+ if (child_at_pos != NULL)
+ {
+ NautilusFile *selected_file;
+ NautilusViewItemModel *item_model;
+
+ item_model = nautilus_view_icon_item_ui_get_model (NAUTILUS_VIEW_ICON_ITEM_UI (child_at_pos));
+ selected_file = nautilus_view_item_model_get_file (item_model);
+ if (g_list_find (selection, selected_file) == NULL)
+ {
+ g_list_foreach (selection, (GFunc) g_object_unref, NULL);
+ selection = g_list_append (NULL, g_object_ref (selected_file));
+ }
+ else
+ {
+ selection = g_list_prepend (selection, g_object_ref (selected_file));
+ }
+
+ nautilus_view_set_selection (NAUTILUS_VIEW (self), selection);
+
+ nautilus_files_view_pop_up_selection_context_menu (NAUTILUS_FILES_VIEW (self),
+ event);
+ }
+ else
+ {
+ nautilus_view_set_selection (NAUTILUS_VIEW (self), NULL);
+ nautilus_files_view_pop_up_background_context_menu (NAUTILUS_FILES_VIEW (self),
+ event);
+ }
+
+ g_list_foreach (selection, (GFunc) g_object_unref, NULL);
+}
+
static int
real_compare_files (NautilusFilesView *files_view,
NautilusFile *file1,
@@ -902,6 +957,7 @@ constructed (GObject *object)
NautilusViewIconController *self = NAUTILUS_VIEW_ICON_CONTROLLER (object);
GtkWidget *content_widget;
GActionGroup *view_action_group;
+ GtkGesture *longpress_gesture;
self->model = nautilus_view_model_new ();
self->view_ui = nautilus_view_icon_ui_new (self);
@@ -913,6 +969,16 @@ constructed (GObject *object)
g_signal_connect (GTK_WIDGET (self->event_box), "button-press-event",
(GCallback) on_button_press_event, self);
+ longpress_gesture = gtk_gesture_long_press_new (GTK_WIDGET (self->event_box));
+ gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (longpress_gesture),
+ GTK_PHASE_CAPTURE);
+ gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (longpress_gesture),
+ TRUE);
+ g_signal_connect (longpress_gesture, "pressed",
+ (GCallback) on_longpress_gesture_pressed_callback,
+ self);
+
+
content_widget = nautilus_files_view_get_content_widget (NAUTILUS_FILES_VIEW (self));
gtk_container_add (GTK_CONTAINER (content_widget), GTK_WIDGET (self->event_box));