[glade/glade-3-8] Backporting GladeBaseEditor fixes from master



commit 7b0652362075622b59b0e58e9fc470d46620bad7
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date:   Mon Apr 4 17:53:31 2011 +0900

    Backporting GladeBaseEditor fixes from master

 gladeui/glade-base-editor.c | 3536 ++++++++++++++++++++++---------------------
 1 files changed, 1785 insertions(+), 1751 deletions(-)
---
diff --git a/gladeui/glade-base-editor.c b/gladeui/glade-base-editor.c
index 5bd5e85..c63a3df 100644
--- a/gladeui/glade-base-editor.c
+++ b/gladeui/glade-base-editor.c
@@ -1,4 +1,3 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
 /*
  * Copyright (C) 2006 Juan Pablo Ugarte.
  *
@@ -43,1778 +42,1809 @@
 
 typedef enum
 {
-	GLADE_BASE_EDITOR_GTYPE,
-	GLADE_BASE_EDITOR_CLASS_NAME,
-	GLADE_BASE_EDITOR_TYPES_N_COLUMNS
-}GladeBaseEditorChildEnum;
+  GLADE_BASE_EDITOR_GTYPE,
+  GLADE_BASE_EDITOR_CLASS_NAME,
+  GLADE_BASE_EDITOR_TYPES_N_COLUMNS
+} GladeBaseEditorChildEnum;
 
 typedef enum
 {
-	GLADE_BASE_EDITOR_GWIDGET,
-	GLADE_BASE_EDITOR_OBJECT,
-	GLADE_BASE_EDITOR_TYPE_NAME,
-	GLADE_BASE_EDITOR_NAME,
-	GLADE_BASE_EDITOR_CHILD_TYPES,
-	GLADE_BASE_EDITOR_N_COLUMNS
-}GladeBaseEditorEnum;
-
-typedef struct {
-	GType         parent_type;
-	GtkTreeModel *children;
+  GLADE_BASE_EDITOR_GWIDGET,
+  GLADE_BASE_EDITOR_OBJECT,
+  GLADE_BASE_EDITOR_TYPE_NAME,
+  GLADE_BASE_EDITOR_NAME,
+  GLADE_BASE_EDITOR_CHILD_TYPES,
+  GLADE_BASE_EDITOR_N_COLUMNS
+} GladeBaseEditorEnum;
+
+typedef enum {
+  ADD_ROOT = 0,
+  ADD_SIBLING,
+  ADD_CHILD
+} GladeBaseEditorAddMode;
+
+typedef struct
+{
+  GType parent_type;
+  GtkTreeModel *children;
 } ChildTypeTab;
 
 struct _GladeBaseEditorPrivate
 {
-	GladeWidget *gcontainer; /* The container we are editing */
-	
-	/* Editor UI */
-	GtkSizeGroup *group;
-	GtkWidget *paned, *table, *treeview, *main_scroll, *notebook;
-	GtkWidget *remove_button;
-	GladeSignalEditor *signal_editor;
-
-	GList *child_types;
-	
-	GtkTreeModel *model;
-	GladeProject *project;
-	
-	/* Add button data */
-	GType add_type;
-	gboolean add_as_child;
-	
-	/* Temporal variables */
-	GtkTreeIter iter; /* used in idle functions */
-	gint row;
-	
-	gboolean updating_treeview;
-
-	guint properties_idle;
+  GladeWidget *gcontainer;      /* The container we are editing */
+
+  /* Editor UI */
+  GtkWidget *paned, *table, *treeview, *main_scroll, *notebook;
+  GtkWidget *remove_button;
+  GladeSignalEditor *signal_editor;
+
+  GList *child_types;
+
+  GtkTreeModel *model;
+  GladeProject *project;
+
+  /* Add button data */
+  GType add_type;
+
+  /* Temporal variables */
+  GtkTreeIter iter;             /* used in idle functions */
+  gint row;
+
+  gboolean updating_treeview;
+
+  GtkSizeGroup *group;
+
+  guint properties_idle;
 };
 
