[glade/tintou/more-g-declare: 6/11] gladeui: Use G_DECLARE_DERIVABLE_TYPE for GladeCommand



commit 1be1d3eff2842f9762da0e3626314f9159ed9203
Author: Corentin Noël <corentin noel collabora com>
Date:   Fri Aug 16 16:49:13 2019 +0200

    gladeui: Use G_DECLARE_DERIVABLE_TYPE for GladeCommand
    
    Also adapt the internal subclasses and make it easier to read

 gladeui/glade-command.c | 458 +++++++++++++++++++++++-------------------------
 gladeui/glade-command.h |  31 +---
 2 files changed, 228 insertions(+), 261 deletions(-)
---
diff --git a/gladeui/glade-command.c b/gladeui/glade-command.c
index 6c47fad5..03a0a8a9 100644
--- a/gladeui/glade-command.c
+++ b/gladeui/glade-command.c
@@ -49,7 +49,7 @@
 #include "glade-app.h"
 #include "glade-name-context.h"
 
-struct _GladeCommandPrivate
+typedef struct _GladeCommandPrivate
 {
   GladeProject *project; /* The project this command is created for */
 
@@ -61,7 +61,7 @@ struct _GladeCommandPrivate
                        * the group id (id is needed only to ensure that
                        * consecutive groups dont get merged).
                        */
-};
+} GladeCommandPrivate;
 
 /* Concerning placeholders: we do not hold any reference to placeholders,
  * placeholders that are supplied by the backend are not reffed, placeholders
@@ -100,13 +100,11 @@ static void
 glade_command_finalize (GObject *obj)
 {
   GladeCommand *cmd = (GladeCommand *) obj;
-  g_return_if_fail (cmd != NULL);
+  GladeCommandPrivate *priv = glade_command_get_instance_private (cmd);
 
-  if (cmd->priv->description)
-    g_free (cmd->priv->description);
+  g_clear_pointer (&priv->description, g_free);
 
-  /* Call the base class dtor */
-  (*G_OBJECT_CLASS (glade_command_parent_class)->finalize) (obj);
+  G_OBJECT_CLASS (glade_command_parent_class)->finalize (obj);
 }
 
 static gboolean
@@ -124,15 +122,12 @@ glade_command_collapse_impl (GladeCommand *this_cmd, GladeCommand *other_cmd)
 static void
 glade_command_init (GladeCommand *command)
 {
-  command->priv = glade_command_get_instance_private (command);
 }
 
 static void
 glade_command_class_init (GladeCommandClass *klass)
 {
-  GObjectClass *object_class;
-
-  object_class = G_OBJECT_CLASS (klass);
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
   object_class->finalize = glade_command_finalize;
 
@@ -143,33 +138,9 @@ glade_command_class_init (GladeCommandClass *klass)
 }
 
 /* Macros for defining the derived command types */
-#define MAKE_TYPE(func, type, parent)                              \
-GType                                                              \
-func ## _get_type (void)                                           \
-{                                                                  \
-  static GType cmd_type = 0;                                       \
-                                                                   \
-  if (!cmd_type)                                                   \
-    {                                                              \
-      static const GTypeInfo info = {                              \
-          sizeof (type ## Class),                                  \
-          (GBaseInitFunc) NULL,                                    \
-          (GBaseFinalizeFunc) NULL,                                \
-          (GClassInitFunc) func ## _class_init,                    \
-          (GClassFinalizeFunc) NULL,                               \
-          NULL,                                                    \
-          sizeof (type),                                           \
-          0,                                                       \
-          (GInstanceInitFunc) NULL                                 \
-      };                                                           \
-                                                                   \
-      cmd_type = g_type_register_static (parent, #type, &info, 0); \
-    }                                                              \
-                                                                   \
-  return cmd_type;                                                 \
-}
-
-#define GLADE_MAKE_COMMAND(type, func)                               \
+#define GLADE_MAKE_COMMAND(type, func, upper_type)                   \
+G_DECLARE_FINAL_TYPE (type, func, GLADE, upper_type, GladeCommand)   \
+G_DEFINE_TYPE (type, func, GLADE_TYPE_COMMAND);                      \
 static gboolean                                                      \
 func ## _undo (GladeCommand *me);                                    \
 static gboolean                                                      \
@@ -181,37 +152,40 @@ func ## _unifies (GladeCommand *this_cmd, GladeCommand *other_cmd);  \
 static void                                                          \
 func ## _collapse (GladeCommand *this_cmd, GladeCommand *other_cmd); \
 static void                                                          \
-func ## _class_init (gpointer parent_tmp, gpointer notused)          \
+func ## _class_init (type ## Class *klass)                           \
 {                                                                    \
-  GladeCommandClass *parent = parent_tmp;                            \
-  GObjectClass* object_class;                                        \
-  object_class = G_OBJECT_CLASS (parent);                            \
-  parent->undo =  func ## _undo;                                     \
-  parent->execute =  func ## _execute;                               \
-  parent->unifies =  func ## _unifies;                               \
-  parent->collapse =  func ## _collapse;                             \
+  GladeCommandClass *command_class = GLADE_COMMAND_CLASS (klass);    \
+  GObjectClass* object_class = G_OBJECT_CLASS (klass);               \
+  command_class->undo =  func ## _undo;                              \
+  command_class->execute =  func ## _execute;                        \
+  command_class->unifies =  func ## _unifies;                        \
+  command_class->collapse =  func ## _collapse;                      \
   object_class->finalize = func ## _finalize;                        \
 }                                                                    \
-typedef struct {                                                     \
-  GladeCommandClass cmd;                                             \
-} type ## Class;                                                     \
-static MAKE_TYPE(func, type, GLADE_TYPE_COMMAND)
+static void                                                          \
+func ## _init (type *self)                                           \
+{                                                                    \
+}
 
 
 const gchar *
 glade_command_description (GladeCommand *command)
 {
+  GladeCommandPrivate *priv = glade_command_get_instance_private (command);
+
   g_return_val_if_fail (GLADE_IS_COMMAND (command), NULL);
 
-  return command->priv->description;
+  return priv->description;
 }
 
 gint
 glade_command_group_id (GladeCommand *command)
 {
+  GladeCommandPrivate *priv = glade_command_get_instance_private (command);
+
   g_return_val_if_fail (GLADE_IS_COMMAND (command), -1);
 
-  return command->priv->group_id;
+  return priv->group_id;
 }
 
 
@@ -259,12 +233,15 @@ glade_command_undo (GladeCommand *command)
 gboolean
 glade_command_unifies (GladeCommand *command, GladeCommand *other)
 {
+  GladeCommandPrivate *priv = glade_command_get_instance_private (command);
+  GladeCommandPrivate *other_priv = glade_command_get_instance_private (other);
+
   g_return_val_if_fail (command, FALSE);
 
   /* Cannot unify with a part of a command group.
    * Unify atomic commands only
    */
-  if (command->priv->group_id != 0 || (other && other->priv->group_id != 0))
+  if (priv->group_id != 0 || (other && other_priv->group_id != 0))
     return FALSE;
 
   return GLADE_COMMAND_GET_CLASS (command)->unifies (command, other);
@@ -338,12 +315,15 @@ glade_command_get_group_depth (void)
 static void
 glade_command_check_group (GladeCommand *cmd)
 {
+  GladeCommandPrivate *priv = glade_command_get_instance_private (cmd);
+
   g_return_if_fail (GLADE_IS_COMMAND (cmd));
+
   if (gc_group_description)
     {
-      cmd->priv->description =
-          (g_free (cmd->priv->description), g_strdup (gc_group_description));
-      cmd->priv->group_id = gc_group_id;
+      priv->description =
+          (g_free (priv->description), g_strdup (gc_group_description));
+      priv->group_id = gc_group_id;
     }
 }
 
@@ -351,26 +331,18 @@ glade_command_check_group (GladeCommand *cmd)
 /****************************************************/
 /*******  GLADE_COMMAND_PROPERTY_ENABLED      *******/
 /****************************************************/
-typedef struct
+struct _GladeCommandPropertyEnabled
 {
   GladeCommand parent;
+
   GladeProperty *property;
   gboolean old_enabled;
   gboolean new_enabled;
-} GladeCommandPropertyEnabled;
+};
 
 /* standard macros */
-GLADE_MAKE_COMMAND (GladeCommandPropertyEnabled, glade_command_property_enabled);
-#define GLADE_COMMAND_PROPERTY_ENABLED_TYPE       (glade_command_property_enabled_get_type ())
-#define GLADE_COMMAND_PROPERTY_ENABLED(o)         (G_TYPE_CHECK_INSTANCE_CAST \
-                                                   ((o), GLADE_COMMAND_PROPERTY_ENABLED_TYPE, \
-                                                    GladeCommandPropertyEnabled))
-#define GLADE_COMMAND_PROPERTY_ENABLED_CLASS(k)   (G_TYPE_CHECK_CLASS_CAST \
-                                                   ((k), GLADE_COMMAND_PROPERTY_ENABLED_TYPE, \
-                                                    GladeCommandPropertyEnabledClass))
-#define GLADE_IS_COMMAND_PROPERTY_ENABLED(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), 
GLADE_COMMAND_PROPERTY_ENABLED_TYPE))
-#define GLADE_IS_COMMAND_PROPERTY_ENABLED_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), 
GLADE_COMMAND_PROPERTY_ENABLED_TYPE))
-
+#define GLADE_TYPE_COMMAND_PROPERTY_ENABLED glade_command_property_enabled_get_type ()
+GLADE_MAKE_COMMAND (GladeCommandPropertyEnabled, glade_command_property_enabled, COMMAND_PROPERTY_ENABLED);
 
 static gboolean
 glade_command_property_enabled_execute (GladeCommand *cmd)
