[clutter/wip/apocalypses/apocalypse-1: 66/92] Deprecate Container add() and remove() methods



commit 3d386ec198801bcabe672229512b8899bf7d7ccc
Author: Emmanuele Bassi <ebassi linux intel com>
Date:   Mon Dec 19 18:48:02 2011 +0000

    Deprecate Container add() and remove() methods
    
    This will make things interesting.
    
    We have better replacements in ClutterActor, that do The Right Thingâ
    instead of deferring control and requiring reimplementation in every
    single container actor.

 clutter/Makefile.am                    |    1 +
 clutter/clutter-actor.c                |   12 ++-
 clutter/clutter-bin-layout.c           |    3 +
 clutter/clutter-box-layout.c           |    3 +
 clutter/clutter-container.c            |  174 +++++++++++++++++++------------
 clutter/clutter-container.h            |   16 ---
 clutter/clutter-deprecated.h           |    1 +
 clutter/clutter-flow-layout.c          |    3 +
 clutter/clutter-script-parser.c        |    4 +-
 clutter/clutter-table-layout.c         |    3 +
 clutter/deprecated/clutter-box.c       |    3 +
 clutter/deprecated/clutter-container.h |   64 ++++++++++++
 12 files changed, 198 insertions(+), 89 deletions(-)
---
diff --git a/clutter/Makefile.am b/clutter/Makefile.am
index 872f0b9..0dfe657 100644
--- a/clutter/Makefile.am
+++ b/clutter/Makefile.am
@@ -235,6 +235,7 @@ deprecated_h = \
 	$(srcdir)/deprecated/clutter-behaviour-rotate.h 	\
 	$(srcdir)/deprecated/clutter-behaviour-scale.h 		\
 	$(srcdir)/deprecated/clutter-box.h			\
+	$(srcdir)/deprecated/clutter-container.h		\
 	$(srcdir)/deprecated/clutter-fixed.h			\
 	$(srcdir)/deprecated/clutter-frame-source.h		\
 	$(srcdir)/deprecated/clutter-group.h			\
diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c
index 9ce90c9..8d03389 100644
--- a/clutter/clutter-actor.c
+++ b/clutter/clutter-actor.c
@@ -293,19 +293,17 @@
 #include "config.h"
 #endif
 
-/* for ClutterShader */
-#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
-
 #include <math.h>
 
 #include "cogl/cogl.h"
 
+#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
+
 #include "clutter-actor-private.h"
 
 #include "clutter-action.h"
 #include "clutter-actor-meta-private.h"
 #include "clutter-animatable.h"
-#include "clutter-behaviour.h"
 #include "clutter-color-static.h"
 #include "clutter-color.h"
 #include "clutter-constraint.h"
@@ -322,10 +320,14 @@
 #include "clutter-profile.h"
 #include "clutter-scriptable.h"
 #include "clutter-script-private.h"
-#include "clutter-shader.h"
 #include "clutter-stage-private.h"
 #include "clutter-units.h"
 
+#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
+#include "deprecated/clutter-behaviour.h"
+#include "deprecated/clutter-container.h"
+#include "deprecated/clutter-shader.h"
+
 typedef struct _ShaderData ShaderData;
 
 #define CLUTTER_ACTOR_GET_PRIVATE(obj) \
diff --git a/clutter/clutter-bin-layout.c b/clutter/clutter-bin-layout.c
index cfc868a..09dd897 100644
--- a/clutter/clutter-bin-layout.c
+++ b/clutter/clutter-bin-layout.c
@@ -93,6 +93,9 @@
 
 #include <math.h>
 
+#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
+#include "deprecated/clutter-container.h"
+
 #include "clutter-actor.h"
 #include "clutter-animatable.h"
 #include "clutter-bin-layout.h"
diff --git a/clutter/clutter-box-layout.c b/clutter/clutter-box-layout.c
index 9a9539b..c7055ba 100644
--- a/clutter/clutter-box-layout.c
+++ b/clutter/clutter-box-layout.c
@@ -75,6 +75,9 @@
 
 #include <math.h>
 
