[glade] GladeLabelEditor: Port to be a composite template and derive from GladeEditorSkeleton



commit 824e913b502db3f6c265a76891ebcd50568274c7
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date:   Sun Apr 21 18:13:48 2013 +0900

    GladeLabelEditor: Port to be a composite template and derive from GladeEditorSkeleton
    
    Now the GladeLabelEditor can be edited in Glade.

 plugins/gtk+/Makefile.am                       |   1 +
 plugins/gtk+/glade-gtk-resources.gresource.xml |   1 +
 plugins/gtk+/glade-gtk.c                       |  48 +-
 plugins/gtk+/glade-label-editor.c              | 181 +++--
 plugins/gtk+/glade-label-editor.h              |  39 +-
 plugins/gtk+/glade-label-editor.ui             | 955 +++++++++++++++++++++++++
 plugins/gtk+/gtk+.xml.in                       |  22 +-
 po/POTFILES.in                                 |   1 +
 8 files changed, 1095 insertions(+), 153 deletions(-)
---
diff --git a/plugins/gtk+/Makefile.am b/plugins/gtk+/Makefile.am
index 82c6983..46b5dec 100644
--- a/plugins/gtk+/Makefile.am
+++ b/plugins/gtk+/Makefile.am
@@ -103,6 +103,7 @@ BUILT_SOURCES =             \
 UI_FILES =                             \
        glade-activatable-editor.ui     \
        glade-button-editor.ui          \
+       glade-label-editor.ui           \
        glade-widget-editor.ui
 
 EXTRA_DIST =                                   \
diff --git a/plugins/gtk+/glade-gtk-resources.gresource.xml b/plugins/gtk+/glade-gtk-resources.gresource.xml
index 1cd6fd9..7e58d90 100644
--- a/plugins/gtk+/glade-gtk-resources.gresource.xml
+++ b/plugins/gtk+/glade-gtk-resources.gresource.xml
@@ -3,6 +3,7 @@
   <gresource prefix="/org/gnome/gladegtk">
     <file compressed="true" preprocess="xml-stripblanks">glade-activatable-editor.ui</file>
     <file compressed="true" preprocess="xml-stripblanks">glade-button-editor.ui</file>
+    <file compressed="true" preprocess="xml-stripblanks">glade-label-editor.ui</file>
     <file compressed="true" preprocess="xml-stripblanks">glade-widget-editor.ui</file>
   </gresource>
 </gresources>
diff --git a/plugins/gtk+/glade-gtk.c b/plugins/gtk+/glade-gtk.c
index 953704c..7f18f15 100644
--- a/plugins/gtk+/glade-gtk.c
+++ b/plugins/gtk+/glade-gtk.c
@@ -6489,43 +6489,6 @@ glade_gtk_label_set_use_underline (GObject * object, const GValue * value)
   gtk_label_set_use_underline (GTK_LABEL (object), g_value_get_boolean (value));
 }
 