-enum {
-	SIGNAL_CHILD_SELECTED,
-	SIGNAL_CHANGE_TYPE,
-	SIGNAL_GET_DISPLAY_NAME,
-	SIGNAL_BUILD_CHILD,
-	SIGNAL_DELETE_CHILD,
-	SIGNAL_MOVE_CHILD,
-	LAST_SIGNAL
+enum
+{
+  SIGNAL_CHILD_SELECTED,
+  SIGNAL_CHANGE_TYPE,
+  SIGNAL_GET_DISPLAY_NAME,
+  SIGNAL_BUILD_CHILD,
+  SIGNAL_DELETE_CHILD,
+  SIGNAL_MOVE_CHILD,
+  LAST_SIGNAL
 };
 
-enum {
-	PROP_0,
-	PROP_CONTAINER,
+enum
+{
+  PROP_0,
+  PROP_CONTAINER,
+  N_PROPERTIES
 };
 
+static GParamSpec *properties[N_PROPERTIES];
+static guint glade_base_editor_signals[LAST_SIGNAL] = { 0 };
 
-static guint glade_base_editor_signals [LAST_SIGNAL] = { 0 };
 static GtkVBoxClass *parent_class = NULL;
 
-static void glade_base_editor_set_container   (GladeBaseEditor *editor,
-					       GObject *container);
-static void glade_base_editor_block_callbacks (GladeBaseEditor *editor,
-					       gboolean block);
+static void glade_base_editor_set_container (GladeBaseEditor * editor,
+                                             GObject * container);
+static void glade_base_editor_block_callbacks (GladeBaseEditor * editor,
+                                               gboolean block);
 
 
 static void
-reset_child_types (GladeBaseEditor *editor)
+reset_child_types (GladeBaseEditor * editor)
 {
-	GList *l;
-	ChildTypeTab *tab;
+  GList *l;
+  ChildTypeTab *tab;
 
-	for (l = editor->priv->child_types; l; l = l->next)
-	{
-		tab = l->data;
-		g_object_unref (tab->children);
-		g_free (tab);
-	}
-	g_list_free (editor->priv->child_types);
-	editor->priv->child_types = NULL;
+  for (l = editor->priv->child_types; l; l = l->next)
+    {
+      tab = l->data;
+      g_object_unref (tab->children);
+      g_free (tab);
+    }
+  g_list_free (editor->priv->child_types);
+  editor->priv->child_types = NULL;
 }
 
 
 static gint
-sort_type_by_hierarchy (ChildTypeTab *a, ChildTypeTab *b)
+sort_type_by_hierarchy (ChildTypeTab * a, ChildTypeTab * b)
 {
-	if (g_type_is_a (a->parent_type, b->parent_type))
-		return -1;
-	
-	return 1;
+  if (g_type_is_a (a->parent_type, b->parent_type))
+    return -1;
+
+  return 1;
 }
 
 static GtkTreeModel *
-get_children_model_for_type (GladeBaseEditor *editor, GType type)
+get_children_model_for_type (GladeBaseEditor * editor, GType type)
 {
-	GList *l;
-	for (l = editor->priv->child_types; l; l = l->next)
-	{
-		ChildTypeTab *tab = l->data;
-		if (g_type_is_a (type, tab->parent_type))
-			return tab->children;
-	}
-	return NULL;
+  GList *l;
+  for (l = editor->priv->child_types; l; l = l->next)
+    {
+      ChildTypeTab *tab = l->data;
+      if (g_type_is_a (type, tab->parent_type))
+        return tab->children;
+    }
+  return NULL;
 }
 
 static GtkTreeModel *
-get_children_model_for_child_type (GladeBaseEditor *editor, GType type)
+get_children_model_for_child_type (GladeBaseEditor * editor, GType type)
 {
-	GList *l;
-	GtkTreeModel *model = NULL;
+  GList *l;
+  GtkTreeModel *model = NULL;
 
-	/* Get deep derived classes first and work up the sorted heirarchy */
-	for (l = g_list_last (editor->priv->child_types); model == NULL && l; l = l->prev)
-	{
-		ChildTypeTab *tab = l->data;
-		GtkTreeIter   iter;
-		GType         iter_type;
+  /* Get deep derived classes first and work up the sorted heirarchy */
+  for (l = g_list_last (editor->priv->child_types); model == NULL && l;
+       l = l->prev)
+    {
+      ChildTypeTab *tab = l->data;
+      GtkTreeIter iter;
+      GType iter_type;
 
-		if (!gtk_tree_model_get_iter_first (tab->children, &iter))
-			continue;
+      if (!gtk_tree_model_get_iter_first (tab->children, &iter))
+        continue;
 
-		do 
-		{
-			gtk_tree_model_get (tab->children, &iter,
-					    GLADE_BASE_EDITOR_GTYPE, &iter_type,
-					    -1);	
+      do
+        {
+          gtk_tree_model_get (tab->children, &iter,
+                              GLADE_BASE_EDITOR_GTYPE, &iter_type, -1);
 
-			/* Find exact match types in this case */
-			if (iter_type == type)
-				model = tab->children;
+          /* Find exact match types in this case */
+          if (iter_type == type)
+            model = tab->children;
 
-		} while (model == NULL &&
-			 gtk_tree_model_iter_next (tab->children, &iter));
-	}
+        }
+      while (model == NULL && gtk_tree_model_iter_next (tab->children, &iter));
+    }
 
-	return model;
+  return model;
 }
 
 static gboolean
-glade_base_editor_get_type_info (GladeBaseEditor *e,
-				 GtkTreeIter *retiter,
-				 GType child_type,
-				 ...)
-{
-	GtkTreeModel *model;
-	GtkTreeIter iter;
-	GType type;
-	
-	model = get_children_model_for_child_type (e, child_type);
-
-	if (!model || gtk_tree_model_get_iter_first (model, &iter) == FALSE)
-		return FALSE;
-	
-	do
-	{
-		gtk_tree_model_get (model, &iter,
-				    GLADE_BASE_EDITOR_GTYPE, &type,
-				    -1);
+glade_base_editor_get_type_info (GladeBaseEditor * e,
+                                 GtkTreeIter * retiter, GType child_type, ...)
+{
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  GType type;
+
+  model = get_children_model_for_child_type (e, child_type);
+
+  if (!model || gtk_tree_model_get_iter_first (model, &iter) == FALSE)
+    return FALSE;
+
+  do
+    {
+      gtk_tree_model_get (model, &iter, GLADE_BASE_EDITOR_GTYPE, &type, -1);
+
+      if (child_type == type)
+        {
+          va_list args;
+          va_start (args, child_type);
+          gtk_tree_model_get_valist (model, &iter, args);
+          va_end (args);
+          if (retiter)
+            *retiter = iter;
+          return TRUE;
+        }
+    }
+  while (gtk_tree_model_iter_next (model, &iter));
 
-		if (child_type == type)
-		{
-			va_list args;
-			va_start (args, child_type);
-			gtk_tree_model_get_valist (model, &iter, args);
-			va_end (args);
-			if (retiter) *retiter = iter;
-			return TRUE;
-		}
-	} while (gtk_tree_model_iter_next (model, &iter));
-	
-	return FALSE;
+  return FALSE;
 }
 
 
 static gchar *
-glade_base_editor_get_display_name (GladeBaseEditor *editor,
-				    GladeWidget *gchild)
+glade_base_editor_get_display_name (GladeBaseEditor * editor,
+                                    GladeWidget * gchild)
 {
-	gchar *retval;	
-	g_signal_emit (editor,
-		       glade_base_editor_signals[SIGNAL_GET_DISPLAY_NAME],
-		       0, gchild, &retval);
-	return retval;
+  gchar *retval;
+  g_signal_emit (editor,
+                 glade_base_editor_signals[SIGNAL_GET_DISPLAY_NAME],
+                 0, gchild, &retval);
+  return retval;
 }
 
 static void
-glade_base_editor_fill_store_real (GladeBaseEditor *e, 
-				   GladeWidget *gwidget,
-				   GtkTreeIter *parent)
-{
-	GObject *object = glade_widget_get_object (gwidget);
-	GList *children, *l;
-	GladeWidget *gparent = NULL;
-	GtkTreeIter iter;
-
-	if (parent)
-		gtk_tree_model_get (e->priv->model, parent,
-				    GLADE_BASE_EDITOR_GWIDGET, &gparent,
-				    -1);
-
-	
-	children = glade_widget_adaptor_get_children (gwidget->adaptor, object);
-	
-	for (l = children; l; l = l->next)
+glade_base_editor_fill_store_real (GladeBaseEditor * e,
+                                   GladeWidget * gwidget, GtkTreeIter * parent)
+{
+  GList *children, *l;
+  GtkTreeIter iter;
+
+  children = glade_widget_get_children (gwidget);
+
+  for (l = children; l; l = l->next)
+    {
+      GladeWidget *gchild;
+      GObject     *child = (GObject *) l->data;
+      gchar       *type_name = NULL, *name;
+
+      gchild = glade_widget_get_from_gobject (child);
+
+      /* Have to check parents here for compatibility (could be the parenting menuitem of this menu
+       * supports a menuitem...) */
+      if (glade_base_editor_get_type_info (e, NULL,
+					   G_OBJECT_TYPE (child),
+					   GLADE_BASE_EDITOR_CLASS_NAME,
+					   &type_name, -1))
 	{
-		GObject *child = (GObject*)l->data;
-		GladeWidget *gchild;
-		
-		if (child && (gchild = glade_widget_get_from_gobject (child)))
-		{
-			gchar *type_name = NULL, *name;
-						
-
-			/* Have to check parents here for compatibility (could be the parenting menuitem of this menu
-			 * supports a menuitem...) */
-			if (glade_base_editor_get_type_info (e, NULL,
-							     G_OBJECT_TYPE (child),
-							     GLADE_BASE_EDITOR_CLASS_NAME, &type_name,
-							     -1))
-			{
-				gtk_tree_store_append (GTK_TREE_STORE (e->priv->model), &iter, parent);
-				
-				name = glade_base_editor_get_display_name (e, gchild);
-				
-				gtk_tree_store_set (GTK_TREE_STORE (e->priv->model), &iter,
-						    GLADE_BASE_EDITOR_GWIDGET, gchild,
-						    GLADE_BASE_EDITOR_OBJECT, child,
-						    GLADE_BASE_EDITOR_TYPE_NAME, type_name,
-						    GLADE_BASE_EDITOR_NAME, name,
-						    GLADE_BASE_EDITOR_CHILD_TYPES, 
-						    get_children_model_for_child_type (e, G_OBJECT_TYPE (child)),
-						    -1);
-
-				glade_base_editor_fill_store_real (e, gchild, &iter);
-			
-				g_free (name);
-				g_free (type_name);
-			}
-			else
-				glade_base_editor_fill_store_real (e, gchild, parent);
-
-		}
+	  gtk_tree_store_append (GTK_TREE_STORE (e->priv->model), &iter, parent);
+
+	  name = glade_base_editor_get_display_name (e, gchild);
+
+	  gtk_tree_store_set (GTK_TREE_STORE (e->priv->model), &iter,
+			      GLADE_BASE_EDITOR_GWIDGET, gchild,
+			      GLADE_BASE_EDITOR_OBJECT, child,
+			      GLADE_BASE_EDITOR_TYPE_NAME, type_name,
+			      GLADE_BASE_EDITOR_NAME, name,
+			      GLADE_BASE_EDITOR_CHILD_TYPES,
+			      get_children_model_for_child_type (e, G_OBJECT_TYPE (child)),
+			      -1);
+
+	  glade_base_editor_fill_store_real (e, gchild, &iter);
+
+	  g_free (name);
+	  g_free (type_name);
 	}
-	
-	g_list_free (children);
+      else
+	glade_base_editor_fill_store_real (e, gchild, parent);
+    }
+
+  g_list_free (children);
 }
 
 static void
-glade_base_editor_fill_store (GladeBaseEditor *e)
+glade_base_editor_fill_store (GladeBaseEditor * e)
 {
-	gtk_tree_store_clear (GTK_TREE_STORE (e->priv->model));
-	gtk_tree_view_set_model (GTK_TREE_VIEW (e->priv->treeview), NULL);
-	glade_base_editor_fill_store_real (e, e->priv->gcontainer, NULL);
-	gtk_tree_view_set_model (GTK_TREE_VIEW (e->priv->treeview), e->priv->model);
+  gtk_tree_store_clear (GTK_TREE_STORE (e->priv->model));
+  gtk_tree_view_set_model (GTK_TREE_VIEW (e->priv->treeview), NULL);
+  glade_base_editor_fill_store_real (e, e->priv->gcontainer, NULL);
+  gtk_tree_view_set_model (GTK_TREE_VIEW (e->priv->treeview), e->priv->model);
 
-	gtk_tree_view_expand_all (GTK_TREE_VIEW (e->priv->treeview));
+  gtk_tree_view_expand_all (GTK_TREE_VIEW (e->priv->treeview));
 
 }
 
 static gboolean
-glade_base_editor_get_child_selected (GladeBaseEditor *e, GtkTreeIter *iter)
+glade_base_editor_get_child_selected (GladeBaseEditor * e, GtkTreeIter * iter)
 {
-	GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (e->priv->treeview));
-	return gtk_tree_selection_get_selected (sel, NULL, iter);
+  GtkTreeSelection *sel =
+      gtk_tree_view_get_selection (GTK_TREE_VIEW (e->priv->treeview));
+  return gtk_tree_selection_get_selected (sel, NULL, iter);
 }
 
 /* Forward declaration for glade_base_editor_project_widget_name_changed */
 static void
-glade_base_editor_project_widget_name_changed (GladeProject *project,
-					       GladeWidget  *widget,
-					       GladeBaseEditor *editor);
+glade_base_editor_project_widget_name_changed (GladeProject * project,
+                                               GladeWidget * widget,
+                                               GladeBaseEditor * editor);
 
 
 static GladeWidget *
-glade_base_editor_delegate_build_child (GladeBaseEditor *editor,
-					GladeWidget     *parent,
-					GType            type)
+glade_base_editor_delegate_build_child (GladeBaseEditor * editor,
+                                        GladeWidget * parent, GType type)
 {
-	GladeWidget *child = NULL;
-	g_signal_emit (editor, glade_base_editor_signals[SIGNAL_BUILD_CHILD],
-		       0, parent, type, &child);
-	return child;
+  GladeWidget *child = NULL;
+  g_signal_emit (editor, glade_base_editor_signals[SIGNAL_BUILD_CHILD],
+                 0, parent, type, &child);
+  return child;
 }
 
 static gboolean
-glade_base_editor_delegate_delete_child (GladeBaseEditor *editor,
-					 GladeWidget     *parent,
-					 GladeWidget     *child)
+glade_base_editor_delegate_delete_child (GladeBaseEditor * editor,
+                                         GladeWidget * parent,
+                                         GladeWidget * child)
 {
-	gboolean retval;
+  gboolean retval;
 
-	g_signal_emit (editor, glade_base_editor_signals[SIGNAL_DELETE_CHILD],
-		       0, parent, child, &retval);
+  g_signal_emit (editor, glade_base_editor_signals[SIGNAL_DELETE_CHILD],
+                 0, parent, child, &retval);
 
-	return retval;
+  return retval;
 }
 
 static void
-glade_base_editor_name_activate (GtkEntry *entry, GladeWidget *gchild)
+glade_base_editor_name_activate (GtkEntry * entry, GladeWidget * gchild)
 {
-	const gchar *text = gtk_entry_get_text (GTK_ENTRY (entry));
-	GladeBaseEditor *editor = g_object_get_data (G_OBJECT (entry), "editor");
+  const gchar *text = gtk_entry_get_text (GTK_ENTRY (entry));
+  GladeBaseEditor *editor = g_object_get_data (G_OBJECT (entry), "editor");
 
-	if (text && text[0] && strcmp (glade_widget_get_name (gchild), text))
-	{
-		g_signal_handlers_block_by_func (gchild->project,
-						 glade_base_editor_project_widget_name_changed,
-						 editor);
-		glade_command_set_name (gchild, text);
-		g_signal_handlers_unblock_by_func (gchild->project,
-						   glade_base_editor_project_widget_name_changed,
-						   editor);
-	}
+  if (text && text[0] && strcmp (glade_widget_get_name (gchild), text))
+    {
+      g_signal_handlers_block_by_func (glade_widget_get_project (gchild),
+                                       glade_base_editor_project_widget_name_changed, editor);
+      glade_command_set_name (gchild, text);
+      g_signal_handlers_unblock_by_func (glade_widget_get_project (gchild),
+                                         glade_base_editor_project_widget_name_changed, editor);
+    }
 }
 
 static void
-glade_base_editor_remove_widget (GtkWidget *widget, gpointer container)
-{
-	gtk_container_remove (GTK_CONTAINER (container), widget);
+glade_base_editor_table_attach (GladeBaseEditor * e,
+                                GtkWidget * child1, GtkWidget * child2)
+{
+
+  GtkTable *table = GTK_TABLE (e->priv->table);
+  gint row = e->priv->row;
+       
+  if (child1)
+    {
+      gtk_table_attach (table, child1, 0, 1, row, row + 1,
+			GTK_EXPAND | GTK_FILL, GTK_FILL, 2, 0);
+      gtk_widget_show (child1);
+    }
+       
+  if (child2)
+    {
+      gtk_table_attach (table, child2, 1, 2, row, row + 1,
+			0, GTK_FILL, 2, 0);
+      gtk_widget_show (child2);
+      
+      gtk_size_group_add_widget (e->priv->group, child2);
+    }
+
+  e->priv->row++;
 }
 
 static void
-glade_base_editor_table_attach (GladeBaseEditor *e,
-				GtkWidget *child1,
-				GtkWidget *child2)
-{
-	GtkTable *table = GTK_TABLE (e->priv->table);
-	gint row = e->priv->row;
-	
-	if (child1)
-	{
-		gtk_table_attach (table, child1, 0, 1, row, row + 1,
-				  GTK_EXPAND | GTK_FILL, GTK_FILL, 2, 0);
-		gtk_widget_show (child1);
-	}
-	
-	if (child2)
-	{
-		gtk_table_attach (table, child2, 1, 2, row, row + 1,
-				  0, GTK_FILL, 2, 0);
-		gtk_widget_show (child2);
-
+glade_base_editor_clear (GladeBaseEditor * editor)
+{
+  GladeBaseEditorPrivate *e = editor->priv;
 
-		gtk_size_group_add_widget (e->priv->group, child2);
-	}
-	
-	e->priv->row++;
+  gtk_container_foreach (GTK_CONTAINER (e->table), 
+			 (GtkCallback)gtk_widget_destroy, NULL);
+  e->row = 0;
+  gtk_widget_set_sensitive (e->remove_button, FALSE);
+  glade_signal_editor_load_widget (e->signal_editor, NULL);
 }
 
 static void
-glade_base_editor_clear (GladeBaseEditor *editor)
+glade_base_editor_treeview_cursor_changed (GtkTreeView * treeview,
+                                           GladeBaseEditor * editor)
 {
-	GladeBaseEditorPrivate *e = editor->priv;
-	gtk_container_foreach (GTK_CONTAINER (e->table),
-			       glade_base_editor_remove_widget, e->table);
-	e->row = 0;
-	gtk_widget_set_sensitive (e->remove_button, FALSE);
-	glade_signal_editor_load_widget (e->signal_editor, NULL);
-}
+  GladeBaseEditorPrivate *e = editor->priv;
+  GtkTreeIter iter;
+  GObject *child;
+  GladeWidget *gchild;
 
-static void
-glade_base_editor_treeview_cursor_changed (GtkTreeView *treeview,
-					   GladeBaseEditor *editor)
-{
-	GladeBaseEditorPrivate *e = editor->priv;
-	GtkTreeIter iter;
-	GObject *child;
-	GladeWidget *gchild;
+  g_return_if_fail (GTK_IS_TREE_VIEW (treeview));
+
+  if (!glade_base_editor_get_child_selected (editor, &iter))
+    return;
 
-	g_return_if_fail (GTK_IS_TREE_VIEW (treeview));
+  glade_base_editor_clear (editor);
+  gtk_widget_set_sensitive (e->remove_button, TRUE);
 
-	if (!glade_base_editor_get_child_selected (editor, &iter))
-		return;
+  gtk_tree_model_get (e->model, &iter,
+                      GLADE_BASE_EDITOR_GWIDGET, &gchild,
+                      GLADE_BASE_EDITOR_OBJECT, &child, -1);
 
-	glade_base_editor_clear (editor);
-	gtk_widget_set_sensitive (e->remove_button, TRUE);
-	
-	gtk_tree_model_get (e->model, &iter,
-			    GLADE_BASE_EDITOR_GWIDGET, &gchild,
-			    GLADE_BASE_EDITOR_OBJECT, &child,
-			    -1);
+  g_object_unref (gchild);
+  g_object_unref (child);
 
-	/* Emit child-selected signal and let the user add the properties */
-	g_signal_emit (editor, glade_base_editor_signals[SIGNAL_CHILD_SELECTED],
-		       0, gchild);
+  /* Emit child-selected signal and let the user add the properties */
+  g_signal_emit (editor, glade_base_editor_signals[SIGNAL_CHILD_SELECTED],
+                 0, gchild);
 
-	/* Update Signal Editor */
-	glade_signal_editor_load_widget (e->signal_editor, gchild);
+  /* Update Signal Editor */
+  glade_signal_editor_load_widget (e->signal_editor, gchild);
 }
 
 static gboolean
 glade_base_editor_update_properties_idle (gpointer data)
 {
-	GladeBaseEditor *editor = (GladeBaseEditor *)data;
-	glade_base_editor_treeview_cursor_changed
-		(GTK_TREE_VIEW (editor->priv->treeview), editor);
-	editor->priv->properties_idle = 0;
-	return FALSE;
+  GladeBaseEditor *editor = (GladeBaseEditor *) data;
+  glade_base_editor_treeview_cursor_changed
+      (GTK_TREE_VIEW (editor->priv->treeview), editor);
+  editor->priv->properties_idle = 0;
+  return FALSE;
 }
 
 /* XXX Can we make it crisper by removing this idle ?? */
-static void 
-glade_base_editor_update_properties (GladeBaseEditor *editor)
+static void
+glade_base_editor_update_properties (GladeBaseEditor * editor)
 {
-	g_return_if_fail (GLADE_IS_BASE_EDITOR (editor));
+  g_return_if_fail (GLADE_IS_BASE_EDITOR (editor));
 
-	if (!editor->priv->properties_idle)
-		editor->priv->properties_idle = 
-			g_idle_add (glade_base_editor_update_properties_idle, editor);
+  if (!editor->priv->properties_idle)
+    editor->priv->properties_idle =
+        g_idle_add (glade_base_editor_update_properties_idle, editor);
 }
 
 static void
-glade_base_editor_set_cursor (GladeBaseEditor *e, GtkTreeIter *iter)
-{
-	GtkTreePath *path;
-	GtkTreeIter real_iter;
-	
-	if (iter == NULL &&
-	    glade_base_editor_get_child_selected (e, &real_iter))
-		iter = &real_iter;
-	
-	if (iter && (path = gtk_tree_model_get_path (e->priv->model, iter)))
-	{
-		gtk_tree_view_set_cursor (GTK_TREE_VIEW (e->priv->treeview), path, NULL, FALSE);
-		gtk_tree_path_free (path);
-	}
+glade_base_editor_set_cursor (GladeBaseEditor * e, GtkTreeIter * iter)
+{
+  GtkTreePath *path;
+  GtkTreeIter real_iter;
+
+  if (iter == NULL && glade_base_editor_get_child_selected (e, &real_iter))
+    iter = &real_iter;
+
+  if (iter && (path = gtk_tree_model_get_path (e->priv->model, iter)))
+    {
+      gtk_tree_view_set_cursor (GTK_TREE_VIEW (e->priv->treeview), path, NULL,
+                                FALSE);
+      gtk_tree_path_free (path);
+    }
 }
 
 static gboolean
-glade_base_editor_find_child_real (GladeBaseEditor *e,
-				   GladeWidget *gchild,
-				   GtkTreeIter *iter)
-{
-	GtkTreeModel *model = e->priv->model;
-	GtkTreeIter child_iter;
-	GladeWidget *child;
-	
-	do
-	{
-		gtk_tree_model_get (model, iter, GLADE_BASE_EDITOR_GWIDGET, &child, -1);
-	
-		if (child == gchild) return TRUE;
-
-		if (gtk_tree_model_iter_children (model, &child_iter, iter))
-			if (glade_base_editor_find_child_real (e, gchild, &child_iter))
-			{
-				*iter = child_iter;
-				return TRUE;
-			}
-	}
-	while (gtk_tree_model_iter_next (model, iter));
-	
-	return FALSE;
+glade_base_editor_find_child_real (GladeBaseEditor * e,
+                                   GladeWidget * gchild, GtkTreeIter * iter)
+{
+  GtkTreeModel *model = e->priv->model;
+  GtkTreeIter child_iter;
+  GladeWidget *child;
+
+  do
+    {
+      gtk_tree_model_get (model, iter, GLADE_BASE_EDITOR_GWIDGET, &child, -1);
+      g_object_unref (child);
+
+      if (child == gchild)
+        return TRUE;
+
+      if (gtk_tree_model_iter_children (model, &child_iter, iter))
+        if (glade_base_editor_find_child_real (e, gchild, &child_iter))
+          {
+            *iter = child_iter;
+            return TRUE;
+          }
+    }
+  while (gtk_tree_model_iter_next (model, iter));
+
+  return FALSE;
 }
 
 static gboolean
-glade_base_editor_find_child (GladeBaseEditor *e,
-			      GladeWidget *child,
-			      GtkTreeIter *iter)
+glade_base_editor_find_child (GladeBaseEditor * e,
+                              GladeWidget * child, GtkTreeIter * iter)
 {
-	if (gtk_tree_model_get_iter_first (e->priv->model, iter))
-		return glade_base_editor_find_child_real (e, child, iter);
-	
-	return FALSE;
+  if (gtk_tree_model_get_iter_first (e->priv->model, iter))
+    return glade_base_editor_find_child_real (e, child, iter);
+
+  return FALSE;
 }
 
 static void
-glade_base_editor_select_child (GladeBaseEditor *e,
-				GladeWidget *child)
+glade_base_editor_select_child (GladeBaseEditor * e, GladeWidget * child)
 {
-	GtkTreeIter iter;
-	
-	if (glade_base_editor_find_child (e, child, &iter))
-		glade_base_editor_set_cursor (e, &iter);
+  GtkTreeIter iter;
+
+  if (glade_base_editor_find_child (e, child, &iter))
+    glade_base_editor_set_cursor (e, &iter);
 }
 
 static void
-glade_base_editor_child_change_type (GladeBaseEditor *editor,
-				     GtkTreeIter *iter,
-				     GType type)
-{
-	GladeWidget *gchild, *gparent;
-	GObject *child;
-	gchar *class_name;
-	gboolean retval;
-
-	glade_base_editor_block_callbacks (editor, TRUE);
-	
-	/* Get old widget data */
-	gtk_tree_model_get (editor->priv->model, iter,
-			    GLADE_BASE_EDITOR_GWIDGET, &gchild,
-			    GLADE_BASE_EDITOR_OBJECT, &child,
-			    -1);
-	
-	if (type == G_OBJECT_TYPE (child)) return;
-
-	if (!gchild || !gchild->parent)
-		return;
-
-	gparent = gchild->parent;
-	
-	/* Start of glade-command */
-		
-	if (glade_base_editor_get_type_info (editor, NULL, 
-					     type,
-					     GLADE_BASE_EDITOR_CLASS_NAME, &class_name,
-					     -1))
-	{
-		glade_command_push_group (_("Setting object type on %s to %s"),
-					  glade_widget_get_name (gchild),
-					  class_name);
-		g_free (class_name);
-	}
-	else return;
-	
-	g_signal_emit (editor,
-		       glade_base_editor_signals [SIGNAL_CHANGE_TYPE],
-		       0, gchild, type, &retval);
+glade_base_editor_child_change_type (GladeBaseEditor * editor,
+                                     GtkTreeIter * iter, GType type)
+{
+  GladeWidget *gchild, *gparent;
+  GObject *child;
+  gchar *class_name;
+  gboolean retval;
 
-	/* End of glade-command */
-	glade_command_pop_group ();
-	
-	/* Update properties */
-	glade_base_editor_update_properties (editor);
-	
-	glade_base_editor_block_callbacks (editor, FALSE);
+  glade_base_editor_block_callbacks (editor, TRUE);
+
+  /* Get old widget data */
+  gtk_tree_model_get (editor->priv->model, iter,
+                      GLADE_BASE_EDITOR_GWIDGET, &gchild,
+                      GLADE_BASE_EDITOR_OBJECT, &child, -1);
+
+  g_object_unref (gchild);
+  g_object_unref (child);
+
+  if (type == G_OBJECT_TYPE (child) || 
+      !gchild || !glade_widget_get_parent (gchild))
+    {
+      glade_base_editor_block_callbacks (editor, FALSE);
+      return;
+    }
+
+  gparent = glade_widget_get_parent (gchild);
+
+  /* Start of glade-command */
+
+  if (glade_base_editor_get_type_info (editor, NULL,
+                                       type,
+                                       GLADE_BASE_EDITOR_CLASS_NAME,
+                                       &class_name, -1))
+    {
+      glade_command_push_group (_("Setting object type on %s to %s"),
+                                glade_widget_get_name (gchild), class_name);
+      g_free (class_name);
+    }
+  else
+    {
+      glade_base_editor_block_callbacks (editor, FALSE);
+      return;
+    }
+
+  g_signal_emit (editor,
+                 glade_base_editor_signals[SIGNAL_CHANGE_TYPE],
+                 0, gchild, type, &retval);
+
+  /* End of glade-command */
+  glade_command_pop_group ();
+
+  /* Update properties */
+  glade_base_editor_update_properties (editor);
+
+  glade_base_editor_block_callbacks (editor, FALSE);
 }
 
 static void
-glade_base_editor_type_changed (GtkComboBox *widget, GladeBaseEditor *e)
+glade_base_editor_type_changed (GtkComboBox * widget, GladeBaseEditor * e)
 {
-	GtkTreeIter iter, combo_iter;
-	GType type;
-	
-	if (!glade_base_editor_get_child_selected (e, &iter))
-		return;
-	
-	gtk_combo_box_get_active_iter (widget, &combo_iter);
-	
-	gtk_tree_model_get (gtk_combo_box_get_model (widget), &combo_iter,
-			    GLADE_BASE_EDITOR_GTYPE, &type, -1);
+  GtkTreeIter iter, combo_iter;
+  GType type;
+
+  if (!glade_base_editor_get_child_selected (e, &iter))
+    return;
+
+  gtk_combo_box_get_active_iter (widget, &combo_iter);
+
+  gtk_tree_model_get (gtk_combo_box_get_model (widget), &combo_iter,
+                      GLADE_BASE_EDITOR_GTYPE, &type, -1);
 
-	glade_base_editor_child_change_type (e, &iter, type);
+  glade_base_editor_child_change_type (e, &iter, type);
 }
 
 static void
-glade_base_editor_child_type_edited (GtkCellRendererText *cell,
-				     const gchar *path_string,
-				     const gchar *new_text,
-				     GladeBaseEditor *editor)
-{
-	GladeBaseEditorPrivate *e = editor->priv;
-	GtkTreeModel *child_class;
-	GtkTreePath *path;
-	GtkTreeIter iter, combo_iter;
-	GType type;
-	gchar *type_name;
-
-	path = gtk_tree_path_new_from_string (path_string);
-	gtk_tree_model_get_iter (e->model, &iter, path);
-	gtk_tree_model_get (e->model, &iter,
-			    GLADE_BASE_EDITOR_CLASS_NAME, &type_name,
-			    GLADE_BASE_EDITOR_CHILD_TYPES, &child_class,
-			    -1);
-
-	if (strcmp (type_name, new_text) == 0)
+glade_base_editor_child_type_edited (GtkCellRendererText * cell,
+                                     const gchar * path_string,
+                                     const gchar * new_text,
+                                     GladeBaseEditor * editor)
+{
+  GladeBaseEditorPrivate *e = editor->priv;
+  GtkTreeModel *child_class;
+  GtkTreePath *path;
+  GtkTreeIter iter, combo_iter;
+  GType type;
+  gchar *type_name = NULL;
+
+  path = gtk_tree_path_new_from_string (path_string);
+  gtk_tree_model_get_iter (e->model, &iter, path);
+  gtk_tree_path_free (path);
+
+  gtk_tree_model_get (e->model, &iter,
+                      GLADE_BASE_EDITOR_TYPE_NAME, &type_name,
+                      GLADE_BASE_EDITOR_CHILD_TYPES, &child_class, -1);
+
+  if (g_strcmp0 (type_name, new_text) == 0)
+    {
+      g_free (type_name);
+      g_object_unref (child_class);
+      return;
+    }
+
+  /* Lookup GType */
+  if (!gtk_tree_model_get_iter_first (child_class, &combo_iter))
+    {
+      g_free (type_name);
+      g_object_unref (child_class);
+      return;
+    }
+
+  g_free (type_name);
+
+  do
+    {
+      gtk_tree_model_get (child_class, &combo_iter,
+                          GLADE_BASE_EDITOR_GTYPE, &type,
+                          GLADE_BASE_EDITOR_CLASS_NAME, &type_name, -1);
+
+      if (strcmp (type_name, new_text) == 0)
 	{
-		g_free (type_name);
-		return;
+	  g_free (type_name);
+	  break;
 	}
-	
-	/* Lookup GType */
-	if (!gtk_tree_model_get_iter_first (child_class, &combo_iter))
-		return;
 
-	do
-	{
-		gtk_tree_model_get (child_class, &combo_iter,
-				    GLADE_BASE_EDITOR_GTYPE, &type,
-				    GLADE_BASE_EDITOR_CLASS_NAME, &type_name,
-				    -1);
-		
-		if (strcmp (type_name, new_text) == 0) break;
-		
-		g_free (type_name);
-	} while (gtk_tree_model_iter_next (child_class, &combo_iter));
-	
-	glade_base_editor_child_change_type (editor, &iter, type);
+      g_free (type_name);
+    }
+  while (gtk_tree_model_iter_next (child_class, &combo_iter));
+
+  glade_base_editor_child_change_type (editor, &iter, type);
 }
 
 static void
-glade_base_editor_reorder_children (GladeBaseEditor *editor, GtkTreeIter *child)
+glade_base_editor_reorder_children (GladeBaseEditor * editor,
+                                    GtkTreeIter * child)
 {
-	GtkTreeModel *model = editor->priv->model;
-	GladeWidget   *gchild;
-	GladeProperty *property;
-	GtkTreeIter parent, iter;
-	gint position = 0;
+  GtkTreeModel *model = editor->priv->model;
+  GladeWidget *gchild;
+  GladeProperty *property;
+  GtkTreeIter parent, iter;
+  gint position = 0;
 
-	if (gtk_tree_model_iter_parent (model, &parent, child))
-		gtk_tree_model_iter_children (model, &iter, &parent);
-	else
-		gtk_tree_model_get_iter_first (model, &iter);
+  if (gtk_tree_model_iter_parent (model, &parent, child))
+    gtk_tree_model_iter_children (model, &iter, &parent);
+  else
+    gtk_tree_model_get_iter_first (model, &iter);
 
-	do
-	{
-		gtk_tree_model_get (model, &iter, GLADE_BASE_EDITOR_GWIDGET, &gchild, -1);
-		
-		if ((property = glade_widget_get_property (gchild, "position")) != NULL)
-			glade_command_set_property (property, position);
-		position++;
-	} while (gtk_tree_model_iter_next (model, &iter));
+  do
+    {
+      gtk_tree_model_get (model, &iter, GLADE_BASE_EDITOR_GWIDGET, &gchild, -1);
+      g_object_unref (gchild);
+
+      if ((property = glade_widget_get_property (gchild, "position")) != NULL)
+        glade_command_set_property (property, position);
+      position++;
+    }
+  while (gtk_tree_model_iter_next (model, &iter));
 }
 
 static void
-glade_base_editor_add_child (GladeBaseEditor *editor,
-			     GType type,
-			     gboolean as_child)
-{
-	GladeBaseEditorPrivate *e = editor->priv;
-	GtkTreeIter iter, new_iter;
-	GladeWidget *gparent, *gchild_new;
-	gchar *name, *class_name;
-	gboolean selected_iter;
-	
-	glade_base_editor_block_callbacks (editor, TRUE);
-	
-	gparent = e->gcontainer;
-
-	if ((selected_iter = glade_base_editor_get_child_selected (editor, &iter)))
-	{
-
-		if (as_child)
-			gtk_tree_model_get (e->model, &iter,
-					    GLADE_BASE_EDITOR_GWIDGET, &gparent,
-					    -1);
-		else if (gtk_tree_model_iter_parent (e->model, &new_iter, &iter))
-		{
-			gtk_tree_model_get (e->model, &new_iter,
-					    GLADE_BASE_EDITOR_GWIDGET, &gparent,
-					    -1);
-		}
-	}
-
-	if (!glade_base_editor_get_type_info (editor, NULL, type,
-					      GLADE_BASE_EDITOR_CLASS_NAME, &class_name,
-					      -1)) 
-		return;
+glade_base_editor_add_child (GladeBaseEditor       *editor,
+                             GType                  type, 
+			     GladeBaseEditorAddMode add_mode)
+{
+  GladeBaseEditorPrivate *e = editor->priv;
+  GtkTreeIter iter, new_iter;
+  GladeWidget *gparent, *gchild_new;
+  gchar *name, *class_name;
+  gboolean selected_iter = FALSE;
 
-	glade_command_push_group (_("Add a %s to %s"), class_name, 
-				  glade_widget_get_name (gparent));
-	
-	/* Build Child */
-	gchild_new = glade_base_editor_delegate_build_child (editor, gparent, type);
+  glade_base_editor_block_callbacks (editor, TRUE);
 
-	if (gchild_new == NULL)
-	{
-		glade_command_pop_group ();
-		return;
-	}
+  gparent = e->gcontainer;
 
-	if (selected_iter)
+  if (add_mode != ADD_ROOT &&
+      (selected_iter = glade_base_editor_get_child_selected (editor, &iter)))
+    {
+      if (add_mode == ADD_CHILD)
 	{
-		if (as_child)
-			gtk_tree_store_append (GTK_TREE_STORE (editor->priv->model), &new_iter, &iter);
-		else
-			gtk_tree_store_insert_after (GTK_TREE_STORE (editor->priv->model), &new_iter,
-						     NULL, &iter);
+	  gtk_tree_model_get (e->model, &iter,
+			      GLADE_BASE_EDITOR_GWIDGET, &gparent, -1);
+	  g_object_unref (gparent);
 	}
-	else
-		gtk_tree_store_append (GTK_TREE_STORE (editor->priv->model), &new_iter, NULL);
-	
-	name = glade_base_editor_get_display_name (editor, gchild_new);
-	
-	gtk_tree_store_set (GTK_TREE_STORE (editor->priv->model), &new_iter, 
-			    GLADE_BASE_EDITOR_GWIDGET, gchild_new,
-			    GLADE_BASE_EDITOR_OBJECT, glade_widget_get_object (gchild_new),
-			    GLADE_BASE_EDITOR_TYPE_NAME, class_name,
-			    GLADE_BASE_EDITOR_NAME, name,
-			    GLADE_BASE_EDITOR_CHILD_TYPES, 
-			    get_children_model_for_type (editor, G_OBJECT_TYPE (gparent->object)),
-			    -1);
-
-	glade_base_editor_reorder_children (editor, &new_iter);
-	
-	gtk_tree_view_expand_all (GTK_TREE_VIEW (e->treeview));
-	glade_base_editor_set_cursor (editor, &new_iter);
-	
-	glade_command_pop_group ();
-	
-	glade_base_editor_block_callbacks (editor, FALSE);
-	
-	g_free (name);
-	g_free (class_name);
+      else if (add_mode == ADD_SIBLING &&
+	       gtk_tree_model_iter_parent (e->model, &new_iter, &iter))
+        {
+          gtk_tree_model_get (e->model, &new_iter,
+                              GLADE_BASE_EDITOR_GWIDGET, &gparent, -1);
+	  g_object_unref (gparent);
+        }
+    }
+
+  if (!glade_base_editor_get_type_info (editor, NULL, type,
+                                        GLADE_BASE_EDITOR_CLASS_NAME,
+                                        &class_name, -1))
+    return;
+
+  glade_command_push_group (_("Add a %s to %s"), class_name,
+                            glade_widget_get_name (gparent));
+
+  /* Build Child */
+  gchild_new = glade_base_editor_delegate_build_child (editor, gparent, type);
+
+  if (gchild_new == NULL)
+    {
+      glade_command_pop_group ();
+      return;
+    }
+
+  if (selected_iter)
+    {
+      if (add_mode == ADD_CHILD)
+        gtk_tree_store_append (GTK_TREE_STORE (editor->priv->model), &new_iter,
+                               &iter);
+      else
+        gtk_tree_store_insert_after (GTK_TREE_STORE (editor->priv->model),
+                                     &new_iter, NULL, &iter);
+    }
+  else
+    gtk_tree_store_append (GTK_TREE_STORE (editor->priv->model), &new_iter,
+                           NULL);
+
+  name = glade_base_editor_get_display_name (editor, gchild_new);
+
+  gtk_tree_store_set (GTK_TREE_STORE (editor->priv->model), &new_iter,
+                      GLADE_BASE_EDITOR_GWIDGET, gchild_new,
+                      GLADE_BASE_EDITOR_OBJECT,
+                      glade_widget_get_object (gchild_new),
+                      GLADE_BASE_EDITOR_TYPE_NAME, class_name,
+                      GLADE_BASE_EDITOR_NAME, name,
+                      GLADE_BASE_EDITOR_CHILD_TYPES,
+                      get_children_model_for_type (editor,
+                                                   G_OBJECT_TYPE (glade_widget_get_object (gparent))),
+		      -1);
+
+  glade_base_editor_reorder_children (editor, &new_iter);
+
+  gtk_tree_view_expand_all (GTK_TREE_VIEW (e->treeview));
+  glade_base_editor_set_cursor (editor, &new_iter);
+
+  glade_command_pop_group ();
+
+  glade_base_editor_block_callbacks (editor, FALSE);
+
+  g_free (name);
+  g_free (class_name);
 }
 
 
 static void
-glade_base_editor_add_item_activate (GtkMenuItem *menuitem, GladeBaseEditor *e)
+glade_base_editor_add_item_activate (GtkMenuItem * menuitem,
+                                     GladeBaseEditor * e)
 {
-	GObject *item = G_OBJECT (menuitem);
-	GType type = GPOINTER_TO_INT (g_object_get_data (item, "object_type"));
-	gboolean as_child = GPOINTER_TO_INT (g_object_get_data (item, "object_as_child"));
-	
-	glade_base_editor_add_child (e, type, as_child);
+  GObject *item = G_OBJECT (menuitem);
+  GType type = GPOINTER_TO_INT (g_object_get_data (item, "object_type"));
+  GladeBaseEditorAddMode add_mode =
+      GPOINTER_TO_INT (g_object_get_data (item, "object_add_mode"));
+
+  glade_base_editor_add_child (e, type, add_mode);
 }
 
 static GtkWidget *
-glade_base_editor_popup (GladeBaseEditor *editor,
-			 GladeWidget     *widget)
-{
-	GtkWidget    *popup, *item;
-	GtkTreeModel *model;
-	GtkTreeIter   iter;
-	GType         iter_type;
-	gchar        *label;
-	gchar        *class_name;
-
-	if ((model = get_children_model_for_child_type (editor, G_OBJECT_TYPE (widget->object))) == NULL)
-		model = get_children_model_for_type (editor, G_OBJECT_TYPE (editor->priv->gcontainer->object));
-
-	g_assert (model);
-		
-	popup = gtk_menu_new ();
-
-	if (gtk_tree_model_get_iter_first (model, &iter))
-		do
-		{
-			gtk_tree_model_get (model, &iter,
-					    GLADE_BASE_EDITOR_GTYPE, &iter_type,
-					    GLADE_BASE_EDITOR_CLASS_NAME, &class_name,
-					    -1);
-			
-			label = g_strdup_printf (_("Add %s item"), class_name);
-
-			item = gtk_menu_item_new_with_label (label);
-			gtk_widget_show (item);
-			
-			g_object_set_data (G_OBJECT (item), "object_type",
-					   GINT_TO_POINTER (iter_type));
-			
-			g_object_set_data (G_OBJECT (item), "object_as_child",
-					   GINT_TO_POINTER (FALSE));
-
-			g_signal_connect (item, "activate", 
-					  G_CALLBACK (glade_base_editor_add_item_activate), editor);
-			gtk_menu_shell_append (GTK_MENU_SHELL (popup), item);
-			
-			g_free (label);
-			g_free (class_name);
-
-		} while (gtk_tree_model_iter_next (model, &iter));
-
-
-	if ((model = get_children_model_for_type (editor, G_OBJECT_TYPE (widget->object))) &&
-	    gtk_tree_model_get_iter_first (model, &iter))
-		do
-		{
-			gtk_tree_model_get (model, &iter,
-					    GLADE_BASE_EDITOR_GTYPE, &iter_type,
-					    GLADE_BASE_EDITOR_CLASS_NAME, &class_name,
-					    -1);
-			
-			label = g_strdup_printf (_("Add child %s item"), class_name);
-
-			item = gtk_menu_item_new_with_label (label);
-			gtk_widget_show (item);
-			
-			g_object_set_data (G_OBJECT (item), "object_type",
-					   GINT_TO_POINTER (iter_type));
-			
-			g_object_set_data (G_OBJECT (item), "object_as_child",
-					   GINT_TO_POINTER (TRUE));
-
-			g_signal_connect (item, "activate", 
-					  G_CALLBACK (glade_base_editor_add_item_activate), editor);
-			gtk_menu_shell_append (GTK_MENU_SHELL (popup), item);
-			
-			g_free (label);
-			g_free (class_name);
-
-		} while (gtk_tree_model_iter_next (model, &iter));
-
-	return popup;
+glade_base_editor_popup (GladeBaseEditor * editor, GladeWidget * widget)
+{
+  GtkWidget *popup, *item;
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  GType iter_type;
+  gchar *label;
+  gchar *class_name;
+
+  if ((model =
+       get_children_model_for_child_type (editor,
+                                          G_OBJECT_TYPE (glade_widget_get_object (widget)))) == NULL)
+    model =
+      get_children_model_for_type (editor,
+				   G_OBJECT_TYPE (glade_widget_get_object (editor->priv->gcontainer)));
+
+  g_assert (model);
+
+  popup = gtk_menu_new ();
+
+  if (gtk_tree_model_get_iter_first (model, &iter))
+    do
+      {
+        gtk_tree_model_get (model, &iter,
+                            GLADE_BASE_EDITOR_GTYPE, &iter_type,
+                            GLADE_BASE_EDITOR_CLASS_NAME, &class_name, -1);
+
+        label = g_strdup_printf (_("Add %s"), class_name);
+
+        item = gtk_menu_item_new_with_label (label);
+        gtk_widget_show (item);
+
+        g_object_set_data (G_OBJECT (item), "object_type",
+                           GINT_TO_POINTER (iter_type));
+
+        g_object_set_data (G_OBJECT (item), "object_add_mode",
+                           GINT_TO_POINTER (ADD_SIBLING));
+
+        g_signal_connect (item, "activate",
+                          G_CALLBACK (glade_base_editor_add_item_activate),
+                          editor);
+        gtk_menu_shell_append (GTK_MENU_SHELL (popup), item);
+
+        g_free (label);
+        g_free (class_name);
+
+      }
+    while (gtk_tree_model_iter_next (model, &iter));
+
+
+  if ((model =
+       get_children_model_for_type (editor, G_OBJECT_TYPE (glade_widget_get_object (widget)))) &&
+      gtk_tree_model_get_iter_first (model, &iter))
+    do
+      {
+        gtk_tree_model_get (model, &iter,
+                            GLADE_BASE_EDITOR_GTYPE, &iter_type,
+                            GLADE_BASE_EDITOR_CLASS_NAME, &class_name, -1);
+
+        label = g_strdup_printf (_("Add child %s"), class_name);
+
+        item = gtk_menu_item_new_with_label (label);
+        gtk_widget_show (item);
+
+        g_object_set_data (G_OBJECT (item), "object_type",
+                           GINT_TO_POINTER (iter_type));
+
+        g_object_set_data (G_OBJECT (item), "object_add_mode",
+                           GINT_TO_POINTER (ADD_CHILD));
+
+        g_signal_connect (item, "activate",
+                          G_CALLBACK (glade_base_editor_add_item_activate),
+                          editor);
+        gtk_menu_shell_append (GTK_MENU_SHELL (popup), item);
+
+        g_free (label);
+        g_free (class_name);
+
+      }
+    while (gtk_tree_model_iter_next (model, &iter));
+
+  return popup;
 }
 
 static gint
-glade_base_editor_popup_handler (GtkWidget *treeview,
-				 GdkEventButton *event,
-				 GladeBaseEditor *e)
+glade_base_editor_popup_handler (GtkWidget * treeview,
+                                 GdkEventButton * event, GladeBaseEditor * e)
 {
-	GtkTreePath *path;
-	GtkWidget *popup;
+  GtkTreePath *path;
+  GtkWidget *popup;
 
-	if (glade_popup_is_popup_event (event))
-	{
-		if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (treeview),
-			(gint) event->x, (gint) event->y, &path, NULL, NULL, NULL))
-		{
-			GtkTreeIter iter;
-			GladeWidget *gwidget;
+  if (glade_popup_is_popup_event (event))
+    {
+      if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (treeview),
+                                         (gint) event->x, (gint) event->y,
+                                         &path, NULL, NULL, NULL))
+        {
+          GtkTreeIter iter;
+          GladeWidget *gwidget;
 
-			gtk_tree_view_set_cursor (GTK_TREE_VIEW (treeview), path, NULL, FALSE);
+          gtk_tree_view_set_cursor (GTK_TREE_VIEW (treeview), path, NULL,
+                                    FALSE);
 
-			gtk_tree_model_get_iter (e->priv->model, &iter, path);
-			gtk_tree_model_get (e->priv->model, &iter,
-					    GLADE_BASE_EDITOR_GWIDGET, &gwidget,
-					    -1);
+          gtk_tree_model_get_iter (e->priv->model, &iter, path);
+          gtk_tree_model_get (e->priv->model, &iter,
+                              GLADE_BASE_EDITOR_GWIDGET, &gwidget, -1);
 
-			
-			popup = glade_base_editor_popup (e, gwidget);
 
-			gtk_tree_path_free (path);
+          popup = glade_base_editor_popup (e, gwidget);
 
-			gtk_menu_popup (GTK_MENU (popup), NULL, NULL, NULL, NULL, 
-					event->button, event->time);
-		}
-		return TRUE;
-	}
+          gtk_tree_path_free (path);
+
+          gtk_menu_popup (GTK_MENU (popup), NULL, NULL, NULL, NULL,
+                          event->button, event->time);
+        }
+      return TRUE;
+    }
 
-	return FALSE;
+  return FALSE;
 }
 
 
 static void
-glade_base_editor_add_activate (GtkButton *button,  GladeBaseEditor *e)
+glade_base_editor_add_activate (GtkButton * button, GladeBaseEditor * e)
 {
-	if (e->priv->add_type)
-		glade_base_editor_add_child (e, e->priv->add_type, e->priv->add_as_child);
+  if (e->priv->add_type)
+    glade_base_editor_add_child (e, e->priv->add_type, ADD_ROOT);
 }
 
 static void
-glade_base_editor_delete_child (GladeBaseEditor *e)
+glade_base_editor_delete_child (GladeBaseEditor * e)
 {
-	GladeWidget *child, *gparent;
-	GtkTreeIter iter, parent;
+  GladeWidget *child, *gparent;
+  GtkTreeIter iter, parent;
 
-	if (!glade_base_editor_get_child_selected (e, &iter)) return;
+  if (!glade_base_editor_get_child_selected (e, &iter))
+    return;
 
-	gtk_tree_model_get (e->priv->model, &iter,
-			    GLADE_BASE_EDITOR_GWIDGET, &child, -1);
-		
-	if (gtk_tree_model_iter_parent (e->priv->model, &parent, &iter))
-		gtk_tree_model_get (e->priv->model, &parent,
-				    GLADE_BASE_EDITOR_GWIDGET, &gparent,
-				    -1);
-	else
-		gparent = e->priv->gcontainer;
-	
-	glade_command_push_group (_("Delete %s child from %s"),
-				  glade_widget_get_name (child),
-				  glade_widget_get_name (gparent));
-	
-	/* Emit delete-child signal */
-	glade_base_editor_delegate_delete_child (e, gparent, child);
+  gtk_tree_model_get (e->priv->model, &iter,
+                      GLADE_BASE_EDITOR_GWIDGET, &child, -1);
 
-	glade_command_pop_group ();
+  if (gtk_tree_model_iter_parent (e->priv->model, &parent, &iter))
+    gtk_tree_model_get (e->priv->model, &parent,
+                        GLADE_BASE_EDITOR_GWIDGET, &gparent, -1);
+  else
+    gparent = e->priv->gcontainer;
+
+  glade_command_push_group (_("Delete %s child from %s"),
+                            glade_widget_get_name (child),
+                            glade_widget_get_name (gparent));
+
+  /* Emit delete-child signal */
+  glade_base_editor_delegate_delete_child (e, gparent, child);
+
+  glade_command_pop_group ();
 }
 
 
 static gboolean
-glade_base_editor_treeview_key_press_event (GtkWidget *widget,
-					    GdkEventKey *event,
-					    GladeBaseEditor *e)
+glade_base_editor_treeview_key_press_event (GtkWidget * widget,
+                                            GdkEventKey * event,
+                                            GladeBaseEditor * e)
 {
-	if (event->keyval == GDK_Delete)
-		glade_base_editor_delete_child (e);
-	
-	return FALSE;
+  if (event->keyval == GDK_KEY_Delete)
+    glade_base_editor_delete_child (e);
+
+  return FALSE;
 }
 
 static void
-glade_base_editor_delete_activate (GtkButton *button, GladeBaseEditor *e)
+glade_base_editor_delete_activate (GtkButton * button, GladeBaseEditor * e)
 {
-	glade_base_editor_delete_child (e);
+  glade_base_editor_delete_child (e);
 }
 
 static gboolean
-glade_base_editor_is_child (GladeBaseEditor *e,
-			    GladeWidget *gchild,
-			    gboolean valid_type)
+glade_base_editor_is_child (GladeBaseEditor * e,
+                            GladeWidget * gchild, gboolean valid_type)
 {
-	GladeWidget *gcontainer = gchild->parent;
+  GladeWidget *gcontainer = glade_widget_get_parent (gchild);
 
-	if (!gcontainer)
-		return FALSE;
-	
-	if (valid_type)
-	{
-		GObject *child = glade_widget_get_object (gchild);
-				
-		if (gchild->internal ||
-		    glade_base_editor_get_type_info (e, NULL,
-						     G_OBJECT_TYPE (child),
-						     -1) == FALSE)
-			return FALSE;
-
-		gcontainer = e->priv->gcontainer;
-	}
-	else
-	{
-		GtkTreeIter iter;
-		if (glade_base_editor_get_child_selected (e, &iter))
-			gtk_tree_model_get (e->priv->model, &iter,
-					    GLADE_BASE_EDITOR_GWIDGET, &gcontainer,
-					    -1);
-		else
-			return FALSE;
-	}
-		
-	while ((gchild = glade_widget_get_parent (gchild)))
-		if (gchild == gcontainer) return TRUE;
+  if (!gcontainer)
+    return FALSE;
 
-	return FALSE;
+  if (valid_type)
+    {
+      GObject *child = glade_widget_get_object (gchild);
+
+      if (glade_widget_get_internal (gchild) ||
+          glade_base_editor_get_type_info (e, NULL,
+                                           G_OBJECT_TYPE (child), -1) == FALSE)
+        return FALSE;
+
+      gcontainer = e->priv->gcontainer;
+    }
+  else
+    {
+      GtkTreeIter iter;
+      if (glade_base_editor_get_child_selected (e, &iter))
+        gtk_tree_model_get (e->priv->model, &iter,
+                            GLADE_BASE_EDITOR_GWIDGET, &gcontainer, -1);
+      else
+        return FALSE;
+    }
+
+  while ((gchild = glade_widget_get_parent (gchild)))
+    if (gchild == gcontainer)
+      return TRUE;
+
+  return FALSE;
 }
 
 static gboolean
 glade_base_editor_update_treeview_idle (gpointer data)
 {
-	GladeBaseEditor *e = ((GladeBaseEditor *) data);
-	GList *selection = glade_project_selection_get (e->priv->project);
-	
-	glade_base_editor_block_callbacks (e, TRUE);
-	
-	glade_base_editor_fill_store (e);
-	glade_base_editor_clear (e);
-
-	gtk_tree_view_expand_all (GTK_TREE_VIEW (e->priv->treeview));
-	
-	if (selection)
-	{
-		GladeWidget *widget = glade_widget_get_from_gobject (G_OBJECT (selection->data)); 
-		if (glade_base_editor_is_child (e, widget, TRUE))
-			glade_base_editor_select_child (e, widget);
-	}
-	
-	e->priv->updating_treeview = FALSE;
-	glade_base_editor_block_callbacks (e, FALSE);
-	
-	return FALSE;
+  GladeBaseEditor *e = ((GladeBaseEditor *) data);
+  GList *selection = glade_project_selection_get (e->priv->project);
+
+  glade_base_editor_block_callbacks (e, TRUE);
+
+  glade_base_editor_fill_store (e);
+  glade_base_editor_clear (e);
+
+  gtk_tree_view_expand_all (GTK_TREE_VIEW (e->priv->treeview));
+
+  if (selection)
+    {
+      GladeWidget *widget =
+          glade_widget_get_from_gobject (G_OBJECT (selection->data));
+      if (glade_base_editor_is_child (e, widget, TRUE))
+        glade_base_editor_select_child (e, widget);
+    }
+
+  e->priv->updating_treeview = FALSE;
+  glade_base_editor_block_callbacks (e, FALSE);
+
+  return FALSE;
 }
 
 static void
-glade_base_editor_project_widget_name_changed (GladeProject *project,
-					       GladeWidget  *widget,
-					       GladeBaseEditor *editor)
+glade_base_editor_project_widget_name_changed (GladeProject * project,
+                                               GladeWidget * widget,
+                                               GladeBaseEditor * editor)
 {
-	GladeWidget *selected_child;
-	GtkTreeIter iter;
+  GladeWidget *selected_child;
+  GtkTreeIter iter;
 
-	if (glade_base_editor_get_child_selected (editor, &iter))
-	{
-		gtk_tree_model_get (editor->priv->model, &iter,
-				    GLADE_BASE_EDITOR_GWIDGET, &selected_child,
-				    -1);
-		if (widget == selected_child)
-			glade_base_editor_update_properties (editor);
+  if (glade_base_editor_get_child_selected (editor, &iter))
+    {
+      gtk_tree_model_get (editor->priv->model, &iter,
+                          GLADE_BASE_EDITOR_GWIDGET, &selected_child, -1);
+      if (widget == selected_child)
+        glade_base_editor_update_properties (editor);
 
-		g_object_unref (G_OBJECT (selected_child));
-	}
+      g_object_unref (G_OBJECT (selected_child));
+    }
 }
 
 static void
-glade_base_editor_project_closed (GladeProject *project, GladeBaseEditor *e)
+glade_base_editor_project_closed (GladeProject * project, GladeBaseEditor * e)
 {
-	glade_base_editor_set_container (e, NULL);
+  glade_base_editor_set_container (e, NULL);
 }
 
 static void
-glade_base_editor_reorder (GladeBaseEditor *editor, GtkTreeIter *iter)
-{
-	GladeBaseEditorPrivate *e = editor->priv;
-	GladeWidget *gchild, *gparent;
-	GtkTreeIter parent_iter;
-	gboolean retval;
-	
-	glade_command_push_group (_("Reorder %s's children"),
-				  glade_widget_get_name (e->gcontainer));
-	
-	gtk_tree_model_get (e->model, iter,
-			    GLADE_BASE_EDITOR_GWIDGET, &gchild, -1);
-	g_object_unref (G_OBJECT (gchild));
-
-	if (gtk_tree_model_iter_parent (e->model, &parent_iter, iter))
-	{
-		gtk_tree_model_get (e->model, &parent_iter,
-				    GLADE_BASE_EDITOR_GWIDGET, &gparent,
-				    -1);
-		g_object_unref (G_OBJECT (gparent));
-	}
-	else
-		gparent = e->gcontainer;
+glade_base_editor_reorder (GladeBaseEditor * editor, GtkTreeIter * iter)
+{
+  GladeBaseEditorPrivate *e = editor->priv;
+  GladeWidget *gchild, *gparent;
+  GtkTreeIter parent_iter;
+  gboolean retval;
 
-	g_signal_emit (editor, glade_base_editor_signals [SIGNAL_MOVE_CHILD],
-		       0, gparent, gchild, &retval);
+  glade_command_push_group (_("Reorder %s's children"),
+                            glade_widget_get_name (e->gcontainer));
 
-	if (retval)
-		glade_base_editor_reorder_children (editor, iter);
-	else
-	{
-		glade_base_editor_clear (editor);
-		glade_base_editor_fill_store (editor);
-		glade_base_editor_find_child (editor, gchild, &editor->priv->iter);
-	}
+  gtk_tree_model_get (e->model, iter, GLADE_BASE_EDITOR_GWIDGET, &gchild, -1);
+  g_object_unref (G_OBJECT (gchild));
+
+  if (gtk_tree_model_iter_parent (e->model, &parent_iter, iter))
+    {
+      gtk_tree_model_get (e->model, &parent_iter,
+                          GLADE_BASE_EDITOR_GWIDGET, &gparent, -1);
+      g_object_unref (G_OBJECT (gparent));
+    }
+  else
+    gparent = e->gcontainer;
+
+  g_signal_emit (editor, glade_base_editor_signals[SIGNAL_MOVE_CHILD],
+                 0, gparent, gchild, &retval);
 
-	glade_command_pop_group ();
+  if (retval)
+    glade_base_editor_reorder_children (editor, iter);
+  else
+    {
+      glade_base_editor_clear (editor);
+      glade_base_editor_fill_store (editor);
+      glade_base_editor_find_child (editor, gchild, &editor->priv->iter);
+    }
+
+  glade_command_pop_group ();
 }
 
-static gboolean 
+static gboolean
 glade_base_editor_drag_and_drop_idle (gpointer data)
 {
-	GladeBaseEditor *e = (GladeBaseEditor *) data;
-	
-	glade_base_editor_reorder (e, &e->priv->iter);
-	gtk_tree_view_expand_all (GTK_TREE_VIEW (e->priv->treeview));
-	glade_base_editor_set_cursor (e, &e->priv->iter);
-	glade_base_editor_block_callbacks (e, FALSE);
-	
-	return FALSE;
+  GladeBaseEditor *e = (GladeBaseEditor *) data;
+
+  glade_base_editor_reorder (e, &e->priv->iter);
+  gtk_tree_view_expand_all (GTK_TREE_VIEW (e->priv->treeview));
+  glade_base_editor_set_cursor (e, &e->priv->iter);
+  glade_base_editor_block_callbacks (e, FALSE);
+
+  return FALSE;
 }
 
 static void
-glade_base_editor_row_inserted (GtkTreeModel *model,
-				GtkTreePath *path,
-				GtkTreeIter *iter,
-				GladeBaseEditor *e)
+glade_base_editor_row_inserted (GtkTreeModel * model,
+                                GtkTreePath * path,
+                                GtkTreeIter * iter, GladeBaseEditor * e)
 {
-	e->priv->iter = *iter;
-	glade_base_editor_block_callbacks (e, TRUE);
-	g_idle_add (glade_base_editor_drag_and_drop_idle, e);
+  e->priv->iter = *iter;
+  glade_base_editor_block_callbacks (e, TRUE);
+  g_idle_add (glade_base_editor_drag_and_drop_idle, e);
 }
 
 static void
-glade_base_editor_project_remove_widget (GladeProject *project,
-					 GladeWidget  *widget,
-					 GladeBaseEditor *e)
-{
-	if (widget == e->priv->gcontainer)
-	{
-		glade_base_editor_set_container (e, NULL);
-		return;
-	}
-
-	if (glade_base_editor_is_child (e, widget, TRUE))
-	{
-		GtkTreeIter iter;
-		if (glade_base_editor_find_child (e, widget, &iter))
-		{
-			gtk_tree_store_remove (GTK_TREE_STORE (e->priv->model), &iter);
-			glade_base_editor_clear (e);
-		}
-	}
-	
-	if (widget->internal &&
-	    glade_base_editor_is_child (e, widget, FALSE))
-		glade_base_editor_update_properties (e);
+glade_base_editor_project_remove_widget (GladeProject * project,
+                                         GladeWidget * widget,
+                                         GladeBaseEditor * e)
+{
+  if (widget == e->priv->gcontainer)
+    {
+      glade_base_editor_set_container (e, NULL);
+      return;
+    }
+
+  if (glade_base_editor_is_child (e, widget, TRUE))
+    {
+      GtkTreeIter iter;
+      if (glade_base_editor_find_child (e, widget, &iter))
+        {
+          gtk_tree_store_remove (GTK_TREE_STORE (e->priv->model), &iter);
+          glade_base_editor_clear (e);
+        }
+    }
+
+  if (glade_widget_get_internal (widget) && 
+      glade_base_editor_is_child (e, widget, FALSE))
+    glade_base_editor_update_properties (e);
 }
 
 static void
-glade_base_editor_project_add_widget (GladeProject *project,
-				      GladeWidget  *widget,
-				      GladeBaseEditor *e)
+glade_base_editor_project_add_widget (GladeProject * project,
+                                      GladeWidget * widget, GladeBaseEditor * e)
 {
-	if (e->priv->updating_treeview) return;
-		
-	if (glade_base_editor_is_child (e, widget, TRUE))
-	{
-		e->priv->updating_treeview = TRUE;
-		g_idle_add (glade_base_editor_update_treeview_idle, e);
-	}
-	
-	if (widget->internal &&
-	    glade_base_editor_is_child (e, widget, FALSE))
-		glade_base_editor_update_properties (e);
+  if (e->priv->updating_treeview)
+    return;
+
+  if (glade_base_editor_is_child (e, widget, TRUE))
+    {
+      e->priv->updating_treeview = TRUE;
+      g_idle_add (glade_base_editor_update_treeview_idle, e);
+    }
+
+  if (glade_widget_get_internal (widget) && 
+      glade_base_editor_is_child (e, widget, FALSE))
+    glade_base_editor_update_properties (e);
 }
 
 static gboolean
-glade_base_editor_update_display_name (GtkTreeModel *model,
-				       GtkTreePath *path,
-				       GtkTreeIter *iter,
-				       gpointer data)
-{
-	GladeBaseEditor *editor = (GladeBaseEditor *) data;
-	GladeWidget *gchild;
-	gchar *name;
-	
-	gtk_tree_model_get (model, iter,
-			    GLADE_BASE_EDITOR_GWIDGET, &gchild,
-			    -1);
-	
-	name = glade_base_editor_get_display_name (editor, gchild);
-		
-	gtk_tree_store_set (GTK_TREE_STORE (editor->priv->model), iter,
-			    GLADE_BASE_EDITOR_NAME, name,
-			    -1);
-	g_free (name);
-	g_object_unref (G_OBJECT (gchild));
-	
-	return FALSE;
+glade_base_editor_update_display_name (GtkTreeModel * model,
+                                       GtkTreePath * path,
+                                       GtkTreeIter * iter, gpointer data)
+{
+  GladeBaseEditor *editor = (GladeBaseEditor *) data;
+  GladeWidget *gchild;
+  gchar *name;
+
+  gtk_tree_model_get (model, iter, GLADE_BASE_EDITOR_GWIDGET, &gchild, -1);
+
+  name = glade_base_editor_get_display_name (editor, gchild);
+
+  gtk_tree_store_set (GTK_TREE_STORE (editor->priv->model), iter,
+                      GLADE_BASE_EDITOR_NAME, name, -1);
+  g_free (name);
+  g_object_unref (G_OBJECT (gchild));
+
+  return FALSE;
 }
 
 static void
-glade_base_editor_project_changed (GladeProject *project,
-				   GladeCommand *command,
-				   gboolean      forward,
-				   GladeBaseEditor *editor)
+glade_base_editor_project_changed (GladeProject * project,
+                                   GladeCommand * command,
+                                   gboolean forward, GladeBaseEditor * editor)
 {
-	gtk_tree_model_foreach (editor->priv->model,
-				glade_base_editor_update_display_name,
-				editor);
+  gtk_tree_model_foreach (editor->priv->model,
+                          glade_base_editor_update_display_name, editor);
 }
 
 
 
 static void
-glade_base_editor_project_disconnect (GladeBaseEditor *editor)
+glade_base_editor_project_disconnect (GladeBaseEditor * editor)
 {
-	GladeBaseEditorPrivate *e = editor->priv;
-	
-	if (e->project == NULL) return;
+  GladeBaseEditorPrivate *e = editor->priv;
+
+  if (e->project == NULL)
+    return;
+
+  g_signal_handlers_disconnect_by_func (e->project,
+                                        glade_base_editor_project_closed,
+                                        editor);
 
-	g_signal_handlers_disconnect_by_func (e->project,
-			glade_base_editor_project_closed, editor);
-		
-	g_signal_handlers_disconnect_by_func (e->project,
-			glade_base_editor_project_remove_widget, editor);
-		
-	g_signal_handlers_disconnect_by_func (e->project,
-			glade_base_editor_project_add_widget, editor);
-		
-	g_signal_handlers_disconnect_by_func (e->project,
-			glade_base_editor_project_widget_name_changed, editor);
-	
-	g_signal_handlers_disconnect_by_func (e->project,
-			glade_base_editor_project_changed, editor);
+  g_signal_handlers_disconnect_by_func (e->project,
+                                        glade_base_editor_project_remove_widget,
+                                        editor);
 
+  g_signal_handlers_disconnect_by_func (e->project,
+                                        glade_base_editor_project_add_widget,
+                                        editor);
 
-	if (e->properties_idle)
-		g_source_remove (e->properties_idle);
-	e->properties_idle = 0;
+  g_signal_handlers_disconnect_by_func (e->project,
+                                        glade_base_editor_project_widget_name_changed,
+                                        editor);
+
+  g_signal_handlers_disconnect_by_func (e->project,
+                                        glade_base_editor_project_changed,
+                                        editor);
+
+
+  if (e->properties_idle)
+    g_source_remove (e->properties_idle);
+  e->properties_idle = 0;
 }
 
 static void
-glade_base_editor_set_container (GladeBaseEditor *editor,
-				 GObject *container)
+glade_base_editor_set_container (GladeBaseEditor * editor, GObject * container)
 {
-	GladeBaseEditorPrivate *e = editor->priv;
+  GladeBaseEditorPrivate *e = editor->priv;
 
-	glade_base_editor_project_disconnect (editor);
-	
-	if (container == NULL)
-	{
-		reset_child_types (editor);
+  glade_base_editor_project_disconnect (editor);
 
-		e->gcontainer = NULL;
-		e->project = NULL;
-		glade_base_editor_block_callbacks (editor, TRUE);
-		glade_base_editor_clear (editor);
+  if (container == NULL)
+    {
+      reset_child_types (editor);
 
-		gtk_tree_view_set_model (GTK_TREE_VIEW (editor->priv->treeview), NULL);
-		gtk_tree_store_clear (GTK_TREE_STORE (editor->priv->model));
-		gtk_tree_view_set_model (GTK_TREE_VIEW (editor->priv->treeview), editor->priv->model);
+      e->gcontainer = NULL;
+      e->project = NULL;
+      glade_base_editor_block_callbacks (editor, TRUE);
+      glade_base_editor_clear (editor);
 
-		gtk_widget_set_sensitive (e->paned, FALSE);
-		glade_base_editor_block_callbacks (editor, FALSE);
+      gtk_tree_view_set_model (GTK_TREE_VIEW (editor->priv->treeview), NULL);
+      gtk_tree_store_clear (GTK_TREE_STORE (editor->priv->model));
+      gtk_tree_view_set_model (GTK_TREE_VIEW (editor->priv->treeview),
+                               editor->priv->model);
 
-		glade_signal_editor_load_widget (e->signal_editor, NULL);
+      gtk_widget_set_sensitive (e->paned, FALSE);
+      glade_base_editor_block_callbacks (editor, FALSE);
 
-		g_object_notify (G_OBJECT (editor), "container");
-		return;
-	}
-	
-	gtk_widget_set_sensitive (e->paned, TRUE);
-	
-	e->gcontainer = glade_widget_get_from_gobject (container);
-	
-	e->project = glade_widget_get_project (e->gcontainer);
-
-	g_signal_connect (e->project, "close",
-			  G_CALLBACK (glade_base_editor_project_closed),
-			  editor);
-	
-	g_signal_connect (e->project, "remove-widget",
-			  G_CALLBACK (glade_base_editor_project_remove_widget),
-			  editor);
-	
-	g_signal_connect (e->project, "add-widget",
-			  G_CALLBACK (glade_base_editor_project_add_widget),
-			  editor);
-	
-	g_signal_connect (e->project, "widget-name-changed",
-			  G_CALLBACK (glade_base_editor_project_widget_name_changed),
-			  editor);
-		  
-	g_signal_connect (e->project, "changed",
-			  G_CALLBACK (glade_base_editor_project_changed),
-			  editor);
-
-	g_object_notify (G_OBJECT (editor), "container");
+      glade_signal_editor_load_widget (e->signal_editor, NULL);
+
+      g_object_notify_by_pspec (G_OBJECT (editor), properties[PROP_CONTAINER]);
+      return;
+    }
+
+  gtk_widget_set_sensitive (e->paned, TRUE);
+
+  e->gcontainer = glade_widget_get_from_gobject (container);
+
+  e->project = glade_widget_get_project (e->gcontainer);
+
+  g_signal_connect (e->project, "close",
+                    G_CALLBACK (glade_base_editor_project_closed), editor);
+
+  g_signal_connect (e->project, "remove-widget",
+                    G_CALLBACK (glade_base_editor_project_remove_widget),
+                    editor);
+
+  g_signal_connect (e->project, "add-widget",
+                    G_CALLBACK (glade_base_editor_project_add_widget), editor);
+
+  g_signal_connect (e->project, "widget-name-changed",
+                    G_CALLBACK (glade_base_editor_project_widget_name_changed),
+                    editor);
+
+  g_signal_connect (e->project, "changed",
+                    G_CALLBACK (glade_base_editor_project_changed), editor);
+
+  g_object_notify_by_pspec (G_OBJECT (editor), properties[PROP_CONTAINER]);
 }
 
 /*************************** GladeBaseEditor Class ****************************/
 static void
-glade_base_editor_finalize (GObject *object)
+glade_base_editor_finalize (GObject * object)
 {
-	GladeBaseEditor *cobj = GLADE_BASE_EDITOR (object);
+  GladeBaseEditor *cobj = GLADE_BASE_EDITOR (object);
 
-	g_free (cobj->priv);
+  g_free (cobj->priv);
 
-	G_OBJECT_CLASS(parent_class)->finalize (object);
+  G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
 static void
-glade_base_editor_dispose (GObject *object)
+glade_base_editor_dispose (GObject * object)
 {
-	GladeBaseEditor *cobj = GLADE_BASE_EDITOR (object);
+  GladeBaseEditor *cobj = GLADE_BASE_EDITOR (object);
 
-	reset_child_types (cobj);
+  reset_child_types (cobj);
 
-	glade_base_editor_project_disconnect (cobj);
-	cobj->priv->project = NULL;
+  glade_base_editor_project_disconnect (cobj);
+  cobj->priv->project = NULL;
 
-	if (cobj->priv->group)
-		cobj->priv->group =
-			(g_object_unref (cobj->priv->group), NULL);
+  if (cobj->priv->group)
+    {
+      g_object_unref (cobj->priv->group);
+      cobj->priv->group = NULL;
+    }
 
-	G_OBJECT_CLASS(parent_class)->dispose (object);
+  G_OBJECT_CLASS (parent_class)->dispose (object);
 }
 
 static void
-glade_base_editor_set_property (GObject      *object,
-				guint         prop_id,
-				const GValue *value,
-				GParamSpec   *pspec)
+glade_base_editor_set_property (GObject * object,
+                                guint prop_id,
+                                const GValue * value, GParamSpec * pspec)
 {
-	GladeBaseEditor *editor = GLADE_BASE_EDITOR (object);
+  GladeBaseEditor *editor = GLADE_BASE_EDITOR (object);
 
-	switch (prop_id)
-	{
-	case PROP_CONTAINER:
-		glade_base_editor_set_container (editor, g_value_get_object (value));
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-		break;
-	}
+  switch (prop_id)
+    {
+      case PROP_CONTAINER:
+        glade_base_editor_set_container (editor, g_value_get_object (value));
+        break;
+      default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+        break;
+    }
 }
 
 static void
-glade_base_editor_get_property (GObject      *object,
-				guint         prop_id,
-				GValue       *value,
-				GParamSpec   *pspec)
+glade_base_editor_get_property (GObject * object,
+                                guint prop_id,
+                                GValue * value, GParamSpec * pspec)
 {
-	GladeBaseEditor *editor = GLADE_BASE_EDITOR (object);
+  GladeBaseEditor *editor = GLADE_BASE_EDITOR (object);
 
-	switch (prop_id)
-	{
-	case PROP_CONTAINER:
-		g_value_set_object (value, editor->priv->gcontainer->object);
-		break;
-	default:
-		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-		break;
-	}
+  switch (prop_id)
+    {
+      case PROP_CONTAINER:
+        g_value_set_object (value, glade_widget_get_object (editor->priv->gcontainer));
+        break;
+      default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+        break;
+    }
 }
 
 
 /* Default handlers */
 static gboolean
-glade_base_editor_change_type (GladeBaseEditor *editor,
-			       GladeWidget *gchild,
-			       GType type)
-{
-	GladeWidget            *parent, *gchild_new;
-	GList                  *children, *l;
-	GObject                *child, *child_new;
-	GtkTreeIter             iter;
-	gchar                  *name, *class_name;
-
-	parent = glade_widget_get_parent (gchild);
-
-	if (glade_base_editor_get_type_info (editor, NULL, type,
-					     GLADE_BASE_EDITOR_CLASS_NAME, &class_name,
-					     -1) == FALSE)
-		return TRUE;
-	
-	child = glade_widget_get_object (gchild);
-	name = g_strdup (glade_widget_get_name (gchild));
-	glade_base_editor_find_child (editor, gchild, &iter);
-	
-	/* Create new widget */
-	gchild_new = glade_base_editor_delegate_build_child (editor, parent, type);
-
-	child_new = glade_widget_get_object (gchild_new);
-
-	/* Cut and Paste childrens */
-	if ((children = glade_widget_get_children (gchild)) != NULL)
-	{
-		GList *gchildren = NULL;
-		
-		l = children;
-		while (l)
-		{
-			GladeWidget *w = glade_widget_get_from_gobject (l->data);
-			
-			if (w && !w->internal)
-				gchildren = g_list_prepend (gchildren, w);
-
-			l= g_list_next (l);
-		}
-		
-		if (gchildren)
-		{
-			glade_command_dnd (gchildren, gchild_new, NULL);
-		
-			g_list_free (children);
-			g_list_free (gchildren);
-		}
-	}
-	
-	/* Copy properties */
-	glade_widget_copy_properties (gchild_new, gchild, TRUE, TRUE);
-	
-	/* Delete old widget */
- 	glade_base_editor_delegate_delete_child (editor, parent, gchild);
-	
-	/* Apply packing properties to the new object 
-	 * 
-	 * No need to use GladeCommand here on the newly created widget,
-	 * they just become the initial state for this object.
-	 */
-	l = gchild->packing_properties;
-	while (l)
-	{
-		GladeProperty *orig_prop = (GladeProperty *) l->data;
-		GladeProperty *dup_prop = glade_widget_get_property (gchild_new,
-								     orig_prop->klass->id);
-		glade_property_set_value (dup_prop, orig_prop->value);
-		l = g_list_next (l);
-	}
-
-	/* Set the name */
-	glade_command_set_name (gchild_new, name);
-	
-	if (GTK_IS_WIDGET (child_new))
-		gtk_widget_show_all (GTK_WIDGET (child_new));
-	
-	gtk_tree_store_set (GTK_TREE_STORE (editor->priv->model), &iter,
-			    GLADE_BASE_EDITOR_GWIDGET, gchild_new,
-			    GLADE_BASE_EDITOR_OBJECT, child_new,
-			    GLADE_BASE_EDITOR_TYPE_NAME, class_name,
-			    -1);
-	g_free (class_name);
-	g_free (name);
-	
-	return TRUE;
+glade_base_editor_change_type (GladeBaseEditor * editor,
+                               GladeWidget * gchild, GType type)
+{
+  GladeWidget *parent, *gchild_new;
+  GList *children, *l;
+  GObject *child, *child_new;
+  GtkTreeIter iter;
+  gchar *name, *class_name;
+
+  parent = glade_widget_get_parent (gchild);
+
+  if (glade_base_editor_get_type_info (editor, NULL, type,
+                                       GLADE_BASE_EDITOR_CLASS_NAME,
+                                       &class_name, -1) == FALSE)
+    return TRUE;
+
+  child = glade_widget_get_object (gchild);
+  name = g_strdup (glade_widget_get_name (gchild));
+  glade_base_editor_find_child (editor, gchild, &iter);
+
+  /* Delete old widget first, we cant assume the old and new widget can live in 
+   * the same parent simultaniously */
+  glade_base_editor_delegate_delete_child (editor, parent, gchild);
+
+  /* Create new widget */
+  gchild_new = glade_base_editor_delegate_build_child (editor, parent, type);
+
+  child_new = glade_widget_get_object (gchild_new);
+
+  /* Cut and Paste childrens */
+  if ((children = glade_widget_get_children (gchild)) != NULL)
+    {
+      GList *gchildren = NULL;
+
+      l = children;
+      while (l)
+        {
+          GladeWidget *w = glade_widget_get_from_gobject (l->data);
+
+          if (w && !glade_widget_get_internal (w))
+            gchildren = g_list_prepend (gchildren, w);
+
+          l = g_list_next (l);
+        }
+
+      if (gchildren)
+        {
+          glade_command_dnd (gchildren, gchild_new, NULL);
+
+          g_list_free (children);
+          g_list_free (gchildren);
+        }
+    }
+
+  /* Copy properties */
+  glade_widget_copy_properties (gchild_new, gchild, TRUE, TRUE);
+
+  /* Apply packing properties to the new object 
+   * 
+   * No need to use GladeCommand here on the newly created widget,
+   * they just become the initial state for this object.
+   */
+  l = gchild->packing_properties;
+  while (l)
+    {
+      GladeProperty      *orig_prop = (GladeProperty *) l->data;
+      GladePropertyClass *pclass = orig_prop->klass;
+      GladeProperty      *dup_prop = glade_widget_get_property (gchild_new, pclass->id);
+      glade_property_set_value (dup_prop, orig_prop->value);
+      l = g_list_next (l);
+    }
+
+  /* Set the name */
+  glade_command_set_name (gchild_new, name);
+
+  if (GTK_IS_WIDGET (child_new))
+    gtk_widget_show_all (GTK_WIDGET (child_new));
+
+  /* XXX We should update the widget name in the visible tree here too */
+  gtk_tree_store_set (GTK_TREE_STORE (editor->priv->model), &iter,
+                      GLADE_BASE_EDITOR_GWIDGET, gchild_new,
+                      GLADE_BASE_EDITOR_OBJECT, child_new,
+                      GLADE_BASE_EDITOR_TYPE_NAME, class_name, -1);
+  g_free (class_name);
+  g_free (name);
+
+  return TRUE;
 }
 
 static gchar *
-glade_base_editor_get_display_name_impl (GladeBaseEditor *editor,
-					 GladeWidget *gchild)
+glade_base_editor_get_display_name_impl (GladeBaseEditor * editor,
+                                         GladeWidget * gchild)
 {
-	return g_strdup (glade_widget_get_name (gchild));
+  return g_strdup (glade_widget_get_name (gchild));
 }
 
 static GladeWidget *
-glade_base_editor_build_child (GladeBaseEditor *editor,
-			       GladeWidget *gparent,
-			       GType type)
+glade_base_editor_build_child (GladeBaseEditor * editor,
+                               GladeWidget * gparent, GType type)
 {
-	return glade_command_create (glade_widget_adaptor_get_by_type (type),
-				     gparent, NULL,
-				     glade_widget_get_project (gparent));
+  return glade_command_create (glade_widget_adaptor_get_by_type (type),
+                               gparent, NULL,
+                               glade_widget_get_project (gparent));
 }
 
 static gboolean
-glade_base_editor_move_child (GladeBaseEditor *editor,
-			      GladeWidget *gparent,
-			      GladeWidget *gchild)
+glade_base_editor_move_child (GladeBaseEditor * editor,
+                              GladeWidget * gparent, GladeWidget * gchild)
 {
-	GList list = {0, };
+  GList list = { 0, };
 
-	if (gparent != glade_widget_get_parent (gchild))
-	{
-		list.data = gchild;
-		glade_command_dnd (&list, gparent, NULL);
-	}
+  if (gparent != glade_widget_get_parent (gchild))
+    {
+      list.data = gchild;
+      glade_command_dnd (&list, gparent, NULL);
+    }
 
-	return TRUE;
+  return TRUE;
 }
 
 static gboolean
-glade_base_editor_delete_child_impl (GladeBaseEditor *editor,
-				     GladeWidget *gparent,
-				     GladeWidget *gchild)
+glade_base_editor_delete_child_impl (GladeBaseEditor * editor,
+                                     GladeWidget * gparent,
+                                     GladeWidget * gchild)
 {
-	GList list = {0, };
+  GList list = { 0, };
+
+  list.data = gchild;
+  glade_command_delete (&list);
 
-	list.data = gchild;
-	glade_command_delete (&list);
-	
-	return TRUE;
+  return TRUE;
 }
 
 static void
-glade_base_editor_class_init (GladeBaseEditorClass *klass)
-{
-	GObjectClass *object_class = G_OBJECT_CLASS(klass);
-	
-	parent_class = g_type_class_peek_parent(klass);
-
-	object_class->finalize     = glade_base_editor_finalize;
-	object_class->dispose      = glade_base_editor_dispose;
-	object_class->set_property = glade_base_editor_set_property;
-	object_class->get_property = glade_base_editor_get_property;
-
-	klass->change_type      = glade_base_editor_change_type;
-	klass->get_display_name = glade_base_editor_get_display_name_impl;
-	klass->build_child      = glade_base_editor_build_child;
-	klass->delete_child     = glade_base_editor_delete_child_impl;
-	klass->move_child       = glade_base_editor_move_child;
-
-	g_object_class_install_property (object_class, PROP_CONTAINER,
-					 g_param_spec_object 
-					 ("container", _("Container"), 
-					  _("The container object this editor is currently editing"),
-					  G_TYPE_OBJECT, G_PARAM_READWRITE));
-
-	/**
-	 * GladeBaseEditor::child-selected:
-	 * @gladebaseeditor: the #GladeBaseEditor which received the signal.
-	 * @gchild: the selected #GladeWidget.
-	 *
-	 * Emited when the user selects a child in the editor's treeview.
-	 * You can add the relevant child properties here using 
-	 * glade_base_editor_add_default_properties() and glade_base_editor_add_properties() 
-	 * You can also add labels with glade_base_editor_add_label to make the
-	 * editor look pretty.
-	 */
-	glade_base_editor_signals [SIGNAL_CHILD_SELECTED] =
-		g_signal_new ("child-selected",
-			      G_TYPE_FROM_CLASS (object_class),
-			      G_SIGNAL_RUN_LAST,
-			      G_STRUCT_OFFSET (GladeBaseEditorClass, child_selected),
-			      NULL, NULL,
-			      glade_marshal_VOID__OBJECT,
-			      G_TYPE_NONE,
-			      1,
-			      G_TYPE_OBJECT);
-
-	/**
-	 * GladeBaseEditor::child-change-type:
-	 * @gladebaseeditor: the #GladeBaseEditor which received the signal.
-	 * @child: the #GObject being changed.
-         * @type: the new type for @child.
-	 *
-	 * Returns: TRUE to stop signal emision.
-	 */
-	glade_base_editor_signals [SIGNAL_CHANGE_TYPE] =
-		g_signal_new ("change-type",
-			      G_TYPE_FROM_CLASS (object_class),
-			      G_SIGNAL_RUN_LAST,
-			      G_STRUCT_OFFSET (GladeBaseEditorClass, change_type),
-			      glade_boolean_handled_accumulator, NULL,
-			      glade_marshal_BOOLEAN__OBJECT_UINT,
-			      G_TYPE_BOOLEAN,
-			      2,
-			      G_TYPE_OBJECT, G_TYPE_UINT);
-
-	/**
-	 * GladeBaseEditor::get-display-name:
-	 * @gladebaseeditor: the #GladeBaseEditor which received the signal.
-	 * @gchild: the child to get display name string to show in @gladebaseeditor
-	 * treeview.
-	 *
-	 * Returns: a newly allocated string.
-	 */
-	glade_base_editor_signals [SIGNAL_GET_DISPLAY_NAME] =
-		g_signal_new ("get-display-name",
-			      G_TYPE_FROM_CLASS (object_class),
-			      G_SIGNAL_RUN_LAST,
-			      G_STRUCT_OFFSET (GladeBaseEditorClass, get_display_name),
-			      glade_string_accumulator, NULL,
-			      glade_marshal_STRING__OBJECT,
-			      G_TYPE_STRING,
-			      1,
-			      G_TYPE_OBJECT);
-
-	/**
-	 * GladeBaseEditor::build-child:
-	 * @gladebaseeditor: the #GladeBaseEditor which received the signal.
-	 * @gparent: the parent of the new child
-	 * @type: the #GType of the child
-	 *
-	 * Create a child widget here if something else must be done other than
-	 * calling glade_command_create() such as creating an intermediate parent.
-	 *
-	 * Returns: the newly created #GladeWidget or NULL if child cant be created
-	 */
-	glade_base_editor_signals [SIGNAL_BUILD_CHILD] =
-		g_signal_new ("build-child",
-			      G_TYPE_FROM_CLASS (object_class),
-			      G_SIGNAL_RUN_LAST,
-			      G_STRUCT_OFFSET (GladeBaseEditorClass, build_child),
-			      glade_stop_emission_accumulator, NULL,
-			      glade_marshal_OBJECT__OBJECT_UINT,
-			      G_TYPE_OBJECT,
-			      2,
-			      G_TYPE_OBJECT, G_TYPE_UINT);
-
-	/**
-	 * GladeBaseEditor::delete-child:
-	 * @gladebaseeditor: the #GladeBaseEditor which received the signal.
-	 * @gparent: the parent
-	 * @gchild: the child to delete
-	 */
-	glade_base_editor_signals [SIGNAL_DELETE_CHILD] =
-		g_signal_new ("delete-child",
-			      G_TYPE_FROM_CLASS (object_class),
-			      G_SIGNAL_RUN_LAST,
-			      G_STRUCT_OFFSET (GladeBaseEditorClass, delete_child),
-			      glade_boolean_handled_accumulator, NULL,
-			      glade_marshal_BOOLEAN__OBJECT_OBJECT,
-			      G_TYPE_BOOLEAN,
-			      2,
-			      G_TYPE_OBJECT, G_TYPE_OBJECT);
-
-	/**
-	 * GladeBaseEditor::move-child:
-	 * @gladebaseeditor: the #GladeBaseEditor which received the signal.
-	 * @gparent: the new parent of @gchild
-	 * @gchild: the #GladeWidget to move
-	 *
-	 * Move child here if something else must be done other than cut & paste.
-	 *
-	 * Returns: wheater child has been sucessfully moved or not.
-	 */
-	glade_base_editor_signals [SIGNAL_MOVE_CHILD] =
-		g_signal_new ("move-child",
-			      G_TYPE_FROM_CLASS (object_class),
-			      G_SIGNAL_RUN_LAST,
-			      G_STRUCT_OFFSET (GladeBaseEditorClass, move_child),
-			      glade_stop_emission_accumulator, NULL,
-			      glade_marshal_BOOLEAN__OBJECT_OBJECT,
-			      G_TYPE_BOOLEAN,
-			      2,
-			      G_TYPE_OBJECT, G_TYPE_OBJECT);
+glade_base_editor_class_init (GladeBaseEditorClass * klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  object_class->finalize = glade_base_editor_finalize;
+  object_class->dispose = glade_base_editor_dispose;
+  object_class->set_property = glade_base_editor_set_property;
+  object_class->get_property = glade_base_editor_get_property;
+
+  klass->change_type = glade_base_editor_change_type;
+  klass->get_display_name = glade_base_editor_get_display_name_impl;
+  klass->build_child = glade_base_editor_build_child;
+  klass->delete_child = glade_base_editor_delete_child_impl;
+  klass->move_child = glade_base_editor_move_child;
+
+  properties[PROP_CONTAINER] =
+    g_param_spec_object ("container",
+                         _("Container"),
+                         _("The container object this editor is currently editing"),
+                         G_TYPE_OBJECT,
+                         G_PARAM_READWRITE);
+  
+  /* Install all properties */
+  g_object_class_install_properties (object_class, N_PROPERTIES, properties);
+
+  /**
+   * GladeBaseEditor::child-selected:
+   * @gladebaseeditor: the #GladeBaseEditor which received the signal.
+   * @gchild: the selected #GladeWidget.
+   *
+   * Emited when the user selects a child in the editor's treeview.
+   * You can add the relevant child properties here using 
+   * glade_base_editor_add_default_properties() and glade_base_editor_add_properties() 
+   * You can also add labels with glade_base_editor_add_label to make the
+   * editor look pretty.
+   */
+  glade_base_editor_signals[SIGNAL_CHILD_SELECTED] =
+      g_signal_new ("child-selected",
+                    G_TYPE_FROM_CLASS (object_class),
+                    G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GladeBaseEditorClass, child_selected),
+                    NULL, NULL,
+                    glade_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_OBJECT);
+
+  /**
+   * GladeBaseEditor::child-change-type:
+   * @gladebaseeditor: the #GladeBaseEditor which received the signal.
+   * @child: the #GObject being changed.
+   * @type: the new type for @child.
+   *
+   * Returns: TRUE to stop signal emision.
+   */
+  glade_base_editor_signals[SIGNAL_CHANGE_TYPE] =
+      g_signal_new ("change-type",
+                    G_TYPE_FROM_CLASS (object_class),
+                    G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GladeBaseEditorClass, change_type),
+                    glade_boolean_handled_accumulator, NULL,
+                    glade_marshal_BOOLEAN__OBJECT_UINT,
+                    G_TYPE_BOOLEAN, 2, G_TYPE_OBJECT, G_TYPE_UINT);
+
+  /**
+   * GladeBaseEditor::get-display-name:
+   * @gladebaseeditor: the #GladeBaseEditor which received the signal.
+   * @gchild: the child to get display name string to show in @gladebaseeditor
+   * treeview.
+   *
+   * Returns: a newly allocated string.
+   */
+  glade_base_editor_signals[SIGNAL_GET_DISPLAY_NAME] =
+      g_signal_new ("get-display-name",
+                    G_TYPE_FROM_CLASS (object_class),
+                    G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GladeBaseEditorClass, get_display_name),
+                    glade_string_accumulator, NULL,
+                    glade_marshal_STRING__OBJECT,
+                    G_TYPE_STRING, 1, G_TYPE_OBJECT);
+
+  /**
+   * GladeBaseEditor::build-child:
+   * @gladebaseeditor: the #GladeBaseEditor which received the signal.
+   * @gparent: the parent of the new child
+   * @type: the #GType of the child
+   *
+   * Create a child widget here if something else must be done other than
+   * calling glade_command_create() such as creating an intermediate parent.
+   *
+   * Returns: the newly created #GladeWidget or NULL if child cant be created
+   */
+  glade_base_editor_signals[SIGNAL_BUILD_CHILD] =
+      g_signal_new ("build-child",
+                    G_TYPE_FROM_CLASS (object_class),
+                    G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GladeBaseEditorClass, build_child),
+                    glade_stop_emission_accumulator, NULL,
+                    glade_marshal_OBJECT__OBJECT_UINT,
+                    G_TYPE_OBJECT, 2, G_TYPE_OBJECT, G_TYPE_UINT);
+
+  /**
+   * GladeBaseEditor::delete-child:
+   * @gladebaseeditor: the #GladeBaseEditor which received the signal.
+   * @gparent: the parent
+   * @gchild: the child to delete
+   */
+  glade_base_editor_signals[SIGNAL_DELETE_CHILD] =
+      g_signal_new ("delete-child",
+                    G_TYPE_FROM_CLASS (object_class),
+                    G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GladeBaseEditorClass, delete_child),
+                    glade_boolean_handled_accumulator, NULL,
+                    glade_marshal_BOOLEAN__OBJECT_OBJECT,
+                    G_TYPE_BOOLEAN, 2, G_TYPE_OBJECT, G_TYPE_OBJECT);
+
+  /**
+   * GladeBaseEditor::move-child:
+   * @gladebaseeditor: the #GladeBaseEditor which received the signal.
+   * @gparent: the new parent of @gchild
+   * @gchild: the #GladeWidget to move
+   *
+   * Move child here if something else must be done other than cut & paste.
+   *
+   * Returns: wheater child has been sucessfully moved or not.
+   */
+  glade_base_editor_signals[SIGNAL_MOVE_CHILD] =
+      g_signal_new ("move-child",
+                    G_TYPE_FROM_CLASS (object_class),
+                    G_SIGNAL_RUN_LAST,
+                    G_STRUCT_OFFSET (GladeBaseEditorClass, move_child),
+                    glade_stop_emission_accumulator, NULL,
+                    glade_marshal_BOOLEAN__OBJECT_OBJECT,
+                    G_TYPE_BOOLEAN, 2, G_TYPE_OBJECT, G_TYPE_OBJECT);
 }
 
 static void
-glade_base_editor_block_callbacks (GladeBaseEditor *editor, gboolean block)
-{
-	GladeBaseEditorPrivate *e = editor->priv;
-	if (block)
-	{
-		g_signal_handlers_block_by_func (e->model, glade_base_editor_row_inserted, editor);
-		if (e->project)
-		{
-			g_signal_handlers_block_by_func (e->project, glade_base_editor_project_remove_widget, editor);
-			g_signal_handlers_block_by_func (e->project, glade_base_editor_project_add_widget, editor);
-			g_signal_handlers_block_by_func (e->project, glade_base_editor_project_changed, editor);
-		}
-	}
-	else
-	{
-		g_signal_handlers_unblock_by_func (e->model, glade_base_editor_row_inserted, editor);
-		if (e->project)
-		{
-			g_signal_handlers_unblock_by_func (e->project, glade_base_editor_project_remove_widget, editor);
-			g_signal_handlers_unblock_by_func (e->project, glade_base_editor_project_add_widget, editor);
-			g_signal_handlers_unblock_by_func (e->project, glade_base_editor_project_changed, editor);
-		}
-	}
+glade_base_editor_block_callbacks (GladeBaseEditor * editor, gboolean block)
+{
+  GladeBaseEditorPrivate *e = editor->priv;
+  if (block)
+    {
+      g_signal_handlers_block_by_func (e->model, glade_base_editor_row_inserted,
+                                       editor);
+      if (e->project)
+        {
+          g_signal_handlers_block_by_func (e->project,
+                                           glade_base_editor_project_remove_widget,
+                                           editor);
+          g_signal_handlers_block_by_func (e->project,
+                                           glade_base_editor_project_add_widget,
+                                           editor);
+          g_signal_handlers_block_by_func (e->project,
+                                           glade_base_editor_project_changed,
+                                           editor);
+        }
+    }
+  else
+    {
+      g_signal_handlers_unblock_by_func (e->model,
+                                         glade_base_editor_row_inserted,
+                                         editor);
+      if (e->project)
+        {
+          g_signal_handlers_unblock_by_func (e->project,
+                                             glade_base_editor_project_remove_widget,
+                                             editor);
+          g_signal_handlers_unblock_by_func (e->project,
+                                             glade_base_editor_project_add_widget,
+                                             editor);
+          g_signal_handlers_unblock_by_func (e->project,
+                                             glade_base_editor_project_changed,
+                                             editor);
+        }
+    }
 }
 
 static void
-glade_base_editor_realize_callback (GtkWidget *widget, gpointer user_data)
+glade_base_editor_realize_callback (GtkWidget * widget, gpointer user_data)
 {
-	GladeBaseEditor *editor = GLADE_BASE_EDITOR (widget);
-	
-	glade_base_editor_block_callbacks (editor, TRUE);
+  GladeBaseEditor *editor = GLADE_BASE_EDITOR (widget);
+
+  glade_base_editor_block_callbacks (editor, TRUE);
 
-	glade_base_editor_fill_store (editor);
-	gtk_tree_view_expand_all (GTK_TREE_VIEW (editor->priv->treeview));
-	
-	glade_base_editor_block_callbacks (editor, FALSE);
+  glade_base_editor_fill_store (editor);
+  gtk_tree_view_expand_all (GTK_TREE_VIEW (editor->priv->treeview));
+
+  glade_base_editor_block_callbacks (editor, FALSE);
 }
 
 
-static void 
-glade_base_editor_switch_page (GtkNotebook     *notebook,
-			       GtkWidget       *page,
-			       guint            page_num,
-			       GladeBaseEditor *editor)
+static void
+glade_base_editor_switch_page (GtkNotebook * notebook,
+                               GtkWidget * page,
+                               guint page_num, GladeBaseEditor * editor)
 {
-	GladeBaseEditorPrivate *e = editor->priv;
+  GladeBaseEditorPrivate *e = editor->priv;
 
-	if (page_num == 0)
-		glade_signal_editor_load_widget (e->signal_editor, e->gcontainer);
-	else
-	{
-		GtkTreeIter  iter;
-		GladeWidget *gchild = NULL;
-
-		if (glade_base_editor_get_child_selected (editor, &iter))
-		{
-			gtk_tree_model_get (e->model, &iter,
-					    GLADE_BASE_EDITOR_GWIDGET, &gchild,
-					    -1);
-			g_object_unref (G_OBJECT (gchild));
-		}
-
-		if (gchild)
-			glade_signal_editor_load_widget (e->signal_editor, gchild);
-		else
-			glade_signal_editor_load_widget (e->signal_editor, NULL);
-	}
+  if (page_num == 0)
+    glade_signal_editor_load_widget (e->signal_editor, e->gcontainer);
+  else
+    {
+      GtkTreeIter iter;
+      GladeWidget *gchild = NULL;
+
+      if (glade_base_editor_get_child_selected (editor, &iter))
+        {
+          gtk_tree_model_get (e->model, &iter,
+                              GLADE_BASE_EDITOR_GWIDGET, &gchild, -1);
+          g_object_unref (G_OBJECT (gchild));
+        }
+
+      if (gchild)
+        glade_signal_editor_load_widget (e->signal_editor, gchild);
+      else
+        glade_signal_editor_load_widget (e->signal_editor, NULL);
+    }
 }
 
 
 static void
-glade_base_editor_init (GladeBaseEditor *editor)
-{
-	GladeBaseEditorPrivate *e;
-	GtkCellRenderer *renderer;
-	GtkTreeViewColumn *column;
-	GtkWidget *paned, *hbox, *vbox, *tree_vbox, *scroll, *button_table, *button, *label;
-	
-	gtk_box_set_spacing (GTK_BOX (editor), 8);
-	
-	e = editor->priv = g_new0(GladeBaseEditorPrivate, 1);
-
-	e->group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
-	
-	/* Paned */
-	e->paned = paned = gtk_vpaned_new ();
-	gtk_widget_show (paned);
-	gtk_box_pack_start (GTK_BOX (editor), e->paned, TRUE, TRUE, 0);
-
-	/* Notebook */
-	e->notebook = gtk_notebook_new ();
-	gtk_widget_show (e->notebook);
-	gtk_paned_pack1 (GTK_PANED (paned), e->notebook, TRUE, FALSE);
-
-	/* ScrolledWindow */
-	e->main_scroll = gtk_scrolled_window_new (NULL, NULL);
-	gtk_widget_show (e->main_scroll);
-	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (e->main_scroll), GTK_SHADOW_NONE);
-	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (e->main_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-
-	label = gtk_label_new (_("General"));	
-	gtk_widget_show (label);
-	gtk_notebook_append_page (GTK_NOTEBOOK (e->notebook), e->main_scroll, label);
-
-	/* Hbox */
-	hbox = gtk_hbox_new (FALSE, 8);
-	gtk_widget_show (hbox);
-
-	label = gtk_label_new (_("Hierarchy"));
-	gtk_widget_show (label);
-	gtk_notebook_append_page (GTK_NOTEBOOK (e->notebook), hbox, label);
-		
-	/* TreeView Vbox */
-	tree_vbox = gtk_vbox_new (FALSE, 8);
-	gtk_widget_show (tree_vbox);
-	gtk_box_pack_start (GTK_BOX (hbox), tree_vbox, FALSE, TRUE, 0);
-	
-	/* ScrolledWindow */
-	scroll = gtk_scrolled_window_new (NULL, NULL);
-	gtk_widget_show (scroll);
-	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), GTK_SHADOW_NONE);
-	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
-	gtk_box_pack_start (GTK_BOX (tree_vbox), scroll, TRUE, TRUE, 0);
-
-	/* TreeView */
-	e->treeview = gtk_tree_view_new ();
-	gtk_widget_show (e->treeview);
-	gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (e->treeview), TRUE);
-	gtk_tree_view_set_reorderable (GTK_TREE_VIEW (e->treeview), TRUE);
-
-	gtk_widget_add_events (e->treeview, GDK_KEY_PRESS_MASK);
-	g_signal_connect (e->treeview, "key-press-event",
-			  G_CALLBACK (glade_base_editor_treeview_key_press_event), editor);
-
-	g_signal_connect (e->treeview, "cursor-changed",
-			  G_CALLBACK (glade_base_editor_treeview_cursor_changed), editor);
-
-	g_signal_connect (e->treeview, "button-press-event",
-			  G_CALLBACK (glade_base_editor_popup_handler), editor);
-	
-
-	renderer = gtk_cell_renderer_text_new ();
-	column = gtk_tree_view_column_new_with_attributes (_("Label"), renderer,
-							   "text", GLADE_BASE_EDITOR_NAME, NULL);
-	gtk_tree_view_append_column (GTK_TREE_VIEW (e->treeview), column);
-	
-	renderer = gtk_cell_renderer_combo_new ();
-	g_object_set (renderer,
-		      "has-entry", FALSE,
-		      "text-column", GLADE_BASE_EDITOR_CLASS_NAME,
-		      "editable", TRUE,
-		      NULL);
-
-	g_signal_connect (G_OBJECT (renderer), "edited", 
-			  G_CALLBACK (glade_base_editor_child_type_edited), editor);
-
-	column = gtk_tree_view_column_new_with_attributes (_("Type"), renderer,
-							   "text", GLADE_BASE_EDITOR_TYPE_NAME, 
-							   "model", GLADE_BASE_EDITOR_CHILD_TYPES,
-							   NULL);
-
-	gtk_tree_view_append_column (GTK_TREE_VIEW (e->treeview), column);
-
-	gtk_container_add (GTK_CONTAINER (scroll), e->treeview);
-	
-	/* Add/Remove buttons */
-	button_table = gtk_table_new (1, 2, TRUE);
-	gtk_widget_show (button_table);
-	gtk_table_set_col_spacings (GTK_TABLE (button_table), 8);
-	gtk_box_pack_start (GTK_BOX (tree_vbox), button_table, FALSE, TRUE, 0);
-	
-	button = gtk_button_new_from_stock (GTK_STOCK_ADD);
-	gtk_widget_show (button);
-	g_signal_connect (button, "clicked", 
-			  G_CALLBACK (glade_base_editor_add_activate), editor);
-	gtk_table_attach_defaults (GTK_TABLE (button_table), button, 0, 1, 0, 1);
-
-	e->remove_button = button = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
-	gtk_widget_show (button);
-	g_signal_connect (button, "clicked", 
-			  G_CALLBACK (glade_base_editor_delete_activate), editor);
-	gtk_table_attach_defaults (GTK_TABLE (button_table), button, 1, 2, 0, 1);
-
-	/* Properties Vbox */
-	vbox = gtk_vbox_new (FALSE, 8);
-	gtk_widget_show (vbox);
-	gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
-	
-	/* ScrolledWindow */
-	scroll = gtk_scrolled_window_new (NULL, NULL);
-	gtk_widget_show (scroll);
-	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), GTK_SHADOW_NONE);
-	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
-	gtk_box_pack_start (GTK_BOX (vbox), scroll, TRUE, TRUE, 0);
-
-	/* Tables */
-	e->table = gtk_table_new (1, 2, FALSE);
-	gtk_widget_show (e->table);
-	gtk_table_set_row_spacings (GTK_TABLE (e->table), 4);
-	gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scroll), e->table);
-
-	/* Signal Editor */
-	e->signal_editor = glade_signal_editor_new (NULL);
-	gtk_widget_show (GTK_WIDGET(e->signal_editor));
-	gtk_widget_set_size_request (GTK_WIDGET(e->signal_editor), -1, 96);
-	gtk_paned_pack2 (GTK_PANED (paned), GTK_WIDGET(e->signal_editor), FALSE, FALSE);
-	
-	/* Update the treeview on realize event */
-	g_signal_connect (editor, "realize",
-			  G_CALLBACK (glade_base_editor_realize_callback),
-			  NULL);
-
-	g_signal_connect (G_OBJECT (e->notebook), "switch-page",
-			  G_CALLBACK (glade_base_editor_switch_page), editor);
+glade_base_editor_init (GladeBaseEditor * editor)
+{
+  GladeBaseEditorPrivate *e;
+  GtkCellRenderer *renderer;
+  GtkTreeViewColumn *column;
+  GtkWidget *paned, *hbox, *vbox, *tree_vbox, *scroll, *button_table, *button,
+      *label;
+
+  gtk_box_set_spacing (GTK_BOX (editor), 8);
+
+  e = editor->priv = g_new0 (GladeBaseEditorPrivate, 1);
+
+  e->group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+
+  /* Paned */
+  e->paned = paned = gtk_vpaned_new ();
+  gtk_widget_show (paned);
+  gtk_box_pack_start (GTK_BOX (editor), e->paned, TRUE, TRUE, 0);
+
+  /* Notebook */
+  e->notebook = gtk_notebook_new ();
+  gtk_widget_show (e->notebook);
+  gtk_paned_pack1 (GTK_PANED (paned), e->notebook, TRUE, FALSE);
+
+  /* ScrolledWindow */
+  e->main_scroll = gtk_scrolled_window_new (NULL, NULL);
+  gtk_widget_show (e->main_scroll);
+  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (e->main_scroll),
+                                       GTK_SHADOW_NONE);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (e->main_scroll),
+                                  GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+  label = gtk_label_new (_("General"));
+  gtk_widget_show (label);
+  gtk_notebook_append_page (GTK_NOTEBOOK (e->notebook), e->main_scroll, label);
+
+  /* Hbox */
+  hbox = gtk_hbox_new (FALSE, 8);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Hierarchy"));
+  gtk_widget_show (label);
+  gtk_notebook_append_page (GTK_NOTEBOOK (e->notebook), hbox, label);
+
+  /* TreeView Vbox */
+  tree_vbox = gtk_vbox_new (FALSE, 8);
+  gtk_widget_show (tree_vbox);
+  gtk_box_pack_start (GTK_BOX (hbox), tree_vbox, FALSE, TRUE, 0);
+
+  /* ScrolledWindow */
+  scroll = gtk_scrolled_window_new (NULL, NULL);
+  gtk_widget_show (scroll);
+  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll),
+                                       GTK_SHADOW_NONE);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
+                                  GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+  gtk_box_pack_start (GTK_BOX (tree_vbox), scroll, TRUE, TRUE, 0);
+
+  /* TreeView */
+  e->treeview = gtk_tree_view_new ();
+  gtk_widget_show (e->treeview);
+  gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (e->treeview), TRUE);
+  gtk_tree_view_set_reorderable (GTK_TREE_VIEW (e->treeview), TRUE);
+
+  gtk_widget_add_events (e->treeview, GDK_KEY_PRESS_MASK);
+  g_signal_connect (e->treeview, "key-press-event",
+                    G_CALLBACK (glade_base_editor_treeview_key_press_event),
+                    editor);
+
+  g_signal_connect (e->treeview, "cursor-changed",
+                    G_CALLBACK (glade_base_editor_treeview_cursor_changed),
+                    editor);
+
+  g_signal_connect (e->treeview, "button-press-event",
+                    G_CALLBACK (glade_base_editor_popup_handler), editor);
+
+
+  renderer = gtk_cell_renderer_text_new ();
+  column = gtk_tree_view_column_new_with_attributes (_("Label"), renderer,
+                                                     "text",
+                                                     GLADE_BASE_EDITOR_NAME,
+                                                     NULL);
+  gtk_tree_view_append_column (GTK_TREE_VIEW (e->treeview), column);
+
+  renderer = gtk_cell_renderer_combo_new ();
+  g_object_set (renderer,
+                "has-entry", FALSE,
+                "text-column", GLADE_BASE_EDITOR_CLASS_NAME,
+                "editable", TRUE, NULL);
+
+  g_signal_connect (G_OBJECT (renderer), "edited",
+                    G_CALLBACK (glade_base_editor_child_type_edited), editor);
+
+  column = gtk_tree_view_column_new_with_attributes (_("Type"), renderer,
+                                                     "text",
+                                                     GLADE_BASE_EDITOR_TYPE_NAME,
+                                                     "model",
+                                                     GLADE_BASE_EDITOR_CHILD_TYPES,
+                                                     NULL);
+
+  gtk_tree_view_append_column (GTK_TREE_VIEW (e->treeview), column);
+
+  gtk_container_add (GTK_CONTAINER (scroll), e->treeview);
+
+  /* Add/Remove buttons */
+  button_table = gtk_table_new (1, 2, TRUE);
+  gtk_widget_show (button_table);
+  gtk_table_set_col_spacings (GTK_TABLE (button_table), 8);
+  gtk_box_pack_start (GTK_BOX (tree_vbox), button_table, FALSE, TRUE, 0);
+
+  button = gtk_button_new_from_stock (GTK_STOCK_ADD);
+  gtk_widget_show (button);
+  g_signal_connect (button, "clicked",
+                    G_CALLBACK (glade_base_editor_add_activate), editor);
+  gtk_table_attach_defaults (GTK_TABLE (button_table), button, 0, 1, 0, 1);
+
+  e->remove_button = button = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
+  gtk_widget_show (button);
+  g_signal_connect (button, "clicked",
+                    G_CALLBACK (glade_base_editor_delete_activate), editor);
+  gtk_table_attach_defaults (GTK_TABLE (button_table), button, 1, 2, 0, 1);
+
+  /* Properties Vbox */
+  vbox = gtk_vbox_new (FALSE, 8);
+  gtk_widget_show (vbox);
+  gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
+
+  /* ScrolledWindow */
+  scroll = gtk_scrolled_window_new (NULL, NULL);
+  gtk_widget_show (scroll);
+  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll),
+                                       GTK_SHADOW_NONE);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
+                                  GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+  gtk_box_pack_start (GTK_BOX (vbox), scroll, TRUE, TRUE, 0);
+
+  /* Tables */
+  e->table = gtk_table_new (1, 2, FALSE);
+  gtk_widget_show (e->table);
+  gtk_table_set_row_spacings (GTK_TABLE (e->table), 4);
+  gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scroll), e->table);
+
+  /* Signal Editor */
+  e->signal_editor = glade_signal_editor_new (NULL);
+  gtk_widget_show (GTK_WIDGET (e->signal_editor));
+  gtk_widget_set_size_request (GTK_WIDGET (e->signal_editor), -1, 96);
+  gtk_paned_pack2 (GTK_PANED (paned), GTK_WIDGET (e->signal_editor), FALSE,
+                   FALSE);
+
+  /* Update the treeview on realize event */
+  g_signal_connect (editor, "realize",
+                    G_CALLBACK (glade_base_editor_realize_callback), NULL);
+
+  g_signal_connect (G_OBJECT (e->notebook), "switch-page",
+                    G_CALLBACK (glade_base_editor_switch_page), editor);
 
 }
 
