diff options
author | Jan-Michael Brummer <jan.brummer@tabos.org> | 2017-12-17 13:07:04 +0100 |
---|---|---|
committer | Jan-Michael Brummer <jan.brummer@tabos.org> | 2018-01-23 14:43:51 +0100 |
commit | e874ae70604de5f4893f011b0bf1c2eb339dd356 (patch) | |
tree | c48e713c1a61155a2617ea54c45742fe54324487 /src/nautilus-canvas-view.c | |
parent | f7d55896d578e24c37bfbc3f227728638241cddd (diff) | |
download | nautilus-e874ae70604de5f4893f011b0bf1c2eb339dd356.tar.gz |
nautilus-canvas-view, nautilus-view-icon-controller: Add longpress gesture to open context popup menu
Diffstat (limited to 'src/nautilus-canvas-view.c')
-rw-r--r-- | src/nautilus-canvas-view.c | 45 |
1 files changed, 41 insertions, 4 deletions
diff --git a/src/nautilus-canvas-view.c b/src/nautilus-canvas-view.c index f00fa5064..fc3111728 100644 --- a/src/nautilus-canvas-view.c +++ b/src/nautilus-canvas-view.c @@ -1134,24 +1134,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 * @@ -1296,16 +1298,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", |