@@ -439,6 +411,7 @@ glade_command_property_enabled_collapse (GladeCommand *this_cmd,
                                          GladeCommand *other_cmd)
 {
   GladeCommandPropertyEnabled *this = GLADE_COMMAND_PROPERTY_ENABLED (this_cmd);
+  GladeCommandPrivate *this_priv = glade_command_get_instance_private (this_cmd);
   GladeCommandPropertyEnabled *other = GLADE_COMMAND_PROPERTY_ENABLED (other_cmd);
   GladeWidget *widget;
   GladePropertyDef *pdef;
@@ -448,14 +421,14 @@ glade_command_property_enabled_collapse (GladeCommand *this_cmd,
   widget = glade_property_get_widget (this->property);
   pdef   = glade_property_get_def (this->property);
 
-  g_free (this_cmd->priv->description);
+  g_free (this_priv->description);
   if (this->new_enabled)
-    this_cmd->priv->description =
+    this_priv->description =
       g_strdup_printf (_("Enabling property %s on widget %s"),
                        glade_property_def_get_name (pdef),
                        glade_widget_get_name (widget));
   else
-    this_cmd->priv->description =
+    this_priv->description =
       g_strdup_printf (_("Disabling property %s on widget %s"),
                        glade_property_def_get_name (pdef),
                        glade_widget_get_name (widget));
@@ -476,6 +449,7 @@ glade_command_set_property_enabled (GladeProperty *property,
 {
   GladeCommandPropertyEnabled *me;
   GladeCommand *cmd;
+  GladeCommandPrivate *cmd_priv;
   GladeWidget *widget;
   GladePropertyDef *pdef;
   gboolean old_enabled;
@@ -497,29 +471,30 @@ glade_command_set_property_enabled (GladeProperty *property,
   if (old_enabled == enabled)
     return;
 
-  me = g_object_new (GLADE_COMMAND_PROPERTY_ENABLED_TYPE, NULL);
+  me = g_object_new (GLADE_TYPE_COMMAND_PROPERTY_ENABLED, NULL);
   cmd = GLADE_COMMAND (me);
-  cmd->priv->project = glade_widget_get_project (widget);
+  cmd_priv = glade_command_get_instance_private (cmd);
+  cmd_priv->project = glade_widget_get_project (widget);
 
   me->property = g_object_ref (property);
   me->new_enabled = enabled;
   me->old_enabled = old_enabled;
 
   if (enabled)
-    cmd->priv->description =
+    cmd_priv->description =
       g_strdup_printf (_("Enabling property %s on widget %s"),
                        glade_property_def_get_name (pdef),
                        glade_widget_get_name (widget));
   else
-    cmd->priv->description =
+    cmd_priv->description =
       g_strdup_printf (_("Disabling property %s on widget %s"),
                        glade_property_def_get_name (pdef),
                        glade_widget_get_name (widget));
 
   glade_command_check_group (GLADE_COMMAND (me));
 
-  if (glade_command_property_enabled_execute (GLADE_COMMAND (me)))
-    glade_project_push_undo (cmd->priv->project, cmd);
+  if (glade_command_property_enabled_execute (cmd))
+    glade_project_push_undo (cmd_priv->project, cmd);
   else
     g_object_unref (G_OBJECT (me));
 }
@@ -531,21 +506,18 @@ glade_command_set_property_enabled (GladeProperty *property,
 /* create a new GladeCommandSetProperty class.  Objects of this class will
  * encapsulate a "set property" operation */
 
-typedef struct
+struct _GladeCommandSetProperty
 {
   GladeCommand parent;
+
   gboolean set_once;
   gboolean undo;
   GList *sdata;
-} GladeCommandSetProperty;
+};
 
 /* standard macros */
-GLADE_MAKE_COMMAND (GladeCommandSetProperty, glade_command_set_property);
-#define GLADE_COMMAND_SET_PROPERTY_TYPE         (glade_command_set_property_get_type ())
-#define GLADE_COMMAND_SET_PROPERTY(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), 
GLADE_COMMAND_SET_PROPERTY_TYPE, GladeCommandSetProperty))
-#define GLADE_COMMAND_SET_PROPERTY_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST ((k), 
GLADE_COMMAND_SET_PROPERTY_TYPE, GladeCommandSetPropertyClass))
-#define GLADE_IS_COMMAND_SET_PROPERTY(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), 
GLADE_COMMAND_SET_PROPERTY_TYPE))
-#define GLADE_IS_COMMAND_SET_PROPERTY_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), 
GLADE_COMMAND_SET_PROPERTY_TYPE))
+#define GLADE_TYPE_COMMAND_SET_PROPERTY glade_command_set_property_get_type ()
+GLADE_MAKE_COMMAND (GladeCommandSetProperty, glade_command_set_property, COMMAND_SET_PROPERTY);
 
 /* Undo the last "set property command" */
 static gboolean
