glade3 r2018 - in trunk: . gladeui plugins/gtk+



Author: tvb
Date: Fri Nov  7 20:49:58 2008
New Revision: 2018
URL: http://svn.gnome.org/viewvc/glade3?rev=2018&view=rev

Log:

	* plugins/gtk+/gtk+.xml.in: Faked the accel-group property and added
	accel-groups object list to GtkWindow... work in progress.

	* plugins/gtk+/glade-image-item-editor.c: Adjusted for accel-group property
	which is only avaiable for stock items.

	* plugins/gtk+/glade-gtk.c: Fixed sensitivity for accel-group/stock at load time.

	* gladeui/glade-editor-property.c: Labels dont go insensitive anymore, I think that
	was a general usability problem, the inputs still go insensitive and there are always 
	useful tooltips, the insensitivity message still gets across.

	* gladeui/glade-editor-table.c: Fixed breaking weak refs from dispose.



Modified:
   trunk/ChangeLog
   trunk/gladeui/glade-editor-property.c
   trunk/gladeui/glade-editor-table.c
   trunk/plugins/gtk+/glade-gtk.c
   trunk/plugins/gtk+/glade-image-item-editor.c
   trunk/plugins/gtk+/gtk+.xml.in

Modified: trunk/gladeui/glade-editor-property.c
==============================================================================
--- trunk/gladeui/glade-editor-property.c	(original)
+++ trunk/gladeui/glade-editor-property.c	Fri Nov  7 20:49:58 2008
@@ -155,7 +155,6 @@
 	gboolean sensitive = glade_property_get_sensitive (eprop->property);
 	gboolean support_sensitive = (eprop->property->state & GLADE_STATE_SUPPORT_DISABLED) == 0;
 
-        gtk_widget_set_sensitive (eprop->item_label, sensitive && support_sensitive);
         gtk_widget_set_sensitive (eprop->input, sensitive && support_sensitive && 
 				  glade_property_get_enabled (property));
 	if (eprop->check)

Modified: trunk/gladeui/glade-editor-table.c
==============================================================================
--- trunk/gladeui/glade-editor-table.c	(original)
+++ trunk/gladeui/glade-editor-table.c	Fri Nov  7 20:49:58 2008
@@ -28,7 +28,7 @@
 
 static void      glade_editor_table_init               (GladeEditorTable      *self);
 static void      glade_editor_table_class_init         (GladeEditorTableClass *klass);
-static void      glade_editor_table_finalize           (GObject               *object);
+static void      glade_editor_table_dispose            (GObject               *object);
 static void      glade_editor_table_editable_init      (GladeEditableIface    *iface);
 static void      glade_editor_table_grab_focus         (GtkWidget             *widget);
 
@@ -42,7 +42,7 @@
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 	GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
-	object_class->finalize     = glade_editor_table_finalize;
+	object_class->dispose      = glade_editor_table_dispose;
 	widget_class->grab_focus   = glade_editor_table_grab_focus;
 }
 
@@ -53,7 +53,7 @@
 }
 
 static void
-glade_editor_table_finalize (GObject *object)
+glade_editor_table_dispose (GObject *object)
 {
 	GladeEditorTable *table = GLADE_EDITOR_TABLE (object);
 
@@ -67,9 +67,10 @@
 
 	glade_editable_load (GLADE_EDITABLE (table), NULL);
 
-	G_OBJECT_CLASS (glade_editor_table_parent_class)->finalize (object);
+	G_OBJECT_CLASS (glade_editor_table_parent_class)->dispose (object);
 }
 
