diff options
author | Matthias Clasen <mclasen@redhat.com> | 2019-04-28 15:33:07 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2019-04-28 15:33:07 +0000 |
commit | 34974a8a66ef0d9aeff002ff5b5aa481218bdfbf (patch) | |
tree | 717d9dd6bcde68691590fd2c84a68f95f9396fb6 | |
parent | 7c15daf99ea0ce466c40d53c34118e4ac74d8c16 (diff) | |
parent | 5a1c37a8c82df95d9fda58469e14bacad1697651 (diff) | |
download | gtk+-34974a8a66ef0d9aeff002ff5b5aa481218bdfbf.tar.gz |
Merge branch 'wip/baedert/filechooser2' into 'master'
Assorted filechooser improvements
See merge request GNOME/gtk!783
-rw-r--r-- | gtk/gtkcolorbutton.c | 11 | ||||
-rw-r--r-- | gtk/gtkfilechooserwidget.c | 46 | ||||
-rw-r--r-- | gtk/gtktreeview.c | 9 | ||||
-rw-r--r-- | gtk/gtkwindow.c | 3 | ||||
-rw-r--r-- | gtk/theme/Adwaita/_common.scss | 4 | ||||
-rw-r--r-- | gtk/theme/Adwaita/gtk-contained-dark.css | 2 | ||||
-rw-r--r-- | gtk/theme/Adwaita/gtk-contained.css | 2 | ||||
-rw-r--r-- | gtk/ui/gtkfilechooserwidget.ui | 8 |
8 files changed, 38 insertions, 47 deletions
diff --git a/gtk/gtkcolorbutton.c b/gtk/gtkcolorbutton.c index 7e10a78abc..54ca14c5ba 100644 --- a/gtk/gtkcolorbutton.c +++ b/gtk/gtkcolorbutton.c @@ -154,16 +154,6 @@ gtk_color_button_measure (GtkWidget *widget, } static void -gtk_color_button_snapshot (GtkWidget *widget, - GtkSnapshot *snapshot) -{ - GtkColorButton *button = GTK_COLOR_BUTTON (widget); - GtkColorButtonPrivate *priv = gtk_color_button_get_instance_private (button); - - gtk_widget_snapshot_child (widget, priv->button, snapshot); -} - -static void gtk_color_button_size_allocate (GtkWidget *widget, int width, int height, @@ -193,7 +183,6 @@ gtk_color_button_class_init (GtkColorButtonClass *klass) gobject_class->set_property = gtk_color_button_set_property; gobject_class->finalize = gtk_color_button_finalize; - widget_class->snapshot = gtk_color_button_snapshot; widget_class->measure = gtk_color_button_measure; widget_class->size_allocate = gtk_color_button_size_allocate; klass->color_set = NULL; diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index 9dfe2e4976..73b75adfa3 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -556,8 +556,6 @@ static void list_row_activated (GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, GtkFileChooserWidget *impl); -static void list_cursor_changed (GtkTreeView *treeview, - GtkFileChooserWidget *impl); static void path_bar_clicked (GtkPathBar *path_bar, GFile *file, @@ -1260,13 +1258,10 @@ places_sidebar_show_error_message_cb (GtkPlacesSidebar *sidebar, } static gboolean -key_is_left_or_right (const GdkEvent *event) +key_is_left_or_right (guint keyval, + guint state) { - guint modifiers, keyval, state; - - if (!gdk_event_get_keyval (event, &keyval) || - !gdk_event_get_state (event, &state)) - return FALSE; + guint modifiers; modifiers = gtk_accelerator_get_default_mod_mask (); @@ -1327,11 +1322,8 @@ key_press_cb (GtkEventControllerKey *controller, { GtkFileChooserWidget *impl = (GtkFileChooserWidget *) data; GtkFileChooserWidgetPrivate *priv = impl->priv; - const GdkEvent *event; const char *string; - event = gtk_get_current_event (); - if (should_trigger_location_entry (impl, keyval, state, &string) && (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)) @@ -1340,7 +1332,7 @@ key_press_cb (GtkEventControllerKey *controller, return GDK_EVENT_STOP; } - if (key_is_left_or_right (event)) + if (key_is_left_or_right (keyval, state)) { if (gtk_widget_child_focus (priv->places_sidebar, GTK_DIR_LEFT)) return GDK_EVENT_STOP; @@ -1396,11 +1388,8 @@ widget_key_press_cb (GtkEventControllerKey *controller, GtkFileChooserWidget *impl = (GtkFileChooserWidget *) data; GtkFileChooserWidgetPrivate *priv = impl->priv; gboolean handled = FALSE; - GdkEvent *event; const char *string; - event = gtk_get_current_event (); - if (should_trigger_location_entry (impl, keyval, state, &string)) { if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN || @@ -1423,8 +1412,6 @@ widget_key_press_cb (GtkEventControllerKey *controller, } } - g_object_unref (event); - return handled; } @@ -7005,10 +6992,6 @@ search_engine_hits_added_cb (GtkSearchEngine *engine, { GList *l, *files, *files_with_info, *infos; GFile *file; - gboolean select = FALSE; - - if (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (impl->priv->search_model), NULL) == 0) - select = TRUE; files = NULL; files_with_info = NULL; @@ -7036,8 +7019,6 @@ search_engine_hits_added_cb (GtkSearchEngine *engine, g_list_free_full (infos, g_object_unref); gtk_stack_set_visible_child_name (GTK_STACK (impl->priv->browse_files_stack), "list"); - if (select) - gtk_widget_grab_focus (impl->priv->browse_files_tree_view); } /* Callback used from GtkSearchEngine when the query is done running */ @@ -7697,6 +7678,24 @@ list_cursor_changed (GtkTreeView *list, check_preview_change (impl); } +static gboolean +browse_files_tree_view_keynav_failed_cb (GtkWidget *widget, + GtkDirectionType direction, + gpointer user_data) +{ + GtkFileChooserWidget *self = user_data; + GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (self); + + if (direction == GTK_DIR_UP && priv->operation_mode == OPERATION_MODE_SEARCH) + { + gtk_widget_grab_focus (priv->search_entry); + + return TRUE; + } + + return FALSE; +} + /* Callback used when a row in the file list is activated */ static void list_row_activated (GtkTreeView *tree_view, @@ -8424,6 +8423,7 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class) gtk_widget_class_bind_template_callback (widget_class, file_list_drag_end_cb); gtk_widget_class_bind_template_callback (widget_class, list_selection_changed); gtk_widget_class_bind_template_callback (widget_class, list_cursor_changed); + gtk_widget_class_bind_template_callback (widget_class, browse_files_tree_view_keynav_failed_cb); gtk_widget_class_bind_template_callback (widget_class, filter_combo_changed); gtk_widget_class_bind_template_callback (widget_class, path_bar_clicked); gtk_widget_class_bind_template_callback (widget_class, places_sidebar_open_location_cb); diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index ee55b0dd6b..077101e579 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -9394,16 +9394,12 @@ gtk_tree_view_move_cursor_up_down (GtkTreeView *tree_view, GtkTreeRBTree *new_cursor_tree = NULL; GtkTreeRBNode *new_cursor_node = NULL; GtkTreePath *cursor_path = NULL; - gboolean grab_focus = TRUE; gboolean selectable; GtkDirectionType direction; GtkCellArea *cell_area = NULL; GtkCellRenderer *last_focus_cell = NULL; GtkTreeIter iter; - if (! gtk_widget_has_focus (GTK_WIDGET (tree_view))) - return; - if (tree_view->priv->cursor_node == NULL) return; @@ -9529,8 +9525,6 @@ gtk_tree_view_move_cursor_up_down (GtkTreeView *tree_view, count < 0 ? GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD); - - grab_focus = FALSE; } } else @@ -9541,9 +9535,6 @@ gtk_tree_view_move_cursor_up_down (GtkTreeView *tree_view, if (cell_area) gtk_cell_area_set_focus_cell (cell_area, last_focus_cell); } - - if (grab_focus) - gtk_widget_grab_focus (GTK_WIDGET (tree_view)); } static void diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index b3cb887443..fd12df3266 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -6524,6 +6524,9 @@ gtk_window_set_focus (GtkWindow *window, if (focus && !gtk_widget_is_sensitive (focus)) return; + if (focus == priv->focus_widget) + return; + if (priv->focus_widget) old_focus = g_object_ref (priv->focus_widget); g_set_object (&priv->focus_widget, NULL); diff --git a/gtk/theme/Adwaita/_common.scss b/gtk/theme/Adwaita/_common.scss index a8fef92a96..44c9ace476 100644 --- a/gtk/theme/Adwaita/_common.scss +++ b/gtk/theme/Adwaita/_common.scss @@ -3875,6 +3875,10 @@ filechooser { #pathbarbox { border-bottom: 1px solid $bg_color; } } + +filechooserbutton>button>box { + border-spacing: 6px; +} filechooserbutton:drop(active) { box-shadow: none; border-color: transparent; diff --git a/gtk/theme/Adwaita/gtk-contained-dark.css b/gtk/theme/Adwaita/gtk-contained-dark.css index fb21424acf..1167687e5d 100644 --- a/gtk/theme/Adwaita/gtk-contained-dark.css +++ b/gtk/theme/Adwaita/gtk-contained-dark.css @@ -1695,6 +1695,8 @@ filechooser .dialog-action-box:backdrop { border-top-color: #202020; } filechooser #pathbarbox { border-bottom: 1px solid #353535; } +filechooserbutton > button > box { border-spacing: 6px; } + filechooserbutton:drop(active) { box-shadow: none; border-color: transparent; } /*********** Sidebar * */ diff --git a/gtk/theme/Adwaita/gtk-contained.css b/gtk/theme/Adwaita/gtk-contained.css index 4a99724c8a..c2b800497f 100644 --- a/gtk/theme/Adwaita/gtk-contained.css +++ b/gtk/theme/Adwaita/gtk-contained.css @@ -1711,6 +1711,8 @@ filechooser .dialog-action-box:backdrop { border-top-color: #d5d0cc; } filechooser #pathbarbox { border-bottom: 1px solid #f6f5f4; } +filechooserbutton > button > box { border-spacing: 6px; } + filechooserbutton:drop(active) { box-shadow: none; border-color: transparent; } /*********** Sidebar * */ diff --git a/gtk/ui/gtkfilechooserwidget.ui b/gtk/ui/gtkfilechooserwidget.ui index 9ea493cec9..6acb18e41d 100644 --- a/gtk/ui/gtkfilechooserwidget.ui +++ b/gtk/ui/gtkfilechooserwidget.ui @@ -85,10 +85,9 @@ <object class="GtkStackPage"> <property name="name">search</property> <property name="child"> - <object class="GtkBox" id="search_entry_box"> - <property name="spacing">6</property> + <object class="GtkCenterBox" id="search_entry_box"> <property name="margin">6</property> - <child> + <child type="center"> <object class="GtkSearchEntry" id="search_entry"> <property name="width-chars">45</property> <property name="hexpand">1</property> @@ -97,7 +96,7 @@ <signal name="stop-search" handler="search_entry_stop_cb" swapped="yes"/> </object> </child> - <child> + <child type="end"> <object class="GtkSpinner" id="search_spinner"> <property name="visible">0</property> </object> @@ -168,6 +167,7 @@ <signal name="query-tooltip" handler="file_list_query_tooltip_cb" swapped="no"/> <signal name="row-activated" handler="list_row_activated" swapped="no"/> <signal name="cursor-changed" handler="list_cursor_changed" swapped="no"/> + <signal name="keynav-failed" handler="browse_files_tree_view_keynav_failed_cb" /> <child internal-child="selection"> <object class="GtkTreeSelection" id="treeview-selection2"> <signal name="changed" handler="list_selection_changed" swapped="no"/> |