-static void
-glade_gtk_label_set_ellipsize (GObject * object, const GValue * value)
-{
-  GladeWidget *glabel;
-  const gchar *insensitive_msg =
-      _("This property does not apply when Ellipsize is set.");
-
-  glabel = glade_widget_get_from_gobject (object);
-
-  if (!glade_widget_property_original_default (glabel, "ellipsize"))
-    glade_widget_property_set_sensitive (glabel, "angle", FALSE,
-                                         insensitive_msg);
-  else
-    glade_widget_property_set_sensitive (glabel, "angle", TRUE, NULL);
-
-  gtk_label_set_ellipsize (GTK_LABEL (object), g_value_get_enum (value));
-}
-
-
-static void
-glade_gtk_label_set_angle (GObject * object, const GValue * value)
-{
-  GladeWidget *glabel;
-  const gchar *insensitive_msg =
-      _("This property does not apply when Angle is set.");
-
-  glabel = glade_widget_get_from_gobject (object);
-
-  if (!glade_widget_property_original_default (glabel, "angle"))
-    glade_widget_property_set_sensitive (glabel, "ellipsize", FALSE,
-                                         insensitive_msg);
-  else
-    glade_widget_property_set_sensitive (glabel, "ellipsize", TRUE, NULL);
-
-  gtk_label_set_angle (GTK_LABEL (object), g_value_get_double (value));
-}
-
 void
 glade_gtk_label_set_property (GladeWidgetAdaptor * adaptor,
                               GObject * object,
@@ -6543,10 +6506,6 @@ glade_gtk_label_set_property (GladeWidgetAdaptor * adaptor,
     glade_gtk_label_set_wrap_mode (object, value);
   else if (!strcmp (id, "use-underline"))
     glade_gtk_label_set_use_underline (object, value);
-  else if (!strcmp (id, "ellipsize"))
-    glade_gtk_label_set_ellipsize (object, value);
-  else if (!strcmp (id, "angle"))
-    glade_gtk_label_set_angle (object, value);
   else
     GWA_GET_CLASS (GTK_TYPE_WIDGET)->set_property (adaptor, object, id, value);
 }
@@ -6789,11 +6748,10 @@ glade_gtk_label_create_editable (GladeWidgetAdaptor * adaptor,
 {
   GladeEditable *editable;
 
-  /* Get base editable */
-  editable = GWA_GET_CLASS (GTK_TYPE_WIDGET)->create_editable (adaptor, type);
-
   if (type == GLADE_PAGE_GENERAL)
-    return (GladeEditable *) glade_label_editor_new (adaptor, editable);
+    editable = (GladeEditable *) glade_label_editor_new ();
+  else
+    editable = GWA_GET_CLASS (GTK_TYPE_WIDGET)->create_editable (adaptor, type);
 
   return editable;
 }
diff --git a/plugins/gtk+/glade-label-editor.c b/plugins/gtk+/glade-label-editor.c
index e0f4ad5..b4571ff 100644
--- a/plugins/gtk+/glade-label-editor.c
+++ b/plugins/gtk+/glade-label-editor.c
@@ -26,66 +26,116 @@
 
 #include "glade-label-editor.h"
 
+/* GtkWidgetClass */
+static void glade_label_editor_grab_focus    (GtkWidget          *widget);
+
+/* GladeEditableIface */
+static void glade_label_editor_load          (GladeEditable      *editable,
+                                             GladeWidget        *widget);
+static void glade_label_editor_editable_init (GladeEditableIface *iface);
+
+/* Callbacks */
+static void attributes_toggled (GtkWidget *widget, GladeLabelEditor *label_editor);
+static void markup_toggled     (GtkWidget *widget, GladeLabelEditor *label_editor);
+static void pattern_toggled    (GtkWidget *widget, GladeLabelEditor *label_editor);
+static void width_toggled      (GtkWidget *widget, GladeLabelEditor *label_editor);
+static void max_width_toggled  (GtkWidget *widget, GladeLabelEditor *label_editor);
+static void wrap_free_toggled  (GtkWidget *widget, GladeLabelEditor *label_editor);
+static void single_toggled     (GtkWidget *widget, GladeLabelEditor *label_editor);
+static void wrap_mode_toggled  (GtkWidget *widget, GladeLabelEditor *label_editor);
+
+struct _GladeLabelEditorPrivate
+{
+  GtkWidget *embed;
 
-static void glade_label_editor_finalize (GObject * object);
-
-static void glade_label_editor_editable_init (GladeEditableIface * iface);
+  GtkWidget *attributes_radio;    /* Set pango attributes manually (attributes eprop embedded) */
+  GtkWidget *markup_radio;        /* Parse the label as a pango markup string (no showing eprop) */
+  GtkWidget *pattern_radio;       /* Use a pattern string to underline portions of the text
+                                  * (pattern eprop embedded) */
 
-static void glade_label_editor_grab_focus (GtkWidget * widget);
+  /* These control whether to use max-width-chars or just width-chars */
+  GtkWidget *width_radio;
+  GtkWidget *max_width_radio;
 
+  /* These control whether to use single-line-mode, wrap & wrap-mode or niether */
+  GtkWidget *wrap_free_label; /* Set boldness on this label for a fake property */
+  GtkWidget *wrap_free_radio;
+  GtkWidget *single_radio;
+  GtkWidget *wrap_mode_radio;
+};
 
 static GladeEditableIface *parent_editable_iface;
 
-G_DEFINE_TYPE_WITH_CODE (GladeLabelEditor, glade_label_editor, GTK_TYPE_VBOX,
+G_DEFINE_TYPE_WITH_CODE (GladeLabelEditor, glade_label_editor, GLADE_TYPE_EDITOR_SKELETON,
                          G_IMPLEMENT_INTERFACE (GLADE_TYPE_EDITABLE,
                                                 glade_label_editor_editable_init));
 
-
 static void
 glade_label_editor_class_init (GladeLabelEditorClass * klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
-  object_class->finalize = glade_label_editor_finalize;
   widget_class->grab_focus = glade_label_editor_grab_focus;
+
+  gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/gladegtk/glade-label-editor.ui");
+
+  gtk_widget_class_bind_child (widget_class, GladeLabelEditorPrivate, embed);
+  gtk_widget_class_bind_child (widget_class, GladeLabelEditorPrivate, attributes_radio);
+  gtk_widget_class_bind_child (widget_class, GladeLabelEditorPrivate, markup_radio);
+  gtk_widget_class_bind_child (widget_class, GladeLabelEditorPrivate, pattern_radio);
+  gtk_widget_class_bind_child (widget_class, GladeLabelEditorPrivate, width_radio);
+  gtk_widget_class_bind_child (widget_class, GladeLabelEditorPrivate, max_width_radio);
+  gtk_widget_class_bind_child (widget_class, GladeLabelEditorPrivate, wrap_free_label);
+  gtk_widget_class_bind_child (widget_class, GladeLabelEditorPrivate, wrap_free_radio);
+  gtk_widget_class_bind_child (widget_class, GladeLabelEditorPrivate, single_radio);
+  gtk_widget_class_bind_child (widget_class, GladeLabelEditorPrivate, wrap_mode_radio);
+
+  gtk_widget_class_bind_callback (widget_class, attributes_toggled);
+  gtk_widget_class_bind_callback (widget_class, markup_toggled);
+  gtk_widget_class_bind_callback (widget_class, pattern_toggled);
+  gtk_widget_class_bind_callback (widget_class, width_toggled);
+  gtk_widget_class_bind_callback (widget_class, max_width_toggled);
+  gtk_widget_class_bind_callback (widget_class, wrap_free_toggled);
+  gtk_widget_class_bind_callback (widget_class, single_toggled);
+  gtk_widget_class_bind_callback (widget_class, wrap_mode_toggled);
+
+  g_type_class_add_private (object_class, sizeof (GladeLabelEditorPrivate));  
 }
 
 static void
 glade_label_editor_init (GladeLabelEditor * self)
 {
+  self->priv = 
+    G_TYPE_INSTANCE_GET_PRIVATE (self,
+                                GLADE_TYPE_LABEL_EDITOR,
+                                GladeLabelEditorPrivate);
+
+  gtk_widget_init_template (GTK_WIDGET (self));
 }
 
 static void
 glade_label_editor_load (GladeEditable * editable, GladeWidget * widget)
 {
   GladeLabelEditor *label_editor = GLADE_LABEL_EDITOR (editable);
-  GList *l;
+  GladeLabelEditorPrivate *priv = label_editor->priv;
 
   /* Chain up to default implementation */
   parent_editable_iface->load (editable, widget);
 
-  /* load the embedded editable... */
-  if (label_editor->embed)
-    glade_editable_load (GLADE_EDITABLE (label_editor->embed), widget);
-
-  for (l = label_editor->properties; l; l = l->next)
-    glade_editor_property_load_by_widget (GLADE_EDITOR_PROPERTY (l->data),
-                                          widget);
-
   if (widget)
     {
       GladeLabelContentMode content_mode;
       GladeLabelWrapMode wrap_mode;
-      static PangoAttrList *bold_attr_list = NULL;
+      static PangoAttrList *italic_attr_list = NULL;
       gboolean use_max_width;
 
-      if (!bold_attr_list)
+      if (!italic_attr_list)
         {
           PangoAttribute *attr;
-          bold_attr_list = pango_attr_list_new ();
-          attr = pango_attr_weight_new (PANGO_WEIGHT_BOLD);
-          pango_attr_list_insert (bold_attr_list, attr);
+          italic_attr_list = pango_attr_list_new ();
+          attr = pango_attr_style_new (PANGO_STYLE_ITALIC);
+          pango_attr_list_insert (italic_attr_list, attr);
         }
 
       glade_widget_property_get (widget, "label-content-mode", &content_mode);
@@ -96,42 +146,42 @@ glade_label_editor_load (GladeEditable * editable, GladeWidget * widget)
         {
           case GLADE_LABEL_MODE_ATTRIBUTES:
             gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
-                                          (label_editor->attributes_radio),
+                                          (priv->attributes_radio),
                                           TRUE);
             break;
           case GLADE_LABEL_MODE_MARKUP:
             gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
-                                          (label_editor->markup_radio), TRUE);
+                                          (priv->markup_radio), TRUE);
             break;
           case GLADE_LABEL_MODE_PATTERN:
             gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
-                                          (label_editor->pattern_radio), TRUE);
+                                          (priv->pattern_radio), TRUE);
             break;
           default:
             break;
         }
 
       if (wrap_mode == GLADE_LABEL_WRAP_FREE)