+
 static void
 glade_editor_table_grab_focus (GtkWidget *widget)
 {
@@ -124,7 +125,7 @@
 
 	table->loading = TRUE;
 
-	if (table->loaded_widget && table->name_entry)
+	if (table->loaded_widget)
 	{
 		g_signal_handlers_disconnect_by_func (G_OBJECT (table->loaded_widget),
 						      G_CALLBACK (widget_name_changed), table);
@@ -137,7 +138,7 @@
 
 	table->loaded_widget = widget;
 
-	if (table->loaded_widget && table->name_entry)
+	if (table->loaded_widget)
 	{
 		g_signal_connect (G_OBJECT (table->loaded_widget), "notify::name",
 				  G_CALLBACK (widget_name_changed), table);
@@ -146,9 +147,9 @@
 		g_object_weak_ref (G_OBJECT (table->loaded_widget),
 				     (GWeakNotify)widget_finalized,
 				     table);
-
-		gtk_entry_set_text (GTK_ENTRY (table->name_entry), widget->name);
-
+		
+		if (table->name_entry)
+			gtk_entry_set_text (GTK_ENTRY (table->name_entry), widget->name);
 
 	}
 	else if (table->name_entry)

Modified: trunk/plugins/gtk+/glade-gtk.c
==============================================================================
--- trunk/plugins/gtk+/glade-gtk.c	(original)
+++ trunk/plugins/gtk+/glade-gtk.c	Fri Nov  7 20:49:58 2008
@@ -4771,6 +4771,122 @@
 
 }
 
+#define GLADE_TAG_ACCEL_GROUPS "accel-groups"
+#define GLADE_TAG_ACCEL_GROUP  "group"
+
+static void
+glade_gtk_window_read_accel_groups (GladeWidget  *widget,
+				    GladeXmlNode *node)
+{
+	GladeXmlNode  *groups_node;
+	GladeProperty *property;
+	gchar         *string = NULL;
+
+	if ((groups_node = 
+	     glade_xml_search_child (node, GLADE_TAG_ACCEL_GROUPS)) != NULL)
+	{
+		GladeXmlNode  *node;
+
+		for (node = glade_xml_node_get_children (groups_node); 
+		     node; node = glade_xml_node_next (node))
+		{
+			gchar *group_name, *tmp;
+			
+			if (!glade_xml_node_verify (node, GLADE_TAG_ACCEL_GROUP))
+				continue;
+
+			group_name = glade_xml_get_property_string_required
+				(node, GLADE_TAG_NAME, NULL);
+				
+			if (string == NULL)
+				string = group_name;
+			else if (group_name != NULL)
+			{
+				tmp = g_strdup_printf ("%s%s%s", string, GPC_OBJECT_DELIMITER, group_name);
+				string = (g_free (string), tmp);
+				g_free (group_name);
+			}
+		}
+	}
+
+	if (string)
+	{
+		property = glade_widget_get_property (widget, "accel-groups");
+		g_assert (property);
+
+		/* we must synchronize this directly after loading this project
+		 * (i.e. lookup the actual objects after they've been parsed and
+		 * are present).
+		 */
+		g_object_set_data_full (G_OBJECT (property), 
+					"glade-loaded-object", 
+					string, g_free);
+	}
+}
+
+void
+glade_gtk_window_read_widget (GladeWidgetAdaptor *adaptor,
+			      GladeWidget        *widget,
+			      GladeXmlNode       *node)
+{
+	if (!glade_xml_node_verify 
+	    (node, GLADE_XML_TAG_WIDGET (glade_project_get_format (widget->project))))
+		return;
+
+	/* First chain up and read in all the normal properties.. */
+        GWA_GET_CLASS (G_TYPE_OBJECT)->read_widget (adaptor, widget, node);
+
+	glade_gtk_window_read_accel_groups (widget, node);
+}
+
+
+static void
+glade_gtk_window_write_accel_groups (GladeWidget        *widget,
+				     GladeXmlContext    *context,
+				     GladeXmlNode       *node)
+{
+	GladeXmlNode  *groups_node, *group_node;
+	GList         *groups = NULL, *list;
+	GladeWidget   *agroup;
+
+	groups_node = glade_xml_node_new (context, GLADE_TAG_ACCEL_GROUPS);
+
+	if (glade_widget_property_get (widget, "accel-groups", &groups))
+	{
+		for (list = groups; list; list = list->next)
+		{
+			agroup     = glade_widget_get_from_gobject (list->data);
+			group_node = glade_xml_node_new (context, GLADE_TAG_ACCEL_GROUP);
+			glade_xml_node_append_child (groups_node, group_node);
+			glade_xml_node_set_property_string (group_node, GLADE_TAG_NAME, agroup->name);
+		}
+	}
+
+	if (!glade_xml_node_get_children (groups_node))
+		glade_xml_node_delete (groups_node);
+	else
+		glade_xml_node_append_child (node, groups_node);
+	
+}
+
+
+void
+glade_gtk_window_write_widget (GladeWidgetAdaptor *adaptor,
+			       GladeWidget        *widget,
+			       GladeXmlContext    *context,
+			       GladeXmlNode       *node)
+{
+	if (!glade_xml_node_verify
+	    (node, GLADE_XML_TAG_WIDGET (glade_project_get_format (widget->project))))
+		return;
+
+	/* First chain up and read in all the normal properties.. */
+        GWA_GET_CLASS (G_TYPE_OBJECT)->write_widget (adaptor, widget, context, node);
+
+	glade_gtk_window_write_accel_groups (widget, context, node);
+}
+
+
 /* ----------------------------- GtkDialog(s) ------------------------------ */
 static void
 glade_gtk_dialog_stop_offending_signals (GtkWidget *widget)
@@ -6050,10 +6166,15 @@
 
 	/* Set some things */
 	if (use_stock)
+	{
 		glade_widget_property_set_sensitive (widget, "stock", TRUE, NULL);
+		glade_widget_property_set_sensitive (widget, "accel-group", TRUE, NULL);
+	}
 	else
-		glade_widget_property_set_sensitive (widget, "stock", FALSE, _("Property not selected"));
-
+	{
+		glade_widget_property_set_sensitive (widget, "stock", FALSE, NOT_SELECTED_MSG);
+		glade_widget_property_set_sensitive (widget, "accel-group", FALSE, NOT_SELECTED_MSG);
+	}
 }
 
 static void
