diff options
author | Ernestas Kulik <ernestask@gnome.org> | 2018-05-21 14:23:45 +0300 |
---|---|---|
committer | Ernestas Kulik <ernestask@gnome.org> | 2018-05-28 13:13:56 +0300 |
commit | f692a93ddf4f0514a255d787b8ade43a0092c422 (patch) | |
tree | 1fe31e97418bd94c9f7294d98f48532994fad1b5 | |
parent | c8998da860a2e05f2173fab2ef86cf4e41fb6e2b (diff) | |
download | nautilus-f692a93ddf4f0514a255d787b8ade43a0092c422.tar.gz |
list-view: Merge event and key-press-event handlers
-rw-r--r-- | src/nautilus-list-view.c | 216 |
1 files changed, 109 insertions, 107 deletions
diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c index 9cc26b0c3..787090851 100644 --- a/src/nautilus-list-view.c +++ b/src/nautilus-list-view.c @@ -894,6 +894,111 @@ on_tree_view_multi_press_gesture_released (GtkGestureMultiPress *gesture, } static gboolean +key_press_callback (GtkWidget *widget, + GdkEvent *event, + gpointer callback_data) +{ + NautilusFilesView *view; + GtkTreeView *tree_view; + guint keyval; + GdkModifierType state; + + view = NAUTILUS_FILES_VIEW (callback_data); + tree_view = GTK_TREE_VIEW (widget); + + NAUTILUS_LIST_VIEW (view)->details->last_event_button_x = -1; + NAUTILUS_LIST_VIEW (view)->details->last_event_button_y = -1; + + if (G_UNLIKELY (!gdk_event_get_keyval (event, &keyval))) + { + g_return_val_if_reached (GDK_EVENT_PROPAGATE); + } + if (gdk_event_get_state (event, &state)) + { + return GDK_EVENT_PROPAGATE; + } + + if (keyval == GDK_KEY_F10) + { + if ((state & GDK_CONTROL_MASK) != 0) + { + nautilus_files_view_pop_up_background_context_menu (view, NULL); + + return GDK_EVENT_STOP; + } + } + + if (keyval == GDK_KEY_Right) + { + g_autoptr (GtkTreePath) path = NULL; + + gtk_tree_view_get_cursor (tree_view, &path, NULL); + + if (path != NULL) + { + gtk_tree_view_expand_row (tree_view, path, FALSE); + } + + return GDK_EVENT_STOP; + } + + if (keyval == GDK_KEY_Left) + { + g_autoptr (GtkTreePath) path = NULL; + + gtk_tree_view_get_cursor (tree_view, &path, NULL); + + if (path != NULL && !gtk_tree_view_collapse_row (tree_view, path)) + { + /* if the row is already collapsed or doesn't have any children, + * jump to the parent row instead. + */ + if ((gtk_tree_path_get_depth (path) > 1) && gtk_tree_path_up (path)) + { + gtk_tree_view_set_cursor (tree_view, path, NULL, FALSE); + } + } + + return GDK_EVENT_STOP; + } + + if (keyval == GDK_KEY_space) + { + if ((state & GDK_CONTROL_MASK) != 0) + { + return GDK_EVENT_PROPAGATE; + } + + if (!gtk_widget_has_focus (GTK_WIDGET (NAUTILUS_LIST_VIEW (view)->details->tree_view))) + { + return GDK_EVENT_PROPAGATE; + } + + if ((state & GDK_SHIFT_MASK) != 0) + { + activate_selected_items_alternate (NAUTILUS_LIST_VIEW (view), NULL, TRUE); + } + else + { + preview_selected_items (NAUTILUS_LIST_VIEW (view)); + } + + return GDK_EVENT_STOP; + } + + if (keyval == GDK_KEY_v) + { + /* Eat Control + v to not enable type ahead */ + if ((state & GDK_CONTROL_MASK) != 0) + { + return GDK_EVENT_STOP; + } + } + + return GDK_EVENT_PROPAGATE; +} + +static gboolean on_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) @@ -915,6 +1020,10 @@ on_event (GtkWidget *widget, { return on_leave_notify (widget, event, user_data); } + else if (event_type == GDK_KEY_PRESS) + { + return key_press_callback (widget, event, user_data); + } return GDK_EVENT_PROPAGATE; } @@ -1098,111 +1207,6 @@ subdirectory_unloaded_callback (NautilusListModel *model, } static gboolean -key_press_callback (GtkWidget *widget, - GdkEventKey *event, - gpointer callback_data) -{ - NautilusFilesView *view; - gboolean handled; - GtkTreeView *tree_view; - GtkTreePath *path; - - tree_view = GTK_TREE_VIEW (widget); - - view = NAUTILUS_FILES_VIEW (callback_data); - handled = FALSE; - - NAUTILUS_LIST_VIEW (view)->details->last_event_button_x = -1; - NAUTILUS_LIST_VIEW (view)->details->last_event_button_y = -1; - - switch (event->keyval) - { - case GDK_KEY_F10: - { - if (event->state & GDK_CONTROL_MASK) - { - nautilus_files_view_pop_up_background_context_menu (view, NULL); - handled = TRUE; - } - } - break; - - case GDK_KEY_Right: - { - gtk_tree_view_get_cursor (tree_view, &path, NULL); - if (path) - { - gtk_tree_view_expand_row (tree_view, path, FALSE); - gtk_tree_path_free (path); - } - handled = TRUE; - } - break; - - case GDK_KEY_Left: - { - gtk_tree_view_get_cursor (tree_view, &path, NULL); - if (path) - { - if (!gtk_tree_view_collapse_row (tree_view, path)) - { - /* if the row is already collapsed or doesn't have any children, - * jump to the parent row instead. - */ - if ((gtk_tree_path_get_depth (path) > 1) && gtk_tree_path_up (path)) - { - gtk_tree_view_set_cursor (tree_view, path, NULL, FALSE); - } - } - - gtk_tree_path_free (path); - } - handled = TRUE; - } - break; - - case GDK_KEY_space: - { - if (event->state & GDK_CONTROL_MASK) - { - handled = FALSE; - break; - } - if (!gtk_widget_has_focus (GTK_WIDGET (NAUTILUS_LIST_VIEW (view)->details->tree_view))) - { - handled = FALSE; - break; - } - if ((event->state & GDK_SHIFT_MASK) != 0) - { - activate_selected_items_alternate (NAUTILUS_LIST_VIEW (view), NULL, TRUE); - } - else - { - preview_selected_items (NAUTILUS_LIST_VIEW (view)); - } - handled = TRUE; - } - break; - - case GDK_KEY_v: - { - /* Eat Control + v to not enable type ahead */ - if ((event->state & GDK_CONTROL_MASK) != 0) - { - handled = TRUE; - } - } - break; - - default: - handled = FALSE; - } - - return handled; -} - -static gboolean test_expand_row_callback (GtkTreeView *tree_view, GtkTreeIter *iter, GtkTreePath *path, @@ -2142,8 +2146,6 @@ create_and_set_up_tree_view (NautilusListView *view) g_signal_connect_object (view->details->tree_view, "event", G_CALLBACK (on_event), view, 0); - g_signal_connect_object (view->details->tree_view, "key-press-event", - G_CALLBACK (key_press_callback), view, 0); g_signal_connect_object (view->details->tree_view, "test-expand-row", G_CALLBACK (test_expand_row_callback), view, 0); g_signal_connect_object (view->details->tree_view, "row-expanded", |