[Xfce4-commits] <garcon:master> Use G_DEFINE_TYPE where possible and make the iface types thread safe.

Nick Schermer nick at xfce.org
Sun Aug 16 18:06:02 CEST 2009


Updating branch refs/heads/master
         to 321ff87ecd1cdbb9e9c0d4b6cc9c16b7c8f0b4e1 (commit)
       from 470608d5532e453ea92ea4237c0877302d23d724 (commit)

commit 321ff87ecd1cdbb9e9c0d4b6cc9c16b7c8f0b4e1
Author: Nick Schermer <nick at xfce.org>
Date:   Sun Aug 16 12:18:26 2009 +0200

    Use G_DEFINE_TYPE where possible and make the iface types thread safe.

 garcon/garcon-menu-directory.c     |   25 +-----------------------
 garcon/garcon-menu-element.c       |   24 +++++++---------------
 garcon/garcon-menu-item-cache.c    |   25 +-----------------------
 garcon/garcon-menu-item-pool.c     |   25 +-----------------------
 garcon/garcon-menu-item.c          |   35 +--------------------------------
 garcon/garcon-menu-merger.c        |   35 +--------------------------------
 garcon/garcon-menu-node.c          |   25 +-----------------------
 garcon/garcon-menu-parser.c        |   35 +--------------------------------
 garcon/garcon-menu-separator.c     |   35 +--------------------------------
 garcon/garcon-menu-tree-provider.c |   11 ++++++---
 garcon/garcon-menu.c               |   37 ++---------------------------------
 11 files changed, 30 insertions(+), 282 deletions(-)

diff --git a/garcon/garcon-menu-directory.c b/garcon/garcon-menu-directory.c
index f387535..4fa54b0 100644
--- a/garcon/garcon-menu-directory.c
+++ b/garcon/garcon-menu-directory.c
@@ -79,8 +79,6 @@ enum
 
 
 
-static void garcon_menu_directory_class_init   (GarconMenuDirectoryClass *klass);
-static void garcon_menu_directory_init         (GarconMenuDirectory      *directory);
 static void garcon_menu_directory_constructed  (GObject                  *object);
 static void garcon_menu_directory_finalize     (GObject                  *object);
 static void garcon_menu_directory_get_property (GObject                  *object,
@@ -138,28 +136,7 @@ struct _GarconMenuDirectory
 
 
 
-static GObjectClass *garcon_menu_directory_parent_class = NULL;
-
-
-
-GType
-garcon_menu_directory_get_type (void)
-{
-  static GType type = G_TYPE_INVALID;
-
-  if (G_UNLIKELY (type == G_TYPE_INVALID))
-    {
-      type = g_type_register_static_simple (G_TYPE_OBJECT,
-                                            "GarconMenuDirectory",
-                                            sizeof (GarconMenuDirectoryClass),
-                                            (GClassInitFunc) garcon_menu_directory_class_init,
-                                            sizeof (GarconMenuDirectory),
-                                            (GInstanceInitFunc) garcon_menu_directory_init,
-                                            0);
-    }
-
-  return type;
-}
+G_DEFINE_TYPE (GarconMenuDirectory, garcon_menu_directory, G_TYPE_OBJECT)
 
 
 
diff --git a/garcon/garcon-menu-element.c b/garcon/garcon-menu-element.c
index 2e595c2..7ab8b1a 100644
--- a/garcon/garcon-menu-element.c
+++ b/garcon/garcon-menu-element.c
@@ -26,36 +26,28 @@
 
 
 
-static void garcon_menu_element_class_init (GarconMenuElementIface *klass);
-
-
-
 GType
 garcon_menu_element_get_type (void)
 {
-  static GType type = G_TYPE_INVALID;
+  static volatile gsize type__volatile = 0;
+  GType                 type;
 
-  if (G_UNLIKELY (type == G_TYPE_INVALID))
+  if (g_once_init_enter (&type__volatile))
     {
       type = g_type_register_static_simple (G_TYPE_INTERFACE,
-                                            "GarconMenuElement",
+                                            g_intern_static_string ("GarconMenuElement"),
                                             sizeof (GarconMenuElementIface),
-                                            (GClassInitFunc) garcon_menu_element_class_init,
+                                            NULL,
                                             0,
                                             NULL,
                                             0);
 
       g_type_interface_add_prerequisite (type, G_TYPE_OBJECT);
-    }
-
-  return type;
-}
-
 
+      g_once_init_leave (&type__volatile, type);
+    }
 