@@ -561,6 +533,7 @@ glade_command_set_property_undo (GladeCommand *cmd)
 static gboolean
 glade_command_set_property_execute (GladeCommand *cmd)
 {
+  GladeCommandPrivate *priv = glade_command_get_instance_private (cmd);
   GladeCommandSetProperty *me = (GladeCommandSetProperty *) cmd;
   GList *l;
   gboolean success;
@@ -624,7 +597,7 @@ glade_command_set_property_execute (GladeCommand *cmd)
           GladeWidget *pwidget;
 
           if (pobject && (pwidget = glade_widget_get_from_gobject (pobject)))
-            glade_widget_ensure_name (pwidget, cmd->priv->project, TRUE);
+            glade_widget_ensure_name (pwidget, priv->project, TRUE);
         }
 
       success = glade_property_set_value (sdata->property, &new_value);
@@ -755,6 +728,8 @@ glade_command_set_property_collapse (GladeCommand *this_cmd,
                                      GladeCommand *other_cmd)
 {
   GladeCommandSetProperty *cmd1, *cmd2;
+  GladeCommandPrivate *this_priv = glade_command_get_instance_private (this_cmd);
+  GladeCommandPrivate *other_priv = glade_command_get_instance_private (other_cmd);
   GladeCommandSetPropData *pdata1, *pdata2;
   GladePropertyDef *pdef1, *pdef2;
   GList *list, *l;
@@ -788,9 +763,9 @@ glade_command_set_property_collapse (GladeCommand *this_cmd,
 
   /* Set the description
    */
-  g_free (this_cmd->priv->description);
-  this_cmd->priv->description = other_cmd->priv->description;
-  other_cmd->priv->description = NULL;
+  g_free (this_priv->description);
+  this_priv->description = other_priv->description;
+  other_priv->description = NULL;
 }
 
 
@@ -846,6 +821,7 @@ glade_command_set_properties_list (GladeProject *project, GList *props)
 {
   GladeCommandSetProperty *me;
   GladeCommand *cmd;
+  GladeCommandPrivate *priv;
   GladeCommandSetPropData *sdata;
   GList *list;
   gboolean success;
@@ -855,9 +831,10 @@ glade_command_set_properties_list (GladeProject *project, GList *props)
   g_return_if_fail (props);
 
   me = (GladeCommandSetProperty *)
-      g_object_new (GLADE_COMMAND_SET_PROPERTY_TYPE, NULL);
+      g_object_new (GLADE_TYPE_COMMAND_SET_PROPERTY, NULL);
   cmd = GLADE_COMMAND (me);
-  cmd->priv->project = project;
+  priv = glade_command_get_instance_private (cmd);
+  priv->project = project;
 
   /* Ref all props */
   for (list = props; list; list = list->next)
@@ -867,19 +844,19 @@ glade_command_set_properties_list (GladeProject *project, GList *props)
     }
 
   me->sdata = props;
-  cmd->priv->description = glade_command_set_property_description (me);
+  priv->description = glade_command_set_property_description (me);
 
   multiple = g_list_length (me->sdata) > 1;
   if (multiple)
-    glade_command_push_group ("%s", cmd->priv->description);
+    glade_command_push_group ("%s", priv->description);
 
-  glade_command_check_group (GLADE_COMMAND (me));
+  glade_command_check_group (cmd);
 
   /* Push onto undo stack only if it executes successfully. */
   success = glade_command_set_property_execute (cmd);
 
   if (success)
-    glade_project_push_undo (cmd->priv->project, cmd);
+    glade_project_push_undo (priv->project, cmd);
   else
     g_object_unref (G_OBJECT (me));
 
@@ -975,22 +952,18 @@ glade_command_set_property (GladeProperty * property, ...)
 
 /* create a new GladeCommandSetName class.  Objects of this class will
  * encapsulate a "set name" operation */
-typedef struct
+struct _GladeCommandSetName
 {
   GladeCommand parent;
 
   GladeWidget *widget;
   gchar *old_name;
   gchar *name;
-} GladeCommandSetName;
+};
 
 /* standard macros */
-GLADE_MAKE_COMMAND (GladeCommandSetName, glade_command_set_name);
-#define GLADE_COMMAND_SET_NAME_TYPE        (glade_command_set_name_get_type ())
-#define GLADE_COMMAND_SET_NAME(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), GLADE_COMMAND_SET_NAME_TYPE, 
GladeCommandSetName))
-#define GLADE_COMMAND_SET_NAME_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST ((k), GLADE_COMMAND_SET_NAME_TYPE, 
GladeCommandSetNameClass))
-#define GLADE_IS_COMMAND_SET_NAME(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), GLADE_COMMAND_SET_NAME_TYPE))
-#define GLADE_IS_COMMAND_SET_NAME_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GLADE_COMMAND_SET_NAME_TYPE))
+#define GLADE_TYPE_COMMAND_SET_NAME glade_command_set_name_get_type ()
+GLADE_MAKE_COMMAND (GladeCommandSetName, glade_command_set_name, COMMAND_SET_NAME);
 
 /* Undo the last "set name command" */
 static gboolean
