summaryrefslogtreecommitdiff
path: root/src/nautilus-canvas-view.c
diff options
context:
space:
mode:
authorJan-Michael Brummer <jan.brummer@tabos.org>2017-12-17 13:07:04 +0100
committerAntónio Fernandes <antoniof@gnome.org>2018-01-30 09:13:08 +0000
commit5d89ec5814a6a00516dd493b8c32fcaf33a610aa (patch)
tree723a7a1cdb31e1bc089583f4a7c081fa772e564d /src/nautilus-canvas-view.c
parente20a05ba340fc35dddb9e03540fe48755c88b61c (diff)
downloadnautilus-5d89ec5814a6a00516dd493b8c32fcaf33a610aa.tar.gz
files-view: Open context menu on longpress
An important portion of file management functionality is exclusively available through context menus. Currently, when using a touchscreen, there is no way to open a context menu. Fix this adding a longpress gesture to popup context menus on canvas view and list view. Closes: https://gitlab.gnome.org/GNOME/nautilus/issues/178
Diffstat (limited to 'src/nautilus-canvas-view.c')
-rw-r--r--src/nautilus-canvas-view.c45
1 files changed, 41 insertions, 4 deletions
diff --git a/src/nautilus-canvas-view.c b/src/nautilus-canvas-view.c
index 761273903..90275dab4 100644
--- a/src/nautilus-canvas-view.c
+++ b/src/nautilus-canvas-view.c
@@ -1182,24 +1182,26 @@ selection_changed_callback (NautilusCanvasContainer *container,
static void
canvas_container_context_click_selection_callback (NautilusCanvasContainer *container,
- GdkEventButton *event,
+ const GdkEvent *event,
NautilusCanvasView *canvas_view)
{
g_assert (NAUTILUS_IS_CANVAS_CONTAINER (container));
g_assert (NAUTILUS_IS_CANVAS_VIEW (canvas_view));
- nautilus_files_view_pop_up_selection_context_menu (NAUTILUS_FILES_VIEW (canvas_view), event);
+ nautilus_files_view_pop_up_selection_context_menu (NAUTILUS_FILES_VIEW (canvas_view),
+ (GdkEvent *) event);
}
static void
canvas_container_context_click_background_callback (NautilusCanvasContainer *container,
- GdkEventButton *event,
+ const GdkEvent *event,
NautilusCanvasView *canvas_view)
{
g_assert (NAUTILUS_IS_CANVAS_CONTAINER (container));
g_assert (NAUTILUS_IS_CANVAS_VIEW (canvas_view));
- nautilus_files_view_pop_up_background_context_menu (NAUTILUS_FILES_VIEW (canvas_view), event);
+ nautilus_files_view_pop_up_background_context_menu (NAUTILUS_FILES_VIEW (canvas_view),
+ (GdkEvent *) event);
}
static char *
@@ -1344,16 +1346,51 @@ nautilus_canvas_view_update_click_mode (NautilusCanvasView *canvas_view)
}
static void
+canvas_container_longpress_gesture_pressed_callback (GtkGestureLongPress *gesture,
+ gdouble x,
+ gdouble y,
+ gpointer user_data)
+{
+ GdkEventSequence *event_sequence;
+ GdkEvent *event;
+ NautilusCanvasView *view = NAUTILUS_CANVAS_VIEW (user_data);
+
+ event_sequence = gtk_gesture_get_last_updated_sequence (GTK_GESTURE (gesture));
+ event = (GdkEvent *) gtk_gesture_get_last_event (GTK_GESTURE (gesture), event_sequence);
+
+ if (nautilus_view_get_selection (NAUTILUS_VIEW (view)))
+ {
+ nautilus_files_view_pop_up_selection_context_menu (NAUTILUS_FILES_VIEW (view),
+ event);
+ }
+ else
+ {
+ nautilus_files_view_pop_up_background_context_menu (NAUTILUS_FILES_VIEW (view),
+ (GdkEvent *) event);
+ }
+}
+
+static void
initialize_canvas_container (NautilusCanvasView *canvas_view,
NautilusCanvasContainer *canvas_container)
{
GtkWidget *content_widget;
+ GtkGesture *longpress_gesture;
content_widget = nautilus_files_view_get_content_widget (NAUTILUS_FILES_VIEW (canvas_view));
canvas_view->canvas_container = GTK_WIDGET (canvas_container);
g_object_add_weak_pointer (G_OBJECT (canvas_container),
(gpointer *) &canvas_view->canvas_container);
+ longpress_gesture = gtk_gesture_long_press_new (GTK_WIDGET (content_widget));
+ 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) canvas_container_longpress_gesture_pressed_callback,
+ canvas_view);
+
gtk_widget_set_can_focus (GTK_WIDGET (canvas_container), TRUE);
g_signal_connect_object (canvas_container, "activate",