Compare commits

...

9 Commits

Author SHA1 Message Date
Timm Bäder
c467ad3056 Adwaita: Add a selected-but-not-focused style to listbox rows 2019-01-15 08:08:38 +01:00
Timm Bäder
814c89a994 Merge into windwo commit 2019-01-15 07:51:25 +01:00
Timm Bäder
4f09ea9870 filechooserwidget: Focus the entry when searching
When pressing a button that refines our search, move the focus to the
search entry.
2019-01-15 07:49:50 +01:00
Timm Bäder
b234034434 Adwaita: Style treeview :focus(visible)
Give it the old blue color, while just :focus is grey now (designer
input needed).
2019-01-15 07:49:50 +01:00
Timm Bäder
ba2cd1a39a treevie: Don't grab the focus from inside move-cursor
It doesn't make sense since gtk_tree_view_move_cursor_up_down already
returns early if the treeview doesn't already have the keyboard focus.
2019-01-15 07:49:50 +01:00
Timm Bäder
6ee3d881f6 filechooserwidget: Focus the search entry when keynav fails...
... when going UP in the treeview while searching. If the treeview is
manually focused and the cursor gets moved up in the direction of the
searchentry, focus the entry.
2019-01-15 07:49:47 +01:00
Timm Bäder
cf1286a6f0 window: Don't manually queue a draw on thew new focus widget
This is either unneeded and OK to remove, or it is needed and there's a
bug somewhere else.
2019-01-15 06:11:03 +01:00
Timm Bäder
d88a7c259b filechooserwidget: Remove unneeded function prototype 2019-01-15 05:56:24 +01:00
Timm Bäder
eb7921ff18 filechooserwidget: Don't focus the treeview during a search 2019-01-15 05:51:42 +01:00
5 changed files with 30 additions and 42 deletions

View File

@@ -553,8 +553,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,
@@ -1416,6 +1414,7 @@ widget_key_press_cb (GtkEventController *controller,
if (priv->operation_mode != OPERATION_MODE_SEARCH)
operation_mode_set (impl, OPERATION_MODE_SEARCH);
gtk_entry_grab_focus_without_selecting (GTK_ENTRY (priv->search_entry));
handled = TRUE;
}
@@ -6993,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;
@@ -7024,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 */
@@ -7682,6 +7675,23 @@ 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_entry_grab_focus_without_selecting (GTK_ENTRY (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,
@@ -8408,6 +8418,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);

View File

@@ -9460,7 +9460,6 @@ 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;
@@ -9595,8 +9594,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
@@ -9607,9 +9604,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

View File

@@ -7743,39 +7743,32 @@ gtk_window_move_focus (GtkWidget *widget,
gtk_window_set_focus (GTK_WINDOW (widget), NULL);
}
#include "gtktreeview.h"
static void
gtk_window_real_set_focus (GtkWindow *window,
GtkWidget *focus)
{
GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
GtkWidget *old_focus = priv->focus_widget;
gboolean had_default = FALSE;
gboolean focus_had_default = FALSE;
gboolean old_focus_had_default = FALSE;
if (old_focus)
{
g_object_ref (old_focus);
g_object_freeze_notify (G_OBJECT (old_focus));
old_focus_had_default = gtk_widget_has_default (old_focus);
}
if (focus)
{
g_object_ref (focus);
g_object_freeze_notify (G_OBJECT (focus));
focus_had_default = gtk_widget_has_default (focus);
}
if (priv->default_widget)
had_default = gtk_widget_has_default (priv->default_widget);
if (priv->focus_widget)
{
if (gtk_widget_get_receives_default (priv->focus_widget) &&
(priv->focus_widget != priv->default_widget))
{
_gtk_widget_set_has_default (priv->focus_widget, FALSE);
gtk_widget_queue_draw (priv->focus_widget);
if (priv->default_widget)
_gtk_widget_set_has_default (priv->default_widget, TRUE);
@@ -7816,29 +7809,13 @@ gtk_window_real_set_focus (GtkWindow *window,
g_object_notify (G_OBJECT (priv->focus_widget), "is-focus");
}
/* If the default widget changed, a redraw will have been queued
* on the old and new default widgets by gtk_window_set_default(), so
* we only have to worry about the case where it didn't change.
* We'll sometimes queue a draw twice on the new widget but that
* is harmless.
*/
if (priv->default_widget &&
(had_default != gtk_widget_has_default (priv->default_widget)))
gtk_widget_queue_draw (priv->default_widget);
if (old_focus)
{
if (old_focus_had_default != gtk_widget_has_default (old_focus))
gtk_widget_queue_draw (old_focus);
g_object_thaw_notify (G_OBJECT (old_focus));
g_object_unref (old_focus);
}
if (focus)
{
if (focus_had_default != gtk_widget_has_default (focus))
gtk_widget_queue_draw (focus);
g_object_thaw_notify (G_OBJECT (focus));
g_object_unref (focus);
}

View File

@@ -1780,9 +1780,13 @@ treeview.view {
rubberband { @extend rubberband; } // to avoid borders being overridden by the previously set props
&:selected {
&:focus, & {
&:focus, &{
border-radius: 0;
background-color: grey;
}
&:focus(visible) {
border-radius: 0;
@extend %selected_items;
}
@@ -3672,7 +3676,7 @@ row {
&:backdrop:hover { background-color: transparent; }
&:selected {
&:selected:focus(visible) {
&:active { box-shadow: inset 0 2px 3px -1px transparentize(black, 0.5); }
&.has-open-popup,
@@ -3682,7 +3686,8 @@ row {
}
}
&:selected { @extend %selected_items; }
&:selected:focus(visible) { @extend %selected_items; }
&:selected:focus, &:selected { background-color: grey; }
}

View File

@@ -169,6 +169,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"/>