@@ -1006,6 +979,7 @@ glade_command_set_name_undo (GladeCommand *cmd)
 static gboolean
 glade_command_set_name_execute (GladeCommand *cmd)
 {
+  GladeCommandPrivate *priv = glade_command_get_instance_private (cmd);
   GladeCommandSetName *me = GLADE_COMMAND_SET_NAME (cmd);
   char *tmp;
 
@@ -1013,7 +987,7 @@ glade_command_set_name_execute (GladeCommand *cmd)
   g_return_val_if_fail (me->widget != NULL, TRUE);
   g_return_val_if_fail (me->name != NULL, TRUE);
 
-  glade_project_set_widget_name (cmd->priv->project, me->widget, me->name);
+  glade_project_set_widget_name (priv->project, me->widget, me->name);
 
   tmp = me->old_name;
   me->old_name = me->name;
@@ -1070,6 +1044,7 @@ static void
 glade_command_set_name_collapse (GladeCommand *this_cmd,
                                  GladeCommand *other_cmd)
 {
+  GladeCommandPrivate *this_priv = glade_command_get_instance_private (this_cmd);
   GladeCommandSetName *nthis = GLADE_COMMAND_SET_NAME (this_cmd);
   GladeCommandSetName *nother = GLADE_COMMAND_SET_NAME (other_cmd);
 
@@ -1080,8 +1055,8 @@ glade_command_set_name_collapse (GladeCommand *this_cmd,
   nthis->old_name = nother->old_name;
   nother->old_name = NULL;
 
-  g_free (this_cmd->priv->description);
-  this_cmd->priv->description =
+  g_free (this_priv->description);
+  this_priv->description =
       g_strdup_printf (_("Renaming %s to %s"), nthis->name, nthis->old_name);
 }
 
@@ -1091,6 +1066,7 @@ glade_command_set_name (GladeWidget *widget, const gchar *name)
 {
   GladeCommandSetName *me;
   GladeCommand *cmd;
+  GladeCommandPrivate *priv;
 
   g_return_if_fail (GLADE_IS_WIDGET (widget));
   g_return_if_fail (name && name[0]);
@@ -1100,21 +1076,22 @@ glade_command_set_name (GladeWidget *widget, const gchar *name)
   if (!strcmp (glade_widget_get_name (widget), name))
     return;
 
-  me = g_object_new (GLADE_COMMAND_SET_NAME_TYPE, NULL);
+  me = g_object_new (GLADE_TYPE_COMMAND_SET_NAME, NULL);
   cmd = GLADE_COMMAND (me);
-  cmd->priv->project = glade_widget_get_project (widget);
+  priv = glade_command_get_instance_private (cmd);
+  priv->project = glade_widget_get_project (widget);
 
   me->widget = widget;
   me->name = g_strdup (name);
   me->old_name = g_strdup (glade_widget_get_name (widget));
 
-  cmd->priv->description =
+  priv->description =
       g_strdup_printf (_("Renaming %s to %s"), me->old_name, me->name);
 
-  glade_command_check_group (GLADE_COMMAND (me));
+  glade_command_check_group (cmd);
 
-  if (glade_command_set_name_execute (GLADE_COMMAND (me)))
-    glade_project_push_undo (cmd->priv->project, cmd);
+  if (glade_command_set_name_execute (cmd))
+    glade_project_push_undo (priv->project, cmd);
   else
     g_object_unref (G_OBJECT (me));
 }
@@ -1127,21 +1104,17 @@ glade_command_set_name (GladeWidget *widget, const gchar *name)
  * 
  *****************************************************************************/
 
-typedef struct
+struct _GladeCommandAddRemove
 {
   GladeCommand parent;
+
   GList *widgets;
   gboolean add;
   gboolean from_clipboard;
-} GladeCommandAddRemove;
-
+};
 
-GLADE_MAKE_COMMAND (GladeCommandAddRemove, glade_command_add_remove);
-#define GLADE_COMMAND_ADD_REMOVE_TYPE        (glade_command_add_remove_get_type ())
-#define GLADE_COMMAND_ADD_REMOVE(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), 
GLADE_COMMAND_ADD_REMOVE_TYPE, GladeCommandAddRemove))
-#define GLADE_COMMAND_ADD_REMOVE_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST ((k), GLADE_COMMAND_ADD_REMOVE_TYPE, 
GladeCommandAddRemoveClass))
-#define GLADE_IS_COMMAND_ADD_REMOVE(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), 
GLADE_COMMAND_ADD_REMOVE_TYPE))
-#define GLADE_IS_COMMAND_ADD_REMOVE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GLADE_COMMAND_ADD_REMOVE_TYPE))
+#define GLADE_TYPE_COMMAND_ADD_REMOVE glade_command_add_remove_get_type ()
+GLADE_MAKE_COMMAND (GladeCommandAddRemove, glade_command_add_remove, COMMAND_ADD_REMOVE);
 
 static void
 glade_command_placeholder_destroyed (GtkWidget *object, CommandData *cdata)
