summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntónio Fernandes <antoniof@gnome.org>2022-07-20 23:07:52 +0200
committerAntónio Fernandes <antoniof@gnome.org>2022-07-20 23:20:18 +0200
commitfac526636206fd613ec0444bce3d448c96ed0366 (patch)
treeae6c20573a57c8b5bd4d54ad663b3d3a28e3cb54
parent003d8e1cd430d511c1ef20b5662b36edbb6d7f20 (diff)
downloadnautilus-wip/antoniof/fix-toolbar-flickering-and-warning.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.c14
-rw-r--r--src/resources/ui/nautilus-toolbar.ui3
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>