[gtk/wip/layout-manager: 135/136] WIP: Parse layout properties
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/layout-manager: 135/136] WIP: Parse layout properties
- Date: Wed, 20 Mar 2019 15:45:05 +0000 (UTC)
commit e7822edf03183129121de338264969e170f9ee48
Author: Emmanuele Bassi <ebassi gnome org>
Date: Mon Mar 4 13:15:19 2019 +0000
WIP: Parse layout properties
If a widget has a LayoutManager instance, then we want to parse layout
properties in UI description files.
gtk/gtkwidget.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 85 insertions(+), 1 deletion(-)
---
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index f19a2f0838..3b32da8041 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -284,6 +284,35 @@
* </object>
* ]|
*
+ * If the parent widget uses a #GtkLayoutManager, #GtkWidget supports a
+ * custom <layout> element, used to define layout properties:
+ *
+ * |[
+ * <object class="MyGrid" id="grid1">
+ * <child>
+ * <object class="GtkLabel" id="label1">
+ * <property name="label">Description</property>
+ * <layout>
+ * <property name="left-attach">0</property>
+ * <property name="top-attach">0</property>
+ * <property name="row-span">1</property>
+ * <property name="col-span">1</property>
+ * </layout>
+ * </object>
+ * </child>
+ * <child>
+ * <object class="GtkEntry" id="description_entry">
+ * <layout>
+ * <property name="left-attach">1</property>
+ * <property name="top-attach">0</property>
+ * <property name="row-span">1</property>
+ * <property name="col-span">1</property>
+ * </layout>
+ * </object>
+ * </child>
+ * </object>
+ * ]|
+ *
* Finally, GtkWidget allows style information such as style classes to
* be associated with widgets, using the custom <style> element:
* |[
@@ -4371,7 +4400,7 @@ gtk_widget_allocate (GtkWidget *widget,
{
gtk_layout_manager_allocate (priv->layout_manager, widget,
priv->width,
- priv->priv->height,
+ priv->height,
baseline);
}
else
@@ -10163,6 +10192,47 @@ static const GMarkupParser style_parser =
style_start_element,
};
+typedef struct
+{
+ char *name;
+ GString *value;
+} LayoutPropertyInfo;
+
+typedef struct
+{
+ GObject *object;
+ GtkBuilder *builder;
+
+ /* List<LayoutPropertyInfo> */
+ GList *layout_properties;
+} LayoutParserData;
+
+static void
+layout_start_element (GMarkupParseContext *context,
+ const gchar *element_name,
+ const gchar **names,
+ const gchar **values,
+ gpointer user_data,
+ GError **error)
+{
+}
+
+static void
+layout_text (GMarkupParseContext *context,
+ const gchar *text,
+ gsize text_len,
+ gpointer user_data,
+ GError **error)
+{
+}
+
+static const GMarkupParser layout_parser =
+ {
+ layout_start_element,
+ NULL,
+ layout_text,
+ };
+
static gboolean
gtk_widget_buildable_custom_tag_start (GtkBuildable *buildable,
GtkBuilder *builder,
@@ -10211,6 +10281,20 @@ gtk_widget_buildable_custom_tag_start (GtkBuildable *buildable,
return TRUE;
}
+ if (strcmp (tagname, "layout") == 0)
+ {
+ LayoutParserData *data;
+
+ data = g_slice_new0 (LayoutParserData);
+ data->builder = builder;
+ data->object = (GObject *) g_object_ref (buildable);
+
+ *parser = layout_parser;
+ *parser_data = data;
+
+ return TRUE;
+ }
+
return FALSE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]