[libshumate] marker-layer: Implement shumate_marker_layer_remove_all()



commit 9f7fd9ea43651a7582ea6bae47a0d62bfc5e7c94
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Wed Mar 10 08:56:29 2021 -0300

    marker-layer: Implement shumate_marker_layer_remove_all()
    
    Implement it, and add a corresponding test too.

 shumate/shumate-marker-layer.c | 20 +++++++-------------
 tests/marker-layer.c           | 26 ++++++++++++++++++++++++++
 2 files changed, 33 insertions(+), 13 deletions(-)
---
diff --git a/shumate/shumate-marker-layer.c b/shumate/shumate-marker-layer.c
index ccb022d..c3248d4 100644
--- a/shumate/shumate-marker-layer.c
+++ b/shumate/shumate-marker-layer.c
@@ -464,26 +464,20 @@ shumate_marker_layer_add_marker (ShumateMarkerLayer *layer,
 void
 shumate_marker_layer_remove_all (ShumateMarkerLayer *layer)
 {
-  //ClutterActorIter iter;
-  //ClutterActor *child;
+  GtkWidget *child;
 
   g_return_if_fail (SHUMATE_IS_MARKER_LAYER (layer));
 
-  /*
-  clutter_actor_iter_init (&iter, CLUTTER_ACTOR (layer));
-  while (clutter_actor_iter_next (&iter, &child))
+  child = gtk_widget_get_first_child (GTK_WIDGET (layer));
+  while (child)
     {
-      GObject *marker = G_OBJECT (child);
-
-      g_signal_handlers_disconnect_by_func (marker,
-          G_CALLBACK (marker_position_notify), layer);
+      GtkWidget *next = gtk_widget_get_next_sibling (child);
 
-      g_signal_handlers_disconnect_by_func (marker,
-          G_CALLBACK (marker_move_by_cb), layer);
+      g_signal_handlers_disconnect_by_data (child, layer);
+      gtk_widget_unparent (child);
 
-      clutter_actor_iter_remove (&iter);
+      child = next;
     }
-   */
 }
 
 
diff --git a/tests/marker-layer.c b/tests/marker-layer.c
index a6a6fe1..db5d2ec 100644
--- a/tests/marker-layer.c
+++ b/tests/marker-layer.c
@@ -59,6 +59,31 @@ test_marker_layer_remove_marker (void)
   g_object_unref (viewport);
 }
 
+static void
+test_marker_layer_remove_all_markers (void)
+{
+  ShumateMarkerLayer *marker_layer;
+  ShumateViewport *viewport;
+  int i;
+
+  viewport = shumate_viewport_new ();
+  marker_layer = shumate_marker_layer_new (viewport);
+
+  for (i = 0; i < 100; i++)
+    {
+      ShumateMarker *point;
+
+      point = shumate_point_new ();
+      shumate_marker_layer_add_marker (marker_layer, point);
+      g_assert_true (gtk_widget_get_parent (GTK_WIDGET (point)) == GTK_WIDGET (marker_layer));
+    }
+
+  shumate_marker_layer_remove_all (marker_layer);
+  g_assert_null (gtk_widget_get_first_child (GTK_WIDGET (marker_layer)));
+
+  g_object_unref (viewport);
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -68,6 +93,7 @@ main (int argc, char *argv[])
   g_test_add_func ("/marker-layer/new", test_marker_layer_new);
   g_test_add_func ("/marker-layer/add-marker", test_marker_layer_add_marker);
   g_test_add_func ("/marker-layer/remove-marker", test_marker_layer_remove_marker);
+  g_test_add_func ("/marker-layer/remove-all-markers", test_marker_layer_remove_all_markers);
 
   return g_test_run ();
 }


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