@@ -1822,26 +1852,27 @@ glade_base_editor_init (GladeBaseEditor *editor)
 GType
 glade_base_editor_get_type ()
 {
-	static GType type = 0;
-
-	if(type == 0) {
-		static const GTypeInfo our_info = {
-			sizeof (GladeBaseEditorClass),
-			NULL,
-			NULL,
-			(GClassInitFunc)glade_base_editor_class_init,
-			NULL,
-			NULL,
-			sizeof (GladeBaseEditor),
-			0,
-			(GInstanceInitFunc)glade_base_editor_init,
-		};
-
-		type = g_type_register_static (GTK_TYPE_VBOX, "GladeBaseEditor",
-					       &our_info, 0);
-	}
+  static GType type = 0;
+
+  if (type == 0)
+    {
+      static const GTypeInfo our_info = {
+        sizeof (GladeBaseEditorClass),
+        NULL,
+        NULL,
+        (GClassInitFunc) glade_base_editor_class_init,
+        NULL,
+        NULL,
+        sizeof (GladeBaseEditor),
+        0,
+        (GInstanceInitFunc) glade_base_editor_init,
+      };
+
+      type = g_type_register_static (GTK_TYPE_VBOX, "GladeBaseEditor",
+                                     &our_info, 0);
+    }
 
-	return type;
+  return type;
 }
 
 /**
@@ -1859,78 +1890,76 @@ glade_base_editor_get_type ()
  * Returns: a new GladeBaseEditor.
  */
 GladeBaseEditor *