-        gtk_label_set_attributes (GTK_LABEL (label_editor->wrap_free_label),
-                                  bold_attr_list);
+        gtk_label_set_attributes (GTK_LABEL (priv->wrap_free_label),
+                                  italic_attr_list);
       else
-        gtk_label_set_attributes (GTK_LABEL (label_editor->wrap_free_label),
+        gtk_label_set_attributes (GTK_LABEL (priv->wrap_free_label),
                                   NULL);
 
       switch (wrap_mode)
         {
           case GLADE_LABEL_WRAP_FREE:
             gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
-                                          (label_editor->wrap_free_radio),
+                                          (priv->wrap_free_radio),
                                           TRUE);
             break;
           case GLADE_LABEL_SINGLE_LINE:
             gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
-                                          (label_editor->single_radio), TRUE);
+                                          (priv->single_radio), TRUE);
             break;
           case GLADE_LABEL_WRAP_MODE:
             gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
-                                          (label_editor->wrap_mode_radio),
+                                          (priv->wrap_mode_radio),
                                           TRUE);
             break;
           default:
@@ -140,62 +190,38 @@ glade_label_editor_load (GladeEditable * editable, GladeWidget * widget)
 
       if (use_max_width)
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
-                                      (label_editor->max_width_radio), TRUE);
+                                      (priv->max_width_radio), TRUE);
       else
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
-                                      (label_editor->width_radio), TRUE);
+                                      (priv->width_radio), TRUE);
 
     }
 }
 
 static void