@@ -1220,6 +1193,7 @@ glade_command_add (GList            *widgets,
 {
   GladeCommandAddRemove *me;
   GladeCommand *cmd;
+  GladeCommandPrivate *priv;
   CommandData *cdata;
   GladeWidget *widget = NULL;
   GladeWidgetAdaptor *adaptor;
@@ -1229,8 +1203,9 @@ glade_command_add (GList            *widgets,
   g_return_if_fail (widgets && widgets->data);
   g_return_if_fail (parent == NULL || GLADE_IS_WIDGET (parent));
 
-  me = g_object_new (GLADE_COMMAND_ADD_REMOVE_TYPE, NULL);
+  me = g_object_new (GLADE_TYPE_COMMAND_ADD_REMOVE, NULL);
   cmd = GLADE_COMMAND (me);
+  priv = glade_command_get_instance_private (cmd);
   me->add = TRUE;
   me->from_clipboard = pasting;
 
@@ -1242,11 +1217,11 @@ glade_command_add (GList            *widgets,
   adaptor = glade_widget_get_adaptor (widget);
 
   if (placeholder && GWA_IS_TOPLEVEL (adaptor) == FALSE)
-    cmd->priv->project = glade_placeholder_get_project (placeholder);
+    priv->project = glade_placeholder_get_project (placeholder);
   else
-    cmd->priv->project = project;
+    priv->project = project;
 
-  GLADE_COMMAND (me)->priv->description =
+  priv->description =
       g_strdup_printf (_("Add %s"), g_list_length (widgets) == 1 ?
                        glade_widget_get_name (widget) : _("multiple"));
 
@@ -1308,13 +1283,13 @@ glade_command_add (GList            *widgets,
       me->widgets = g_list_prepend (me->widgets, cdata);
     }
 
-  glade_command_check_group (GLADE_COMMAND (me));
+  glade_command_check_group (cmd);
 
   /*
    * Push it onto the undo stack only on success
    */
   if (glade_command_add_remove_execute (cmd))
-    glade_project_push_undo (cmd->priv->project, cmd);
+    glade_project_push_undo (priv->project, cmd);
   else
     g_object_unref (G_OBJECT (me));
 
@@ -1374,6 +1349,8 @@ static void
 glade_command_remove (GList *widgets)
 {
   GladeCommandAddRemove *me;
+  GladeCommand *cmd;
+  GladeCommandPrivate *priv;
   GladeWidget *widget = NULL;
   GladeWidget *lock;
   CommandData *cdata;
@@ -1408,12 +1385,14 @@ glade_command_remove (GList *widgets)
         }
     }
 
-  me = g_object_new (GLADE_COMMAND_ADD_REMOVE_TYPE, NULL);
+  me = g_object_new (GLADE_TYPE_COMMAND_ADD_REMOVE, NULL);
   me->add = FALSE;
   me->from_clipboard = FALSE;
+  cmd = GLADE_COMMAND (me);
+  priv = glade_command_get_instance_private (cmd);
 
-  GLADE_COMMAND (me)->priv->project = glade_widget_get_project (widget);
-  GLADE_COMMAND (me)->priv->description = g_strdup ("dummy");
+  priv->project = glade_widget_get_project (widget);
+  priv->description = g_strdup ("dummy");
 
   if (g_list_length (widgets) == 1)
     glade_command_push_group (_("Remove %s"),
@@ -1434,8 +1413,8 @@ glade_command_remove (GList *widgets)
         g_list_foreach (cdata->reffed, (GFunc) g_object_ref, NULL);
 
       /* If we're removing the template widget, then we need to unset it as template */
-      if (glade_project_get_template (GLADE_COMMAND (me)->priv->project) == widget)
-        glade_command_set_project_template (GLADE_COMMAND (me)->priv->project, NULL);
+      if (glade_project_get_template (priv->project) == widget)
+        glade_command_set_project_template (priv->project, NULL);
 
       /* Undoably unset any object properties that may point to the removed object */
       glade_command_delete_prop_refs (widget);
@@ -1465,11 +1444,10 @@ glade_command_remove (GList *widgets)
 
   g_assert (widget);
 
-  glade_command_check_group (GLADE_COMMAND (me));
+  glade_command_check_group (cmd);
 
-  if (glade_command_add_remove_execute (GLADE_COMMAND (me)))
-    glade_project_push_undo (GLADE_COMMAND (me)->priv->project,
-                             GLADE_COMMAND (me));
+  if (glade_command_add_remove_execute (cmd))
+    glade_project_push_undo (priv->project, cmd);
   else
     g_object_unref (G_OBJECT (me));
 
@@ -1497,13 +1475,14 @@ glade_command_transfer_props (GladeWidget *gnew, GList *saved_props)
 static gboolean
 glade_command_add_execute (GladeCommandAddRemove *me)
 {
+  GladeCommandPrivate *priv = glade_command_get_instance_private ((GladeCommand *) me);
   CommandData *cdata;
   GList *list, *l, *saved_props;
   gchar *special_child_type;
 
   if (me->widgets)
     {
-      glade_project_selection_clear (GLADE_COMMAND (me)->priv->project, FALSE);
+      glade_project_selection_clear (priv->project, FALSE);
 
       for (list = me->widgets; list && list->data; list = list->next)
         {
@@ -1618,23 +1597,23 @@ glade_command_add_execute (GladeCommandAddRemove *me)
                 }
             }
 
-          glade_project_add_object (GLADE_COMMAND (me)->priv->project,
+          glade_project_add_object (priv->project,
                                     glade_widget_get_object (cdata->widget));
 
           for (l = cdata->reffed; l; l = l->next)
             {
               GladeWidget *reffed = l->data;
-              glade_project_add_object (GLADE_COMMAND (me)->priv->project,
+              glade_project_add_object (priv->project,
                                         glade_widget_get_object (reffed));
             }
 
-          glade_project_selection_add (GLADE_COMMAND (me)->priv->project, 
+          glade_project_selection_add (priv->project, 
                                        glade_widget_get_object (cdata->widget), FALSE);
 
           glade_widget_show (cdata->widget);
         }
 
-      glade_project_queue_selection_changed (GLADE_COMMAND (me)->priv->project);
+      glade_project_queue_selection_changed (priv->project);
     }
   return TRUE;
 }                               /* end of glade_command_add_execute() */
@@ -1642,6 +1621,7 @@ glade_command_add_execute (GladeCommandAddRemove *me)
 static gboolean
 glade_command_remove_execute (GladeCommandAddRemove *me)
 {
+  GladeCommandPrivate *priv = glade_command_get_instance_private ((GladeCommand *) me);
   CommandData *cdata;
   GladeWidget *reffed;
   GList *list, *l;
@@ -1684,13 +1664,13 @@ glade_command_remove_execute (GladeCommandAddRemove *me)
           cdata->props_recorded = TRUE;
         }
 
-      glade_project_remove_object (GLADE_COMMAND (me)->priv->project,
+      glade_project_remove_object (priv->project,
                                    glade_widget_get_object (cdata->widget));
 
       for (l = cdata->reffed; l; l = l->next)
         {
           reffed = l->data;
-          glade_project_remove_object (GLADE_COMMAND (me)->priv->project,
+          glade_project_remove_object (priv->project,
                                        glade_widget_get_object (reffed));
         }
 
@@ -2048,7 +2028,7 @@ typedef enum
   GLADE_CHANGE
 } GladeAddType;
 
-typedef struct
+struct _GladeCommandAddSignal
 {
   GladeCommand parent;
 
@@ -2058,15 +2038,11 @@ typedef struct
   GladeSignal *new_signal;
 
   GladeAddType type;
-} GladeCommandAddSignal;
+};
 
 /* standard macros */
-GLADE_MAKE_COMMAND (GladeCommandAddSignal, glade_command_add_signal);
-#define GLADE_COMMAND_ADD_SIGNAL_TYPE        (glade_command_add_signal_get_type ())
-#define GLADE_COMMAND_ADD_SIGNAL(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), 
GLADE_COMMAND_ADD_SIGNAL_TYPE, GladeCommandAddSignal))
-#define GLADE_COMMAND_ADD_SIGNAL_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST ((k), GLADE_COMMAND_ADD_SIGNAL_TYPE, 
GladeCommandAddSignalClass))
-#define GLADE_IS_COMMAND_ADD_SIGNAL(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), 
GLADE_COMMAND_ADD_SIGNAL_TYPE))
-#define GLADE_IS_COMMAND_ADD_SIGNAL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GLADE_COMMAND_ADD_SIGNAL_TYPE))
+#define GLADE_TYPE_COMMAND_ADD_SIGNAL glade_command_add_signal_get_type ()
+GLADE_MAKE_COMMAND (GladeCommandAddSignal, glade_command_add_signal, COMMAND_ADD_SIGNAL);
 
 static void
 glade_command_add_signal_finalize (GObject *obj)
@@ -2139,8 +2115,9 @@ glade_command_add_remove_change_signal (GladeWidget *glade_widget,
                                         GladeAddType type)
 {
   GladeCommandAddSignal *me = GLADE_COMMAND_ADD_SIGNAL
-      (g_object_new (GLADE_COMMAND_ADD_SIGNAL_TYPE, NULL));
+      (g_object_new (GLADE_TYPE_COMMAND_ADD_SIGNAL, NULL));
   GladeCommand *cmd = GLADE_COMMAND (me);
+  GladeCommandPrivate *priv = glade_command_get_instance_private (cmd);
 
   /* we can only add/remove a signal to a widget that has been wrapped by a GladeWidget */
   g_assert (glade_widget != NULL);
@@ -2151,17 +2128,17 @@ glade_command_add_remove_change_signal (GladeWidget *glade_widget,
   me->signal = glade_signal_clone (signal);
   me->new_signal = new_signal ? glade_signal_clone (new_signal) : NULL;
 
-  cmd->priv->project = glade_widget_get_project (glade_widget);
-  cmd->priv->description =
+  priv->project = glade_widget_get_project (glade_widget);
+  priv->description =
       g_strdup_printf (type == GLADE_ADD ? _("Add signal handler %s") :
                        type == GLADE_REMOVE ? _("Remove signal handler %s") :
                        _("Change signal handler %s"), 
                        glade_signal_get_handler ((GladeSignal *)signal));
 
-  glade_command_check_group (GLADE_COMMAND (me));
+  glade_command_check_group (cmd);
 
   if (glade_command_add_signal_execute (cmd))
-    glade_project_push_undo (cmd->priv->project, cmd);
+    glade_project_push_undo (priv->project, cmd);
   else
     g_object_unref (G_OBJECT (me));
 }
@@ -2220,9 +2197,10 @@ glade_command_change_signal (GladeWidget *glade_widget,
  * 
  *****************************************************************************/
 
-typedef struct
+struct _GladeCommandSetI18n
 {
   GladeCommand parent;
+
   GladeProperty *property;
   gboolean translatable;
   gchar *context;
@@ -2230,15 +2208,10 @@ typedef struct
   gboolean old_translatable;
   gchar *old_context;
   gchar *old_comment;
-} GladeCommandSetI18n;
-
+};
 
-GLADE_MAKE_COMMAND (GladeCommandSetI18n, glade_command_set_i18n);
-#define GLADE_COMMAND_SET_I18N_TYPE        (glade_command_set_i18n_get_type ())
-#define GLADE_COMMAND_SET_I18N(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), GLADE_COMMAND_SET_I18N_TYPE, 
GladeCommandSetI18n))
-#define GLADE_COMMAND_SET_I18N_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST ((k), GLADE_COMMAND_SET_I18N_TYPE, 
GladeCommandSetI18nClass))
-#define GLADE_IS_COMMAND_SET_I18N(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), GLADE_COMMAND_SET_I18N_TYPE))
-#define GLADE_IS_COMMAND_SET_I18N_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GLADE_COMMAND_SET_I18N_TYPE))
+#define GLADE_TYPE_COMMAND_SET_I18N glade_command_set_i18n_get_type ()
+GLADE_MAKE_COMMAND (GladeCommandSetI18n, glade_command_set_i18n, COMMAND_SET_I18N);
 
 static gboolean
 glade_command_set_i18n_execute (GladeCommand *cmd)
