[libhandy/wip/haecker-felix/flap-widget] Fixes



commit d4477f2748a246bfc6f61804bf3c56d1be6a13e6
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Tue Nov 17 14:42:05 2020 +0500

    Fixes

 src/hdy-flap.c | 513 ++++++++++++++++++++++++++++++---------------------------
 src/hdy-flap.h |  70 ++++----
 2 files changed, 306 insertions(+), 277 deletions(-)
---
diff --git a/src/hdy-flap.c b/src/hdy-flap.c
index b47d7818..04141169 100644
--- a/src/hdy-flap.c
+++ b/src/hdy-flap.c
@@ -19,7 +19,7 @@
  * SECTION:hdy-flap
  * @Title: HdyFlap
  *
- * Since: 1.0
+ * Since: 1.1
  */
 
 struct _HdyFlap
@@ -27,7 +27,7 @@ struct _HdyFlap
   GtkBin parent_instance;
 
   GtkWidget *flap;
-  HdyFlapFoldPolicy flap_fold_policy;
+  HdyFlapFoldPolicy fold_policy;
   GtkPackType flap_position;
   gboolean reveal_flap;
   gboolean locked;
@@ -62,7 +62,7 @@ enum {
   PROP_0,
 
   PROP_FLAP,
-  PROP_FLAP_FOLD_POLICY,
+  PROP_FOLD_POLICY,
   PROP_FLAP_POSITION,
   PROP_REVEAL_FLAP,
   PROP_LOCKED,
@@ -119,8 +119,8 @@ hdy_flap_get_property (GObject    *object,
   case PROP_FLAP:
     g_value_set_object (value, hdy_flap_get_flap (self));
     break;
-  case PROP_FLAP_FOLD_POLICY:
-    g_value_set_enum (value, hdy_flap_get_flap_fold_policy (self));
+  case PROP_FOLD_POLICY:
+    g_value_set_enum (value, hdy_flap_get_fold_policy (self));
     break;
   case PROP_FLAP_POSITION:
     g_value_set_enum (value, hdy_flap_get_flap_position (self));
@@ -160,8 +160,8 @@ hdy_flap_set_property (GObject      *object,
   case PROP_FLAP:
     hdy_flap_set_flap (self, g_value_get_object (value));
     break;
-  case PROP_FLAP_FOLD_POLICY:
-    hdy_flap_set_flap_fold_policy  (self, g_value_get_enum (value));
+  case PROP_FOLD_POLICY:
+    hdy_flap_set_fold_policy (self, g_value_get_enum (value));
     break;
   case PROP_FLAP_POSITION:
     hdy_flap_set_flap_position (self, g_value_get_enum (value));
@@ -191,29 +191,12 @@ hdy_flap_finalize (GObject *object)
 {
   HdyFlap *self = HDY_FLAP (object);
 
-  if (self->overlay_tick_cb_id != 0) {
-    gtk_widget_remove_tick_callback (GTK_WIDGET (self), self->overlay_tick_cb_id);
-    self->overlay_tick_cb_id = 0;
-  }
-
-  if (self->reveal_tick_cb_id != 0) {
-    gtk_widget_remove_tick_callback (GTK_WIDGET (self), self->reveal_tick_cb_id);
-    self->overlay_tick_cb_id = 0;
-  }
-
   g_clear_object (&self->shadow_helper);
   g_clear_object (&self->tracker);
 
   G_OBJECT_CLASS (hdy_flap_parent_class)->finalize (object);
 }
 
-static gdouble
-ease_out_cubic (gdouble t) {
-  gdouble p;
-  p = t -1;
-  return p * p * p + 1;
-}
-
 static gboolean
 reveal_tick_cb (HdyFlap       *self,
                 GdkFrameClock *frame_clock)
@@ -227,7 +210,7 @@ reveal_tick_cb (HdyFlap       *self,
 
     gtk_widget_queue_resize (GTK_WIDGET (self));
 
-    return FALSE;
+    return G_SOURCE_REMOVE;
   }
 
   self->reveal_progress = hdy_lerp (self->reveal_start_progress,
@@ -236,18 +219,15 @@ reveal_tick_cb (HdyFlap       *self,
 
   gtk_widget_queue_resize (GTK_WIDGET (self));
 
-  return TRUE;
+  return G_SOURCE_CONTINUE;
 }
 
 static gboolean
 overlay_tick_cb (HdyFlap       *self,
                  GdkFrameClock *frame_clock)
 {
-  gdouble t;
-  gint64 frame_time;
-
-  frame_time = gdk_frame_clock_get_frame_time (frame_clock) / 1000;
-  t = (gdouble) (frame_time - self->overlay_start_time) / self->overlay_duration;
+  gint64 frame_time = gdk_frame_clock_get_frame_time (frame_clock) / 1000;
+  gdouble t = (gdouble) (frame_time - self->overlay_start_time) / self->overlay_duration;
 
   if (t >= 1) {
     self->overlay_progress = self->folded ? 1 : 0;
@@ -255,36 +235,46 @@ overlay_tick_cb (HdyFlap       *self,
 
     gtk_widget_queue_resize (GTK_WIDGET (self));
 
-    return FALSE;
+    return G_SOURCE_REMOVE;
   }
 
-  self->overlay_progress = ease_out_cubic (t);
+  self->overlay_progress = hdy_ease_out_cubic (t);
 
   if (!self->folded)
       self->overlay_progress = 1 - self->overlay_progress;
 
   gtk_widget_queue_resize (GTK_WIDGET (self));
 
-  return TRUE;
+  return G_SOURCE_CONTINUE;
 }
 
 static void
 animate_overlay (HdyFlap *self)
 {
-  if (!hdy_get_enable_animations (GTK_WIDGET (self)) || !gtk_widget_get_mapped (GTK_WIDGET (self))) {
+  GtkWidget *widget = GTK_WIDGET (self);
+  GdkFrameClock *frame_clock;
+
+  if (!hdy_get_enable_animations (widget) ||
+      !gtk_widget_get_mapped (widget)) {
     self->overlay_progress = self->folded ? 1 : 0;
-    gtk_widget_queue_resize (GTK_WIDGET (self));
+    gtk_widget_queue_resize (widget);
+
     return;
   }
 
   if (self->overlay_tick_cb_id != 0) {
-    gtk_widget_remove_tick_callback (GTK_WIDGET (self), self->overlay_tick_cb_id);
+    gtk_widget_remove_tick_callback (widget, self->overlay_tick_cb_id);
     self->overlay_tick_cb_id = 0;
   }
 
-  self->overlay_start_time = gdk_frame_clock_get_frame_time (gtk_widget_get_frame_clock (GTK_WIDGET (self))) 
/ 1000;
+  frame_clock = gtk_widget_get_frame_clock (widget);
+
+  self->overlay_start_time = gdk_frame_clock_get_frame_time (frame_clock) / 1000;
   self->overlay_progress = self->folded ? 0 : 1;
-  self->overlay_tick_cb_id = gtk_widget_add_tick_callback (GTK_WIDGET (self), (GtkTickCallback) 
overlay_tick_cb, NULL, NULL);
+  self->overlay_tick_cb_id =
+    gtk_widget_add_tick_callback (widget,
+                                  (GtkTickCallback) overlay_tick_cb,
+                                  NULL, NULL);
 }
 
 static void
@@ -292,22 +282,32 @@ animate_reveal (HdyFlap *self,
                 gdouble  to,
                 gint64   duration)
 {
-  if (!hdy_get_enable_animations (GTK_WIDGET (self)) || !gtk_widget_get_mapped (GTK_WIDGET (self))) {
+  GtkWidget *widget = GTK_WIDGET (self);
+  GdkFrameClock *frame_clock;
+
+  if (!hdy_get_enable_animations (widget) ||
+      !gtk_widget_get_mapped (widget)) {
     self->reveal_progress = to;
-    gtk_widget_queue_resize (GTK_WIDGET (self));
+    gtk_widget_queue_resize (widget);
+
     return;
   }
 
   if (self->reveal_tick_cb_id != 0) {
-    gtk_widget_remove_tick_callback (GTK_WIDGET (self), self->reveal_tick_cb_id);
+    gtk_widget_remove_tick_callback (widget, self->reveal_tick_cb_id);
     self->reveal_tick_cb_id = 0;
   }
 
-  self->reveal_start_time = gdk_frame_clock_get_frame_time (gtk_widget_get_frame_clock (GTK_WIDGET (self))) 
/ 1000;
+  frame_clock = gtk_widget_get_frame_clock (widget);
+
+  self->reveal_start_time = gdk_frame_clock_get_frame_time (frame_clock) / 1000;
   self->reveal_start_progress = self->reveal_progress;
   self->reveal_end_progress = to;
   self->reveal_current_duration = duration;
-  self->reveal_tick_cb_id = gtk_widget_add_tick_callback (GTK_WIDGET (self), (GtkTickCallback) 
reveal_tick_cb, NULL, NULL);
+  self->reveal_tick_cb_id =
+    gtk_widget_add_tick_callback (widget,
+                                  (GtkTickCallback) reveal_tick_cb,
+                                  NULL, NULL);
 }
 
 static gint
@@ -315,6 +315,7 @@ adjust_for_overlay (HdyFlap *self,
                     gint     value)
 {
   gdouble progress = MIN (1 - self->overlay_progress, self->reveal_progress);
+
   return (gint) round (value * progress);
 }
 
@@ -322,13 +323,9 @@ static GtkPackType
 adjust_for_text_direction (HdyFlap     *self,
                            GtkPackType  pack_type)
 {
-  if (gtk_widget_get_direction (GTK_WIDGET (self)) == GTK_TEXT_DIR_RTL) {
-    if (pack_type == GTK_PACK_START) {
-      return GTK_PACK_END;
-    } else {
-      return GTK_PACK_START;
-    }
-  }
+  if (gtk_widget_get_direction (GTK_WIDGET (self)) == GTK_TEXT_DIR_RTL)
+    return (pack_type == GTK_PACK_START) ? GTK_PACK_END : GTK_PACK_START;
+
   return pack_type;
 }
 
@@ -364,20 +361,19 @@ end_swipe_cb (HdySwipeTracker *tracker,
 
 static void
 set_folded (HdyFlap  *self,
-                      gboolean  folded)
+            gboolean  folded)
 {
-  g_return_if_fail (HDY_IS_FLAP (self));
   folded = !!folded;
 
   if (self->folded == folded)
     return;
 
   self->folded = folded;
-  animate_overlay(self);
 
-  if (!self->locked)
-    hdy_flap_set_reveal_flap(self, !self->folded);
+  animate_overlay (self);
 
+  if (!self->locked)
+    hdy_flap_set_reveal_flap (self, !self->folded);
 
   g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FOLDED]);
 }
@@ -388,11 +384,11 @@ set_folded (HdyFlap  *self,
 static void
 hdy_flap_measure (GtkWidget      *widget,
                   GtkOrientation  orientation,
-                  int             for_size,
-                  int            *minimum,
-                  int            *natural,
-                  int            *minimum_baseline,
-                  int            *natural_baseline)
+                  gint            for_size,
+                  gint           *minimum,
+                  gint           *natural,
+                  gint           *minimum_baseline,
+                  gint           *natural_baseline)
 {
   HdyFlap *self = HDY_FLAP (widget);
   GtkWidget *content = gtk_bin_get_child (GTK_BIN (self));
@@ -409,26 +405,41 @@ hdy_flap_measure (GtkWidget      *widget,
   if (natural_baseline)
     *natural_baseline = -1;
 
-  if (orientation == GTK_ORIENTATION_VERTICAL){
-      if (content) gtk_widget_get_preferred_height (content, &content_min, &content_nat);
-      if (self->flap) gtk_widget_get_preferred_height (self->flap, &flap_min, &flap_nat);
+  if (orientation == GTK_ORIENTATION_VERTICAL) {
+    if (content)
+      gtk_widget_get_preferred_height (content, &content_min, &content_nat);
 
-      if (self->orientation == GTK_ORIENTATION_VERTICAL && self->flap_fold_policy != 
HDY_FLAP_FOLD_POLICY_AUTO){
-          *minimum = MAX (content_min + adjust_for_overlay (self, flap_min), flap_min);
-          *natural = MAX (content_nat + adjust_for_overlay (self, flap_nat), flap_nat);
-          return;
-      }
-  }
+    if (self->flap)
+      gtk_widget_get_preferred_height (self->flap, &flap_min, &flap_nat);
+
+    if (self->orientation == GTK_ORIENTATION_VERTICAL &&
+        self->fold_policy != HDY_FLAP_FOLD_POLICY_AUTO) {
+      if (minimum)
+        *minimum = MAX (content_min + adjust_for_overlay (self, flap_min), flap_min);
+
+      if (natural)
+        *natural = MAX (content_nat + adjust_for_overlay (self, flap_nat), flap_nat);
+
+      return;
+    }
+  } else {
+    if (content)
+      gtk_widget_get_preferred_width (content, &content_min, &content_nat);
+
+    if (self->flap)
+      gtk_widget_get_preferred_width (self->flap, &flap_min, &flap_nat);
+
+    if (self->orientation == GTK_ORIENTATION_HORIZONTAL &&
+        self->fold_policy != HDY_FLAP_FOLD_POLICY_AUTO) {
 
-  if (orientation == GTK_ORIENTATION_HORIZONTAL){
-      if (content) gtk_widget_get_preferred_width (content, &content_min, &content_nat);
-      if (self->flap) gtk_widget_get_preferred_width (self->flap, &flap_min, &flap_nat);
+      if (minimum)
+        *minimum = MAX (content_min + adjust_for_overlay (self, flap_min), flap_min);
 
-      if (self->orientation == GTK_ORIENTATION_HORIZONTAL && self->flap_fold_policy != 
HDY_FLAP_FOLD_POLICY_AUTO){
-          *minimum = MAX (content_min + adjust_for_overlay (self, flap_min), flap_min);
-          *natural = MAX (content_nat + adjust_for_overlay (self, flap_nat), flap_nat);
-          return;
-      }
+      if (natural)
+        *natural = MAX (content_nat + adjust_for_overlay (self, flap_nat), flap_nat);
+
+      return;
+    }
   }
 
   *minimum = MAX (content_min, flap_min);
@@ -450,10 +461,12 @@ get_flap_size (HdyFlap        *self,
   if (widget_orientation == GTK_ORIENTATION_HORIZONTAL) {
     if (self->orientation == GTK_ORIENTATION_HORIZONTAL)
       return flap_min_size.width;
+
     return widget_alloc->width;
   } else {
     if (self->orientation == GTK_ORIENTATION_HORIZONTAL)
       return widget_alloc->height;
+
     return flap_min_size.height;
   }
 }
@@ -467,10 +480,12 @@ get_content_size (HdyFlap        *self,
     gint offset = 0;
     if (self->orientation == GTK_ORIENTATION_HORIZONTAL)
       offset = adjust_for_overlay (self, get_flap_size (self, widget_alloc, GTK_ORIENTATION_HORIZONTAL));
+
     return widget_alloc->width - offset;
   } else {
     if (self->orientation == GTK_ORIENTATION_HORIZONTAL)
       return widget_alloc->height;
+
     return widget_alloc->height - adjust_for_overlay (self, get_flap_size (self, widget_alloc, 
GTK_ORIENTATION_VERTICAL));
   }
 }
@@ -479,37 +494,34 @@ static void
 allocate_flap (HdyFlap       *self,
                GtkAllocation *widget_alloc)
 {
-  gint flap_x = 0, flap_y = 0;
+  gint flap_x = widget_alloc->x;
+  gint flap_y = widget_alloc->y;
 
   if (self->orientation == GTK_ORIENTATION_HORIZONTAL) {
-      if (self->flap_position == adjust_for_text_direction (self, GTK_PACK_START)) {
-          flap_x = widget_alloc->x - (gint) round (get_flap_size(self, widget_alloc, 
GTK_ORIENTATION_HORIZONTAL) * (1 - self->reveal_progress));
-          flap_y = widget_alloc->y;
-      }
-      if (self->flap_position == adjust_for_text_direction (self, GTK_PACK_END)) {
-          flap_x = widget_alloc->width - (gint) round(get_flap_size(self, widget_alloc, 
GTK_ORIENTATION_HORIZONTAL) * self->reveal_progress);
-          flap_y = widget_alloc->y;
-      }
+
+    if (self->flap_position == adjust_for_text_direction (self, GTK_PACK_START))
+      flap_x -= (gint) round (get_flap_size (self, widget_alloc, GTK_ORIENTATION_HORIZONTAL) * (1 - 
self->reveal_progress));
+    else
+      flap_x = widget_alloc->width - (gint) round (get_flap_size (self, widget_alloc, 
GTK_ORIENTATION_HORIZONTAL) * self->reveal_progress);
   }
 
   if (self->orientation == GTK_ORIENTATION_VERTICAL) {
-      if (self->flap_position == GTK_PACK_START) {
-          flap_x = widget_alloc->x;
-          flap_y = widget_alloc->y - (gint) round (get_flap_size (self, widget_alloc, 
GTK_ORIENTATION_VERTICAL) * (1 - self->reveal_progress));
-      }
-      if (self->flap_position == GTK_PACK_END){
-          flap_x = widget_alloc->x;
-          flap_y = widget_alloc->height - (gint) round (get_flap_size (self, widget_alloc, 
GTK_ORIENTATION_VERTICAL) * self->reveal_progress);
-      }
+    if (self->flap_position == GTK_PACK_START)
+      flap_y -= (gint) round (get_flap_size (self, widget_alloc, GTK_ORIENTATION_VERTICAL) * (1 - 
self->reveal_progress));
+    else
+      flap_y = widget_alloc->height - (gint) round (get_flap_size (self, widget_alloc, 
GTK_ORIENTATION_VERTICAL) * self->reveal_progress);
   }
 
   gtk_widget_set_child_visible (self->flap, self->reveal_progress > 0);
+
   if (self->reveal_progress > 0) {
     GtkAllocation alloc;
+
     alloc.x = flap_x;
     alloc.y = flap_y;
     alloc.width = get_flap_size (self, widget_alloc, GTK_ORIENTATION_HORIZONTAL);
     alloc.height = get_flap_size (self, widget_alloc, GTK_ORIENTATION_VERTICAL);
+
     gtk_widget_size_allocate (self->flap, &alloc);
   }
 }
@@ -527,38 +539,31 @@ allocate_content (HdyFlap       *self,
   if (self->flap) {
     gtk_widget_get_preferred_size (self->flap, &flap_min, &flap_nat);
   } else {
-      flap_min.height = 0;
-      flap_min.width = 0;
+    flap_min.height = 0;
+    flap_min.width = 0;
   }
 
   gtk_widget_get_preferred_size (content, &content_min, &content_nat);
 
-  if (self->orientation == GTK_ORIENTATION_HORIZONTAL){
-      int min = content_min.width + flap_min.width;
-      if (self->flap_fold_policy == HDY_FLAP_FOLD_POLICY_AUTO) set_folded (self, widget_alloc->width <= min);
-
-      if (self->flap_position == adjust_for_text_direction (self, GTK_PACK_START)){
-          content_x = widget_alloc->x + adjust_for_overlay (self, get_flap_size(self, widget_alloc, 
GTK_ORIENTATION_HORIZONTAL));
-          content_y = widget_alloc->y;
-      }
-      if (self->flap_position == adjust_for_text_direction (self, GTK_PACK_END)){
-          content_x = widget_alloc->x;
-          content_y = widget_alloc->y;
-      }
-  }
+  content_x = widget_alloc->x;
+  content_y = widget_alloc->y;
+
+  if (self->orientation == GTK_ORIENTATION_HORIZONTAL) {
+    gint min = content_min.width + flap_min.width;
+
+    if (self->fold_policy == HDY_FLAP_FOLD_POLICY_AUTO)
+      set_folded (self, widget_alloc->width <= min);
+
+    if (self->flap_position == adjust_for_text_direction (self, GTK_PACK_START))
+      content_x += adjust_for_overlay (self, get_flap_size (self, widget_alloc, GTK_ORIENTATION_HORIZONTAL));
+  } else {
+    gint min = content_min.height + flap_min.height;
+
+    if (self->fold_policy == HDY_FLAP_FOLD_POLICY_AUTO)
+      set_folded (self, widget_alloc->height <= min);
 
-  if (self->orientation == GTK_ORIENTATION_VERTICAL){
-      gint min = content_min.height + flap_min.height;
-      if (self->flap_fold_policy == HDY_FLAP_FOLD_POLICY_AUTO) set_folded (self, widget_alloc->height <= 
min);
-
-      if (self->flap_position == GTK_PACK_START){
-          content_x = widget_alloc->x;
-          content_y = widget_alloc->y + adjust_for_overlay (self, get_flap_size(self, widget_alloc, 
GTK_ORIENTATION_VERTICAL));
-      }
-      if (self->flap_position == GTK_PACK_END){
-          content_x = widget_alloc->x;
-          content_y = widget_alloc->y;
-      }
+    if (self->flap_position == GTK_PACK_START)
+      content_y += adjust_for_overlay (self, get_flap_size (self, widget_alloc, GTK_ORIENTATION_VERTICAL));
   }
 
   alloc.x = content_x;
@@ -603,7 +608,7 @@ hdy_flap_get_preferred_width (GtkWidget *widget,
                               gint      *natural)
 {
   hdy_flap_measure (widget, GTK_ORIENTATION_HORIZONTAL, -1,
-                     minimum, natural, NULL, NULL);
+                    minimum, natural, NULL, NULL);
 }
 
 
@@ -614,7 +619,7 @@ hdy_flap_get_preferred_height_for_width (GtkWidget *widget,
                                          gint      *natural)
 {
   hdy_flap_measure (widget, GTK_ORIENTATION_VERTICAL, width,
-                     minimum, natural, NULL, NULL);
+                    minimum, natural, NULL, NULL);
 }
 
 static void
@@ -623,7 +628,7 @@ hdy_flap_get_preferred_height (GtkWidget *widget,
                                gint      *natural)
 {
   hdy_flap_measure (widget, GTK_ORIENTATION_VERTICAL, -1,
-                     minimum, natural, NULL, NULL);
+                    minimum, natural, NULL, NULL);
 }
 
 static gboolean
@@ -683,46 +688,58 @@ static void
 hdy_flap_direction_changed (GtkWidget        *widget,
                             GtkTextDirection  previous_direction)
 {
-  update_swipe_tracker (HDY_FLAP (widget));
+  HdyFlap *self = HDY_FLAP (widget);
+
+  update_swipe_tracker (self);
 
   GTK_WIDGET_CLASS (hdy_flap_parent_class)->direction_changed (widget,
                                                                previous_direction);
 }
 
+static void
+hdy_flap_unmap (GtkWidget *widget)
+{
+  HdyFlap *self = HDY_FLAP (widget);
+
+  if (self->overlay_tick_cb_id != 0) {
+    gtk_widget_remove_tick_callback (GTK_WIDGET (self), self->overlay_tick_cb_id);
+    self->overlay_tick_cb_id = 0;
+  }
+
+  if (self->reveal_tick_cb_id != 0) {
+    gtk_widget_remove_tick_callback (GTK_WIDGET (self), self->reveal_tick_cb_id);
+    self->overlay_tick_cb_id = 0;
+  }
+
+  GTK_WIDGET_CLASS (hdy_flap_parent_class)->unmap (widget);
+}
+
 static void
 hdy_flap_forall (GtkContainer *container,
                  gboolean      include_internals,
                  GtkCallback   callback,
                  gpointer      callback_target)
 {
-  HdyFlap *self;
-  GtkWidget *content;
-  self = HDY_FLAP (container);
+  HdyFlap *self = HDY_FLAP (container);
+  GtkWidget *content = gtk_bin_get_child (GTK_BIN (self));
 
-  content = gtk_bin_get_child (GTK_BIN (self));
-  if (content) {
+  if (content)
     callback (content, callback_target);
-  }
 
-  if (self->flap) {
+  if (self->flap)
     callback (self->flap, callback_target);
-  }
 }
 
 static void
-hdy_flap_remove (GtkContainer *base,
+hdy_flap_remove (GtkContainer *container,
                  GtkWidget    *widget)
 {
-  HdyFlap *self;
-  self = HDY_FLAP (base);
+  HdyFlap *self = HDY_FLAP (container);
 
-  g_return_if_fail (widget);
-
-  if (widget == self->flap) {
+  if (widget == self->flap)
     hdy_flap_set_flap (self, NULL);
-  } else {
-    gtk_container_remove (GTK_CONTAINER (self), widget);
-  }
+  else
+    GTK_CONTAINER_CLASS (hdy_flap_parent_class)->remove (container, widget);
 }
 
 static HdySwipeTracker *
@@ -816,6 +833,7 @@ hdy_flap_class_init (HdyFlapClass *klass)
   widget_class->size_allocate = hdy_flap_size_allocate;
   widget_class->draw = hdy_flap_draw;
   widget_class->direction_changed = hdy_flap_direction_changed;
+  widget_class->unmap = hdy_flap_unmap;
 
   container_class->remove = hdy_flap_remove;
   container_class->forall = hdy_flap_forall;
@@ -823,103 +841,102 @@ hdy_flap_class_init (HdyFlapClass *klass)
   /**
    * HdyFlap:flap:
    *
-   * Since: 1.0
+   * Since: 1.1
    */
   props[PROP_FLAP] =
-      g_param_spec_object ("flap",
-                           _("Flap widget"),
-                           _("Flap Widget"),
-                           GTK_TYPE_WIDGET,
-                           G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+    g_param_spec_object ("flap",
+                         _("Flap widget"),
+                         _("Flap Widget"),
+                         GTK_TYPE_WIDGET,
+                         G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
 
   /**
-   * HdyFlap:flap-fold-policy:
+   * HdyFlap:fold-policy:
    *
-   * Since: 1.0
+   * Since: 1.1
    */
-  props[PROP_FLAP_FOLD_POLICY] =
-      g_param_spec_enum ("flap-fold-policy",
-                         _("Flap Fold Policy"),
-                         _("Flap Fold Policy"),
-                         HDY_TYPE_FLAP_FOLD_POLICY,
-                         HDY_FLAP_FOLD_POLICY_AUTO,
-                         G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+  props[PROP_FOLD_POLICY] =
+    g_param_spec_enum ("fold-policy",
+                       _("Fold Policy"),
+                       _("Fold Policy"),
+                       HDY_TYPE_FLAP_FOLD_POLICY,
+                       HDY_FLAP_FOLD_POLICY_AUTO,
+                       G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * HdyFlap:flap-position:
    *
-   * Since: 1.0
+   * Since: 1.1
    */
   props[PROP_FLAP_POSITION] =
-      g_param_spec_enum ("flap-position",
-                         _("Flap Position"),
-                         _("Flap Position"),
-                         GTK_TYPE_PACK_TYPE,
-                         GTK_PACK_START,
-                         G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+    g_param_spec_enum ("flap-position",
+                       _("Flap Position"),
+                       _("Flap Position"),
+                       GTK_TYPE_PACK_TYPE,
+                       GTK_PACK_START,
+                       G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * HdyFlap:reveal-flap:
    *
-   * Since: 1.0
+   * Since: 1.1
    */
   props[PROP_REVEAL_FLAP] =
-      g_param_spec_boolean ("reveal-flap",
-                            _("Reveal Flap"),
-                            _("Reveal Flap"),
-                            TRUE,
-                            G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+    g_param_spec_boolean ("reveal-flap",
+                          _("Reveal Flap"),
+                          _("Reveal Flap"),
+                          TRUE,
+                          G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * HdyFlap:locked:
    *
-   * Since: 1.0
+   * Since: 1.1
    */
   props[PROP_LOCKED] =
-      g_param_spec_boolean ("locked",
-                            _("Locked"),
-                            _("Locked"),
-                            FALSE,
-                            G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
-
+    g_param_spec_boolean ("locked",
+                          _("Locked"),
+                          _("Locked"),
+                          FALSE,
+                          G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * HdyFlap:folded:
    *
-   * Since: 1.0
+   * Since: 1.1
    */
   props[PROP_FOLDED] =
-      g_param_spec_boolean ("folded",
-                            _("Folded"),
-                            _("Folded"),
-                            FALSE,
-                            G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY);
+    g_param_spec_boolean ("folded",
+                          _("Folded"),
+                          _("Folded"),
+                          FALSE,
+                          G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * HdyFlap:overlay-duration:
    *
-   * Since: 1.0
+   * Since: 1.1
    */
   props[PROP_OVERLAY_DURATION] =
-      g_param_spec_int ("overlay-duration",
-                        _("Overlay Duration"),
-                        _("Overlay Duration"),
-                        0, G_MAXINT,
-                        250,
-                        G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+    g_param_spec_int ("overlay-duration",
+                      _("Overlay Duration"),
+                      _("Overlay Duration"),
+                      0, G_MAXINT,
+                      250,
+                      G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
 
   /**
    * HdyFlap:reveal-duration:
    *
-   * Since: 1.0
+   * Since: 1.1
    */
   props[PROP_REVEAL_DURATION] =
-      g_param_spec_int ("reveal-duration",
-                        _("Reveal Duration"),
-                        _("Reveal Duration"),
-                        0, G_MAXINT,
-                        250,
-                        G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+    g_param_spec_int ("reveal-duration",
+                      _("Reveal Duration"),
+                      _("Reveal Duration"),
+                      0, G_MAXINT,
+                      250,
+                      G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
 
   g_object_class_install_properties (object_class, LAST_PROP, props);
 
@@ -935,7 +952,7 @@ hdy_flap_init (HdyFlap *self)
 {
   self->orientation = GTK_ORIENTATION_HORIZONTAL;
   self->flap_position = GTK_PACK_START;
-  self->flap_fold_policy = HDY_FLAP_FOLD_POLICY_AUTO;
+  self->fold_policy = HDY_FLAP_FOLD_POLICY_AUTO;
   self->reveal_flap = TRUE;
   self->locked = FALSE;
   self->reveal_progress = 1;
@@ -974,7 +991,7 @@ hdy_flap_swipeable_init (HdySwipeableInterface *iface)
  *
  * Returns: a new #HdyFlap
  *
- * Since: 1.0
+ * Since: 1.1
  */
 GtkWidget *
 hdy_flap_new (void)
@@ -984,11 +1001,11 @@ hdy_flap_new (void)
 
 /**
  * hdy_flap_get_flap:
- * @flap: (nullable): a #HdyFlap
+ * @self: a #HdyFlap
  *
- * Returns: (transfer none): Flap child.
+ * Returns: (transfer none) (nullable): Flap child.
  *
- * Since: 1.0
+ * Since: 1.1
  */
 GtkWidget *
 hdy_flap_get_flap (HdyFlap *self)
@@ -1001,15 +1018,16 @@ hdy_flap_get_flap (HdyFlap *self)
 /**
  * hdy_flap_set_flap:
  * @self: a #HdyFlap
- * @flap: flap widget
+ * @flap: (nullable): flap widget
  *
- * Since: 1.0
+ * Since: 1.1
  */
 void
-hdy_flap_set_flap (HdyFlap *self,
+hdy_flap_set_flap (HdyFlap   *self,
                    GtkWidget *flap)
 {
   g_return_if_fail (HDY_IS_FLAP (self));
+  g_return_if_fail (GTK_IS_WIDGET (flap) || flap == NULL);
 
   if (self->flap == flap)
     return;
@@ -1028,46 +1046,46 @@ hdy_flap_set_flap (HdyFlap *self,
 }
 
 /**
- * hdy_flap_get_flap_fold_policy:
+ * hdy_flap_get_fold_policy:
  * @self: a #HdyFlap
  *
- * Returns: current flap fold policy.
+ * Returns: current fold policy.
  *
- * Since: 1.0
+ * Since: 1.1
  */
 HdyFlapFoldPolicy
-hdy_flap_get_flap_fold_policy (HdyFlap *self)
+hdy_flap_get_fold_policy (HdyFlap *self)
 {
   g_return_val_if_fail (HDY_IS_FLAP (self), HDY_FLAP_FOLD_POLICY_NEVER);
 
-  return self->flap_fold_policy;
+  return self->fold_policy;
 }
 
 /**
- * hdy_flap_set_flap_fold_policy:
+ * hdy_flap_set_fold_policy:
  * @self: a #HdyFlap
- * @flap_fold_policy: Flap fold policy
+ * @policy: Flap fold policy
  *
- * Since: 1.0
+ * Since: 1.1
  */
 void
-hdy_flap_set_flap_fold_policy (HdyFlap     *self,
-                        HdyFlapFoldPolicy  flap_fold_policy)
+hdy_flap_set_fold_policy (HdyFlap           *self,
+                          HdyFlapFoldPolicy  policy)
 {
   g_return_if_fail (HDY_IS_FLAP (self));
 
-  if (self->flap_fold_policy == flap_fold_policy)
+  if (self->fold_policy == policy)
     return;
 
-  self->flap_fold_policy = flap_fold_policy;
+  self->fold_policy = policy;
 
-  if (self->flap_fold_policy == HDY_FLAP_FOLD_POLICY_ALWAYS)
+  if (self->fold_policy == HDY_FLAP_FOLD_POLICY_ALWAYS)
     set_folded(self, TRUE);
 
-  if (self->flap_fold_policy == HDY_FLAP_FOLD_POLICY_NEVER)
+  if (self->fold_policy == HDY_FLAP_FOLD_POLICY_NEVER)
     set_folded(self, FALSE);
 
-  g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FLAP_FOLD_POLICY]);
+  g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FOLD_POLICY]);
 }
 
 /**
@@ -1076,7 +1094,7 @@ hdy_flap_set_flap_fold_policy (HdyFlap     *self,
  *
  * Returns: current flap position.
  *
- * Since: 1.0
+ * Since: 1.1
  */
 GtkPackType
 hdy_flap_get_flap_position (HdyFlap *self)
@@ -1089,21 +1107,21 @@ hdy_flap_get_flap_position (HdyFlap *self)
 /**
  * hdy_flap_set_flap_position:
  * @self: a #HdyFlap
- * @flap_position: Flap position
+ * @position: Flap position
  *
- * Since: 1.0
+ * Since: 1.1
  */
 void
 hdy_flap_set_flap_position  (HdyFlap     *self,
-                             GtkPackType  flap_position)
+                             GtkPackType  position)
 {
 
   g_return_if_fail (HDY_IS_FLAP (self));
 
-  if (self->flap_position == flap_position)
+  if (self->flap_position == position)
     return;
 
-  self->flap_position = flap_position;
+  self->flap_position = position;
 
   gtk_widget_queue_allocate (GTK_WIDGET (self));
   hdy_shadow_helper_clear_cache (self->shadow_helper);
@@ -1118,7 +1136,7 @@ hdy_flap_set_flap_position  (HdyFlap     *self,
  *
  * Returns: %TRUE if flap widget gets revealed.
  *
- * Since: 1.0
+ * Since: 1.1
  */
 gboolean
 hdy_flap_get_reveal_flap (HdyFlap *self)
@@ -1133,19 +1151,21 @@ hdy_flap_get_reveal_flap (HdyFlap *self)
  * @self: a #HdyFlap
  * @reveal_flap: Reveal flap
  *
- * Since: 1.0
+ * Since: 1.1
  */
 void
 hdy_flap_set_reveal_flap (HdyFlap  *self,
                           gboolean  reveal_flap)
 {
   g_return_if_fail (HDY_IS_FLAP (self));
+
   reveal_flap = !!reveal_flap;
 
   if (self->reveal_flap == reveal_flap)
     return;
 
   self->reveal_flap = reveal_flap;
+
   animate_reveal (self, reveal_flap ? 1 : 0, self->reveal_duration);
 
   g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REVEAL_FLAP]);
@@ -1157,7 +1177,7 @@ hdy_flap_set_reveal_flap (HdyFlap  *self,
  *
  * Returns: %TRUE if flap widget is locked.
  *
- * Since: 1.0
+ * Since: 1.1
  */
 gboolean
 hdy_flap_get_locked (HdyFlap *self)
@@ -1172,13 +1192,14 @@ hdy_flap_get_locked (HdyFlap *self)
  * @self: a #HdyFlap
  * @locked: Reveal flap
  *
- * Since: 1.0
+ * Since: 1.1
  */
 void
 hdy_flap_set_locked (HdyFlap  *self,
-                          gboolean  locked)
+                     gboolean  locked)
 {
   g_return_if_fail (HDY_IS_FLAP (self));
+
   locked = !!locked;
 
   if (self->locked == locked)
@@ -1195,7 +1216,7 @@ hdy_flap_set_locked (HdyFlap  *self,
  *
  * Returns: %TRUE if flap widget is folded.
  *
- * Since: 1.0
+ * Since: 1.1
  */
 gboolean
 hdy_flap_get_folded (HdyFlap *self)
@@ -1211,7 +1232,7 @@ hdy_flap_get_folded (HdyFlap *self)
  *
  * Returns: current overlay animation duration.
  *
- * Since: 1.0
+ * Since: 1.1
  */
 gint
 hdy_flap_get_overlay_duration (HdyFlap *self)
@@ -1224,20 +1245,21 @@ hdy_flap_get_overlay_duration (HdyFlap *self)
 /**
  * hdy_flap_set_overlay_duration:
  * @self: a #HdyFlap
- * @overlay_duration: Duration for overlay animation
+ * @duration: Duration for overlay animation
  *
- * Since: 1.0
+ * Since: 1.1
  */
 void
 hdy_flap_set_overlay_duration (HdyFlap *self,
-                               gint     overlay_duration)
+                               gint     duration)
 {
   g_return_if_fail (HDY_IS_FLAP (self));
+  g_return_if_fail (duration >= 0);
 
-  if (self->overlay_duration == overlay_duration)
+  if (self->overlay_duration == duration)
     return;
 
-  self->overlay_duration = overlay_duration;
+  self->overlay_duration = duration;
 
   g_object_notify_by_pspec (G_OBJECT (self), props[PROP_OVERLAY_DURATION]);
 }
@@ -1248,7 +1270,7 @@ hdy_flap_set_overlay_duration (HdyFlap *self,
  *
  * Returns: current reveal animation duration.
  *
- * Since: 1.0
+ * Since: 1.1
  */
 gint
 hdy_flap_get_reveal_duration (HdyFlap *self)
@@ -1261,20 +1283,21 @@ hdy_flap_get_reveal_duration (HdyFlap *self)
 /**
  * hdy_flap_set_reveal_duration:
  * @self: a #HdyFlap
- * @reveal_duration: Duration for reveal animation
+ * @duration: Duration for reveal animation
  *
- * Since: 1.0
+ * Since: 1.1
  */
 void
 hdy_flap_set_reveal_duration (HdyFlap *self,
-                              gint     reveal_duration)
+                              gint     duration)
 {
   g_return_if_fail (HDY_IS_FLAP (self));
+  g_return_if_fail (duration >= 0);
 
-  if (self->reveal_duration == reveal_duration)
+  if (self->reveal_duration == duration)
     return;
 
-  self->reveal_duration = reveal_duration;
+  self->reveal_duration = duration;
 
   g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REVEAL_DURATION]);
 }
diff --git a/src/hdy-flap.h b/src/hdy-flap.h
index 90bc546a..ed61089e 100644
--- a/src/hdy-flap.h
+++ b/src/hdy-flap.h
@@ -17,9 +17,9 @@
 
 G_BEGIN_DECLS
 
-#define HDY_TYPE_FLAP (hdy_flap_get_type())
+#define HDY_TYPE_FLAP (hdy_flap_get_type ())
 
-HDY_AVAILABLE_IN_ALL
+HDY_AVAILABLE_IN_1_1
 G_DECLARE_FINAL_TYPE (HdyFlap, hdy_flap, HDY, FLAP, GtkBin)
 
 typedef enum {
@@ -28,46 +28,52 @@ typedef enum {
   HDY_FLAP_FOLD_POLICY_AUTO,
 } HdyFlapFoldPolicy;
 
-
-HDY_AVAILABLE_IN_ALL
+HDY_AVAILABLE_IN_1_1
 GtkWidget *hdy_flap_new (void);
 
-HDY_AVAILABLE_IN_ALL
+HDY_AVAILABLE_IN_1_1
 GtkWidget *hdy_flap_get_flap (HdyFlap   *self);
-HDY_AVAILABLE_IN_ALL
+HDY_AVAILABLE_IN_1_1
 void       hdy_flap_set_flap (HdyFlap   *self,
                               GtkWidget *flap);
-HDY_AVAILABLE_IN_ALL
-HdyFlapFoldPolicy hdy_flap_get_flap_fold_policy (HdyFlap *self);
-HDY_AVAILABLE_IN_ALL
-void        hdy_flap_set_flap_fold_policy (HdyFlap *self,
-                                    HdyFlapFoldPolicy flap_mode);
-HDY_AVAILABLE_IN_ALL
+
+HDY_AVAILABLE_IN_1_1
+HdyFlapFoldPolicy hdy_flap_get_fold_policy (HdyFlap           *self);
+HDY_AVAILABLE_IN_1_1
+void              hdy_flap_set_fold_policy (HdyFlap           *self,
+                                            HdyFlapFoldPolicy  policy);
+
+HDY_AVAILABLE_IN_1_1
 GtkPackType hdy_flap_get_flap_position (HdyFlap *self);
-HDY_AVAILABLE_IN_ALL
-void        hdy_flap_set_flap_position (HdyFlap *self,
-                                        GtkPackType flap_position);
-HDY_AVAILABLE_IN_ALL
+HDY_AVAILABLE_IN_1_1
+void        hdy_flap_set_flap_position (HdyFlap     *self,
+                                        GtkPackType  position);
+
+HDY_AVAILABLE_IN_1_1
 gboolean hdy_flap_get_reveal_flap (HdyFlap *self);
-HDY_AVAILABLE_IN_ALL
-void     hdy_flap_set_reveal_flap (HdyFlap *self,
-                                   gboolean reveal_flap);
-HDY_AVAILABLE_IN_ALL
+HDY_AVAILABLE_IN_1_1
+void     hdy_flap_set_reveal_flap (HdyFlap  *self,
+                                   gboolean  reveal_flap);
+
+HDY_AVAILABLE_IN_1_1
 gboolean hdy_flap_get_locked (HdyFlap *self);
-HDY_AVAILABLE_IN_ALL
-void     hdy_flap_set_locked (HdyFlap *self,
-                              gboolean locked);
-HDY_AVAILABLE_IN_ALL
+HDY_AVAILABLE_IN_1_1
+void     hdy_flap_set_locked (HdyFlap  *self,
+                              gboolean  locked);
+
+HDY_AVAILABLE_IN_1_1
 gboolean hdy_flap_get_folded (HdyFlap *self);
-HDY_AVAILABLE_IN_ALL
-gint     hdy_flap_get_overlay_duration (HdyFlap *self);
-HDY_AVAILABLE_IN_ALL
-void     hdy_flap_set_overlay_duration (HdyFlap *self,
-                                        gint overlay_duration);
-HDY_AVAILABLE_IN_ALL
+
+HDY_AVAILABLE_IN_1_1
+gint hdy_flap_get_overlay_duration (HdyFlap *self);
+HDY_AVAILABLE_IN_1_1
+void hdy_flap_set_overlay_duration (HdyFlap *self,
+                                    gint     duration);
+
+HDY_AVAILABLE_IN_1_1
 gint hdy_flap_get_reveal_duration (HdyFlap *self);
-HDY_AVAILABLE_IN_ALL
+HDY_AVAILABLE_IN_1_1
 void hdy_flap_set_reveal_duration (HdyFlap *self,
-                                   gint reveal_duration);
+                                   gint     duration);
 
 G_END_DECLS


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