glade3 r2018 - in trunk: . gladeui plugins/gtk+
- From: tvb svn gnome org
- To: svn-commits-list gnome org
- Subject: glade3 r2018 - in trunk: . gladeui plugins/gtk+
- Date: Fri, 7 Nov 2008 20:49:58 +0000 (UTC)
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]