diff options
author | Matthias Clasen <mclasen@redhat.com> | 2015-03-22 11:46:16 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2015-03-22 11:46:16 -0400 |
commit | a17d6290e404857a1f4bf021d8635a3a1eb9ee19 (patch) | |
tree | c76c9c9448f6d53782e0238b0488be9b0acb4975 /gtk/gtksearchbar.c | |
parent | b55aa154e636237fc7ffbb488bda864cb7c2f650 (diff) | |
download | gtk+-a17d6290e404857a1f4bf021d8635a3a1eb9ee19.tar.gz |
search bar: Clean up weak pointer handling
Break out a setter that manages the weak pointer, and
use it in finalize. This also fixes a bug where we were
forgetting to disconnect the right signal handler in
some cases.
Diffstat (limited to 'gtk/gtksearchbar.c')
-rw-r--r-- | gtk/gtksearchbar.c | 56 |
1 files changed, 29 insertions, 27 deletions
diff --git a/gtk/gtksearchbar.c b/gtk/gtksearchbar.c index d1b3f3c73e..d098a486d7 100644 --- a/gtk/gtksearchbar.c +++ b/gtk/gtksearchbar.c @@ -350,12 +350,7 @@ gtk_search_bar_dispose (GObject *object) GtkSearchBar *bar = GTK_SEARCH_BAR (object); GtkSearchBarPrivate *priv = gtk_search_bar_get_instance_private (bar); - if (priv->entry) - { - g_signal_handlers_disconnect_by_func (priv->entry, entry_key_pressed_event_cb, bar); - g_object_remove_weak_pointer (G_OBJECT (priv->entry), (gpointer *) &priv->entry); - priv->entry = NULL; - } + gtk_search_bar_set_entry (bar, NULL); G_OBJECT_CLASS (gtk_search_bar_parent_class)->dispose (object); } @@ -471,27 +466,12 @@ gtk_search_bar_new (void) return g_object_new (GTK_TYPE_SEARCH_BAR, NULL); } -/** - * gtk_search_bar_connect_entry: - * @bar: a #GtkSearchBar - * @entry: a #GtkEntry - * - * Connects the #GtkEntry widget passed as the one to be used in - * this search bar. The entry should be a descendant of the search bar. - * This is only required if the entry isn’t the direct child of the - * search bar (as in our main example). - * - * Since: 3.10 - */ -void -gtk_search_bar_connect_entry (GtkSearchBar *bar, - GtkEntry *entry) +static void +gtk_search_bar_set_entry (GtkSearchBar *bar, + GtkEntry *entry) { GtkSearchBarPrivate *priv = gtk_search_bar_get_instance_private (bar); - g_return_if_fail (GTK_IS_SEARCH_BAR (bar)); - g_return_if_fail (entry == NULL || GTK_IS_ENTRY (entry)); - if (priv->entry != NULL) { if (GTK_IS_SEARCH_ENTRY (priv->entry)) @@ -499,12 +479,12 @@ gtk_search_bar_connect_entry (GtkSearchBar *bar, else g_signal_handlers_disconnect_by_func (priv->entry, entry_key_pressed_event_cb, bar); g_object_remove_weak_pointer (G_OBJECT (priv->entry), (gpointer *) &priv->entry); - priv->entry = NULL; } - if (entry != NULL) + priv->entry = GTK_WIDGET (entry); + + if (priv->entry != NULL) { - priv->entry = GTK_WIDGET (entry); g_object_add_weak_pointer (G_OBJECT (priv->entry), (gpointer *) &priv->entry); if (GTK_IS_SEARCH_ENTRY (priv->entry)) g_signal_connect (priv->entry, "stop-search", @@ -516,6 +496,28 @@ gtk_search_bar_connect_entry (GtkSearchBar *bar, } /** + * gtk_search_bar_connect_entry: + * @bar: a #GtkSearchBar + * @entry: a #GtkEntry + * + * Connects the #GtkEntry widget passed as the one to be used in + * this search bar. The entry should be a descendant of the search bar. + * This is only required if the entry isn’t the direct child of the + * search bar (as in our main example). + * + * Since: 3.10 + */ +void +gtk_search_bar_connect_entry (GtkSearchBar *bar, + GtkEntry *entry) +{ + g_return_if_fail (GTK_IS_SEARCH_BAR (bar)); + g_return_if_fail (entry == NULL || GTK_IS_ENTRY (entry)); + + gtk_search_bar_set_entry (bar, entry); +} + +/** * gtk_search_bar_get_search_mode: * @bar: a #GtkSearchBar * |