-static void
-garcon_menu_element_class_init (GarconMenuElementIface *klass)
-{
+  return type__volatile;
 }
 
 
diff --git a/garcon/garcon-menu-item-cache.c b/garcon/garcon-menu-item-cache.c
index 395673d..e232b35 100644
--- a/garcon/garcon-menu-item-cache.c
+++ b/garcon/garcon-menu-item-cache.c
@@ -47,8 +47,6 @@
 
 
 
-static void garcon_menu_item_cache_class_init (GarconMenuItemCacheClass *klass);
-static void garcon_menu_item_cache_init       (GarconMenuItemCache      *cache);
 static void garcon_menu_item_cache_finalize   (GObject                  *object);
 
 
@@ -105,28 +103,7 @@ struct _GarconMenuItemCache
 
 
 
-static GObjectClass *garcon_menu_item_cache_parent_class = NULL;
-
-
-
-GType
-garcon_menu_item_cache_get_type (void)
-{
-  static GType type = G_TYPE_INVALID;
-
-  if (G_UNLIKELY (type == G_TYPE_INVALID))
-    {
-      type = g_type_register_static_simple (G_TYPE_OBJECT,
-                                            "GarconMenuItemCache",
-                                            sizeof (GarconMenuItemCacheClass),
-                                            (GClassInitFunc) garcon_menu_item_cache_class_init,
-                                            sizeof (GarconMenuItemCache),
-                                            (GInstanceInitFunc) garcon_menu_item_cache_init,
-                                            0);
-    }
-  
-  return type;
-}
+G_DEFINE_TYPE (GarconMenuItemCache, garcon_menu_item_cache, G_TYPE_OBJECT)
 
 
 
diff --git a/garcon/garcon-menu-item-pool.c b/garcon/garcon-menu-item-pool.c
index e0aee1e..957cef1 100644
--- a/garcon/garcon-menu-item-pool.c
+++ b/garcon/garcon-menu-item-pool.c
@@ -31,8 +31,6 @@
 
 
 
