summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2023-04-05 02:35:20 +0000
committerMatthias Clasen <mclasen@redhat.com>2023-04-05 02:35:20 +0000
commit450490bcf63420a76a4692ca9ce6a16965543904 (patch)
tree6628c460295706d69b745add49bc7f72fbfbca08
parent6a2f715250b5ff15f8bbf5f805a957010f3627dd (diff)
parentfb3f817f693b5484eaf186b9517b01a986fc2c0d (diff)
downloadgtk+-450490bcf63420a76a4692ca9ce6a16965543904.tar.gz
Merge branch 'ebassi/listbox-dispose' into 'main'
listbox: Unbind the model before removing children See merge request GNOME/gtk!5789
-rw-r--r--gtk/gtklistbox.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/gtk/gtklistbox.c b/gtk/gtklistbox.c
index 8d2c0d0a95..f3234e4820 100644
--- a/gtk/gtklistbox.c
+++ b/gtk/gtklistbox.c
@@ -433,7 +433,18 @@ gtk_list_box_set_property (GObject *obj,
static void
gtk_list_box_dispose (GObject *object)
{
- gtk_list_box_remove_all (GTK_LIST_BOX (object));
+ GtkListBox *self = GTK_LIST_BOX (object);
+
+ if (self->bound_model)
+ {
+ if (self->create_widget_func_data_destroy)
+ self->create_widget_func_data_destroy (self->create_widget_func_data);
+
+ g_signal_handlers_disconnect_by_func (self->bound_model, gtk_list_box_bound_model_changed, self);
+ g_clear_object (&self->bound_model);
+ }
+
+ gtk_list_box_remove_all (self);
G_OBJECT_CLASS (gtk_list_box_parent_class)->dispose (object);
}
@@ -456,15 +467,6 @@ gtk_list_box_finalize (GObject *obj)
g_sequence_free (box->children);
g_hash_table_unref (box->header_hash);
- if (box->bound_model)
- {
- if (box->create_widget_func_data_destroy)
- box->create_widget_func_data_destroy (box->create_widget_func_data);
-
- g_signal_handlers_disconnect_by_func (box->bound_model, gtk_list_box_bound_model_changed, obj);
- g_clear_object (&box->bound_model);
- }
-
G_OBJECT_CLASS (gtk_list_box_parent_class)->finalize (obj);
}
@@ -874,9 +876,9 @@ gtk_list_box_unselect_row (GtkListBox *box,
{
g_return_if_fail (GTK_IS_LIST_BOX (box));
g_return_if_fail (GTK_IS_LIST_BOX_ROW (row));
-
+
gtk_list_box_unselect_row_internal (box, row);
-}
+}
/**
* gtk_list_box_select_all:
@@ -1514,7 +1516,7 @@ gtk_list_box_add_move_binding (GtkWidgetClass *widget_class,
"(iibb)", step, count, FALSE, TRUE);
gtk_widget_class_add_binding_signal (widget_class,
keyval, modmask | GDK_SHIFT_MASK | GDK_CONTROL_MASK,
- "move-cursor",
+ "move-cursor",
"(iibb)", step, count, TRUE, TRUE);
}
@@ -1922,7 +1924,7 @@ gtk_list_box_click_gesture_released (GtkGestureClick *gesture,
static void
gtk_list_box_click_gesture_stopped (GtkGestureClick *gesture,
- GtkListBox *box)
+ GtkListBox *box)
{
if (box->active_row)
{