[POS-commit] r265 - libglade

Johan Dahlin jdahlin at async.com.br
Thu Mar 31 17:28:45 BRT 2005


Author: jdahlin
Date: 2005-03-31 17:28:45 -0300 (Thu, 31 Mar 2005)
New Revision: 265

Modified:
   libglade/glade-gtk.c
Log:
Add support for layout properties and put back GtkUIManager parsing of files here. Make a copy of the private data from GladeXML, need to find a better way to handle that.

Modified: libglade/glade-gtk.c
===================================================================
--- libglade/glade-gtk.c	2005-03-31 20:27:56 UTC (rev 264)
+++ libglade/glade-gtk.c	2005-03-31 20:28:45 UTC (rev 265)
@@ -35,6 +35,24 @@
 #define BOOL(s)  (g_ascii_tolower (*(s)) == 't' || g_ascii_tolower (*(s)) == 'y' || INT (s))
 #define FLOAT(s) (g_strtod ((s), NULL))
 
+/* XXX: UUUUUGLY */
+struct _GladeXMLPrivate {
+    GladeInterface *tree;
+    GtkTooltips *tooltips;
+    GHashTable *name_hash;
+    GHashTable *ui_hash;
+    GHashTable *signals;
+    GtkWindow *toplevel;
+    GtkAccelGroup *accel_group;
+    GtkWidget *focus_widget;
+    GtkWidget *default_widget;
+    GList *deferred_props;
+};
+typedef struct {
+    gint merge_id;
+    GObject *ui_manager;
+} merge_data;
+
 void _glade_init_gtk_widgets(void);
 
 static void
@@ -423,6 +441,8 @@
 			 GladeObjectInfo *info)
 {
     gint i;
+    gint merge_id;
+    gchar *filename;
 
     g_object_ref(obj);
     for (i = 0; i < info->n_children; i++) {
@@ -434,6 +454,37 @@
 					   GTK_ACTION_GROUP (child), i);
     }
 
+    for (i = 0; i < info->n_uis; i++) {
+	GladeUIInfo ui = info->uis[i];
+	merge_data *data;
+	    
+	if (ui.filename) {
+	    GError *error = NULL;
+	    
+	    filename = glade_xml_relative_file(self, ui.filename);
+	    
+	    merge_id = gtk_ui_manager_add_ui_from_file(GTK_UI_MANAGER(obj),
+						       filename,
+						       &error);
+	    g_free(filename);
+	    if (error) {
+		g_warning("Error: %s", error->message);
+		g_error_free(error);
+	    }
+	    
+	    data = g_new0(merge_data, 1);
+	    data->merge_id = merge_id;
+	    data->ui_manager = obj;
+
+	    g_hash_table_insert(self->priv->ui_hash,
+				ui.id,
+				data);
+	}
+    }
+    
+    /* When we're done, tell the GtkUIManager to update */
+    gtk_ui_manager_ensure_update(GTK_UI_MANAGER(obj));
+
     g_object_unref(obj);
 }
 
@@ -786,7 +837,7 @@
 static void
 tree_view_column_build_children (GladeXML *xml, GObject *obj, GladeObjectInfo *info)
 {
-    int i;
+    int i, j;
     
     if (info->n_children == 0)
 	return;
@@ -801,6 +852,20 @@
 	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(obj),
 					GTK_CELL_RENDERER(child),
 					TRUE);
+
+	
+	for (j = 0; j < childinfo->n_layout_props; j++)
+	{
+	    int value;
+
+	    value = atoi(childinfo->layout_props[j].value);
+	    gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(obj),
+					   GTK_CELL_RENDERER(child),
+					   childinfo->layout_props[j].name,
+					   value,
+					   NULL);
+	}
+
     }
     g_object_unref(obj);
 



More information about the POS-commit mailing list