[libhandy/wip/exalm/leaflet-transltions: 8/10] deck: Add child-visible-changed signal



commit 5825718144cf34c127463b2a81d9e487097ab223
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Fri May 29 01:02:30 2020 +0500

    deck: Add child-visible-changed signal
    
    Expose the new HdyStackableBox signal.
    
    Signed-off-by: Alexander Mikhaylenko <alexm gnome org>

 src/hdy-deck.c | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)
---
diff --git a/src/hdy-deck.c b/src/hdy-deck.c
index 8fcdd48f..2d8bd555 100644
--- a/src/hdy-deck.c
+++ b/src/hdy-deck.c
@@ -67,6 +67,11 @@ enum {
   LAST_CHILD_PROP,
 };
 
+enum {
+  SIGNAL_CHILD_VISIBLE_CHANGED,
+  SIGNAL_LAST_SIGNAL,
+};
+
 typedef struct
 {
   HdyStackableBox *box;
@@ -74,6 +79,7 @@ typedef struct
 
 static GParamSpec *props[LAST_PROP];
 static GParamSpec *child_props[LAST_CHILD_PROP];
+static guint signals[SIGNAL_LAST_SIGNAL];
 
 static void hdy_deck_swipeable_init (HdySwipeableInterface *iface);
 
@@ -1027,6 +1033,27 @@ hdy_deck_class_init (HdyDeckClass *klass)
 
   gtk_container_class_install_child_properties (container_class, LAST_CHILD_PROP, child_props);
 
+  /**
+   * HdyDeck::child-visible-changed:
+   * @self: The #HdyDeck instance
+   * @child: The child
+   * @visible: The new value
+   *
+   * This signal is emitted after a child has been shown or hidden.
+   *
+   * Since: 1.0
+   */
+  signals[SIGNAL_CHILD_VISIBLE_CHANGED] =
+    g_signal_new ("child-visible-changed",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_RUN_LAST,
+                  0,
+                  NULL, NULL, NULL,
+                  G_TYPE_NONE,
+                  2,
+                  GTK_TYPE_WIDGET,
+                  G_TYPE_BOOLEAN);
+
   gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_PANEL);
   gtk_widget_class_set_css_name (widget_class, "deck");
 }
@@ -1060,6 +1087,18 @@ notify_orientation_cb (HdyDeck *self)
   g_object_notify (G_OBJECT (self), "orientation");
 }
 
+static void
+child_visible_changed_cb (HdyDeck   *self,
+                          GtkWidget *child,
+                          gboolean   visible)
+{
+  g_signal_emit (G_OBJECT (self),
+                 signals[SIGNAL_CHILD_VISIBLE_CHANGED],
+                 0,
+                 child,
+                 visible);
+}
+
 static void
 hdy_deck_init (HdyDeck *self)
 {
@@ -1080,6 +1119,7 @@ hdy_deck_init (HdyDeck *self)
   g_signal_connect_object (priv->box, "notify::can-swipe-back", G_CALLBACK (notify_can_swipe_back_cb), self, 
G_CONNECT_SWAPPED);
   g_signal_connect_object (priv->box, "notify::can-swipe-forward", G_CALLBACK (notify_can_swipe_forward_cb), 
self, G_CONNECT_SWAPPED);
   g_signal_connect_object (priv->box, "notify::orientation", G_CALLBACK (notify_orientation_cb), self, 
G_CONNECT_SWAPPED);
+  g_signal_connect_object (priv->box, "child-visible-changed", G_CALLBACK (child_visible_changed_cb), self, 
G_CONNECT_SWAPPED);
 
   /*
    * HACK: GTK3 has no other way to get events on capture phase.


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