-glade_label_editor_set_show_name (GladeEditable * editable, gboolean show_name)
-{
-  GladeLabelEditor *label_editor = GLADE_LABEL_EDITOR (editable);
-
-  glade_editable_set_show_name (GLADE_EDITABLE (label_editor->embed),
-                                show_name);
-}
-
-static void
 glade_label_editor_editable_init (GladeEditableIface * iface)
 {
-  parent_editable_iface = g_type_default_interface_peek (GLADE_TYPE_EDITABLE);
+  parent_editable_iface = g_type_interface_peek_parent (iface);
 
   iface->load = glade_label_editor_load;
-  iface->set_show_name = glade_label_editor_set_show_name;
-}
-
-static void
-glade_label_editor_finalize (GObject * object)
-{
-  GladeLabelEditor *label_editor = GLADE_LABEL_EDITOR (object);
-
-  if (label_editor->properties)
-    g_list_free (label_editor->properties);
-  label_editor->properties = NULL;
-  label_editor->embed = NULL;
-
-  glade_editable_load (GLADE_EDITABLE (object), NULL);
-
-  G_OBJECT_CLASS (glade_label_editor_parent_class)->finalize (object);
 }
 
 static void
 glade_label_editor_grab_focus (GtkWidget * widget)
 {
-  GladeLabelEditor *label_editor = GLADE_LABEL_EDITOR (widget);
+  GladeLabelEditor        *label_editor = GLADE_LABEL_EDITOR (widget);
+  GladeLabelEditorPrivate *priv = label_editor->priv;
 
-  gtk_widget_grab_focus (label_editor->embed);
+  gtk_widget_grab_focus (priv->embed);
 }
 
-
 /**********************************************************************
                     label-content-mode radios
  **********************************************************************/
 static void
 attributes_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
 {
+  GladeLabelEditorPrivate *priv = label_editor->priv;
   GladeProperty *property;
   GladeWidget   *gwidget = glade_editable_loaded_widget (GLADE_EDITABLE (label_editor));
 
@@ -203,7 +229,7 @@ attributes_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
     return;
 
   if (!gtk_toggle_button_get_active
-      (GTK_TOGGLE_BUTTON (label_editor->attributes_radio)))
+      (GTK_TOGGLE_BUTTON (priv->attributes_radio)))
     return;
 
   glade_editable_block (GLADE_EDITABLE (label_editor));
@@ -229,6 +255,7 @@ attributes_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
 static void
 markup_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
 {
+  GladeLabelEditorPrivate *priv = label_editor->priv;
   GladeProperty *property;
   GladeWidget   *gwidget = glade_editable_loaded_widget (GLADE_EDITABLE (label_editor));
 
@@ -236,7 +263,7 @@ markup_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
     return;
 
   if (!gtk_toggle_button_get_active
-      (GTK_TOGGLE_BUTTON (label_editor->markup_radio)))
+      (GTK_TOGGLE_BUTTON (priv->markup_radio)))
     return;
 
   glade_editable_block (GLADE_EDITABLE (label_editor));
@@ -265,6 +292,7 @@ markup_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
 static void
 pattern_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
 {
+  GladeLabelEditorPrivate *priv = label_editor->priv;
   GladeProperty *property;
   GladeWidget   *gwidget = glade_editable_loaded_widget (GLADE_EDITABLE (label_editor));
 
@@ -272,7 +300,7 @@ pattern_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
     return;
 
   if (!gtk_toggle_button_get_active
-      (GTK_TOGGLE_BUTTON (label_editor->pattern_radio)))
+      (GTK_TOGGLE_BUTTON (priv->pattern_radio)))
     return;
 
   glade_editable_block (GLADE_EDITABLE (label_editor));
@@ -298,10 +326,10 @@ pattern_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
 /**********************************************************************
                     use-max-width radios
  **********************************************************************/
-
 static void
 width_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
 {
+  GladeLabelEditorPrivate *priv = label_editor->priv;
   GladeProperty *property;
   GladeWidget   *gwidget = glade_editable_loaded_widget (GLADE_EDITABLE (label_editor));
 
@@ -309,7 +337,7 @@ width_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
     return;
 
   if (!gtk_toggle_button_get_active
-      (GTK_TOGGLE_BUTTON (label_editor->width_radio)))
+      (GTK_TOGGLE_BUTTON (priv->width_radio)))
     return;
 
   glade_editable_block (GLADE_EDITABLE (label_editor));
@@ -333,6 +361,7 @@ width_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
 static void
 max_width_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
 {
+  GladeLabelEditorPrivate *priv = label_editor->priv;
   GladeProperty *property;
   GladeWidget   *gwidget = glade_editable_loaded_widget (GLADE_EDITABLE (label_editor));
 
@@ -340,7 +369,7 @@ max_width_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
     return;
 
   if (!gtk_toggle_button_get_active
-      (GTK_TOGGLE_BUTTON (label_editor->max_width_radio)))
+      (GTK_TOGGLE_BUTTON (priv->max_width_radio)))
     return;
 
   glade_editable_block (GLADE_EDITABLE (label_editor));