@@ -6273,7 +6394,9 @@
 				       GladeWidget        *widget,
 				       GladeXmlNode       *node)
 {
+	GladeProperty *property;
 	gboolean use_stock;
+	gchar *label = NULL;
 
 	if (!glade_xml_node_verify 
 	    (node, GLADE_XML_TAG_WIDGET (glade_project_get_format (widget->project))))
@@ -6288,8 +6411,7 @@
 	glade_widget_property_get (widget, "use-stock", &use_stock);
 	if (use_stock)
 	{
-		GladeProperty *property = glade_widget_get_property (widget, "label");
-		gchar *label = NULL;
+		property = glade_widget_get_property (widget, "label");
 
 		glade_property_get (property, &label);
 		glade_widget_property_set (widget, "use-underline", TRUE);
@@ -6297,6 +6419,11 @@
 		glade_property_sync (property);
 	}
 
+	/* Update sensitivity of related properties...  */
+	property = glade_widget_get_property (widget, "use-stock");
+	glade_property_sync (property);
+
+
 	/* Run this after the load so that image is resolved. */
 	if (glade_project_get_format (widget->project) == GLADE_PROJECT_FORMAT_GTKBUILDER)
 		g_signal_connect (G_OBJECT (widget->project), "parse-finished",
@@ -8465,7 +8592,7 @@
 		{
 			gchar *widget_name, *tmp;
 			
-			if (!glade_xml_node_verify_silent (node, GLADE_TAG_SIZEGROUP_WIDGET))
+			if (!glade_xml_node_verify (node, GLADE_TAG_SIZEGROUP_WIDGET))
 				continue;
 
 			widget_name = glade_xml_get_property_string_required

Modified: trunk/plugins/gtk+/glade-image-item-editor.c
==============================================================================
--- trunk/plugins/gtk+/glade-image-item-editor.c	(original)
+++ trunk/plugins/gtk+/glade-image-item-editor.c	Fri Nov  7 20:49:58 2008
@@ -326,7 +326,7 @@
 {
 	GladeImageItemEditor    *item_editor;
 	GladeEditorProperty     *eprop;
-	GtkWidget               *label, *alignment, *frame, *table, *vbox;
+	GtkWidget               *label, *alignment, *frame, *main_table, *table, *vbox;
 	gchar                   *str;
 
 	g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), NULL);
@@ -338,26 +338,46 @@
 	/* Pack the parent on top... */
 	gtk_box_pack_start (GTK_BOX (item_editor), GTK_WIDGET (embed), FALSE, FALSE, 0);
 
-	/* Put a stock property in a radio button (in a table) here on top... */
+	/* Put a radio button to control use-stock here on top... */
+	main_table = gtk_table_new (0, 0, FALSE);
+	gtk_box_pack_start (GTK_BOX (item_editor), main_table, FALSE, FALSE, 8);
+
+	item_editor->stock_radio = gtk_radio_button_new_with_label (NULL, _("Stock Item:"));
+	table_attach (main_table, item_editor->stock_radio, 0, 0);
+
+	alignment = gtk_alignment_new (0.5F, 0.5F, 1.0F, 1.0F);
+	gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 6, 0, 12, 0);
+	gtk_table_attach (GTK_TABLE (main_table), alignment,
+			  0, 2, /* left and right */ 
+			  1, 2, /* top and bottom */
+			  GTK_EXPAND | GTK_FILL,
+			  GTK_EXPAND | GTK_FILL,
+			  3, 6);
+
 	table = gtk_table_new (0, 0, FALSE);
-	gtk_box_pack_start (GTK_BOX (item_editor), table, FALSE, FALSE, 8);
+	gtk_container_add (GTK_CONTAINER (alignment), table);
 
+	/* The stock item */
 	eprop = glade_widget_adaptor_create_eprop_by_name (adaptor, "stock", FALSE, TRUE);
-	item_editor->stock_radio = gtk_radio_button_new (NULL);
-	gtk_container_add (GTK_CONTAINER (item_editor->stock_radio), eprop->item_label);
-	table_attach (table, item_editor->stock_radio, 0, 0);
+	table_attach (table, eprop->item_label, 0, 0);
 	table_attach (table, GTK_WIDGET (eprop), 1, 0);
 	item_editor->properties = g_list_prepend (item_editor->properties, eprop);
 
+	/* An accel group for the item's accelerator */
+	eprop = glade_widget_adaptor_create_eprop_by_name (adaptor, "accel-group", FALSE, TRUE);
+	table_attach (table, eprop->item_label, 0, 1);
+	table_attach (table, GTK_WIDGET (eprop), 1, 1);
+	item_editor->properties = g_list_prepend (item_editor->properties, eprop);
+
 	/* Now put a radio button in the same table for the custom image editing */
 	item_editor->custom_radio = gtk_radio_button_new_with_label_from_widget
 		(GTK_RADIO_BUTTON (item_editor->stock_radio),
 		 _("Custom label and image:"));
-	table_attach (table, item_editor->custom_radio, 0, 1);
+	table_attach (main_table, item_editor->custom_radio, 0, 2);
 	vbox = gtk_vbox_new (FALSE, 0);
-	gtk_table_attach (GTK_TABLE (table), vbox,
+	gtk_table_attach (GTK_TABLE (main_table), vbox,
 			  0, 2, /* left and right */ 
-			  2, 3, /* top and bottom */
+			  3, 4, /* top and bottom */
 			  GTK_EXPAND | GTK_FILL,
 			  GTK_EXPAND | GTK_FILL,
 			  3, 6);

Modified: trunk/plugins/gtk+/gtk+.xml.in
==============================================================================
--- trunk/plugins/gtk+/gtk+.xml.in	(original)
+++ trunk/plugins/gtk+/gtk+.xml.in	Fri Nov  7 20:49:58 2008
@@ -332,6 +332,8 @@
     
     <glade-widget-class name="GtkWindow" generic-name="window" _title="Window" toplevel="True" default-width="440" default-height="250">
       <post-create-function>glade_gtk_window_post_create</post-create-function>
+      <read-widget-function>glade_gtk_window_read_widget</read-widget-function>
+      <write-widget-function>glade_gtk_window_write_widget</write-widget-function>
 
       <properties> 
 	<property id="opacity" since="2.12" ignore="True"/>
@@ -398,6 +400,13 @@
           </displayable-values>
 	</property>
 	<property id="accept-focus" ignore="True"/>
+	<!-- Virtual accel-groups property to record accel groups -->
+	<property id="accel-groups" name="Accel Groups" ignore="True" save="False">
+	  <parameter-spec>
+	    <type>GladeParamObjects</type>
+	    <value-type>GtkAccelGroup</value-type>
+	  </parameter-spec>
+	</property>
       </properties>
     </glade-widget-class>
 
@@ -490,8 +499,14 @@
         <property id="use-underline" custom-layout="True"/>
 	<property id="image" libglade-unsupported="True" parentless-widget="True" visible="False"/>
 
-	<!-- need to fake this property since its not available yet ! -->
-	<property id="accel-group" libglade-unsupported="True"/>
+	<!-- need to fake this pspec since its not available in gtk+ yet -->
+	<property id="accel-group" _name="Accel Group" custom-layout="True" libglade-unsupported="True">
+	  <parameter-spec>
+	    <type>GParamObject</type>
+	    <value-type>GtkAccelGroup</value-type>
+	  </parameter-spec>
+	  <_tooltip>An accel group for accelerators from stock items</_tooltip>
+	</property>
 	<!--
 	This property is added by glade2 gnome support and makes reference to
 	GNOMEUIINFO_MENU_* macros. The read-widget-funcion maps these properties to 



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