-glade_base_editor_new (GObject       *container, 
-		       GladeEditable *main_editable, 
-		       ...)
-{
-	ChildTypeTab *child_type;
-	GladeWidget  *gcontainer;
-	GladeBaseEditor *editor;
-	GladeBaseEditorPrivate *e;
-	GtkTreeIter iter;	
-	GType       iter_type;
-	gchar *name;
-	va_list args;
-
-	gcontainer = glade_widget_get_from_gobject (container);
-	
-	editor = GLADE_BASE_EDITOR (g_object_new (GLADE_TYPE_BASE_EDITOR, NULL));
-	e = editor->priv;
-	
-	/* Store */
-	e->model = (GtkTreeModel *)gtk_tree_store_new (GLADE_BASE_EDITOR_N_COLUMNS,
-						       G_TYPE_OBJECT,
-						       G_TYPE_OBJECT,
-						       G_TYPE_STRING,
-						       G_TYPE_STRING,
-						       GTK_TYPE_TREE_MODEL);
-
-	gtk_tree_view_set_model	 (GTK_TREE_VIEW (e->treeview), e->model);
-	gtk_tree_view_expand_all (GTK_TREE_VIEW (e->treeview));
-	
-	g_signal_connect (e->model, "row-inserted",
-			  G_CALLBACK (glade_base_editor_row_inserted), 
-			  editor);
-	
-	/* Invent one if not provided */
-	if (!main_editable)
-		main_editable = glade_widget_adaptor_create_editable (gcontainer->adaptor, GLADE_PAGE_GENERAL);
-	
-	glade_editable_load (main_editable, gcontainer);
-	gtk_widget_show (GTK_WIDGET (main_editable));
-	gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (e->main_scroll), GTK_WIDGET (main_editable));
-
-	child_type              = g_new0 (ChildTypeTab, 1);
-	child_type->parent_type = G_OBJECT_TYPE (container);
-	child_type->children    = (GtkTreeModel *)gtk_list_store_new (GLADE_BASE_EDITOR_TYPES_N_COLUMNS,
-								      G_TYPE_GTYPE, G_TYPE_STRING);
-
-	va_start (args, main_editable);
-	while ((name = va_arg (args, gchar *)))
-	{
-		iter_type = va_arg (args, GType);
-
-		gtk_list_store_append (GTK_LIST_STORE (child_type->children), &iter);
-		gtk_list_store_set (GTK_LIST_STORE (child_type->children), &iter,
-				    GLADE_BASE_EDITOR_GTYPE, iter_type,
-				    GLADE_BASE_EDITOR_CLASS_NAME, name,
-				    -1);
-
-		if (editor->priv->add_type == 0)
-		{
-			editor->priv->add_type = iter_type;
-			editor->priv->add_as_child = FALSE;
-		}
-	}
-	va_end (args);
+glade_base_editor_new (GObject * container, GladeEditable * main_editable, ...)
+{
+  ChildTypeTab *child_type;
+  GladeWidget *gcontainer;
+  GladeBaseEditor *editor;
+  GladeBaseEditorPrivate *e;
+  GtkTreeIter iter;
+  GType iter_type;
+  gchar *name;
+  va_list args;
+
+  gcontainer = glade_widget_get_from_gobject (container);
+  g_return_val_if_fail (GLADE_IS_WIDGET (gcontainer), NULL);
+
+  editor = GLADE_BASE_EDITOR (g_object_new (GLADE_TYPE_BASE_EDITOR, NULL));
+  e = editor->priv;
+
+  /* Store */
+  e->model = (GtkTreeModel *) gtk_tree_store_new (GLADE_BASE_EDITOR_N_COLUMNS,
+                                                  G_TYPE_OBJECT,
+                                                  G_TYPE_OBJECT,
+                                                  G_TYPE_STRING,
+                                                  G_TYPE_STRING,
+                                                  GTK_TYPE_TREE_MODEL);
+
+  gtk_tree_view_set_model (GTK_TREE_VIEW (e->treeview), e->model);
+  gtk_tree_view_expand_all (GTK_TREE_VIEW (e->treeview));
+
+  g_signal_connect (e->model, "row-inserted",
+                    G_CALLBACK (glade_base_editor_row_inserted), editor);
 
-	e->child_types = g_list_prepend (e->child_types, child_type);
+  /* Invent one if not provided */
+  if (!main_editable)
+    main_editable =
+      glade_widget_adaptor_create_editable (glade_widget_get_adaptor (gcontainer),
+					    GLADE_PAGE_GENERAL);
 
-	glade_base_editor_set_container (editor, container);
-	
-	glade_signal_editor_load_widget (e->signal_editor, e->gcontainer);
+  glade_editable_load (main_editable, gcontainer);
+  gtk_widget_show (GTK_WIDGET (main_editable));
+  gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (e->main_scroll),
+                                         GTK_WIDGET (main_editable));
 