@@ -367,6 +396,7 @@ max_width_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
 static void
 wrap_free_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
 {
+  GladeLabelEditorPrivate *priv = label_editor->priv;
   GladeProperty *property;
   GladeWidget   *gwidget = glade_editable_loaded_widget (GLADE_EDITABLE (label_editor));
 
@@ -374,7 +404,7 @@ wrap_free_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
     return;
 
   if (!gtk_toggle_button_get_active
-      (GTK_TOGGLE_BUTTON (label_editor->wrap_free_radio)))
+      (GTK_TOGGLE_BUTTON (priv->wrap_free_radio)))
     return;
 
   glade_editable_block (GLADE_EDITABLE (label_editor));
@@ -403,6 +433,7 @@ wrap_free_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
 static void
 single_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
 {
+  GladeLabelEditorPrivate *priv = label_editor->priv;
   GladeProperty *property;
   GladeWidget   *gwidget = glade_editable_loaded_widget (GLADE_EDITABLE (label_editor));
 
@@ -410,7 +441,7 @@ single_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
     return;
 
   if (!gtk_toggle_button_get_active
-      (GTK_TOGGLE_BUTTON (label_editor->single_radio)))
+      (GTK_TOGGLE_BUTTON (priv->single_radio)))
     return;
 
   glade_editable_block (GLADE_EDITABLE (label_editor));
@@ -439,6 +470,7 @@ single_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
 static void
 wrap_mode_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
 {
+  GladeLabelEditorPrivate *priv = label_editor->priv;
   GladeProperty *property;
   GladeWidget   *gwidget = glade_editable_loaded_widget (GLADE_EDITABLE (label_editor));
 
@@ -446,7 +478,7 @@ wrap_mode_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
     return;
 
   if (!gtk_toggle_button_get_active
-      (GTK_TOGGLE_BUTTON (label_editor->wrap_mode_radio)))
+      (GTK_TOGGLE_BUTTON (priv->wrap_mode_radio)))
     return;
 
   glade_editable_block (GLADE_EDITABLE (label_editor));
@@ -470,6 +502,7 @@ wrap_mode_toggled (GtkWidget * widget, GladeLabelEditor * label_editor)
   glade_editable_load (GLADE_EDITABLE (label_editor), gwidget);
 }
 
+#if 0
 static void
 table_attach (GtkWidget * table, GtkWidget * child, gint pos, gint row)
 {
@@ -717,10 +750,15 @@ append_label_wrapping (GladeLabelEditor * label_editor,
                           single_line_eprop,
                           (GDestroyNotify) gtk_widget_destroy);
 }
+#endif
+
 
 GtkWidget *
-glade_label_editor_new (GladeWidgetAdaptor * adaptor, GladeEditable * embed)
+glade_label_editor_new (void)
 {
+  return g_object_new (GLADE_TYPE_LABEL_EDITOR, NULL);
+
+#if 0
   GladeLabelEditor *label_editor;
 
   g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), NULL);
@@ -761,4 +799,5 @@ glade_label_editor_new (GladeWidgetAdaptor * adaptor, GladeEditable * embed)
   gtk_widget_show_all (GTK_WIDGET (label_editor));
 
   return GTK_WIDGET (label_editor);
+#endif
 }
diff --git a/plugins/gtk+/glade-label-editor.h b/plugins/gtk+/glade-label-editor.h
index 260aa0e..b5b9ee4 100644
--- a/plugins/gtk+/glade-label-editor.h
+++ b/plugins/gtk+/glade-label-editor.h
@@ -34,51 +34,34 @@ G_BEGIN_DECLS
 
 typedef struct _GladeLabelEditor        GladeLabelEditor;
 typedef struct _GladeLabelEditorClass   GladeLabelEditorClass;
+typedef struct _GladeLabelEditorPrivate GladeLabelEditorPrivate;
 
 typedef enum {
-       GLADE_LABEL_MODE_ATTRIBUTES = 0, /* default */
-       GLADE_LABEL_MODE_MARKUP,
-       GLADE_LABEL_MODE_PATTERN
+  GLADE_LABEL_MODE_ATTRIBUTES = 0, /* default */
+  GLADE_LABEL_MODE_MARKUP,
+  GLADE_LABEL_MODE_PATTERN
 } GladeLabelContentMode;
 
 typedef enum {
-       GLADE_LABEL_WRAP_FREE = 0, /* default */
-       GLADE_LABEL_SINGLE_LINE,
-       GLADE_LABEL_WRAP_MODE
+  GLADE_LABEL_WRAP_FREE = 0, /* default */
+  GLADE_LABEL_SINGLE_LINE,
+  GLADE_LABEL_WRAP_MODE
 } GladeLabelWrapMode;
 
 struct _GladeLabelEditor
 {
-       GtkVBox  parent;
+  GladeEditorSkeleton parent;
 
-       GtkWidget *embed;
-
-       GtkWidget *attributes_radio;    /* Set pango attributes manually (attributes eprop embedded) */
-       GtkWidget *markup_radio;        /* Parse the label as a pango markup string (no showing eprop) */
-       GtkWidget *pattern_radio;       /* Use a pattern string to underline portions of the text
-                                        * (pattern eprop embedded) */
-
-       /* These control whether to use max-width-chars or just width-chars */
-       GtkWidget *width_radio;
-       GtkWidget *max_width_radio;
-
-       /* These control whether to use single-line-mode, wrap & wrap-mode or niether */
-       GtkWidget *wrap_free_label; /* Set boldness on this label for a fake property */
-       GtkWidget *wrap_free_radio;
-       GtkWidget *single_radio;
-       GtkWidget *wrap_mode_radio;
-
-       GList *properties;         /* A list of eprops to update at load() time */
+  GladeLabelEditorPrivate *priv;
 };
 
 struct _GladeLabelEditorClass
 {
-       GtkVBoxClass parent;
+  GladeEditorSkeletonClass parent;
 };
 
 GType            glade_label_editor_get_type (void) G_GNUC_CONST;
