]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
Override regular gobject constructor (instead of "constructed" callback).
authorVMware, Inc <>
Wed, 26 Jan 2011 01:50:02 +0000 (17:50 -0800)
committerMarcelo Vanzin <mvanzin@vmware.com>
Wed, 26 Jan 2011 01:50:02 +0000 (17:50 -0800)
It seems some older gobject libraries don't have the "constructed" callback.
So override the regular gobject constructor instead.

Signed-off-by: Marcelo Vanzin <mvanzin@vmware.com>
open-vm-tools/services/vmtoolsd/serviceObj.c
open-vm-tools/services/vmtoolsd/serviceObj.h

index ff945e0c027a43ee88efc149d7acb02004b1592f..55dc5e0f25e93d3b83bfd27c618496c07deb5eed 100644 (file)
@@ -33,6 +33,7 @@ typedef struct ServiceProperty {
    gpointer    value;
 } ServiceProperty;
 
+static gpointer gToolsCoreServiceParentClass;
 
 /**
  * Accumulator function for the "set option" signal. If a handler returns
@@ -237,17 +238,32 @@ ToolsCoreServiceSetProperty(GObject *object,
  *
  * Object constructor. Initialize internal state.
  *
- * @param   object   Instance being initialized.
+ * @param[in] type      Object type.
+ * @param[in] nparams   Param count.
+ * @param[in] params    Construction parameters.
+ *
+ * @return A new instance.
  *
  *******************************************************************************
  */
 
-static void
-ToolsCoreServiceCtor(GObject *object)
+static GObject *
+ToolsCoreServiceCtor(GType type,
+                     guint nparams,
+                     GObjectConstructParam *params)
 {
-   ToolsCoreService *self = (ToolsCoreService *) object;
+   GObject *object;
+   ToolsCoreService *self;
+
+   object = G_OBJECT_CLASS(gToolsCoreServiceParentClass)->constructor(type,
+                                                                      nparams,
+                                                                      params);
+
+   self = TOOLSCORE_SERVICE(object);
    self->lock = g_mutex_new();
    self->props = g_array_new(FALSE, FALSE, sizeof (ServiceProperty));
+
+   return object;
 }
 
 
@@ -296,6 +312,9 @@ ToolsCore_Service_class_init(gpointer _klass,
                              gpointer klassData)
 {
    ToolsCoreServiceClass *klass = _klass;
+
+   gToolsCoreServiceParentClass = g_type_class_peek_parent(_klass);
+
    g_signal_new(TOOLS_CORE_SIG_CAPABILITIES,
                 G_OBJECT_CLASS_TYPE(klass),
                 G_SIGNAL_RUN_LAST,
@@ -376,7 +395,7 @@ ToolsCore_Service_class_init(gpointer _klass,
                 G_TYPE_POINTER);
 #endif
 
-   G_OBJECT_CLASS(klass)->constructed = ToolsCoreServiceCtor;
+   G_OBJECT_CLASS(klass)->constructor = ToolsCoreServiceCtor;
    G_OBJECT_CLASS(klass)->finalize = ToolsCoreServiceDtor;
    G_OBJECT_CLASS(klass)->set_property = ToolsCoreServiceSetProperty;
    G_OBJECT_CLASS(klass)->get_property = ToolsCoreServiceGetProperty;
index bf998932117e0ac9c58aba9ad6a9928f6dc2c708..5172db3cb2278287c4ccd2e5ddf3c365f66f284e 100644 (file)
@@ -33,6 +33,9 @@
 #define TOOLSCORE_TYPE_SERVICE   ToolsCore_Service_get_type()
 #define TOOLSCORESERVICE_GET_CLASS(object) \
    (G_TYPE_INSTANCE_GET_CLASS((object), TOOLSCORE_TYPE_SERVICE, ToolsCoreServiceClass))
+#define TOOLSCORE_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),                   \
+                                                           TOOLSCORE_TYPE_SERVICE,  \
+                                                           ToolsCoreService))
 
 typedef struct ToolsCoreService {
    GObject        parent;