-	return editor;
+  child_type = g_new0 (ChildTypeTab, 1);
+  child_type->parent_type = G_OBJECT_TYPE (container);
+  child_type->children =
+      (GtkTreeModel *) gtk_list_store_new (GLADE_BASE_EDITOR_TYPES_N_COLUMNS,
+                                           G_TYPE_GTYPE, G_TYPE_STRING);
+
+  va_start (args, main_editable);
+  while ((name = va_arg (args, gchar *)))
+    {
+      iter_type = va_arg (args, GType);
+
+      gtk_list_store_append (GTK_LIST_STORE (child_type->children), &iter);
+      gtk_list_store_set (GTK_LIST_STORE (child_type->children), &iter,
+                          GLADE_BASE_EDITOR_GTYPE, iter_type,
+                          GLADE_BASE_EDITOR_CLASS_NAME, name, -1);
+
+      if (editor->priv->add_type == 0)
+	editor->priv->add_type = iter_type;
+    }
+  va_end (args);
+
+  e->child_types = g_list_prepend (e->child_types, child_type);
+
+  glade_base_editor_set_container (editor, container);
+
+  glade_signal_editor_load_widget (e->signal_editor, e->gcontainer);
+
+  return editor;
 }
 
 
@@ -1948,34 +1977,37 @@ glade_base_editor_new (GObject       *container,
  *
  */
 void
-glade_base_editor_append_types (GladeBaseEditor *editor, GType parent_type, ...)
-{
-	ChildTypeTab *child_type;
-	GtkTreeIter iter;
-	gchar *name;
-	va_list args;
-
-	g_return_if_fail (GLADE_IS_BASE_EDITOR (editor));
-	g_return_if_fail (get_children_model_for_type (editor, parent_type) == NULL);
-	
-	child_type              = g_new0 (ChildTypeTab, 1);
-	child_type->parent_type = parent_type;
-	child_type->children    = (GtkTreeModel *)gtk_list_store_new (GLADE_BASE_EDITOR_TYPES_N_COLUMNS,
-								      G_TYPE_GTYPE, G_TYPE_STRING);
-
-	va_start (args, parent_type);
-	while ((name = va_arg (args, gchar *)))
-	{
-		gtk_list_store_append (GTK_LIST_STORE (child_type->children), &iter);
-		gtk_list_store_set (GTK_LIST_STORE (child_type->children), &iter,
-				    GLADE_BASE_EDITOR_GTYPE, va_arg (args, GType),
-				    GLADE_BASE_EDITOR_CLASS_NAME, name,
-				    -1);
-	}
-	va_end (args);
-
-	editor->priv->child_types = g_list_insert_sorted (editor->priv->child_types, child_type,
-							  (GCompareFunc)sort_type_by_hierarchy);
+glade_base_editor_append_types (GladeBaseEditor * editor, GType parent_type,
+                                ...)
+{
+  ChildTypeTab *child_type;
+  GtkTreeIter iter;
+  gchar *name;
+  va_list args;
+
+  g_return_if_fail (GLADE_IS_BASE_EDITOR (editor));
+  g_return_if_fail (get_children_model_for_type (editor, parent_type) == NULL);
+
+  child_type = g_new0 (ChildTypeTab, 1);
+  child_type->parent_type = parent_type;
+  child_type->children =
+      (GtkTreeModel *) gtk_list_store_new (GLADE_BASE_EDITOR_TYPES_N_COLUMNS,
+                                           G_TYPE_GTYPE, G_TYPE_STRING);
+
+  va_start (args, parent_type);
+  while ((name = va_arg (args, gchar *)))
+    {
+      gtk_list_store_append (GTK_LIST_STORE (child_type->children), &iter);
+      gtk_list_store_set (GTK_LIST_STORE (child_type->children), &iter,
+                          GLADE_BASE_EDITOR_GTYPE, va_arg (args, GType),
+                          GLADE_BASE_EDITOR_CLASS_NAME, name, 
+			  -1);
+    }
+  va_end (args);
+
+  editor->priv->child_types =
+      g_list_insert_sorted (editor->priv->child_types, child_type,
+                            (GCompareFunc) sort_type_by_hierarchy);
 }
 
 /**
@@ -1988,55 +2020,59 @@ glade_base_editor_append_types (GladeBaseEditor *editor, GType parent_type, ...)
  * NOTE: This function is intended to be used in "child-selected" callbacks
  */
 void
-glade_base_editor_add_default_properties (GladeBaseEditor *editor,
-					  GladeWidget *gchild)
-{
-	GtkTreeIter combo_iter;
-	GtkWidget *label, *entry;
-	GtkTreeModel *child_class;
-	GtkCellRenderer *renderer;
-	GObject *child;
-
-	g_return_if_fail (GLADE_IS_BASE_EDITOR (editor));
-	g_return_if_fail (GLADE_IS_WIDGET (gchild));
-	g_return_if_fail (GLADE_IS_WIDGET (gchild->parent));
-
-	child  = glade_widget_get_object (gchild);
-
-	child_class = get_children_model_for_child_type (editor, G_OBJECT_TYPE (child));
-	
-	/* Name */
-	label = gtk_label_new (_("Name:"));
-	gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.0);
-	
-	entry = gtk_entry_new ();
-	gtk_entry_set_text (GTK_ENTRY (entry), glade_widget_get_name (gchild));
-	g_object_set_data (G_OBJECT (entry), "editor", editor);
-	g_signal_connect (entry, "activate", G_CALLBACK (glade_base_editor_name_activate), gchild);
-	g_signal_connect (entry, "changed", G_CALLBACK (glade_base_editor_name_activate), gchild);
-	glade_base_editor_table_attach (editor, label, entry);
-
-	if (child_class && gtk_tree_model_iter_n_children (child_class, NULL) > 1)
-	{
-		/* Type */
-		label = gtk_label_new (_("Type:"));
-		gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.0);
-		
-		entry = gtk_combo_box_new ();
-		gtk_combo_box_set_model (GTK_COMBO_BOX (entry), child_class);
-		
-		renderer = gtk_cell_renderer_text_new ();
-		gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (entry), renderer, FALSE);
-		gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (entry), renderer, "text",
-						GLADE_BASE_EDITOR_CLASS_NAME, NULL);
-		
-		if (glade_base_editor_get_type_info (editor, &combo_iter, 
-						     G_OBJECT_TYPE (child), -1))
-			gtk_combo_box_set_active_iter (GTK_COMBO_BOX (entry), &combo_iter);
-	
-		g_signal_connect (entry, "changed", G_CALLBACK (glade_base_editor_type_changed), editor);
-		glade_base_editor_table_attach (editor, label, entry);
-	}
+glade_base_editor_add_default_properties (GladeBaseEditor * editor,
+                                          GladeWidget * gchild)
+{
+  GtkTreeIter combo_iter;
+  GtkWidget *label, *entry;
+  GtkTreeModel *child_class;
+  GtkCellRenderer *renderer;
+  GObject *child;
+
+  g_return_if_fail (GLADE_IS_BASE_EDITOR (editor));
+  g_return_if_fail (GLADE_IS_WIDGET (gchild));
+  g_return_if_fail (GLADE_IS_WIDGET (glade_widget_get_parent (gchild)));
+
+  child = glade_widget_get_object (gchild);
+
+  child_class =
+      get_children_model_for_child_type (editor, G_OBJECT_TYPE (child));
+
+  /* Name */
+  label = gtk_label_new (_("Name:"));
+  gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.0);
+
+  entry = gtk_entry_new ();
+  gtk_entry_set_text (GTK_ENTRY (entry), glade_widget_get_name (gchild));
+  g_object_set_data (G_OBJECT (entry), "editor", editor);
+  g_signal_connect (entry, "activate",
+                    G_CALLBACK (glade_base_editor_name_activate), gchild);
+  g_signal_connect (entry, "changed",
+                    G_CALLBACK (glade_base_editor_name_activate), gchild);
+  glade_base_editor_table_attach (editor, label, entry);
+
+  if (child_class && gtk_tree_model_iter_n_children (child_class, NULL) > 1)
+    {
+      /* Type */
+      label = gtk_label_new (_("Type:"));
+      gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.0);
+
+      entry = gtk_combo_box_new ();
+      gtk_combo_box_set_model (GTK_COMBO_BOX (entry), child_class);
+
+      renderer = gtk_cell_renderer_text_new ();
+      gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (entry), renderer, FALSE);
+      gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (entry), renderer, "text",
+                                      GLADE_BASE_EDITOR_CLASS_NAME, NULL);
+
+      if (glade_base_editor_get_type_info (editor, &combo_iter,
+                                           G_OBJECT_TYPE (child), -1))
+        gtk_combo_box_set_active_iter (GTK_COMBO_BOX (entry), &combo_iter);
+
+      g_signal_connect (entry, "changed",
+                        G_CALLBACK (glade_base_editor_type_changed), editor);
+      glade_base_editor_table_attach (editor, label, entry);
+    }
 }
 
 /**
@@ -2051,31 +2087,28 @@ glade_base_editor_add_default_properties (GladeBaseEditor *editor,
  * NOTE: This function is intended to be used in "child-selected" callbacks
  */
 void
