summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte.benjamin@googlemail.com>2023-04-02 16:59:10 +0000
committerBenjamin Otte <otte.benjamin@googlemail.com>2023-04-02 16:59:10 +0000
commit461e562ec98020a563a75d6b4f5e9cd4f0341895 (patch)
tree6fba15ddfb4e507246be3973699d3eca57b682f3
parentd6a27a41c2f793f8e7ce7ecb826f912f2f968612 (diff)
parent106880874212ebefd25e25f66cbf71c3e2c1fc9e (diff)
downloadgtk+-461e562ec98020a563a75d6b4f5e9cd4f0341895.tar.gz
Merge branch 'dropdown-inertness' into 'main'
dropdown: Fix to work with recent listview changes See merge request GNOME/gtk!5773
-rw-r--r--gtk/gtkdropdown.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/gtk/gtkdropdown.c b/gtk/gtkdropdown.c
index 3416bad72f..1ed529d665 100644
--- a/gtk/gtkdropdown.c
+++ b/gtk/gtkdropdown.c
@@ -482,6 +482,27 @@ gtk_drop_down_grab_focus (GtkWidget *widget)
return gtk_widget_grab_focus (self->button);
}
+static void
+gtk_drop_down_root (GtkWidget *widget)
+{
+ GtkDropDown *self = GTK_DROP_DOWN (widget);
+
+ GTK_WIDGET_CLASS (gtk_drop_down_parent_class)->root (widget);
+
+ if (self->factory)
+ gtk_list_factory_widget_set_factory (GTK_LIST_FACTORY_WIDGET (self->button_item), self->factory);
+}
+
+static void
+gtk_drop_down_unroot (GtkWidget *widget)
+{
+ GtkDropDown *self = GTK_DROP_DOWN (widget);
+
+ if (self->factory)
+ gtk_list_factory_widget_set_factory (GTK_LIST_FACTORY_WIDGET (self->button_item), NULL);
+
+ GTK_WIDGET_CLASS (gtk_drop_down_parent_class)->unroot (widget);
+}
static void
gtk_drop_down_class_init (GtkDropDownClass *klass)
@@ -497,6 +518,8 @@ gtk_drop_down_class_init (GtkDropDownClass *klass)
widget_class->size_allocate = gtk_drop_down_size_allocate;
widget_class->focus = gtk_drop_down_focus;
widget_class->grab_focus = gtk_drop_down_grab_focus;
+ widget_class->root = gtk_drop_down_root;
+ widget_class->unroot = gtk_drop_down_unroot;
/**
* GtkDropDown:factory: (attributes org.gtk.Property.get=gtk_drop_down_get_factory org.gtk.Property.set=gtk_drop_down_set_factory)
@@ -915,7 +938,9 @@ gtk_drop_down_set_factory (GtkDropDown *self,
if (!g_set_object (&self->factory, factory))
return;
- gtk_list_factory_widget_set_factory (GTK_LIST_FACTORY_WIDGET (self->button_item), factory);
+ if (gtk_widget_get_root (GTK_WIDGET (self)))
+ gtk_list_factory_widget_set_factory (GTK_LIST_FACTORY_WIDGET (self->button_item), factory);
+
if (self->list_factory == NULL)
gtk_list_view_set_factory (GTK_LIST_VIEW (self->popup_list), factory);