summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2015-03-22 11:46:16 -0400
committerMatthias Clasen <mclasen@redhat.com>2015-03-22 11:46:16 -0400
commita17d6290e404857a1f4bf021d8635a3a1eb9ee19 (patch)
treec76c9c9448f6d53782e0238b0488be9b0acb4975
parentb55aa154e636237fc7ffbb488bda864cb7c2f650 (diff)
downloadgtk+-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.
-rw-r--r--gtk/gtksearchbar.c56
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
*