-GtkWidget       *glade_label_editor_new      (GladeWidgetAdaptor *adaptor,
-                                             GladeEditable      *editable);
+GtkWidget       *glade_label_editor_new      (void);
 
 G_END_DECLS
 
diff --git a/plugins/gtk+/glade-label-editor.ui b/plugins/gtk+/glade-label-editor.ui
new file mode 100644
index 0000000..4e31b6c
--- /dev/null
+++ b/plugins/gtk+/glade-label-editor.ui
@@ -0,0 +1,955 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface domain="glade">
+  <!-- interface-requires gladeui 0.0 -->
+  <!-- interface-requires gtk+ 3.8 -->
+  <template class="GladeLabelEditor" parent="GladeEditorSkeleton">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="has_focus">False</property>
+    <property name="is_focus">False</property>
+    <property name="orientation">vertical</property>
+    <child>
+      <object class="GtkGrid" id="grid">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="has_focus">False</property>
+        <property name="is_focus">False</property>
+        <property name="row_spacing">6</property>
+        <property name="column_spacing">6</property>
+        <child>
+          <object class="GladeEditorTable" id="embed">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+            <property name="width">6</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="appearance_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="halign">start</property>
+            <property name="valign">center</property>
+            <property name="label" translatable="yes">Appearance</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">1</property>
+            <property name="width">6</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyLabel" id="label_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">label</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">2</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="label_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="hexpand">True</property>
+            <property name="property_name">label</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">2</property>
+            <property name="width">5</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="attributes_radio">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="receives_default">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="xalign">0</property>
+            <property name="active">True</property>
+            <property name="draw_indicator">True</property>
+            <signal name="toggled" handler="attributes_toggled" swapped="no"/>
+            <child>
+              <object class="GladePropertyLabel" id="attributes_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="has_focus">False</property>
+                <property name="is_focus">False</property>
+                <property name="property_name">glade-attributes</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">3</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="attributes_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="hexpand">True</property>
+            <property name="property_name">glade-attributes</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">3</property>
+            <property name="width">5</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="markup_radio">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="receives_default">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="xalign">0</property>
+            <property name="active">True</property>
+            <property name="draw_indicator">True</property>
+            <property name="group">attributes_radio</property>
+            <signal name="toggled" handler="markup_toggled" swapped="no"/>
+            <child>
+              <object class="GladePropertyLabel" id="markup_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="has_focus">False</property>
+                <property name="is_focus">False</property>
+                <property name="property_name">use-markup</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">4</property>
+            <property name="width">2</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="pattern_radio">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="receives_default">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="xalign">0</property>
+            <property name="active">True</property>
+            <property name="draw_indicator">True</property>
+            <property name="group">attributes_radio</property>
+            <signal name="toggled" handler="pattern_toggled" swapped="no"/>
+            <child>
+              <object class="GladePropertyLabel" id="pattern_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="has_focus">False</property>
+                <property name="is_focus">False</property>
+                <property name="property_name">pattern</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">5</property>
+            <property name="width">2</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="pattern_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">pattern</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">5</property>
+            <property name="width">4</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="format_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="halign">start</property>
+            <property name="valign">center</property>
+            <property name="label" translatable="yes">Formatting</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">9</property>
+            <property name="width">6</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="behaviour_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="halign">start</property>
+            <property name="valign">center</property>
+            <property name="label" translatable="yes">Label behaviour</property>
+            <property name="use_underline">True</property>
+            <property name="wrap">True</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">6</property>
+            <property name="width">6</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="selectable_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">selectable</property>
+            <property name="editor_type">GladeEpropCheck</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">7</property>
+            <property name="width">2</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="track_links_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">track-visited-links</property>
+            <property name="editor_type">GladeEpropCheck</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">7</property>
+            <property name="width">4</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="use_underline_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">use-underline</property>
+            <property name="editor_type">GladeEpropCheck</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">8</property>
+            <property name="width">2</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="mnemonic_widget_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">mnemonic-widget</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">8</property>
+            <property name="width">4</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyLabel" id="ellipsize_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">ellipsize</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">10</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="ellipsize_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">ellipsize</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">10</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyLabel" id="justify_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="halign">end</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">justify</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">10</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="justify_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">justify</property>
+          </object>
+          <packing>
+            <property name="left_attach">3</property>
+            <property name="top_attach">10</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyLabel" id="angle_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">angle</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">11</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="angle_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">angle</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">11</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="wrap_free_radio">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="receives_default">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="xalign">0</property>
+            <property name="active">True</property>
+            <property name="draw_indicator">True</property>
+            <signal name="toggled" handler="wrap_free_toggled" swapped="no"/>
+            <child>
+              <object class="GtkLabel" id="wrap_free_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="has_focus">False</property>
+                <property name="is_focus">False</property>
+                <property name="label" translatable="yes">Wrap only on new line</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">12</property>
+            <property name="width">3</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="single_radio">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="receives_default">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="xalign">0</property>
+            <property name="active">True</property>
+            <property name="draw_indicator">True</property>
+            <property name="group">wrap_free_radio</property>
+            <signal name="toggled" handler="single_toggled" swapped="no"/>
+            <child>
+              <object class="GladePropertyLabel" id="single_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="has_focus">False</property>
+                <property name="is_focus">False</property>
+                <property name="property_name">single-line-mode</property>
+                <property name="custom_text" translatable="yes">Never wrap</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">13</property>
+            <property name="width">3</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="wrap_mode_radio">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="receives_default">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="xalign">0</property>
+            <property name="active">True</property>
+            <property name="draw_indicator">True</property>
+            <property name="group">single_radio</property>
+            <signal name="toggled" handler="wrap_mode_toggled" swapped="no"/>
+            <child>
+              <object class="GladePropertyLabel" id="wrap_mode_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="has_focus">False</property>
+                <property name="is_focus">False</property>
+                <property name="property_name">wrap-mode</property>
+                <property name="custom_text" translatable="yes">Automatically wrap</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">14</property>
+            <property name="width">2</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="size_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="halign">start</property>
+            <property name="valign">center</property>
+            <property name="label" translatable="yes">Size and Alignment</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">15</property>
+            <property name="width">6</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="width_radio">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="receives_default">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="xalign">0</property>
+            <property name="active">True</property>
+            <property name="draw_indicator">True</property>
+            <signal name="toggled" handler="width_toggled" swapped="no"/>
+            <child>
+              <object class="GladePropertyLabel" id="width_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="has_focus">False</property>
+                <property name="is_focus">False</property>
+                <property name="property_name">width-chars</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">16</property>
+            <property name="width">3</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="width_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">width-chars</property>
+          </object>
+          <packing>
+            <property name="left_attach">3</property>
+            <property name="top_attach">16</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="max_width_radio">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="receives_default">False</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="xalign">0</property>
+            <property name="active">True</property>
+            <property name="draw_indicator">True</property>
+            <property name="group">width_radio</property>
+            <signal name="toggled" handler="max_width_toggled" swapped="no"/>
+            <child>
+              <object class="GladePropertyLabel" id="max_width_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="has_focus">False</property>
+                <property name="is_focus">False</property>
+                <property name="property_name">max-width-chars</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">17</property>
+            <property name="width">3</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="max_width_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">max-width-chars</property>
+          </object>
+          <packing>
+            <property name="left_attach">3</property>
+            <property name="top_attach">17</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="align_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="halign">start</property>
+            <property name="valign">start</property>
+            <property name="margin_left">12</property>
+            <property name="margin_top">4</property>
+            <property name="hexpand">False</property>
+            <property name="label" translatable="yes">Alignment</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">18</property>
+            <property name="width">2</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyLabel" id="halign_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="halign">end</property>
+            <property name="margin_left">24</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">xalign</property>
+            <property name="custom_text" translatable="yes">Horizontal</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">19</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyLabel" id="valign_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="halign">end</property>
+            <property name="margin_left">24</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">yalign</property>
+            <property name="custom_text" translatable="yes">Vertical</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">20</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="hpad_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">xpad</property>
+          </object>
+          <packing>
+            <property name="left_attach">3</property>
+            <property name="top_attach">19</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="vpad_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">ypad</property>
+          </object>
+          <packing>
+            <property name="left_attach">3</property>
+            <property name="top_attach">20</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="padding_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="halign">start</property>
+            <property name="valign">center</property>
+            <property name="margin_top">4</property>
+            <property name="hexpand">False</property>
+            <property name="label" translatable="yes">Padding</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">18</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyLabel" id="hpad_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="halign">end</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">xpad</property>
+            <property name="custom_text" translatable="yes">Horizontal</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">19</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyLabel" id="vpad_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="halign">end</property>
+            <property name="margin_left">12</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">ypad</property>
+            <property name="custom_text" translatable="yes">Vertical</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">20</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="halign_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">xalign</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">19</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="valign_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">yalign</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">20</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GladePropertyShell" id="wrap_mode_editor">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="has_focus">False</property>
+            <property name="is_focus">False</property>
+            <property name="hexpand">False</property>
+            <property name="property_name">wrap-mode</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">14</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">True</property>
+        <property name="position">0</property>
+      </packing>
+    </child>
+    <child-editors>
+      <editor id="embed"/>
+      <editor id="label_label"/>
+      <editor id="label_editor"/>
+      <editor id="attributes_label"/>
+      <editor id="attributes_editor"/>
+      <editor id="markup_label"/>
+      <editor id="pattern_label"/>
+      <editor id="pattern_editor"/>
+      <editor id="selectable_editor"/>
+      <editor id="track_links_editor"/>
+      <editor id="use_underline_editor"/>
+      <editor id="mnemonic_widget_editor"/>
+      <editor id="ellipsize_label"/>
+      <editor id="ellipsize_editor"/>
+      <editor id="justify_label"/>
+      <editor id="justify_editor"/>
+      <editor id="angle_label"/>
+      <editor id="angle_editor"/>
+      <editor id="single_label"/>
+      <editor id="wrap_mode_label"/>
+      <editor id="width_label"/>
+      <editor id="width_editor"/>
+      <editor id="max_width_label"/>
+      <editor id="max_width_editor"/>
+      <editor id="halign_label"/>
+      <editor id="valign_label"/>
+      <editor id="hpad_editor"/>
+      <editor id="vpad_editor"/>
+      <editor id="hpad_label"/>
+      <editor id="vpad_label"/>
+      <editor id="halign_editor"/>
+      <editor id="valign_editor"/>
+      <editor id="wrap_mode_editor"/>
+    </child-editors>
+  </template>
+</interface>
diff --git a/plugins/gtk+/gtk+.xml.in b/plugins/gtk+/gtk+.xml.in
index 791110e..cd6e5f6 100644
--- a/plugins/gtk+/gtk+.xml.in
+++ b/plugins/gtk+/gtk+.xml.in
@@ -917,27 +917,31 @@ embedded in another object</_tooltip>
          </parameter-spec>
         </property>
        <property id="label" default="label" translatable="True" custom-layout="True" multiline="True"/>