@@ -2350,6 +2323,8 @@ glade_command_set_i18n (GladeProperty *property,
                         const gchar *comment)
 {
   GladeCommandSetI18n *me;
+  GladeCommand *cmd;
+  GladeCommandPrivate *priv;
 
   g_return_if_fail (property);
 
@@ -2360,7 +2335,7 @@ glade_command_set_i18n (GladeProperty *property,
     return;
 
   /* load up the command */
-  me = g_object_new (GLADE_COMMAND_SET_I18N_TYPE, NULL);
+  me = g_object_new (GLADE_TYPE_COMMAND_SET_I18N, NULL);
   me->property = property;
   me->translatable = translatable;
   me->context = g_strdup (context);
@@ -2369,16 +2344,16 @@ glade_command_set_i18n (GladeProperty *property,
   me->old_context = g_strdup (glade_property_i18n_get_context (property));
   me->old_comment = g_strdup (glade_property_i18n_get_comment (property));
 
-  GLADE_COMMAND (me)->priv->project = 
-    glade_widget_get_project (glade_property_get_widget (property));
-  GLADE_COMMAND (me)->priv->description =
-      g_strdup_printf (_("Setting i18n metadata"));;
+  cmd = GLADE_COMMAND (me);
+  priv = glade_command_get_instance_private (cmd);
+  priv->project = glade_widget_get_project (glade_property_get_widget (property));
+  priv->description = g_strdup_printf (_("Setting i18n metadata"));
 
-  glade_command_check_group (GLADE_COMMAND (me));
+  glade_command_check_group (cmd);
 
   /* execute the command and push it on the stack if successful */
-  if (glade_command_set_i18n_execute (GLADE_COMMAND (me)))
-    glade_project_push_undo (GLADE_COMMAND (me)->priv->project, GLADE_COMMAND (me));
+  if (glade_command_set_i18n_execute (cmd))
+    glade_project_push_undo (priv->project, cmd);
   else
     g_object_unref (G_OBJECT (me));
 }
@@ -2389,21 +2364,17 @@ glade_command_set_i18n (GladeProperty *property,
  * 
  *****************************************************************************/
 
-typedef struct
+struct _GladeCommandLock
 {
   GladeCommand parent;
+
   GladeWidget *widget;
   GladeWidget *locked;
   gboolean locking;
-} GladeCommandLock;
-
+};
 
-GLADE_MAKE_COMMAND (GladeCommandLock, glade_command_lock);
-#define GLADE_COMMAND_LOCK_TYPE        (glade_command_lock_get_type ())
-#define GLADE_COMMAND_LOCK(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), GLADE_COMMAND_LOCK_TYPE, 
GladeCommandLock))
-#define GLADE_COMMAND_LOCK_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST ((k), GLADE_COMMAND_LOCK_TYPE, 
GladeCommandLockClass))
-#define GLADE_IS_COMMAND_LOCK(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), GLADE_COMMAND_LOCK_TYPE))
-#define GLADE_IS_COMMAND_LOCK_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GLADE_COMMAND_LOCK_TYPE))
+#define GLADE_TYPE_COMMAND_LOCK glade_command_lock_get_type ()
+GLADE_MAKE_COMMAND (GladeCommandLock, glade_command_lock, COMMAND_LOCK);
 
 static gboolean
 glade_command_lock_execute (GladeCommand *cmd)
