[gtk+] actionbar: Add revealed property



commit 3d5a62a0c9ea5fbc25ec952cc9c72e0c3da18ce4
Author: Timm Bäder <mail baedert org>
Date:   Sun Jan 8 14:52:34 2017 +0100

    actionbar: Add revealed property
    
    So we can show and hide it with a transition as well as bind another
    property to it.

 docs/reference/gtk/gtk4-sections.txt |    2 +
 gtk/gtkactionbar.c                   |   97 ++++++++++++++++++++++++++++++++++
 gtk/gtkactionbar.h                   |    8 +++
 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 1074eff..b34f82d 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 a57687e..a8414f7 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 cd0d94d..49c3dea 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 3c34cbe..b99ce8f 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);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]