diff options
author | Timm Bäder <mail@baedert.org> | 2017-01-08 14:52:34 +0100 |
---|---|---|
committer | Timm Bäder <mail@baedert.org> | 2017-01-08 14:57:11 +0100 |
commit | 3d5a62a0c9ea5fbc25ec952cc9c72e0c3da18ce4 (patch) | |
tree | 54e2bf85551493ccdb59e564580c5fbab5f793ba | |
parent | ad8acdcebfb17bae4fd4d2e83621dafea5088911 (diff) | |
download | gtk+-3d5a62a0c9ea5fbc25ec952cc9c72e0c3da18ce4.tar.gz |
actionbar: Add revealed property
So we can show and hide it with a transition as well as bind another
property to it.
-rw-r--r-- | docs/reference/gtk/gtk4-sections.txt | 2 | ||||
-rw-r--r-- | gtk/gtkactionbar.c | 97 | ||||
-rw-r--r-- | gtk/gtkactionbar.h | 8 | ||||
-rw-r--r-- | tests/testactionbar.c | 6 |
4 files changed, 110 insertions, 3 deletions
diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt index 1074eff52f..b34f82d1aa 100644 --- a/docs/reference/gtk/gtk4-sections.txt +++ b/docs/reference/gtk/gtk4-sections.txt @@ -6446,6 +6446,8 @@ gtk_action_bar_pack_start gtk_action_bar_pack_end gtk_action_bar_get_center_widget gtk_action_bar_set_center_widget +gtk_action_bar_get_revealed +gtk_action_bar_set_revealed <SUBSECTION Standard> GTK_TYPE_ACTION_BAR diff --git a/gtk/gtkactionbar.c b/gtk/gtkactionbar.c index a57687ed86..a8414f7bf3 100644 --- a/gtk/gtkactionbar.c +++ b/gtk/gtkactionbar.c @@ -29,6 +29,7 @@ #include "gtkcsscustomgadgetprivate.h" #include "gtkwidgetprivate.h" #include "gtkcontainerprivate.h" +#include "gtkprivate.h" #include <string.h> @@ -65,6 +66,12 @@ enum { CHILD_PROP_POSITION }; +enum { + PROP_REVEALED, + LAST_PROP +}; +static GParamSpec *props[LAST_PROP] = { NULL, }; + static void gtk_action_bar_buildable_interface_init (GtkBuildableIface *iface); G_DEFINE_TYPE_WITH_CODE (GtkActionBar, gtk_action_bar, GTK_TYPE_CONTAINER, @@ -246,6 +253,44 @@ gtk_action_bar_measure_ (GtkWidget *widget, } static void +gtk_action_bar_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GtkActionBar *action_bar = GTK_ACTION_BAR (object); + + switch (prop_id) + { + case PROP_REVEALED: + gtk_action_bar_set_revealed (action_bar, g_value_get_boolean (value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gtk_action_bar_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GtkActionBar *action_bar = GTK_ACTION_BAR (object); + + switch (prop_id) + { + case PROP_REVEALED: + g_value_set_boolean (value, gtk_action_bar_get_revealed (action_bar)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void gtk_action_bar_class_init (GtkActionBarClass *klass) { GObjectClass *object_class; @@ -256,6 +301,8 @@ gtk_action_bar_class_init (GtkActionBarClass *klass) widget_class = GTK_WIDGET_CLASS (klass); container_class = GTK_CONTAINER_CLASS (klass); + object_class->set_property = gtk_action_bar_set_property; + object_class->get_property = gtk_action_bar_get_property; object_class->finalize = gtk_action_bar_finalize; widget_class->snapshot = gtk_action_bar_snapshot; @@ -284,6 +331,13 @@ gtk_action_bar_class_init (GtkActionBarClass *klass) -1, G_MAXINT, 0, G_PARAM_READWRITE)); + props[PROP_REVEALED] = + g_param_spec_boolean ("revealed", + P_("Reveal"), + P_("Controls whether the action bar shows its contents or not"), + TRUE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); + gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_PANEL); gtk_widget_class_set_css_name (widget_class, "actionbar"); } @@ -434,3 +488,46 @@ gtk_action_bar_new (void) { return GTK_WIDGET (g_object_new (GTK_TYPE_ACTION_BAR, NULL)); } + +/** + * gtk_action_bar_set_revealed: + * @action_bar: a #GtkActionBar + * @revealed: The new value of the property + * + * Sets the GtkActionBar:revealed property to @revealed. This will cause + * @action_bar to show up with a slide-in transition. + * + * Note that this settings does not automatically show @action_bar and thus won't + * have any effect if it is invisible. + * + * Since: 3.90 + */ +void +gtk_action_bar_set_revealed (GtkActionBar *action_bar, + gboolean revealed) +{ + GtkActionBarPrivate *priv = gtk_action_bar_get_instance_private (action_bar); + + g_return_if_fail (GTK_IS_ACTION_BAR (action_bar)); + + revealed = !!revealed; + gtk_revealer_set_reveal_child (GTK_REVEALER (priv->revealer), revealed); +} + +/** + * gtk_action_bar_get_revealed: + * @action_bar: a #GtkActionBar + * + * Returns: the current value of the GtkActionBar:revealed property. + * + * Since: 3.90 + */ +gboolean +gtk_action_bar_get_revealed (GtkActionBar *action_bar) +{ + GtkActionBarPrivate *priv = gtk_action_bar_get_instance_private (action_bar); + + g_return_val_if_fail (GTK_IS_ACTION_BAR (action_bar), FALSE); + + return gtk_revealer_get_reveal_child (GTK_REVEALER (priv->revealer)); +} diff --git a/gtk/gtkactionbar.h b/gtk/gtkactionbar.h index cd0d94d306..49c3dea516 100644 --- a/gtk/gtkactionbar.h +++ b/gtk/gtkactionbar.h @@ -73,6 +73,14 @@ void gtk_action_bar_pack_start (GtkActionBar *action_bar, GDK_AVAILABLE_IN_3_12 void gtk_action_bar_pack_end (GtkActionBar *action_bar, GtkWidget *child); + +GDK_AVAILABLE_IN_3_90 +void gtk_action_bar_set_revealed (GtkActionBar *action_bar, + gboolean revealed); +GDK_AVAILABLE_IN_3_90 +gboolean gtk_action_bar_get_revealed (GtkActionBar *action_bar); + + G_END_DECLS #endif /* __GTK_ACTION_BAR_H__ */ diff --git a/tests/testactionbar.c b/tests/testactionbar.c index 3c34cbe5e3..b99ce8f95c 100644 --- a/tests/testactionbar.c +++ b/tests/testactionbar.c @@ -25,9 +25,9 @@ toggle_visibility (GtkCheckButton *button, GtkActionBar *bar) { if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))) - gtk_widget_show (GTK_WIDGET (bar)); + gtk_action_bar_set_revealed (bar, TRUE); else - gtk_widget_hide (GTK_WIDGET (bar)); + gtk_action_bar_set_revealed (bar, FALSE); } static void @@ -102,7 +102,7 @@ activate (GApplication *gapp) gtk_application_add_window (app, GTK_WINDOW (window)); bar = gtk_action_bar_new (); - gtk_widget_set_no_show_all (bar, TRUE); + gtk_action_bar_set_revealed (GTK_ACTION_BAR (bar), FALSE); box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); |