@@ -2476,30 +2447,34 @@ void
 glade_command_lock_widget (GladeWidget *widget, GladeWidget *locked)
 {
   GladeCommandLock *me;
+  GladeCommand *cmd;
+  GladeCommandPrivate *priv;
 
   g_return_if_fail (GLADE_IS_WIDGET (widget));
   g_return_if_fail (GLADE_IS_WIDGET (locked));
   g_return_if_fail (glade_widget_get_locker (locked) == NULL);
 
   /* load up the command */
-  me = g_object_new (GLADE_COMMAND_LOCK_TYPE, NULL);
+  me = g_object_new (GLADE_TYPE_COMMAND_LOCK, NULL);
   me->widget = g_object_ref (widget);
   me->locked = g_object_ref (locked);
   me->locking = TRUE;
 
-  GLADE_COMMAND (me)->priv->project = glade_widget_get_project (widget);
-  GLADE_COMMAND (me)->priv->description =
+  cmd = GLADE_COMMAND (me);
+  priv = glade_command_get_instance_private (cmd);
+  priv->project = glade_widget_get_project (widget);
+  priv->description =
     g_strdup_printf (_("Locking %s by widget %s"), 
                      glade_widget_get_name (locked),
                      glade_widget_get_name (widget));
 
-  glade_command_check_group (GLADE_COMMAND (me));
+  glade_command_check_group (cmd);
 
   /* execute the command and push it on the stack if successful 
    * this sets the actual policy
    */
-  if (glade_command_lock_execute (GLADE_COMMAND (me)))
-    glade_project_push_undo (GLADE_COMMAND (me)->priv->project, GLADE_COMMAND (me));
+  if (glade_command_lock_execute (cmd))
+    glade_project_push_undo (priv->project, cmd);
   else
     g_object_unref (G_OBJECT (me));
 
@@ -2518,27 +2493,31 @@ void
 glade_command_unlock_widget (GladeWidget *widget)
 {
   GladeCommandLock *me;
+  GladeCommand *cmd;
+  GladeCommandPrivate *priv;
 
   g_return_if_fail (GLADE_IS_WIDGET (widget));
   g_return_if_fail (GLADE_IS_WIDGET (glade_widget_get_locker (widget)));
 
   /* load up the command */
-  me = g_object_new (GLADE_COMMAND_LOCK_TYPE, NULL);
+  me = g_object_new (GLADE_TYPE_COMMAND_LOCK, NULL);
   me->widget = g_object_ref (glade_widget_get_locker (widget));
   me->locked = g_object_ref (widget);
   me->locking = FALSE;
 
-  GLADE_COMMAND (me)->priv->project = glade_widget_get_project (widget);
-  GLADE_COMMAND (me)->priv->description =
+  cmd = GLADE_COMMAND (me);
+  priv = glade_command_get_instance_private (cmd);
+  priv->project = glade_widget_get_project (widget);
+  priv->description =
     g_strdup_printf (_("Unlocking %s"), glade_widget_get_name (widget));
 
-  glade_command_check_group (GLADE_COMMAND (me));
+  glade_command_check_group (cmd);
 
   /* execute the command and push it on the stack if successful 
    * this sets the actual policy
    */
-  if (glade_command_lock_execute (GLADE_COMMAND (me)))
-    glade_project_push_undo (GLADE_COMMAND (me)->priv->project, GLADE_COMMAND (me));
+  if (glade_command_lock_execute (cmd))
+    glade_project_push_undo (priv->project, cmd);
   else
     g_object_unref (G_OBJECT (me));
 
@@ -2550,29 +2529,27 @@ glade_command_unlock_widget (GladeWidget *widget)
  * This command sets the target version of a GladeProject
  * 
  *****************************************************************************/
-typedef struct
+struct _GladeCommandTarget
 {
   GladeCommand parent;
+
   gchar       *catalog;
   gint         old_major;
   gint         old_minor;
   gint         new_major;
   gint         new_minor;
-} GladeCommandTarget;
+};
 
-GLADE_MAKE_COMMAND (GladeCommandTarget, glade_command_target);
-#define GLADE_COMMAND_TARGET_TYPE        (glade_command_target_get_type ())
-#define GLADE_COMMAND_TARGET(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), GLADE_COMMAND_TARGET_TYPE, 
GladeCommandTarget))
-#define GLADE_COMMAND_TARGET_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST ((k), GLADE_COMMAND_TARGET_TYPE, 
GladeCommandTargetClass))
-#define GLADE_IS_COMMAND_TARGET(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), GLADE_COMMAND_TARGET_TYPE))
-#define GLADE_IS_COMMAND_TARGET_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GLADE_COMMAND_TARGET_TYPE))
+#define GLADE_TYPE_COMMAND_TARGET glade_command_target_get_type ()
+GLADE_MAKE_COMMAND (GladeCommandTarget, glade_command_target, COMMAND_TARGET);
 
 static gboolean
 glade_command_target_execute (GladeCommand *cmd)
 {
+  GladeCommandPrivate *priv = glade_command_get_instance_private (cmd);
   GladeCommandTarget *me = (GladeCommandTarget *) cmd;
 
-  glade_project_set_target_version (cmd->priv->project,
+  glade_project_set_target_version (priv->project,
                                     me->catalog,
                                     me->new_major,
                                     me->new_minor);
@@ -2583,9 +2560,10 @@ glade_command_target_execute (GladeCommand *cmd)
 static gboolean
 glade_command_target_undo (GladeCommand *cmd)
 {
+  GladeCommandPrivate *priv = glade_command_get_instance_private (cmd);
   GladeCommandTarget *me = (GladeCommandTarget *) cmd;
 
-  glade_project_set_target_version (cmd->priv->project,
+  glade_project_set_target_version (priv->project,
                                     me->catalog,
                                     me->old_major,
                                     me->old_minor);
@@ -2638,6 +2616,7 @@ glade_command_target_unifies (GladeCommand *this_cmd, GladeCommand *other_cmd)
 static void
 glade_command_target_collapse (GladeCommand *this_cmd, GladeCommand *other_cmd)
 {
+  GladeCommandPrivate *this_priv = glade_command_get_instance_private (this_cmd);
   GladeCommandTarget *this;
   GladeCommandTarget *other;
 
@@ -2650,8 +2629,8 @@ glade_command_target_collapse (GladeCommand *this_cmd, GladeCommand *other_cmd)
   this->new_major = other->new_major;
   this->new_minor = other->new_minor;
 
-  g_free (this_cmd->priv->description);
-  this_cmd->priv->description =
+  g_free (this_priv->description);
+  this_priv->description =
     g_strdup_printf (_("Setting target version of '%s' to %d.%d"), 
                      this->catalog, this->new_major, this->new_minor);
 
@@ -2673,6 +2652,8 @@ glade_command_set_project_target  (GladeProject *project,
                                    gint          minor)
 {
   GladeCommandTarget *me;
+  GladeCommand *cmd;
+  GladeCommandPrivate *priv;
   gint old_major = 0;
   gint old_minor = 0;
 
@@ -2682,10 +2663,12 @@ glade_command_set_project_target  (GladeProject *project,
   g_return_if_fail (minor >= 0);
 
   /* load up the command */
-  me = g_object_new (GLADE_COMMAND_TARGET_TYPE, NULL);
-  GLADE_COMMAND (me)->priv->project = project;
-
+  me = g_object_new (GLADE_TYPE_COMMAND_TARGET, NULL);
   me->catalog = g_strdup (catalog);
+  
+  cmd = GLADE_COMMAND (me);
+  priv = glade_command_get_instance_private (cmd);
+  priv->project = project;
 
   glade_project_get_target_version (project, me->catalog, &old_major, &old_minor);
 
@@ -2694,17 +2677,17 @@ glade_command_set_project_target  (GladeProject *project,
   me->old_major = old_major;
   me->old_minor = old_minor;
 
-  GLADE_COMMAND (me)->priv->description =
+  priv->description =
     g_strdup_printf (_("Setting target version of '%s' to %d.%d"), 
                      me->catalog, me->new_major, me->new_minor);
 
-  glade_command_check_group (GLADE_COMMAND (me));
+  glade_command_check_group (cmd);
 
   /* execute the command and push it on the stack if successful 
    * this sets the actual policy
    */
-  if (glade_command_target_execute (GLADE_COMMAND (me)))
-    glade_project_push_undo (GLADE_COMMAND (me)->priv->project, GLADE_COMMAND (me));
+  if (glade_command_target_execute (cmd))
+    glade_project_push_undo (priv->project, cmd);
   else
     g_object_unref (G_OBJECT (me));
 }
@@ -2716,7 +2699,7 @@ glade_command_set_project_target  (GladeProject *project,
  *****************************************************************************/
 typedef gchar *(*DescriptionNewFunc) (GladeCommand *);
 
-typedef struct
+struct _GladeCommandProperty
 {
   GladeCommand parent;
 
@@ -2724,14 +2707,10 @@ typedef struct
   DescriptionNewFunc description_new;  /* Used to update command description */
   GValue old_value;
   GValue new_value;
-} GladeCommandProperty;
+};
 
-GLADE_MAKE_COMMAND (GladeCommandProperty, glade_command_property);
-#define GLADE_COMMAND_PROPERTY_TYPE        (glade_command_property_get_type ())
-#define GLADE_COMMAND_PROPERTY(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), GLADE_COMMAND_PROPERTY_TYPE, 
GladeCommandProperty))
-#define GLADE_COMMAND_PROPERTY_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST ((k), GLADE_COMMAND_PROPERTY_TYPE, 
GladeCommandPropertyClass))
-#define GLADE_IS_COMMAND_PROPERTY(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), GLADE_COMMAND_PROPERTY_TYPE))
-#define GLADE_IS_COMMAND_PROPERTY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GLADE_COMMAND_PROPERTY_TYPE))
+#define GLADE_TYPE_COMMAND_PROPERTY glade_command_property_get_type ()
+GLADE_MAKE_COMMAND (GladeCommandProperty, glade_command_property, COMMAND_PROPERTY);
 
 /* Return true if a == b, this could be exported in glade_utils */
 static gboolean
@@ -2786,16 +2765,22 @@ glade_command_property_compare (GValue *a, GValue *b)
 static gboolean
 glade_command_property_execute (GladeCommand *cmd)
 {
+  GladeCommandPrivate *priv = glade_command_get_instance_private (cmd);
   GladeCommandProperty *me = (GladeCommandProperty *) cmd;
-  g_object_set_property (G_OBJECT (cmd->priv->project), me->property_id, &me->new_value);
+
+  g_object_set_property (G_OBJECT (priv->project), me->property_id, &me->new_value);
+
   return TRUE;
 }
 
 static gboolean
 glade_command_property_undo (GladeCommand *cmd)
 {
+  GladeCommandPrivate *priv = glade_command_get_instance_private (cmd);
   GladeCommandProperty *me = (GladeCommandProperty *) cmd;
-  g_object_set_property (G_OBJECT (cmd->priv->project), me->property_id, &me->old_value);
+
+  g_object_set_property (G_OBJECT (priv->project), me->property_id, &me->old_value);
+
   return TRUE;
 }
 
@@ -2841,15 +2826,16 @@ glade_command_property_unifies (GladeCommand *this_cmd, GladeCommand *other_cmd)
 static void
 glade_command_property_update_description (GladeCommand *cmd)
 {
+  GladeCommandPrivate *priv = glade_command_get_instance_private (cmd);
   GladeCommandProperty *me = (GladeCommandProperty *) cmd;
 
-  g_free (cmd->priv->description);
+  g_free (priv->description);
   
   if (me->description_new)
-    cmd->priv->description = me->description_new (cmd);
+    priv->description = me->description_new (cmd);
   else
-    cmd->priv->description = g_strdup_printf (_("Setting project's %s property"),
-                                              me->property_id);
+    priv->description = g_strdup_printf (_("Setting project's %s property"),
+                                         me->property_id);
 }
 
 static void
@@ -2887,6 +2873,8 @@ glade_command_set_project_property (GladeProject       *project,
                                     GValue             *new_value)
 {
   GladeCommandProperty *me;
+  GladeCommand *cmd;
+  GladeCommandPrivate *priv;
   GValue old_value = G_VALUE_INIT;
 
   g_value_init (&old_value, G_VALUE_TYPE (new_value));
@@ -2898,8 +2886,10 @@ glade_command_set_project_property (GladeProject       *project,
       return;
     }
 
-  me = g_object_new (GLADE_COMMAND_PROPERTY_TYPE, NULL);
-  GLADE_COMMAND (me)->priv->project = project;
+  me = g_object_new (GLADE_TYPE_COMMAND_PROPERTY, NULL);
+  cmd = GLADE_COMMAND (me);
+  priv = glade_command_get_instance_private (cmd);
+  priv->project = project;
 
   me->description_new = description_new;
   me->property_id = g_intern_static_string (property_id);
@@ -2911,15 +2901,15 @@ glade_command_set_project_property (GladeProject       *project,
   g_value_init (&me->new_value, G_VALUE_TYPE (new_value));
   g_value_copy (new_value, &me->new_value);
 
-  glade_command_property_update_description (GLADE_COMMAND (me));
+  glade_command_property_update_description (cmd);
     
-  glade_command_check_group (GLADE_COMMAND (me));
+  glade_command_check_group (cmd);
 
   /* execute the command and push it on the stack if successful 
    * this sets the actual policy
    */
-  if (glade_command_property_execute (GLADE_COMMAND (me)))
-    glade_project_push_undo (GLADE_COMMAND (me)->priv->project, GLADE_COMMAND (me));
+  if (glade_command_property_execute (cmd))
+    glade_project_push_undo (priv->project, cmd);
   else
     g_object_unref (G_OBJECT (me));
 }
diff --git a/gladeui/glade-command.h b/gladeui/glade-command.h
index 0531acbf..67e2debf 100644
--- a/gladeui/glade-command.h
+++ b/gladeui/glade-command.h
@@ -10,17 +10,8 @@
 
 G_BEGIN_DECLS
 
-
-#define GLADE_TYPE_COMMAND            (glade_command_get_type ())
-#define GLADE_COMMAND(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLADE_TYPE_COMMAND, GladeCommand))
-#define GLADE_COMMAND_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GLADE_TYPE_COMMAND, 
GladeCommandClass))
-#define GLADE_IS_COMMAND(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLADE_TYPE_COMMAND))
-#define GLADE_IS_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLADE_TYPE_COMMAND))
-#define GLADE_COMMAND_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GLADE_TYPE_COMMAND, 
GladeCommandClass))
-
-typedef struct _GladeCommand        GladeCommand;
-typedef struct _GladeCommandClass   GladeCommandClass;
-typedef struct _GladeCommandPrivate GladeCommandPrivate;
+#define GLADE_TYPE_COMMAND glade_command_get_type ()
+G_DECLARE_DERIVABLE_TYPE (GladeCommand, glade_command, GLADE, COMMAND, GObject)
 
 typedef struct _GladeCommandSetPropData GladeCommandSetPropData;
 
