From fac526636206fd613ec0444bce3d448c96ed0366 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ant=C3=B3nio=20Fernandes?= Date: Wed, 20 Jul 2022 23:07:52 +0200 Subject: toolbar: Fix flickering when sidebar folds Fixes the following warning and the matching flicker: "Trying to snapshot NautilusToolbar without a current allocation" --- src/nautilus-toolbar.c | 14 ++++++++++++++ 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 @@ -913,6 +913,14 @@ nautilus_toolbar_on_window_constructed (NautilusToolbar *self) undo_manager_changed (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, @@ -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 @@ - - + Show sidebar sidebar-show-symbolic -- cgit v1.2.1