-static void     garcon_menu_item_pool_class_init     (GarconMenuItemPoolClass *klass);
-static void     garcon_menu_item_pool_init           (GarconMenuItemPool      *pool);
 static void     garcon_menu_item_pool_finalize       (GObject                 *object);
 static gboolean garcon_menu_item_pool_filter_exclude (const gchar             *desktop_id,
                                                       GarconMenuItem          *item,
@@ -61,28 +59,7 @@ struct _GarconMenuItemPool
 
 
 
-static GObjectClass *garcon_menu_item_pool_parent_class = NULL;
-
-
-
-GType
-garcon_menu_item_pool_get_type (void)
-{
-  static GType type = G_TYPE_INVALID;
-
-  if (G_UNLIKELY (type == G_TYPE_INVALID))
-    {
-      type = g_type_register_static_simple (G_TYPE_OBJECT,
-                                            "GarconMenuItemPool",
-                                            sizeof (GarconMenuItemPoolClass),
-                                            (GClassInitFunc) garcon_menu_item_pool_class_init,
-                                            sizeof (GarconMenuItemPool),
-                                            (GInstanceInitFunc) garcon_menu_item_pool_init,
-                                            0);
-    }
-  
-  return type;
-}
+G_DEFINE_TYPE (GarconMenuItemPool, garcon_menu_item_pool, G_TYPE_OBJECT)
 
 
 
diff --git a/garcon/garcon-menu-item.c b/garcon/garcon-menu-item.c
index 24eb851..6bc2fa8 100644
--- a/garcon/garcon-menu-item.c
+++ b/garcon/garcon-menu-item.c
@@ -54,9 +54,7 @@ enum
 
 
 
-static void         garcon_menu_item_class_init                      (GarconMenuItemClass    *klass);
 static void         garcon_menu_item_element_init                    (GarconMenuElementIface *iface);
-static void         garcon_menu_item_init                            (GarconMenuItem         *item);
 static void         garcon_menu_item_finalize                        (GObject                *object);
 static void         garcon_menu_item_get_property                    (GObject                *object,
                                                                       guint                   prop_id,
@@ -142,37 +140,8 @@ struct _GarconMenuItem
 
 
 
-static GObjectClass *garcon_menu_item_parent_class = NULL;
-
-
-
-GType
-garcon_menu_item_get_type (void)
-{
-  static GType type = G_TYPE_INVALID;
-
-  if (G_UNLIKELY (type == G_TYPE_INVALID))
-    {
-      static const GInterfaceInfo element_info =
-      {
-        (GInterfaceInitFunc) garcon_menu_item_element_init,
-        NULL,
-        NULL,
-      };
-
-      type = g_type_register_static_simple (G_TYPE_OBJECT,
-                                            "GarconMenuItem",
-                                            sizeof (GarconMenuItemClass),
-                                            (GClassInitFunc) garcon_menu_item_class_init,
-                                            sizeof (GarconMenuItem),
-                                            (GInstanceInitFunc) garcon_menu_item_init,
-                                            0);
-
-      g_type_add_interface_static (type, GARCON_TYPE_MENU_ELEMENT, &element_info);
-    }
-  
-  return type;
-}
+G_DEFINE_TYPE_WITH_CODE (GarconMenuItem, garcon_menu_item, G_TYPE_OBJECT,
+    G_IMPLEMENT_INTERFACE (GARCON_TYPE_MENU_ELEMENT, garcon_menu_item_element_init))
 
 
 
diff --git a/garcon/garcon-menu-merger.c b/garcon/garcon-menu-merger.c
index 982c467..ac153d6 100644
--- a/garcon/garcon-menu-merger.c
+++ b/garcon/garcon-menu-merger.c
@@ -60,9 +60,7 @@ enum
 
 
 
-static void     garcon_menu_merger_class_init              (GarconMenuMergerClass       *klass);
 static void     garcon_menu_merger_provider_init           (GarconMenuTreeProviderIface *iface);
-static void     garcon_menu_merger_init                    (GarconMenuMerger            *merger);
 static void     garcon_menu_merger_constructed             (GObject                     *object);
 static void     garcon_menu_merger_finalize                (GObject                     *object);
 static void     garcon_menu_merger_get_property            (GObject                     *object,
@@ -102,37 +100,8 @@ struct _GarconMenuMergerPrivate
 
 
 
-static GObjectClass *garcon_menu_merger_parent_class = NULL;
-
-
-
-GType
-garcon_menu_merger_get_type (void)
-{
-  static GType type = G_TYPE_INVALID;
-
-  if (G_UNLIKELY (type == G_TYPE_INVALID))
-    {
-      static const GInterfaceInfo provider_info = 
-      {
-        (GInterfaceInitFunc) garcon_menu_merger_provider_init,
-        NULL,
-        NULL,
-      };
-
-      type = g_type_register_static_simple (G_TYPE_OBJECT, 
-                                            "GarconMenuMerger",
-                                            sizeof (GarconMenuMergerClass),
-                                            (GClassInitFunc) garcon_menu_merger_class_init,
-                                            sizeof (GarconMenuMerger),
-                                            (GInstanceInitFunc) garcon_menu_merger_init,
-                                            0);
-
-      g_type_add_interface_static (type, GARCON_TYPE_MENU_TREE_PROVIDER, &provider_info);
-    }
-
-  return type;
-}
+G_DEFINE_TYPE_WITH_CODE (GarconMenuMerger, garcon_menu_merger, G_TYPE_OBJECT,
+    G_IMPLEMENT_INTERFACE (GARCON_TYPE_MENU_TREE_PROVIDER, garcon_menu_merger_provider_init))
 
 
 
diff --git a/garcon/garcon-menu-node.c b/garcon/garcon-menu-node.c
index d4a247a..8faf52d 100644
--- a/garcon/garcon-menu-node.c
+++ b/garcon/garcon-menu-node.c
@@ -39,8 +39,6 @@ enum
 
 
 
-static void garcon_menu_node_class_init   (GarconMenuNodeClass *klass);
-static void garcon_menu_node_init         (GarconMenuNode      *node);
 static void garcon_menu_node_finalize     (GObject             *object);
 static void garcon_menu_node_get_property (GObject             *object,
                                            guint                prop_id,
@@ -80,10 +78,6 @@ struct _GarconMenuNode
 
 
 
-static GObjectClass *garcon_menu_node_parent_class = NULL;
-
-
-
 GType
 garcon_menu_node_type_get_type (void)
 {
@@ -132,24 +126,7 @@ garcon_menu_node_type_get_type (void)
 
 
 
-GType
-garcon_menu_node_get_type (void)
-{
-  static GType type = G_TYPE_INVALID;
-
-  if (G_UNLIKELY (type == G_TYPE_INVALID))
-    {
-      type = g_type_register_static_simple (G_TYPE_OBJECT, 
-                                            "GarconMenuNode",
-                                            sizeof (GarconMenuNodeClass),
-                                            (GClassInitFunc) garcon_menu_node_class_init,
-                                            sizeof (GarconMenuNode),
-                                            (GInstanceInitFunc) garcon_menu_node_init,
-                                            0);
-    }
-
-  return type;
-}
+G_DEFINE_TYPE (GarconMenuNode, garcon_menu_node, G_TYPE_OBJECT)
 
 
 
diff --git a/garcon/garcon-menu-parser.c b/garcon/garcon-menu-parser.c
index 31561c8..a10104a 100644
--- a/garcon/garcon-menu-parser.c
+++ b/garcon/garcon-menu-parser.c
@@ -88,9 +88,7 @@ enum
 
 
 
-static void   garcon_menu_parser_class_init    (GarconMenuParserClass       *klass);
 static void   garcon_menu_parser_provider_init (GarconMenuTreeProviderIface *iface);
-static void   garcon_menu_parser_init          (GarconMenuParser            *parser);
 static void   garcon_menu_parser_finalize      (GObject                     *object);
 static void   garcon_menu_parser_get_property  (GObject                     *object,
                                                 guint                        prop_id,
@@ -131,37 +129,8 @@ struct _GarconMenuParserPrivate
 
 
 
-static GObjectClass *garcon_menu_parser_parent_class = NULL;
-
-
-
-GType
-garcon_menu_parser_get_type (void)
-{
-  static GType type = G_TYPE_INVALID;
-
-  if (G_UNLIKELY (type == G_TYPE_INVALID))
-    {
-      static const GInterfaceInfo provider_info = 
-      {
-        (GInterfaceInitFunc) garcon_menu_parser_provider_init,
-        NULL,
-        NULL,
-      };
-
-      type = g_type_register_static_simple (G_TYPE_OBJECT,
-                                            "GarconMenuParser",
-                                            sizeof (GarconMenuParserClass),
-                                            (GClassInitFunc) garcon_menu_parser_class_init,
-                                            sizeof (GarconMenuParser),
-                                            (GInstanceInitFunc) garcon_menu_parser_init,
-                                            0);
-
-      g_type_add_interface_static (type, GARCON_TYPE_MENU_TREE_PROVIDER, &provider_info);
-    }
-
-  return type;
-}
+G_DEFINE_TYPE_WITH_CODE (GarconMenuParser, garcon_menu_parser, G_TYPE_OBJECT,
+    G_IMPLEMENT_INTERFACE (GARCON_TYPE_MENU_TREE_PROVIDER, garcon_menu_parser_provider_init))
 
 
 
diff --git a/garcon/garcon-menu-separator.c b/garcon/garcon-menu-separator.c
index 469c40c..a33de80 100644
--- a/garcon/garcon-menu-separator.c
+++ b/garcon/garcon-menu-separator.c
@@ -27,9 +27,7 @@
 
 
 
-static void         garcon_menu_separator_class_init                      (GarconMenuSeparatorClass *klass);
 static void         garcon_menu_separator_element_init                    (GarconMenuElementIface   *iface);
-static void         garcon_menu_separator_init                            (GarconMenuSeparator      *separator);
 static void         garcon_menu_separator_finalize                        (GObject                  *object);
 
 static const gchar *garcon_menu_separator_get_element_name                (GarconMenuElement        *element);
@@ -80,37 +78,8 @@ struct _GarconMenuSeparator
 
 
 
-static GObjectClass *garcon_menu_separator_parent_class = NULL;
-
-
-
-GType
-garcon_menu_separator_get_type (void)
-{
-  static GType type = G_TYPE_INVALID;
-
-  if (G_UNLIKELY (type == G_TYPE_INVALID))
-    {
-      static const GInterfaceInfo element_info =
-      {
-        (GInterfaceInitFunc) garcon_menu_separator_element_init,
-        NULL,
-        NULL,
-      };
-
-      type = g_type_register_static_simple (G_TYPE_OBJECT,
-                                            "GarconMenuSeparator",
-                                            sizeof (GarconMenuSeparatorClass),
-                                            (GClassInitFunc) garcon_menu_separator_class_init,
-                                            sizeof (GarconMenuSeparator),
-                                            (GInstanceInitFunc) garcon_menu_separator_init,
-                                            0);
-
-      g_type_add_interface_static (type, GARCON_TYPE_MENU_ELEMENT, &element_info);
-    }
-
-  return type;
-}
+G_DEFINE_TYPE_WITH_CODE (GarconMenuSeparator, garcon_menu_separator, G_TYPE_OBJECT,
+    G_IMPLEMENT_INTERFACE (GARCON_TYPE_MENU_ELEMENT, garcon_menu_separator_element_init))
 
 
 
diff --git a/garcon/garcon-menu-tree-provider.c b/garcon/garcon-menu-tree-provider.c
index 89075ad..ff8fe95 100644
--- a/garcon/garcon-menu-tree-provider.c
+++ b/garcon/garcon-menu-tree-provider.c
@@ -29,12 +29,13 @@
 GType
 garcon_menu_tree_provider_get_type (void)
 {
-  static GType type = G_TYPE_INVALID;
+  static volatile gsize type__volatile = 0;
+  GType                 type;
 
-  if (G_UNLIKELY (type == G_TYPE_INVALID))
+  if (g_once_init_enter (&type__volatile))
     {
       type = g_type_register_static_simple (G_TYPE_INTERFACE, 
-                                            "GarconMenuTreeProvider",
+                                            g_intern_static_string ("GarconMenuTreeProvider"),
                                             sizeof (GarconMenuTreeProviderIface),
                                             NULL,
                                             0,
@@ -42,9 +43,11 @@ garcon_menu_tree_provider_get_type (void)
                                             0);
 
       g_type_interface_add_prerequisite (type, G_TYPE_OBJECT);
+
+      g_once_init_leave (&type__volatile, type);
     }
 
-  return type;
+  return type__volatile;
 }
 
 
diff --git a/garcon/garcon-menu.c b/garcon/garcon-menu.c
index 50803a7..7988aa3 100644
--- a/garcon/garcon-menu.c
+++ b/garcon/garcon-menu.c
@@ -94,9 +94,7 @@ enum
 
 
 
-static void                 garcon_menu_class_init                      (GarconMenuClass         *klass);
 static void                 garcon_menu_element_init                    (GarconMenuElementIface  *iface);
-static void                 garcon_menu_instance_init                   (GarconMenu              *menu);
 static void                 garcon_menu_finalize                        (GObject                 *object);
 static void                 garcon_menu_get_property                    (GObject                 *object,
                                                                          guint                    prop_id,
@@ -167,37 +165,8 @@ struct _GarconMenuPrivate
 
 
 
-static GObjectClass *garcon_menu_parent_class = NULL;
-
-
-
-GType
-garcon_menu_get_type (void)
-{
-  static GType type = G_TYPE_INVALID;
-
-  if (G_UNLIKELY (type == G_TYPE_INVALID))
-    {
-      static const GInterfaceInfo element_info =
-      {
-        (GInterfaceInitFunc) garcon_menu_element_init,
-        NULL,
-        NULL,
-      };
-
-      type = g_type_register_static_simple (G_TYPE_OBJECT,
-                                            "GarconMenu",
-                                            sizeof (GarconMenuClass),
-                                            (GClassInitFunc) garcon_menu_class_init,
-                                            sizeof (GarconMenu),
-                                            (GInstanceInitFunc) garcon_menu_instance_init,
-                                            0);
-
-      g_type_add_interface_static (type, GARCON_TYPE_MENU_ELEMENT, &element_info);
-    }
-
-  return type;
-}
+G_DEFINE_TYPE_WITH_CODE (GarconMenu, garcon_menu, G_TYPE_OBJECT,
+    G_IMPLEMENT_INTERFACE (GARCON_TYPE_MENU_ELEMENT, garcon_menu_element_init))
 
 
 
@@ -259,7 +228,7 @@ garcon_menu_element_init (GarconMenuElementIface *iface)
 
 
 static void
-garcon_menu_instance_init (GarconMenu *menu)
+garcon_menu_init (GarconMenu *menu)
 {
   menu->priv = GARCON_MENU_GET_PRIVATE (menu);
   menu->priv->file = NULL;



More information about the Xfce4-commits mailing list