summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikael Hallendal <micke@imendio.com>2005-01-13 17:38:16 +0000
committerMikael Hallendal <hallski@src.gnome.org>2005-01-13 17:38:16 +0000
commitdc3bbb143ab9ee8891776a792a00dd736a2ff4cf (patch)
treec908557af9bd5c2f66f10a5c98b0c121802d63a1
parentfa72dfbf614280565fd04a4b556048103c9b9bee (diff)
downloadglade-dc3bbb143ab9ee8891776a792a00dd736a2ff4cf.tar.gz
- Parsing part of getting packing defaults working. Now the information
2005-01-13 Mikael Hallendal <micke@imendio.com> * src/glade-gtk.c: (glade_gtk_menu_bar_post_create): * src/glade-types.h: * src/glade-widget-class.c: (glade_widget_class_packing_default_free), (glade_widget_class_child_packing_free), (glade_widget_class_free), (glade_widget_class_set_packing_defaults_from_node), (glade_widget_class_extend_with_node), (glade_widget_class_get_packing_defaults): * src/glade-widget-class.h: - Parsing part of getting packing defaults working. Now the information needs to be used when packing. * src/glade.h: * widgets/glade-catalog.dtd: - Added packing-defaults with sub nodes * widgets/gtk+.xml: - Added packing defaults for menu bar in GtkBox.
-rw-r--r--ChangeLog19
-rw-r--r--src/glade-gtk.c28
-rw-r--r--src/glade-types.h3
-rw-r--r--src/glade-widget-class.c111
-rw-r--r--src/glade-widget-class.h13
-rw-r--r--src/glade.h4
-rw-r--r--widgets/glade-catalog.dtd14
-rw-r--r--widgets/gtk+.xml.in10
8 files changed, 198 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 61930d6a..afe08ac4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+2005-01-13 Mikael Hallendal <micke@imendio.com>
+
+ * src/glade-gtk.c: (glade_gtk_menu_bar_post_create):
+ * src/glade-types.h:
+ * src/glade-widget-class.c:
+ (glade_widget_class_packing_default_free),
+ (glade_widget_class_child_packing_free), (glade_widget_class_free),
+ (glade_widget_class_set_packing_defaults_from_node),
+ (glade_widget_class_extend_with_node),
+ (glade_widget_class_get_packing_defaults):
+ * src/glade-widget-class.h:
+ - Parsing part of getting packing defaults working. Now the information
+ needs to be used when packing.
+ * src/glade.h:
+ * widgets/glade-catalog.dtd:
+ - Added packing-defaults with sub nodes
+ * widgets/gtk+.xml:
+ - Added packing defaults for menu bar in GtkBox.
+
2005-01-12 Mikael Hallendal <micke@imendio.com>
* configure.in: Bumped GTK+ requirements to 2.4
diff --git a/src/glade-gtk.c b/src/glade-gtk.c
index f6b15a1f..3963fe04 100644
--- a/src/glade-gtk.c
+++ b/src/glade-gtk.c
@@ -1150,6 +1150,34 @@ glade_gtk_window_post_create (GObject *object)
gtk_window_set_default_size (window, 440, 250);
}
+void GLADEGTK_API
+glade_gtk_menu_bar_post_create (GObject *object)
+{
+ GtkMenuBar *menu_bar;
+ GtkWidget *item;
+ GtkWidget *parent;
+
+ g_return_if_fail (GTK_IS_MENU_BAR (object));
+
+ menu_bar = GTK_MENU_BAR (object);
+ parent = gtk_widget_get_parent (GTK_WIDGET (menu_bar));
+
+ if (!parent)
+ g_print ("NOOOOO PARENT\n");
+
+ gtk_box_set_child_packing (GTK_BOX (parent), GTK_WIDGET (menu_bar),
+ FALSE, TRUE, 0, GTK_PACK_START);
+
+ item = gtk_menu_item_new_with_mnemonic (_("_File"));
+ gtk_menu_bar_append (menu_bar, item);
+
+ item = gtk_menu_item_new_with_mnemonic (_("_Edit"));
+ gtk_menu_bar_append (menu_bar, item);
+
+ item = gtk_menu_item_new_with_mnemonic (_("_Help"));
+ gtk_menu_bar_append (menu_bar, item);
+}
+
/**
* glade_gtk_dialog_post_create:
* @object:
diff --git a/src/glade-types.h b/src/glade-types.h
index 93299592..07919c46 100644
--- a/src/glade-types.h
+++ b/src/glade-types.h
@@ -11,7 +11,8 @@ typedef struct _GladeClipboard GladeClipboard;
typedef struct _GladeWidget GladeWidget;
typedef struct _GladeWidgetClass GladeWidgetClass;
-typedef struct _GladeWidgetClassSignal GladeWidgetClassSignal;
+typedef struct _GladeWidgetClassSignal GladeWidgetClassSignal;
+typedef struct _GladePackagingDefault GladePackingDefault;
typedef struct _GladeProperty GladeProperty;
typedef struct _GladePropertyClass GladePropertyClass;
diff --git a/src/glade-widget-class.c b/src/glade-widget-class.c
index d3e8af8b..ea73993a 100644
--- a/src/glade-widget-class.c
+++ b/src/glade-widget-class.c
@@ -50,6 +50,11 @@ static GHashTable *widget_classes = NULL;
#define GLADE_ICON_SIZE 24
+typedef struct {
+ gchar *parent_name;
+ GList *packing_defaults;
+} GladeChildPacking;
+
static void
glade_widget_class_free_child (GladeSupportedChild *child)
{
@@ -58,6 +63,23 @@ glade_widget_class_free_child (GladeSupportedChild *child)
g_free (child);
}
+static void
+glade_widget_class_packing_default_free (GladePackingDefault *def)
+{
+ g_free (def->id);
+ g_free (def->value);
+}
+
+static void
+glade_widget_class_child_packing_free (GladeChildPacking *packing)
+{
+ g_free (packing->parent_name);
+
+ g_list_foreach (packing->packing_defaults,
+ (GFunc) glade_widget_class_packing_default_free, NULL);
+ g_list_free (packing->packing_defaults);
+}
+
/**
* glade_widget_class_free:
* @widget_class: a #GladeWidgetClass
@@ -79,6 +101,8 @@ glade_widget_class_free (GladeWidgetClass *widget_class)
g_list_foreach (widget_class->children, (GFunc) glade_widget_class_free_child, NULL);
g_list_free (widget_class->children);
+
+
g_list_foreach (widget_class->signals, (GFunc) glade_signal_free, NULL);
g_list_free (widget_class->signals);
@@ -374,6 +398,65 @@ glade_widget_class_update_properties_from_node (GladeXmlNode *node,
}
}
+static void
+glade_widget_class_set_packing_defaults_from_node (GladeXmlNode *node,
+ GladeWidgetClass *widget_class)
+{
+ GladeXmlNode *child;
+
+ child = glade_xml_node_get_children (node);
+ for (; child; child = glade_xml_node_next (child))
+ {
+ gchar *name;
+ GladeXmlNode *prop_node;
+ GladeChildPacking *packing;
+
+ if (!glade_xml_node_verify (child, GLADE_TAG_PARENT_CLASS))
+ continue;
+
+ name = glade_xml_get_property_string_required (child,
+ GLADE_TAG_NAME,
+ widget_class->name);
+
+ if (!name)
+ continue;
+
+ packing = g_new0 (GladeChildPacking, 1);
+ packing->parent_name = name;
+ packing->packing_defaults = NULL;
+
+ prop_node = glade_xml_node_get_children (child);
+ for (; prop_node; prop_node = glade_xml_node_next (prop_node))
+ {
+ GladePackingDefault *def;
+ gchar *id;
+ gchar *value;
+
+ id = glade_xml_get_property_string_required (prop_node,
+ GLADE_TAG_ID,
+ widget_class->name);
+ if (!id)
+ continue;
+
+ value = glade_xml_get_property_string_required (prop_node,
+ GLADE_TAG_DEFAULT,
+ widget_class->name);
+ if (!value)
+ {
+ g_free (id);
+ continue;
+ }
+
+ def = g_new0 (GladePackingDefault, 1);
+ def->id = id;
+ def->value = value;
+
+ packing->packing_defaults = g_list_prepend (packing->packing_defaults,
+ def);
+ }
+ }
+}
+
static gint
glade_widget_class_find_child_by_type (GladeSupportedChild *child, GType type)
{
@@ -528,6 +611,13 @@ glade_widget_class_extend_with_node (GladeWidgetClass *widget_class,
widget_class);
}
+ child = glade_xml_search_child (node, GLADE_TAG_PACKING_DEFAULTS);
+ if (child)
+ {
+ glade_widget_class_set_packing_defaults_from_node (child,
+ widget_class);
+ }
+
return TRUE;
}
@@ -1259,3 +1349,24 @@ glade_widget_class_contains_non_widgets (GladeWidgetClass *class)
}
return FALSE;
}
+
+/* Returned list should be freed with g_list_free */
+GList *
+glade_widget_class_get_packing_defaults (GladeWidgetClass *class,
+ GladeWidgetClass *parent)
+{
+ GList *l;
+
+ for (l = class->packing_defaults; l; l = l->next)
+ {
+ GladeChildPacking *packing;
+
+ packing = (GladeChildPacking *) l->data;
+ /* FIXME: Chain up */
+ if (strcmp (packing->parent_name, parent->name) == 0)
+ return g_list_copy (packing->packing_defaults);
+ }
+
+ return NULL;
+}
+
diff --git a/src/glade-widget-class.h b/src/glade-widget-class.h
index 64edd0dc..c0e532be 100644
--- a/src/glade-widget-class.h
+++ b/src/glade-widget-class.h
@@ -64,6 +64,7 @@ struct _GladeWidgetClass
GList *signals; /* List of GladeWidgetClassSignal objects */
GList *children; /* List of GladeSupportedChild objects */
+ GList *packing_defaults; /* List of GladeChildProperty objects */
GModule *module; /* Module with the (optional) special functions
* needed for placeholder_replace, post_create_function
@@ -138,7 +139,15 @@ struct _GladeWidgetClassSignal
gchar *type; /* Name of the object class that this signal belongs to
* eg GtkButton */
};
-
+
+/* Need to go through all properties in catalog file and compare
+ * against parent class.
+ */
+struct _GladePackagingDefault
+{
+ gchar *id;
+ gchar *value;
+};
GladeWidgetClass *glade_widget_class_new (GladeXmlNode *class_node,
const gchar *library);
@@ -181,6 +190,8 @@ void glade_widget_class_container_replace_child (GladeWidgetC
GObject *new);
gboolean glade_widget_class_contains_non_widgets (GladeWidgetClass *class);
+GList * glade_widget_class_get_packing_defaults (GladeWidgetClass *class,
+ GladeWidgetClass *parent);
G_END_DECLS
#endif /* __GLADE_WIDGET_CLASS_H__ */
diff --git a/src/glade.h b/src/glade.h
index 0fe917e2..34cfedd0 100644
--- a/src/glade.h
+++ b/src/glade.h
@@ -137,6 +137,10 @@
#define GLADE_TAG_CHILD "child"
#define GLADE_TAG_CHILDREN "children"
#define GLADE_TAG_TRANSLATABLE "translatable"
+#define GLADE_TAG_PACKING_DEFAULTS "packing-defaults"
+#define GLADE_TAG_PARENT_CLASS "parent-class"
+#define GLADE_TAG_CHILD_PROPERTY "child-property"
+
extern gboolean verbose;
diff --git a/widgets/glade-catalog.dtd b/widgets/glade-catalog.dtd
index 71b66041..4b22bbfd 100644
--- a/widgets/glade-catalog.dtd
+++ b/widgets/glade-catalog.dtd
@@ -7,13 +7,14 @@
library CDATA #IMPLIED
requires CDATA #IMPLIED>
-<!ELEMENT glade-widget-classes (glade-widget-class*)>
+<!ELEMENT glade-widget-classes (glade-widget-class+)>
<!ELEMENT glade-widget-class (post-create-function?,
get-internal-child-function?,
child-property-applies-function?,
properties?,
- children?)>
+ children?,
+ packing-defaults?)>
<!ATTLIST glade-widget-class name CDATA #REQUIRED
generic-name CDATA #IMPLIED
@@ -88,3 +89,12 @@
<!ELEMENT glade-widget-class-ref EMPTY>
<!ATTLIST glade-widget-class-ref name CDATA #REQUIRED>
+<!ELEMENT packing-defaults (parent-class+)>
+
+<!ELEMENT parent-class (child-property+)>
+<!ATTLIST parent-class name CDATA #REQUIRED>
+
+<!ELEMENT child-property EMPTY>
+<!ATTLIST child-property id CDATA #REQUIRED
+ default CDATA #REQUIRED>
+
diff --git a/widgets/gtk+.xml.in b/widgets/gtk+.xml.in
index fcf6b9a1..c6284969 100644
--- a/widgets/gtk+.xml.in
+++ b/widgets/gtk+.xml.in
@@ -99,6 +99,10 @@
</glade-widget-class>
<glade-widget-class name="GtkMenuBar" generic-name="menubar" title="Menu Bar">
+ <post-create-function>glade_gtk_menu_bar_post_create</post-create-function>
+ <properties>
+ <property id="expand" default="False"/>
+ </properties>
<!-- menubar is a container you can't add placeholders to it -->
<children>
<child>
@@ -106,6 +110,12 @@
<fill-empty-function>empty</fill-empty-function>
</child>
</children>
+ <packing-defaults>
+ <parent-class name="GtkBox">
+ <child-property id="expand" default="false"/>
+ </parent-class>
+ </packing-defaults>
+
</glade-widget-class>
<glade-widget-class name="GtkToolbar" generic-name="toolbar" title="Tool Bar">