@@ -40,13 +31,6 @@ struct _GladeCommandSetPropData {
   GValue        *old_value;
 };
 
-struct _GladeCommand
-{
-  GObject parent;
-
-  GladeCommandPrivate *priv;
-};
-
 struct _GladeCommandClass
 {
   GObjectClass parent_class;
@@ -56,22 +40,15 @@ struct _GladeCommandClass
   gboolean (* unifies)     (GladeCommand *command, GladeCommand *other);
   void     (* collapse)    (GladeCommand *command, GladeCommand *other);
 
-  void   (* glade_reserved1)   (void);
-  void   (* glade_reserved2)   (void);
-  void   (* glade_reserved3)   (void);
-  void   (* glade_reserved4)   (void);
+  gpointer padding[4];
 };
 
-
-
-GType                 glade_command_get_type             (void);
-
 void                  glade_command_push_group           (const gchar       *fmt,
                                                           ...) G_GNUC_PRINTF (1, 2);
 void                  glade_command_pop_group            (void);
 gint                  glade_command_get_group_depth      (void);
 
-const gchar *glade_command_description          (GladeCommand      *command);
+const gchar          *glade_command_description          (GladeCommand      *command);
 gint                  glade_command_group_id             (GladeCommand      *command);
 gboolean              glade_command_execute              (GladeCommand      *command);
 gboolean              glade_command_undo                 (GladeCommand      *command);


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