-       <property id="glade-attributes" _name="Attributes" save="False" custom-layout="True" 
-                 since="2.16">
+       <property id="glade-attributes" _name="Attributes" save="False" custom-layout="True" since="2.16">
          <parameter-spec>
            <type>GParamBoxed</type>
            <value-type>GladeAttrGList</value-type>
          </parameter-spec>
          <_tooltip>The pango attributes for this label</_tooltip>
        </property>
+
+       <property id="xalign" custom-layout="True"/>
+       <property id="yalign" custom-layout="True"/>
+       <property id="xpad" custom-layout="True"/>
+       <property id="ypad" custom-layout="True"/>
        <property id="pattern" custom-layout="True"/>
        <property id="use-markup" custom-layout="True"/>
-
        <property id="ellipsize" custom-layout="True"/>
-       <property id="justify" custom-layout="True"/>
+       <property id="use-underline" custom-layout="True"/>
+       <property id="mnemonic-widget" custom-layout="True"/>
+       <property id="track-visited-links" custom-layout="True"/>
        <property id="angle" custom-layout="True"/>
        <property id="single-line-mode" custom-layout="True"/>
        <property id="max-width-chars" custom-layout="True"/>
        <property id="width-chars" custom-layout="True"/>
        <property id="wrap" custom-layout="True"/>      
