diff options
Diffstat (limited to 'gtk/gtksearchbar.c')
-rw-r--r-- | gtk/gtksearchbar.c | 107 |
1 files changed, 62 insertions, 45 deletions
diff --git a/gtk/gtksearchbar.c b/gtk/gtksearchbar.c index 330fdb229e..caee68ed24 100644 --- a/gtk/gtksearchbar.c +++ b/gtk/gtksearchbar.c @@ -78,9 +78,7 @@ * Since: 3.10 */ -G_DEFINE_TYPE (GtkSearchBar, gtk_search_bar, GTK_TYPE_BIN) - -struct _GtkSearchBarPrivate { +typedef struct { /* Template widgets */ GtkWidget *revealer; GtkWidget *toolbar; @@ -89,7 +87,9 @@ struct _GtkSearchBarPrivate { GtkWidget *entry; gboolean reveal_child; -}; +} GtkSearchBarPrivate; + +G_DEFINE_TYPE_WITH_PRIVATE (GtkSearchBar, gtk_search_bar, GTK_TYPE_BIN) enum { PROP_0, @@ -141,13 +141,15 @@ entry_key_pressed_event_cb (GtkWidget *widget, GdkEvent *event, GtkSearchBar *bar) { + GtkSearchBarPrivate *priv = gtk_search_bar_get_instance_private (bar); guint keyval; if (!gdk_event_get_keyval (event, &keyval) || keyval != GDK_KEY_Escape) return GDK_EVENT_PROPAGATE; - gtk_revealer_set_reveal_child (GTK_REVEALER (bar->priv->revealer), FALSE); + gtk_revealer_set_reveal_child (GTK_REVEALER (priv->revealer), FALSE); + return GDK_EVENT_STOP; } @@ -202,6 +204,7 @@ gboolean gtk_search_bar_handle_event (GtkSearchBar *bar, GdkEvent *event) { + GtkSearchBarPrivate *priv = gtk_search_bar_get_instance_private (bar); guint keyval; gboolean handled; gboolean preedit_changed; @@ -209,7 +212,7 @@ gtk_search_bar_handle_event (GtkSearchBar *bar, gboolean res; char *old_text, *new_text; - if (!bar->priv->entry) + if (priv->entry == NULL) { g_warning ("The search bar does not have an entry connected to it. Call gtk_search_bar_connect_entry() to connect one."); return GDK_EVENT_PROPAGATE; @@ -219,30 +222,30 @@ gtk_search_bar_handle_event (GtkSearchBar *bar, * the event doesn't contain a key press, * or the event is a navigation or space bar key press */ - if (bar->priv->reveal_child || + if (priv->reveal_child || !gdk_event_get_keyval (event, &keyval) || is_keynav_event (event, keyval) || keyval == GDK_KEY_space) return GDK_EVENT_PROPAGATE; - if (!gtk_widget_get_realized (bar->priv->entry)) - gtk_widget_realize (bar->priv->entry); + if (!gtk_widget_get_realized (priv->entry)) + gtk_widget_realize (priv->entry); handled = GDK_EVENT_PROPAGATE; preedit_changed = FALSE; - preedit_change_id = g_signal_connect (bar->priv->entry, "preedit-changed", + preedit_change_id = g_signal_connect (priv->entry, "preedit-changed", G_CALLBACK (preedit_changed_cb), &preedit_changed); - old_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (bar->priv->entry))); - res = gtk_widget_event (bar->priv->entry, event); - new_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (bar->priv->entry))); + old_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->entry))); + res = gtk_widget_event (priv->entry, event); + new_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->entry))); - g_signal_handler_disconnect (bar->priv->entry, preedit_change_id); + g_signal_handler_disconnect (priv->entry, preedit_change_id); if ((res && g_strcmp0 (new_text, old_text) != 0) || preedit_changed) { handled = GDK_EVENT_STOP; - gtk_revealer_set_reveal_child (GTK_REVEALER (bar->priv->revealer), TRUE); + gtk_revealer_set_reveal_child (GTK_REVEALER (priv->revealer), TRUE); } g_free (old_text); @@ -256,18 +259,19 @@ reveal_child_changed_cb (GObject *object, GParamSpec *pspec, GtkSearchBar *bar) { + GtkSearchBarPrivate *priv = gtk_search_bar_get_instance_private (bar); gboolean reveal_child; g_object_get (object, "reveal-child", &reveal_child, NULL); - if (reveal_child == bar->priv->reveal_child) + if (reveal_child == priv->reveal_child) return; - bar->priv->reveal_child = reveal_child; + priv->reveal_child = reveal_child; if (reveal_child) - _gtk_entry_grab_focus (GTK_ENTRY (bar->priv->entry), FALSE); + _gtk_entry_grab_focus (GTK_ENTRY (priv->entry), FALSE); else - gtk_entry_set_text (GTK_ENTRY (bar->priv->entry), ""); + gtk_entry_set_text (GTK_ENTRY (priv->entry), ""); g_object_notify (G_OBJECT (bar), "search-mode-enabled"); } @@ -276,7 +280,9 @@ static void close_button_clicked_cb (GtkWidget *button, GtkSearchBar *bar) { - gtk_revealer_set_reveal_child (GTK_REVEALER (bar->priv->revealer), FALSE); + GtkSearchBarPrivate *priv = gtk_search_bar_get_instance_private (bar); + + gtk_revealer_set_reveal_child (GTK_REVEALER (priv->revealer), FALSE); } static void @@ -284,19 +290,20 @@ gtk_search_bar_add (GtkContainer *container, GtkWidget *child) { GtkSearchBar *bar = GTK_SEARCH_BAR (container); + GtkSearchBarPrivate *priv = gtk_search_bar_get_instance_private (bar); /* When constructing the widget, we want the revealer to be added * as the first child of the search bar, as an implementation detail. * After that, the child added by the application should be added * to the toolbar's box_center. */ - if (bar->priv->box_center == NULL) + if (priv->box_center == NULL) { GTK_CONTAINER_CLASS (gtk_search_bar_parent_class)->add (container, child); } else { - gtk_container_add (GTK_CONTAINER (bar->priv->box_center), child); + gtk_container_add (GTK_CONTAINER (priv->box_center), child); /* If an entry is the only child, save the developer a couple of * lines of code */ @@ -334,11 +341,12 @@ gtk_search_bar_get_property (GObject *object, GParamSpec *pspec) { GtkSearchBar *bar = GTK_SEARCH_BAR (object); + GtkSearchBarPrivate *priv = gtk_search_bar_get_instance_private (bar); switch (prop_id) { case PROP_SEARCH_MODE_ENABLED: - g_value_set_boolean (value, bar->priv->reveal_child); + g_value_set_boolean (value, priv->reveal_child); break; case PROP_SHOW_CLOSE_BUTTON: g_value_set_boolean (value, gtk_search_bar_get_show_close_button (bar)); @@ -353,12 +361,13 @@ static void gtk_search_bar_dispose (GObject *object) { GtkSearchBar *bar = GTK_SEARCH_BAR (object); + GtkSearchBarPrivate *priv = gtk_search_bar_get_instance_private (bar); - if (bar->priv->entry) + if (priv->entry) { - g_signal_handlers_disconnect_by_func (bar->priv->entry, entry_key_pressed_event_cb, bar); - g_object_remove_weak_pointer (G_OBJECT (bar->priv->entry), (gpointer *) &bar->priv->entry); - bar->priv->entry = NULL; + 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; } G_OBJECT_CLASS (gtk_search_bar_parent_class)->dispose (object); @@ -408,24 +417,22 @@ gtk_search_bar_class_init (GtkSearchBarClass *klass) gtk_widget_class_bind_child_internal (widget_class, GtkSearchBarPrivate, revealer); gtk_widget_class_bind_child_internal (widget_class, GtkSearchBarPrivate, box_center); gtk_widget_class_bind_child_internal (widget_class, GtkSearchBarPrivate, close_button); - - g_type_class_add_private (klass, sizeof (GtkSearchBarPrivate)); } static void gtk_search_bar_init (GtkSearchBar *bar) { - bar->priv = G_TYPE_INSTANCE_GET_PRIVATE (bar, GTK_TYPE_SEARCH_BAR, GtkSearchBarPrivate); + GtkSearchBarPrivate *priv = gtk_search_bar_get_instance_private (bar); gtk_widget_init_template (GTK_WIDGET (bar)); - gtk_widget_show_all (bar->priv->toolbar); + gtk_widget_show_all (priv->toolbar); - g_signal_connect (bar->priv->revealer, "notify::reveal-child", + g_signal_connect (priv->revealer, "notify::reveal-child", G_CALLBACK (reveal_child_changed_cb), bar); - gtk_widget_set_no_show_all (bar->priv->close_button, TRUE); - g_signal_connect (bar->priv->close_button, "clicked", + gtk_widget_set_no_show_all (priv->close_button, TRUE); + g_signal_connect (priv->close_button, "clicked", G_CALLBACK (close_button_clicked_cb), bar); }; @@ -462,21 +469,23 @@ void gtk_search_bar_connect_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 (bar->priv->entry != NULL) + if (priv->entry != NULL) { - g_signal_handlers_disconnect_by_func (bar->priv->entry, entry_key_pressed_event_cb, bar); - g_object_remove_weak_pointer (G_OBJECT (bar->priv->entry), (gpointer *) &bar->priv->entry); - bar->priv->entry = NULL; + 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) { - bar->priv->entry = GTK_WIDGET (entry); - g_object_add_weak_pointer (G_OBJECT (bar->priv->entry), (gpointer *) &bar->priv->entry); - g_signal_connect (bar->priv->entry, "key-press-event", + priv->entry = GTK_WIDGET (entry); + g_object_add_weak_pointer (G_OBJECT (priv->entry), (gpointer *) &priv->entry); + g_signal_connect (priv->entry, "key-press-event", G_CALLBACK (entry_key_pressed_event_cb), bar); } } @@ -494,9 +503,11 @@ gtk_search_bar_connect_entry (GtkSearchBar *bar, gboolean gtk_search_bar_get_search_mode (GtkSearchBar *bar) { + GtkSearchBarPrivate *priv = gtk_search_bar_get_instance_private (bar); + g_return_val_if_fail (GTK_IS_SEARCH_BAR (bar), FALSE); - return bar->priv->reveal_child; + return priv->reveal_child; } /** @@ -512,9 +523,11 @@ void gtk_search_bar_set_search_mode (GtkSearchBar *bar, gboolean search_mode) { + GtkSearchBarPrivate *priv = gtk_search_bar_get_instance_private (bar); + g_return_if_fail (GTK_IS_SEARCH_BAR (bar)); - gtk_revealer_set_reveal_child (GTK_REVEALER (bar->priv->revealer), search_mode); + gtk_revealer_set_reveal_child (GTK_REVEALER (priv->revealer), search_mode); } /** @@ -530,9 +543,11 @@ gtk_search_bar_set_search_mode (GtkSearchBar *bar, gboolean gtk_search_bar_get_show_close_button (GtkSearchBar *bar) { + GtkSearchBarPrivate *priv = gtk_search_bar_get_instance_private (bar); + g_return_val_if_fail (GTK_IS_SEARCH_BAR (bar), FALSE); - return gtk_widget_get_visible (bar->priv->close_button); + return gtk_widget_get_visible (priv->close_button); } /** @@ -551,7 +566,9 @@ void gtk_search_bar_set_show_close_button (GtkSearchBar *bar, gboolean visible) { + GtkSearchBarPrivate *priv = gtk_search_bar_get_instance_private (bar); + g_return_if_fail (GTK_IS_SEARCH_BAR (bar)); - gtk_widget_set_visible (bar->priv->close_button, visible); + gtk_widget_set_visible (priv->close_button, visible); } |