-glade_base_editor_add_properties (GladeBaseEditor *editor,
-				  GladeWidget     *gchild,
-				  gboolean         packing,
-				  ...)
-{
-	GladeEditorProperty *eprop;
-	va_list args;
-	gchar *property;
-	
-	g_return_if_fail (GLADE_IS_BASE_EDITOR (editor));
-	g_return_if_fail (GLADE_IS_WIDGET (gchild));
-	
-	va_start (args, packing);
-	property = va_arg (args, gchar *);
-	
-	while (property)
-	{
-		eprop = glade_widget_create_editor_property (gchild, property, packing, TRUE);
-		if (eprop)
-			glade_base_editor_table_attach (editor, 
-							GLADE_EDITOR_PROPERTY (eprop)->item_label,
-							GTK_WIDGET (eprop));
-		property = va_arg (args, gchar *);
-	}
-	va_end (args);
+glade_base_editor_add_properties (GladeBaseEditor * editor,
+                                  GladeWidget * gchild, gboolean packing, ...)
+{
+  GladeEditorProperty *eprop;
+  va_list args;
+  gchar *property;
+
+  g_return_if_fail (GLADE_IS_BASE_EDITOR (editor));
+  g_return_if_fail (GLADE_IS_WIDGET (gchild));
+
+  va_start (args, packing);
+  property = va_arg (args, gchar *);
+
+  while (property)
+    {
+      eprop =
+          glade_widget_create_editor_property (gchild, property, packing, TRUE);
+      if (eprop)
+        glade_base_editor_table_attach (editor, eprop->item_label, GTK_WIDGET (eprop));
+      property = va_arg (args, gchar *);
+    }
+  va_end (args);
 }
 
 
@@ -2090,26 +2123,26 @@ glade_base_editor_add_properties (GladeBaseEditor *editor,
  * NOTE: This function is intended to be used in "child-selected" callbacks
  */
 void
-glade_base_editor_add_editable (GladeBaseEditor     *editor,
-				GladeWidget         *gchild,
-				GladeEditorPageType  page)
+glade_base_editor_add_editable (GladeBaseEditor * editor,
+                                GladeWidget * gchild, GladeEditorPageType page)
 {
-	GladeEditable  *editable;
-	gint row;
-	
-	g_return_if_fail (GLADE_IS_BASE_EDITOR (editor));
-	g_return_if_fail (GLADE_IS_WIDGET (gchild));
+  GladeEditable *editable;
+  gint row;
 
-	editable = glade_widget_adaptor_create_editable (gchild->adaptor, page);
-	glade_editable_set_show_name (editable, FALSE);
-	glade_editable_load (editable, gchild);
-	gtk_widget_show (GTK_WIDGET (editable));
+  g_return_if_fail (GLADE_IS_BASE_EDITOR (editor));
+  g_return_if_fail (GLADE_IS_WIDGET (gchild));
 
-	row = editor->priv->row;
-	gtk_table_attach (GTK_TABLE (editor->priv->table), GTK_WIDGET (editable), 0, 2, row, row + 1,
-			  GTK_FILL, GTK_EXPAND | GTK_FILL, 2, 0);
+  editable = glade_widget_adaptor_create_editable (glade_widget_get_adaptor (gchild), page);
+  glade_editable_set_show_name (editable, FALSE);
+  glade_editable_load (editable, gchild);
+  gtk_widget_show (GTK_WIDGET (editable));
 
-	editor->priv->row++;
+  row = editor->priv->row;
+
+  gtk_table_attach (GTK_TABLE (editor->priv->table), GTK_WIDGET (editable), 0, 2, row, row + 1,
+		    GTK_FILL, GTK_EXPAND | GTK_FILL, 2, 0);
+
+  editor->priv->row++;
 
 }
 
@@ -2125,28 +2158,29 @@ glade_base_editor_add_editable (GladeBaseEditor     *editor,
  * NOTE: This function is intended to be used in "child-selected" callbacks
  */
 void
-glade_base_editor_add_label (GladeBaseEditor *editor, gchar *str)
-{
-	GtkWidget *label;
-	gchar *markup;
-	gint row;
-	
-	g_return_if_fail (GLADE_IS_BASE_EDITOR (editor));
-	g_return_if_fail (str != NULL);
-	
-	label = gtk_label_new (NULL);
-	markup = g_strdup_printf ("<span rise=\"-20000\"><b>%s</b></span>", str);
-	row = editor->priv->row;
-	
-	gtk_label_set_markup (GTK_LABEL (label), markup);
-	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
-	gtk_misc_set_padding (GTK_MISC (label), 0, 6);
-	gtk_table_attach (GTK_TABLE (editor->priv->table), label, 0, 2, row, row + 1,
-			  GTK_FILL, GTK_FILL, 2, 0);
-	gtk_widget_show (label);
-	editor->priv->row++;
-	
-	g_free (markup);
+glade_base_editor_add_label (GladeBaseEditor * editor, gchar * str)
+{
+  GtkWidget *label;
+  gchar *markup;
+  gint row;
+
+  g_return_if_fail (GLADE_IS_BASE_EDITOR (editor));
+  g_return_if_fail (str != NULL);
+
+  label = gtk_label_new (NULL);
+  markup = g_strdup_printf ("<span rise=\"-20000\"><b>%s</b></span>", str);
+  row = editor->priv->row;
+
+  gtk_label_set_markup (GTK_LABEL (label), markup);
+  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
+  gtk_misc_set_padding (GTK_MISC (label), 0, 6);
+
+  gtk_table_attach (GTK_TABLE (editor->priv->table), label, 0, 2, row, row + 1,
+		    GTK_FILL, GTK_FILL, 2, 0);
+  gtk_widget_show (label);
+  editor->priv->row++;
+
+  g_free (markup);
 }
 
 /**
@@ -2157,32 +2191,32 @@ glade_base_editor_add_label (GladeBaseEditor *editor, gchar *str)
  * Shows/hide @editor 's signal editor
  */
 void
-glade_base_editor_set_show_signal_editor (GladeBaseEditor *editor, gboolean val)
+glade_base_editor_set_show_signal_editor (GladeBaseEditor * editor,
+                                          gboolean val)
 {
-	g_return_if_fail (GLADE_IS_BASE_EDITOR (editor));
-	
-	if (val)
-		gtk_widget_show (GTK_WIDGET(editor->priv->signal_editor));
-	else
-		gtk_widget_hide (GTK_WIDGET(editor->priv->signal_editor));
+  g_return_if_fail (GLADE_IS_BASE_EDITOR (editor));
+
+  if (val)
+    gtk_widget_show (GTK_WIDGET (editor->priv->signal_editor));
+  else
+    gtk_widget_hide (GTK_WIDGET (editor->priv->signal_editor));
 }
 
 /* Convenience functions */
 
 static void
-glade_base_editor_help (GtkButton *button, gchar *markup)
+glade_base_editor_help (GtkButton * button, gchar * markup)
 {
-	GtkWidget *dialog;
-	
-	dialog = gtk_message_dialog_new (glade_app_get_transient_parent (),
-					 GTK_DIALOG_DESTROY_WITH_PARENT,
-					 GTK_MESSAGE_INFO,
-					 GTK_BUTTONS_CLOSE, " ");
-	
-	gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (dialog), markup);
-	
-	gtk_dialog_run (GTK_DIALOG (dialog));
-	gtk_widget_destroy (dialog);
+  GtkWidget *dialog;
+
+  dialog = gtk_message_dialog_new (GTK_WINDOW (glade_app_get_window ()),
+                                   GTK_DIALOG_DESTROY_WITH_PARENT,
+                                   GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, " ");
+
+  gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (dialog), markup);
+
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
 }
 
 /**
@@ -2194,66 +2228,66 @@ glade_base_editor_help (GtkButton *button, gchar *markup)
  * This convenience function create a new dialog window and packs @editor in it.
  *
  * Returns: the newly created window
- */ 
+ */
 GtkWidget *
-glade_base_editor_pack_new_window (GladeBaseEditor *editor,
-				   gchar *title,
-				   gchar *help_markup)
-{
-	GtkWidget *window, *buttonbox, *button;
-	gchar *real_title;
-	
-	g_return_val_if_fail (GLADE_IS_BASE_EDITOR (editor), NULL);
-	
-	/* Window */
-	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-	gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DIALOG);
-	
-	if (title)
-	{
-		real_title = g_strdup_printf ("%s - %s", title, 
-					      glade_widget_get_name (editor->priv->gcontainer));
-		gtk_window_set_title (GTK_WINDOW (window), real_title);
-		g_free (real_title);
-	}
-
-	g_signal_connect_swapped (G_OBJECT (editor), "notify::container",
-				  G_CALLBACK (gtk_widget_destroy), window);
-	
-	/* Button Box */
-	buttonbox = gtk_hbutton_box_new ();
-	gtk_widget_show (buttonbox);
-	gtk_button_box_set_layout (GTK_BUTTON_BOX (buttonbox), GTK_BUTTONBOX_END);
-	gtk_box_set_spacing (GTK_BOX (buttonbox), 8);
-	gtk_box_pack_start (GTK_BOX (editor), buttonbox, FALSE, TRUE, 0);
-
-	button = gtk_button_new_from_stock (GTK_STOCK_HELP);
-	gtk_widget_show (button);
-	g_signal_connect (button, "clicked",
-			  G_CALLBACK (glade_base_editor_help),
-			  help_markup ? help_markup : 
-			  _("<big><b>Tips:</b></big>\n"
-			    "  * Right-click over the treeview to add items.\n"
-			    "  * Press Delete to remove the selected item.\n"
-			    "  * Drag &amp; Drop to reorder.\n"
-			    "  * Type column is editable."));
-	gtk_container_add (GTK_CONTAINER (buttonbox), button);
-	gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (buttonbox), button, TRUE);
-
-	if (glade_app_get_accel_group ())
-	{
-		gtk_window_add_accel_group (GTK_WINDOW (window), 
-					    glade_app_get_accel_group ());
-		g_signal_connect (G_OBJECT (window), "key-press-event",
-				  G_CALLBACK (glade_utils_hijack_key_press), NULL);
-	}
-
-	gtk_widget_show_all (GTK_WIDGET (editor));
-
-	gtk_container_set_border_width (GTK_CONTAINER (editor), 6);
-	gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (editor));
-	
-	gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
-	
-	return window;
+glade_base_editor_pack_new_window (GladeBaseEditor * editor,
+                                   gchar * title, gchar * help_markup)
+{
+  GtkWidget *window, *buttonbox, *button;
+  gchar *real_title;
+
+  g_return_val_if_fail (GLADE_IS_BASE_EDITOR (editor), NULL);
+
+  /* Window */
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  if (title)
+    {
+      real_title = g_strdup_printf ("%s - %s", title,
+                                    glade_widget_get_name (editor->priv->
+                                                           gcontainer));
+      gtk_window_set_title (GTK_WINDOW (window), real_title);
+      g_free (real_title);
+    }
+
+  g_signal_connect_swapped (G_OBJECT (editor), "notify::container",
+                            G_CALLBACK (gtk_widget_destroy), window);
+
+  /* Button Box */
+  buttonbox = gtk_hbutton_box_new ();
+  gtk_widget_show (buttonbox);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (buttonbox), GTK_BUTTONBOX_END);
+  gtk_box_set_spacing (GTK_BOX (buttonbox), 8);
+  gtk_box_pack_start (GTK_BOX (editor), buttonbox, FALSE, TRUE, 0);
+
+  button = gtk_button_new_from_stock (GTK_STOCK_HELP);
+  gtk_widget_show (button);
+  g_signal_connect (button, "clicked",
+                    G_CALLBACK (glade_base_editor_help),
+                    help_markup ? help_markup :
+                    _("<big><b>Tips:</b></big>\n"
+                      "  * Right-click over the treeview to add items.\n"
+                      "  * Press Delete to remove the selected item.\n"
+                      "  * Drag &amp; Drop to reorder.\n"
+                      "  * Type column is editable."));
+  gtk_container_add (GTK_CONTAINER (buttonbox), button);
+  gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (buttonbox), button, TRUE);
+
+  if (glade_app_get_accel_group ())
+    {
+      gtk_window_add_accel_group (GTK_WINDOW (window),
+                                  glade_app_get_accel_group ());
+      g_signal_connect (G_OBJECT (window), "key-press-event",
+                        G_CALLBACK (glade_utils_hijack_key_press), NULL);
+    }
+
+  gtk_widget_show_all (GTK_WIDGET (editor));
+
+  gtk_container_set_border_width (GTK_CONTAINER (editor), 6);
+  gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (editor));
+
+  gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
+
+  return window;
 }



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