-       <property id="wrap-mode" custom-layout="True"/>
-        <property id="selectable" ignore="True" weight="0.5"/>
-       <property id="justify">
+        <property id="selectable" ignore="True" custom-layout="True"/>
+       <property id="justify" custom-layout="True">
          <displayable-values>
            <value id="GTK_JUSTIFY_LEFT" _name="Left"/>
            <value id="GTK_JUSTIFY_RIGHT" _name="Right"/>
@@ -945,14 +949,14 @@ embedded in another object</_tooltip>
            <value id="GTK_JUSTIFY_FILL" _name="Fill"/>
          </displayable-values>
        </property>
-       <property id="wrap-mode" since="2.10">
+       <property id="wrap-mode" since="2.10" custom-layout="True">
          <displayable-values>
              <value id="PANGO_WRAP_WORD" _name="Word"/>
            <value id="PANGO_WRAP_CHAR" _name="Character"/>
            <value id="PANGO_WRAP_WORD_CHAR" _name="Word Character"/>
          </displayable-values>
        </property>
-       <property id="track-visited-links" since="2.18"/>
+       <property id="track-visited-links" since="2.18" custom-layout="True"/>
       </properties>
 
       <signals>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 02dbcb5..fe7f676 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -80,4 +80,5 @@ plugins/gtk+/gtkunixprint.xml.in
 plugins/gtk+/gtk+.xml.in
 [type: gettext/glade]plugins/gtk+/glade-activatable-editor.ui
 [type: gettext/glade]plugins/gtk+/glade-button-editor.ui
+[type: gettext/glade]plugins/gtk+/glade-label-editor.ui
 [type: gettext/glade]plugins/gtk+/glade-widget-editor.ui


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