+#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
+#include "deprecated/clutter-container.h"
+
 #include "clutter-box-layout.h"
 #include "clutter-debug.h"
 #include "clutter-enum-types.h"
diff --git a/clutter/clutter-container.c b/clutter/clutter-container.c
index 6b1bb71..6dd6903 100644
--- a/clutter/clutter-container.c
+++ b/clutter/clutter-container.c
@@ -176,6 +176,95 @@ clutter_container_default_init (ClutterContainerInterface *iface)
   iface->child_notify       = child_notify;
 }
 
+static inline void
+container_add_actor (ClutterContainer *container,
+                     ClutterActor     *actor)
+{
+  ClutterContainerIface *iface;
+  ClutterActor *parent;
+
+  iface = CLUTTER_CONTAINER_GET_IFACE (container);
+  if (G_UNLIKELY (iface->add == NULL))
+    {
+      CLUTTER_CONTAINER_WARN_NOT_IMPLEMENTED (container, "add");
+      return;
+    }
+
+  parent = clutter_actor_get_parent (actor);
+  if (G_UNLIKELY (parent == NULL))
+    {
+      g_warning ("Attempting to add actor of type '%s' to a "
+		 "container of type '%s', but the actor has "
+                 "already a parent of type '%s'.",
+		 g_type_name (G_OBJECT_TYPE (actor)),
+		 g_type_name (G_OBJECT_TYPE (container)),
+		 g_type_name (G_OBJECT_TYPE (parent)));
+      return;
+    }
+
+  clutter_container_create_child_meta (container, actor);
+
+  iface->add (container, actor);
+}
+
+static inline void
+container_remove_actor (ClutterContainer *container,
+                        ClutterActor     *actor)
+{
+  ClutterContainerIface *iface;
+  ClutterActor *parent;
+
+  iface = CLUTTER_CONTAINER_GET_IFACE (container);
+  if (G_UNLIKELY (iface->remove == NULL))
+    {
+      CLUTTER_CONTAINER_WARN_NOT_IMPLEMENTED (container, "remove");
+      return;
+    }
+
+  parent = clutter_actor_get_parent (actor);
+  if (parent != CLUTTER_ACTOR (container))
+    {
+      g_warning ("Attempting to remove actor of type '%s' from "
+		 "group of class '%s', but the container is not "
+                 "the actor's parent.",
+		 g_type_name (G_OBJECT_TYPE (actor)),
+		 g_type_name (G_OBJECT_TYPE (container)));
+      return;
+    }
+
+  clutter_container_destroy_child_meta (container, actor);
+
+  iface->remove (container, actor);
+}
+
+static inline void
+container_add_valist (ClutterContainer *container,
+                      ClutterActor     *first_actor,
+                      va_list           args)
+{
+  ClutterActor *actor = first_actor;
+
+  while (actor != NULL)
+    {
+      container_add_actor (container, actor);
+      actor = va_arg (args, ClutterActor *);
+    }
+}
+
+static inline void
+container_remove_valist (ClutterContainer *container,
+                         ClutterActor     *first_actor,
+                         va_list           args)
+{
+  ClutterActor *actor = first_actor;
+
+  while (actor != NULL)
+    {
+      container_remove_actor (container, actor);
+      actor = va_arg (args, ClutterActor *);
+    }
+}
+
 /**
  * clutter_container_add: (skip)
  * @container: a #ClutterContainer
@@ -188,6 +277,8 @@ clutter_container_default_init (ClutterContainerInterface *iface)
  * cannot add a #ClutterActor to more than one #ClutterContainer.
  *
  * Since: 0.4
+ *
+ * Deprecated: 1.10: Use clutter_actor_add_child() instead.
  */
 void
 clutter_container_add (ClutterContainer *container,
@@ -200,7 +291,7 @@ clutter_container_add (ClutterContainer *container,
   g_return_if_fail (CLUTTER_IS_ACTOR (first_actor));
 
   va_start (args, first_actor);
-  clutter_container_add_valist (container, first_actor, args);
+  container_add_valist (container, first_actor, args);
   va_end (args);
 }
 
@@ -217,39 +308,17 @@ clutter_container_add (ClutterContainer *container,
  * Virtual: add
  *
  * Since: 0.4
+ *
+ * Deprecated: 1.10: Use clutter_actor_add_child() instead.
  */
 void
 clutter_container_add_actor (ClutterContainer *container,
                              ClutterActor     *actor)
 {
-  ClutterContainerIface *iface;
-  ClutterActor *parent;
-
   g_return_if_fail (CLUTTER_IS_CONTAINER (container));
   g_return_if_fail (CLUTTER_IS_ACTOR (actor));
 
-  iface = CLUTTER_CONTAINER_GET_IFACE (container);
-  if (!iface->add)
-    {
-      CLUTTER_CONTAINER_WARN_NOT_IMPLEMENTED (container, "add");
-      return;
-    }
-
-  parent = clutter_actor_get_parent (actor);
-  if (parent)
-    {
-      g_warning ("Attempting to add actor of type '%s' to a "
-		 "container of type '%s', but the actor has "
-                 "already a parent of type '%s'.",
-		 g_type_name (G_OBJECT_TYPE (actor)),
-		 g_type_name (G_OBJECT_TYPE (container)),
-		 g_type_name (G_OBJECT_TYPE (parent)));
-      return;
-    }
-
-  clutter_container_create_child_meta (container, actor);
-
-  iface->add (container, actor);
+  container_add_actor (container, actor);
 }
 
 /**
@@ -261,23 +330,18 @@ clutter_container_add_actor (ClutterContainer *container,
  * Alternative va_list version of clutter_container_add().
  *
  * Since: 0.4
+ *
+ * Deprecated: 1.10: Use clutter_actor_add_child() instead.
  */
 void
 clutter_container_add_valist (ClutterContainer *container,
                               ClutterActor     *first_actor,
                               va_list           var_args)
 {
-  ClutterActor *actor;
-
   g_return_if_fail (CLUTTER_IS_CONTAINER (container));
   g_return_if_fail (CLUTTER_IS_ACTOR (first_actor));
 
-  actor = first_actor;
-  while (actor)
-    {
-      clutter_container_add_actor (container, actor);
-      actor = va_arg (var_args, ClutterActor*);
-    }
+  container_add_valist (container, first_actor, var_args);
 }
 
 /**
@@ -293,6 +357,8 @@ clutter_container_add_valist (ClutterContainer *container,
  * emitted by @container.
  *
  * Since: 0.4
+ *
+ * Deprecated: 1.10: Use clutter_actor_remove_child() instead.
  */
 void
 clutter_container_remove (ClutterContainer *container,
@@ -305,7 +371,7 @@ clutter_container_remove (ClutterContainer *container,
   g_return_if_fail (CLUTTER_IS_ACTOR (first_actor));
 
   va_start (var_args, first_actor);
-  clutter_container_remove_valist (container, first_actor, var_args);
+  container_remove_valist (container, first_actor, var_args);
   va_end (var_args);
 }
 
@@ -322,38 +388,17 @@ clutter_container_remove (ClutterContainer *container,
  * Virtual: remove
  *
  * Since: 0.4
+ *
+ * Deprecated: 1.10: Use clutter_actor_remove_child() instead.
  */
 void
 clutter_container_remove_actor (ClutterContainer *container,
                                 ClutterActor     *actor)
 {
-  ClutterContainerIface *iface;
-  ClutterActor *parent;
-
   g_return_if_fail (CLUTTER_IS_CONTAINER (container));
   g_return_if_fail (CLUTTER_IS_ACTOR (actor));
 
-  iface = CLUTTER_CONTAINER_GET_IFACE (container);
-  if (!iface->remove)
-    {
-      CLUTTER_CONTAINER_WARN_NOT_IMPLEMENTED (container, "remove");
-      return;
-    }
-
-  parent = clutter_actor_get_parent (actor);
-  if (parent != CLUTTER_ACTOR (container))
-    {
-      g_warning ("Attempting to remove actor of type '%s' from "
-		 "group of class '%s', but the container is not "
-                 "the actor's parent.",
-		 g_type_name (G_OBJECT_TYPE (actor)),
-		 g_type_name (G_OBJECT_TYPE (container)));
-      return;
-    }
-
-  clutter_container_destroy_child_meta (container, actor);
-
-  iface->remove (container, actor);
+  container_remove_actor (container, actor);
 }
 
 /**
@@ -365,23 +410,18 @@ clutter_container_remove_actor (ClutterContainer *container,
  * Alternative va_list version of clutter_container_remove().
  *
  * Since: 0.4
+ *
+ * Deprecated: 1.10: Use clutter_actor_remove_child() instead.
  */
 void
 clutter_container_remove_valist (ClutterContainer *container,
                                  ClutterActor     *first_actor,
                                  va_list           var_args)
 {
-  ClutterActor *actor;
-
   g_return_if_fail (CLUTTER_IS_CONTAINER (container));
   g_return_if_fail (CLUTTER_IS_ACTOR (first_actor));
 
-  actor = first_actor;
-  while (actor)
-    {
-      clutter_container_remove_actor (container, actor);
-      actor = va_arg (var_args, ClutterActor*);
-    }
+  container_remove_valist (container, first_actor, var_args);
 }
 
 static void
diff --git a/clutter/clutter-container.h b/clutter/clutter-container.h
index a2587a2..dbbe520 100644
--- a/clutter/clutter-container.h
+++ b/clutter/clutter-container.h
@@ -139,22 +139,6 @@ struct _ClutterContainerIface
 
 GType         clutter_container_get_type         (void) G_GNUC_CONST;
 
-void          clutter_container_add              (ClutterContainer *container,
-                                                  ClutterActor     *first_actor,
-                                                  ...) G_GNUC_NULL_TERMINATED;
-void          clutter_container_add_actor        (ClutterContainer *container,
-                                                  ClutterActor     *actor);
-void          clutter_container_add_valist       (ClutterContainer *container,
-                                                  ClutterActor     *first_actor,
-                                                  va_list           var_args);
-void          clutter_container_remove           (ClutterContainer *container,
-                                                  ClutterActor     *first_actor,
-                                                  ...) G_GNUC_NULL_TERMINATED;
-void          clutter_container_remove_actor     (ClutterContainer *container,
-                                                  ClutterActor     *actor);
-void          clutter_container_remove_valist    (ClutterContainer *container,
-                                                  ClutterActor     *first_actor,
-                                                  va_list           var_args);
 GList *       clutter_container_get_children           (ClutterContainer *container);
 void          clutter_container_foreach                (ClutterContainer *container,
                                                         ClutterCallback   callback,
diff --git a/clutter/clutter-deprecated.h b/clutter/clutter-deprecated.h
index 5c37bf2..175ac7a 100644
--- a/clutter/clutter-deprecated.h
+++ b/clutter/clutter-deprecated.h
@@ -13,6 +13,7 @@
 #include "deprecated/clutter-behaviour-rotate.h"
 #include "deprecated/clutter-behaviour-scale.h"
 #include "deprecated/clutter-box.h"
+#include "deprecated/clutter-container.h"
 #include "deprecated/clutter-fixed.h"
 #include "deprecated/clutter-frame-source.h"
 #include "deprecated/clutter-group.h"
diff --git a/clutter/clutter-flow-layout.c b/clutter/clutter-flow-layout.c
index 0ea4178..89d5cee 100644
--- a/clutter/clutter-flow-layout.c
+++ b/clutter/clutter-flow-layout.c
@@ -73,6 +73,9 @@
 
 #include <math.h>
 
+#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
+#include "deprecated/clutter-container.h"
+
 #include "clutter-actor.h"
 #include "clutter-animatable.h"
 #include "clutter-child-meta.h"
diff --git a/clutter/clutter-script-parser.c b/clutter/clutter-script-parser.c
index d3e1206..43c26bf 100644
--- a/clutter/clutter-script-parser.c
+++ b/clutter/clutter-script-parser.c
@@ -34,8 +34,10 @@
 #include <glib.h>
 #include <gmodule.h>
 
+#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
+#include "deprecated/clutter-container.h"
+
 #include "clutter-actor.h"
-#include "clutter-container.h"
 #include "clutter-debug.h"
 #include "clutter-enum-types.h"
 
diff --git a/clutter/clutter-table-layout.c b/clutter/clutter-table-layout.c
index 68f0ee5..f22abe5 100644
--- a/clutter/clutter-table-layout.c
+++ b/clutter/clutter-table-layout.c
@@ -76,6 +76,9 @@
 
 #include <math.h>
 
+#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
+#include "deprecated/clutter-container.h"
+
 #include "clutter-table-layout.h"
 
 #include "clutter-debug.h"
diff --git a/clutter/deprecated/clutter-box.c b/clutter/deprecated/clutter-box.c
index 6a31f4f..019dff1 100644
--- a/clutter/deprecated/clutter-box.c
+++ b/clutter/deprecated/clutter-box.c
@@ -77,6 +77,9 @@
 #include <glib-object.h>
 #include <gobject/gvaluecollector.h>
 
+#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
+#include "deprecated/clutter-container.h"
+
 #include "clutter-box.h"
 
 #include "clutter-actor-private.h"
diff --git a/clutter/deprecated/clutter-container.h b/clutter/deprecated/clutter-container.h
new file mode 100644
index 0000000..a14331b
--- /dev/null
+++ b/clutter/deprecated/clutter-container.h
@@ -0,0 +1,64 @@
+/*
+ * Clutter.
+ *
+ * An OpenGL based 'interactive canvas' library.
+ *
+ * Copyright (C) 2006, 2007, 2008 OpenedHand
+ * Copyright (C) 2009, 2010, 2011 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * ClutterContainer: Generic actor container interface.
+ *
+ * Author: Emmanuele Bassi <ebassi linux intel com>
+ */
+
+#ifndef __CLUTTER_CONTAINER_DEPRECATED_H__
+#define __CLUTTER_CONTAINER_DEPRECATED_H__
+
+#include <clutter/clutter-container.h>
+
+G_BEGIN_DECLS
+
+CLUTTER_DEPRECATED_FOR(clutter_actor_add_child)
+void            clutter_container_add           (ClutterContainer *container,
+                                                 ClutterActor     *first_actor,
+                                                 ...) G_GNUC_NULL_TERMINATED;
+
+CLUTTER_DEPRECATED_FOR(clutter_actor_add_child)
+void            clutter_container_add_actor     (ClutterContainer *container,
+                                                 ClutterActor     *actor);
+
+CLUTTER_DEPRECATED_FOR(clutter_actor_add_child)
+void            clutter_container_add_valist    (ClutterContainer *container,
+                                                 ClutterActor     *first_actor,
+                                                 va_list           var_args);
+
+CLUTTER_DEPRECATED_FOR(clutter_actor_remove_child)
+void            clutter_container_remove        (ClutterContainer *container,
+                                                 ClutterActor     *first_actor,
+                                                 ...) G_GNUC_NULL_TERMINATED;
+
+CLUTTER_DEPRECATED_FOR(clutter_actor_remove_child)
+void            clutter_container_remove_actor  (ClutterContainer *container,
+                                                 ClutterActor     *actor);
+
+CLUTTER_DEPRECATED_FOR(clutter_actor_remove_child)
+void            clutter_container_remove_valist (ClutterContainer *container,
+                                                 ClutterActor     *first_actor,
+                                                 va_list           var_args);
+
+G_END_DECLS
+
+#endif /* __CLUTTER_CONTAINER_DEPRECATED_H__ */



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