[gtk/bin-removal: 60/83] revealer: Add a child property



commit dd54312d441afd88783da2cbe7757c08eebda71f
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat May 2 16:50:11 2020 -0400

    revealer: Add a child property

 docs/reference/gtk/gtk4-sections.txt |  2 ++
 gtk/gtkrevealer.c                    | 49 +++++++++++++++++++++++++++++++++++-
 gtk/gtkrevealer.h                    |  5 ++++
 3 files changed, 55 insertions(+), 1 deletion(-)
---
diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt
index 55364be75a..fa46fe3ca8 100644
--- a/docs/reference/gtk/gtk4-sections.txt
+++ b/docs/reference/gtk/gtk4-sections.txt
@@ -5681,6 +5681,8 @@ gtk_stack_switcher_get_type
 <TITLE>GtkRevealer</TITLE>
 GtkRevealer
 gtk_revealer_new
+gtk_revealer_get_child
+gtk_revealer_set_child
 gtk_revealer_get_reveal_child
 gtk_revealer_set_reveal_child
 gtk_revealer_get_child_revealed
diff --git a/gtk/gtkrevealer.c b/gtk/gtkrevealer.c
index 0190cbb7a2..94df6ad7bb 100644
--- a/gtk/gtkrevealer.c
+++ b/gtk/gtkrevealer.c
@@ -81,6 +81,7 @@ enum  {
   PROP_TRANSITION_DURATION,
   PROP_REVEAL_CHILD,
   PROP_CHILD_REVEALED,
+  PROP_CHILD,
   LAST_PROP
 };
 
@@ -175,6 +176,9 @@ gtk_revealer_get_property (GObject    *object,
     case PROP_CHILD_REVEALED:
       g_value_set_boolean (value, gtk_revealer_get_child_revealed (revealer));
       break;
+    case PROP_CHILD:
+      g_value_set_object (value, gtk_revealer_get_child (revealer));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
@@ -200,6 +204,9 @@ gtk_revealer_set_property (GObject      *object,
     case PROP_REVEAL_CHILD:
       gtk_revealer_set_reveal_child (revealer, g_value_get_boolean (value));
       break;
+    case PROP_CHILD:
+      gtk_revealer_set_child (revealer, g_value_get_object (value));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
@@ -271,6 +278,14 @@ gtk_revealer_class_init (GtkRevealerClass *klass)
                           FALSE,
                           GTK_PARAM_READABLE);
 
+  props[PROP_CHILD] =
+    g_param_spec_object ("child",
+                         P_("Child"),
+                         P_("The child widget"),
+                         GTK_TYPE_WIDGET,
+                         GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
+
+
   g_object_class_install_properties (object_class, LAST_PROP, props);
 
   gtk_widget_class_set_css_name (widget_class, I_("revealer"));
@@ -317,7 +332,6 @@ gtk_revealer_real_add (GtkContainer *container,
   GtkRevealerPrivate *priv = gtk_revealer_get_instance_private (revealer);
 
   g_return_if_fail (child != NULL);
-
   gtk_widget_set_child_visible (child, priv->current_pos != 0.0);
 
   GTK_CONTAINER_CLASS (gtk_revealer_parent_class)->add (container, child);
@@ -766,3 +780,36 @@ gtk_revealer_set_transition_type (GtkRevealer               *revealer,
   gtk_widget_queue_resize (GTK_WIDGET (revealer));
   g_object_notify_by_pspec (G_OBJECT (revealer), props[PROP_TRANSITION_TYPE]);
 }
+
+/**
+ * gtk_revealer_set_child:
+ * @revealer: a #GtkRevealer
+ * @child: (allow-none): the child widget
+ *
+ * Sets the child widget of @revealer.
+ */
+void
+gtk_revealer_set_child (GtkRevealer *revealer,
+                        GtkWidget   *child)
+{
+  if (!child)
+    gtk_container_remove (GTK_CONTAINER (revealer), gtk_bin_get_child (GTK_BIN (revealer)));
+  else
+    gtk_container_add (GTK_CONTAINER (revealer), child);
+
+  g_object_notify_by_pspec (G_OBJECT (revealer), props[PROP_CHILD]);
+}
+
+/**
+ * gtk_revealer_get_child:
+ * @revealer: a #GtkRevealer
+ *
+ * Gets the child widget of @revealer.
+ *
+ * Returns: (nullable) (transfer none): the child widget of @revealer
+ */
+GtkWidget *
+gtk_revealer_get_child (GtkRevealer *revealer)
+{
+  return gtk_bin_get_child (GTK_BIN (revealer));
+}
diff --git a/gtk/gtkrevealer.h b/gtk/gtkrevealer.h
index 46a1c5d66a..ca45221687 100644
--- a/gtk/gtkrevealer.h
+++ b/gtk/gtkrevealer.h
@@ -68,6 +68,11 @@ void                       gtk_revealer_set_transition_type     (GtkRevealer
 GDK_AVAILABLE_IN_ALL
 GtkRevealerTransitionType  gtk_revealer_get_transition_type     (GtkRevealer               *revealer);
 
+GDK_AVAILABLE_IN_ALL
+void                       gtk_revealer_set_child               (GtkRevealer               *revealer,
+                                                                 GtkWidget                 *child);
+GDK_AVAILABLE_IN_ALL
+GtkWidget *                gtk_revealer_get_child               (GtkRevealer               *revealer);
 
 G_END_DECLS
 


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