diff options
author | António Fernandes <antoniof@gnome.org> | 2022-07-20 23:07:52 +0200 |
---|---|---|
committer | António Fernandes <antoniof@gnome.org> | 2022-07-20 23:20:18 +0200 |
commit | fac526636206fd613ec0444bce3d448c96ed0366 (patch) | |
tree | ae6c20573a57c8b5bd4d54ad663b3d3a28e3cb54 | |
parent | 003d8e1cd430d511c1ef20b5662b36edbb6d7f20 (diff) | |
download | nautilus-fac526636206fd613ec0444bce3d448c96ed0366.tar.gz |
toolbar: Fix flickering when sidebar foldswip/antoniof/fix-toolbar-flickering-and-warning
Fixes the following warning and the matching flicker:
"Trying to snapshot NautilusToolbar without a current allocation"
-rw-r--r-- | src/nautilus-toolbar.c | 14 | ||||
-rw-r--r-- | src/resources/ui/nautilus-toolbar.ui | 3 |
2 files changed, 15 insertions, 2 deletions
diff --git a/src/nautilus-toolbar.c b/src/nautilus-toolbar.c index d84742143..3cc30bc87 100644 --- a/src/nautilus-toolbar.c +++ b/src/nautilus-toolbar.c @@ -914,6 +914,14 @@ nautilus_toolbar_on_window_constructed (NautilusToolbar *self) } static void +on_idle_show_sidebar_button (gpointer user_data) +{ + NautilusToolbar *self = NAUTILUS_TOOLBAR (user_data); + + gtk_widget_set_visible (self->sidebar_button, self->show_sidebar_button); +} + +static void nautilus_toolbar_get_property (GObject *object, guint property_id, GValue *value, @@ -1056,6 +1064,11 @@ nautilus_toolbar_set_property (GObject *object, case PROP_SHOW_SIDEBAR_BUTTON: { self->show_sidebar_button = g_value_get_boolean (value); + /* This is set as a result of the sidebar folding when the window + * goes under certain width. Actually showing a button at this point + * would result in trying to snapshot the toolbar without an + * allocation. So, do it on idle instead. */ + g_idle_add_once (on_idle_show_sidebar_button, self); } break; @@ -1183,6 +1196,7 @@ nautilus_toolbar_class_init (NautilusToolbarClass *klass) gtk_widget_class_bind_template_child (widget_class, NautilusToolbar, view_toggle_icon); gtk_widget_class_bind_template_child (widget_class, NautilusToolbar, app_button); gtk_widget_class_bind_template_child (widget_class, NautilusToolbar, undo_redo_section); + gtk_widget_class_bind_template_child (widget_class, NautilusToolbar, sidebar_button); gtk_widget_class_bind_template_child (widget_class, NautilusToolbar, back_button); gtk_widget_class_bind_template_child (widget_class, NautilusToolbar, back_menu); gtk_widget_class_bind_template_child (widget_class, NautilusToolbar, forward_button); diff --git a/src/resources/ui/nautilus-toolbar.ui b/src/resources/ui/nautilus-toolbar.ui index b2b5632dc..0f1ff1055 100644 --- a/src/resources/ui/nautilus-toolbar.ui +++ b/src/resources/ui/nautilus-toolbar.ui @@ -161,8 +161,7 @@ </object> </child> <child type="start"> - <object class="GtkToggleButton" id="show_sidebar_button"> - <property name="visible" bind-source="NautilusToolbar" bind-property="show-sidebar-button" bind-flags="bidirectional|sync-create"/> + <object class="GtkToggleButton" id="sidebar_button"> <property name="active" bind-source="NautilusToolbar" bind-property="sidebar-button-active" bind-flags="bidirectional|sync-create"/> <property name="tooltip-text" translatable="yes">Show sidebar</property> <property name="icon-name">sidebar-show-symbolic</property> |