glade3 r1940 - in trunk: . gladeui plugins/gtk+ src
- From: tvb svn gnome org
- To: svn-commits-list gnome org
- Subject: glade3 r1940 - in trunk: . gladeui plugins/gtk+ src
- Date: Sat, 20 Sep 2008 19:36:17 +0000 (UTC)
Author: tvb
Date: Sat Sep 20 19:36:17 2008
New Revision: 1940
URL: http://svn.gnome.org/viewvc/glade3?rev=1940&view=rev
Log:
* TODO: Updated.
* plugins/gtk+/gtk+.xml.in:
- Added sizegroup support stuff
* plugins/gtk+/glade-gtk.c:
- Added GtkWidgetClass support for add to size group
action with dynamic submenu
- added sizegroup virtual "widgets" property
- added custom load/save support for "widgets" property
* gladeui/glade-popup.c: Added support for dynamic action submenus
* gladeui/glade-widget-adaptor.[ch], gladeui/glade-xml-utils.h: Added
GladeActionSubmenuFunc backend support for creation of dynamic
action submenus.
* gladeui/glade-widget.[ch] removed deadcode glade_widget_create_action_menu()
* gladeui/glade-project.c: Added readonly "format" property
Modified:
trunk/ChangeLog
trunk/TODO
trunk/gladeui/glade-popup.c
trunk/gladeui/glade-project.c
trunk/gladeui/glade-widget-adaptor.c
trunk/gladeui/glade-widget-adaptor.h
trunk/gladeui/glade-widget.c
trunk/gladeui/glade-widget.h
trunk/gladeui/glade-xml-utils.h
trunk/plugins/gtk+/glade-gtk.c
trunk/plugins/gtk+/gtk+.xml.in
trunk/src/glade-window.c
Modified: trunk/TODO
==============================================================================
--- trunk/TODO (original)
+++ trunk/TODO Sat Sep 20 19:36:17 2008
@@ -4,18 +4,8 @@
=============================
Glade renames widgets when ids are dupped: http://bugzilla.gnome.org/show_bug.cgi?id=549176
Improve attributes editor
-Add sizegroup (with some cute gwa actions)
Add actions, treestore, treemodel, adjustment, pixbuf (Gtk+ objects new group)
Nice editor resizing by Pavel, needs fix for warning icons: http://bugzilla.gnome.org/show_bug.cgi?id=546107
-Create Gtk+ Specialized widget group: http://bugzilla.gnome.org/show_bug.cgi?id=544845
No way to add menus to toolbar: http://bugzilla.gnome.org/show_bug.cgi?id=429438
GdkColor null values critical errors: http://bugzilla.gnome.org/show_bug.cgi?id=426345
-
-Need proper conversion routine:
- currently adjustments are saved as data in libglade and as objects in builder,
-we need a conversion "routine" to be run, to create/remove the nescisary objects
-and modify the project as needed when converts take place - this should also help
-clean things up wrt the internal icon factory cache for pixbufs.
-
-Its possible that as a result of project conversions, we will dump/lose our
-command history.
+Add versioning metadata for libglade unsupported properties and widgets.
Modified: trunk/gladeui/glade-popup.c
==============================================================================
--- trunk/gladeui/glade-popup.c (original)
+++ trunk/gladeui/glade-popup.c Sat Sep 20 19:36:17 2008
@@ -293,6 +293,7 @@
static gint
glade_popup_action_populate_menu_real (GtkWidget *menu,
+ GladeWidget *gwidget,
GList *actions,
GCallback callback,
gpointer data)
@@ -310,10 +311,16 @@
{
submenu = gtk_menu_new ();
n += glade_popup_action_populate_menu_real (submenu,
+ gwidget,
a->actions,
callback,
data);
}
+ else
+ submenu = glade_widget_adaptor_action_submenu (gwidget->adaptor,
+ gwidget->object,
+ a->klass->path);
+
item = glade_popup_append_item (menu,
a->klass->stock,
@@ -361,12 +368,14 @@
g_return_val_if_fail (GLADE_IS_WIDGET_ACTION (action), 0);
if (glade_widget_get_action (widget, action->klass->path))
return glade_popup_action_populate_menu_real (menu,
+ widget,
action->actions,
G_CALLBACK (glade_popup_menuitem_activated),
widget);
if (glade_widget_get_pack_action (widget, action->klass->path))
return glade_popup_action_populate_menu_real (menu,
+ glade_widget_get_parent (widget),
action->actions,
G_CALLBACK (glade_popup_menuitem_packing_activated),
widget);
@@ -375,6 +384,7 @@
}
n = glade_popup_action_populate_menu_real (menu,
+ widget,
widget->actions,
G_CALLBACK (glade_popup_menuitem_activated),
widget);
@@ -388,6 +398,7 @@
gtk_widget_show (separator);
}
n += glade_popup_action_populate_menu_real (menu,
+ glade_widget_get_parent (widget),
widget->packing_actions,
G_CALLBACK (glade_popup_menuitem_packing_activated),
widget);
@@ -465,6 +476,7 @@
glade_popup_action_populate_menu_real
(popup_menu,
+ widget,
widget->actions,
G_CALLBACK (glade_popup_menuitem_activated),
widget);
@@ -478,6 +490,7 @@
glade_popup_action_populate_menu_real
(popup_menu,
+ widget,
placeholder->packing_actions,
G_CALLBACK (glade_popup_menuitem_ph_packing_activated),
placeholder);
Modified: trunk/gladeui/glade-project.c
==============================================================================
--- trunk/gladeui/glade-project.c (original)
+++ trunk/gladeui/glade-project.c Sat Sep 20 19:36:17 2008
@@ -70,7 +70,8 @@
PROP_MODIFIED,
PROP_HAS_SELECTION,
PROP_PATH,
- PROP_READ_ONLY
+ PROP_READ_ONLY,
+ PROP_FORMAT
};
struct _GladeProjectPrivate
@@ -256,13 +257,16 @@
break;
case PROP_HAS_SELECTION:
g_value_set_boolean (value, project->priv->has_selection);
- break;
- case PROP_READ_ONLY:
- g_value_set_boolean (value, project->priv->readonly);
break;
case PROP_PATH:
g_value_set_string (value, project->priv->path);
break;
+ case PROP_READ_ONLY:
+ g_value_set_boolean (value, project->priv->readonly);
+ break;
+ case PROP_FORMAT:
+ g_value_set_int (value, project->priv->format);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1002,21 +1006,31 @@
G_PARAM_READABLE));
g_object_class_install_property (object_class,
+ PROP_PATH,
+ g_param_spec_string ("path",
+ _("Path"),
+ _("The filesystem path of the project"),
+ NULL,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property (object_class,
PROP_READ_ONLY,
g_param_spec_boolean ("read-only",
_("Read Only"),
_("Whether project is read only or not"),
FALSE,
G_PARAM_READABLE));
-
+
g_object_class_install_property (object_class,
- PROP_PATH,
- g_param_spec_string ("path",
- _("Path"),
- _("The filesystem path of the project"),
- NULL,
- G_PARAM_READABLE));
-
+ PROP_FORMAT,
+ g_param_spec_int ("format",
+ _("Format"),
+ _("The project file format"),
+ GLADE_PROJECT_FORMAT_LIBGLADE,
+ GLADE_PROJECT_FORMAT_GTKBUILDER,
+ GLADE_PROJECT_FORMAT_GTKBUILDER,
+ G_PARAM_READABLE));
+
g_type_class_add_private (klass, sizeof (GladeProjectPrivate));
}
@@ -3214,13 +3228,25 @@
return project->priv->modified;
}
+
+/**
+ * glade_project_set_format:
+ * @project: a #GladeProject
+ * @format: the #GladeProjectFormat
+ *
+ * Sets @project format to @format, used internally to set the actual format
+ * state; note that conversions should be done through the glade-command api.
+ */
void
glade_project_set_format (GladeProject *project, GladeProjectFormat format)
{
g_return_if_fail (GLADE_IS_PROJECT (project));
if (project->priv->format != format)
+ {
project->priv->format = format;
+ g_object_notify (G_OBJECT (project), "format");
+ }
}
GladeProjectFormat
Modified: trunk/gladeui/glade-widget-adaptor.c
==============================================================================
--- trunk/gladeui/glade-widget-adaptor.c (original)
+++ trunk/gladeui/glade-widget-adaptor.c Sat Sep 20 19:36:17 2008
@@ -1176,6 +1176,7 @@
adaptor_class->child_get_property = NULL;
adaptor_class->action_activate = glade_widget_adaptor_object_action_activate;
adaptor_class->child_action_activate= glade_widget_adaptor_object_child_action_activate;
+ adaptor_class->action_submenu = NULL;
adaptor_class->read_widget = glade_widget_adaptor_object_read_widget;
adaptor_class->write_widget = glade_widget_adaptor_object_write_widget;
adaptor_class->read_child = glade_widget_adaptor_object_read_child;
@@ -1426,6 +1427,11 @@
klass->child_action_activate = symbol;
if (glade_xml_load_sym_from_node (node, module,
+ GLADE_TAG_ACTION_SUBMENU_FUNCTION,
+ &symbol))
+ klass->action_submenu = symbol;
+
+ if (glade_xml_load_sym_from_node (node, module,
GLADE_TAG_READ_WIDGET_FUNCTION,
&symbol))
klass->read_widget = symbol;
@@ -3246,7 +3252,31 @@
GLADE_WIDGET_ADAPTOR_GET_CLASS (adaptor)->child_action_activate (adaptor, container, object, action_path);
}
+/**
+ * glade_widget_adaptor_action_submenu:
+ * @adaptor: A #GladeWidgetAdaptor
+ * @object: The #GObject
+ * @action_path: The action identifier in the action tree
+ *
+ * This delagate function is used to create dynamically customized
+ * submenus. Called only for actions that dont have children.
+ *
+ * Returns: A newly created #GtkMenu or %NULL
+ */
+GtkWidget *
+glade_widget_adaptor_action_submenu (GladeWidgetAdaptor *adaptor,
+ GObject *object,
+ const gchar *action_path)
+{
+ g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), NULL);
+ g_return_val_if_fail (G_IS_OBJECT (object), NULL);
+ g_return_val_if_fail (g_type_is_a (G_OBJECT_TYPE (object), adaptor->type), NULL);
+
+ if (GLADE_WIDGET_ADAPTOR_GET_CLASS (adaptor)->action_submenu)
+ return GLADE_WIDGET_ADAPTOR_GET_CLASS (adaptor)->action_submenu (adaptor, object, action_path);
+ return NULL;
+}
/**
* glade_widget_adaptor_read_widget:
Modified: trunk/gladeui/glade-widget-adaptor.h
==============================================================================
--- trunk/gladeui/glade-widget-adaptor.h (original)
+++ trunk/gladeui/glade-widget-adaptor.h Sat Sep 20 19:36:17 2008
@@ -370,6 +370,24 @@
GObject *object,
const gchar *action_path);
+
+/**
+ * GladeActionSubmenuFunc:
+ * @adaptor: A #GladeWidgetAdaptor
+ * @object: The #GObject
+ * @action_path: The action path
+ *
+ * This delagate function is used to create dynamically customized
+ * submenus. Called only for actions that dont have children.
+ *
+ */
+typedef GtkWidget *(* GladeActionSubmenuFunc) (GladeWidgetAdaptor *adaptor,
+ GObject *object,
+ const gchar *action_path);
+
+
+
+
/**
* GladeReadWidgetFunc:
* @adaptor: A #GladeWidgetAdaptor
@@ -595,6 +613,8 @@
GladeActionActivateFunc action_activate; /* This method is used to catch actions */
GladeChildActionActivateFunc child_action_activate; /* This method is used to catch packing actions */
+ GladeActionSubmenuFunc action_submenu; /* Delagate function to create dynamic submenus */
+ /* in action menus. */
GladeReadWidgetFunc read_widget; /* Reads widget attributes from xml */
@@ -604,8 +624,6 @@
GladeWriteWidgetFunc write_child; /* Writes widget attributes to the xml */
-
-
GladeCreateEPropFunc create_eprop; /* Creates a GladeEditorProperty */
GladeStringFromValueFunc string_from_value; /* Creates a string for a value */
@@ -760,6 +778,11 @@
GObject *object,
const gchar *action_path);
+GtkWidget *glade_widget_adaptor_action_submenu (GladeWidgetAdaptor *adaptor,
+ GObject *object,
+ const gchar *action_path);
+
+
void glade_widget_adaptor_read_widget (GladeWidgetAdaptor *adaptor,
GladeWidget *widget,
GladeXmlNode *node);
Modified: trunk/gladeui/glade-widget.c
==============================================================================
--- trunk/gladeui/glade-widget.c (original)
+++ trunk/gladeui/glade-widget.c Sat Sep 20 19:36:17 2008
@@ -3974,38 +3974,6 @@
glade_widget_action_lookup (&widget->packing_actions, action_path, TRUE);
}
-/**
- * glade_widget_create_action_menu:
- * @widget: a #GladeWidget
- * @action_path: an action path or NULL to include every @widget action.
- *
- * Create a new GtkMenu with every action in it.
- *
- */
-GtkWidget *
-glade_widget_create_action_menu (GladeWidget *widget, const gchar *action_path)
-{
- GladeWidgetAction *action = NULL;
- GtkWidget *menu;
-
- g_return_val_if_fail (GLADE_IS_WIDGET (widget), NULL);
-
- if (action_path)
- {
- action = glade_widget_action_lookup (&widget->actions, action_path, FALSE);
- if (action == NULL)
- action = glade_widget_action_lookup (&widget->packing_actions, action_path, FALSE);
- }
-
- menu = gtk_menu_new ();
- if (glade_popup_action_populate_menu (menu, widget, action, TRUE))
- return menu;
-
- g_object_unref (G_OBJECT (menu));
-
- return NULL;
-}
-
/*******************************************************************************
* Toplevel GladeWidget Embedding *
******************************************************************************
Modified: trunk/gladeui/glade-widget.h
==============================================================================
--- trunk/gladeui/glade-widget.h (original)
+++ trunk/gladeui/glade-widget.h Sat Sep 20 19:36:17 2008
@@ -216,9 +216,6 @@
void glade_widget_remove_pack_action (GladeWidget *widget,
const gchar *action_path);
-GtkWidget * glade_widget_create_action_menu (GladeWidget *widget,
- const gchar *action_path);
-
void glade_widget_write (GladeWidget *widget,
GladeXmlContext *context,
GladeXmlNode *node);
Modified: trunk/gladeui/glade-xml-utils.h
==============================================================================
--- trunk/gladeui/glade-xml-utils.h (original)
+++ trunk/gladeui/glade-xml-utils.h Sat Sep 20 19:36:17 2008
@@ -117,6 +117,7 @@
#define GLADE_TAG_CONSTRUCTOR_FUNCTION "constructor-function"
#define GLADE_TAG_ACTION_ACTIVATE_FUNCTION "action-activate-function"
#define GLADE_TAG_CHILD_ACTION_ACTIVATE_FUNCTION "child-action-activate-function"
+#define GLADE_TAG_ACTION_SUBMENU_FUNCTION "action-submenu-function"
#define GLADE_TAG_READ_WIDGET_FUNCTION "read-widget-function"
#define GLADE_TAG_WRITE_WIDGET_FUNCTION "write-widget-function"
#define GLADE_TAG_READ_CHILD_FUNCTION "read-child-function"
Modified: trunk/plugins/gtk+/glade-gtk.c
==============================================================================
--- trunk/plugins/gtk+/glade-gtk.c (original)
+++ trunk/plugins/gtk+/glade-gtk.c Sat Sep 20 19:36:17 2008
@@ -1285,12 +1285,115 @@
glade_command_pop_group ();
}
}
+ else if (strcmp (action_path, "sizegroup_add") == 0)
+ {
+ /* Ignore dummy */
+ }
else
GWA_GET_CLASS (G_TYPE_OBJECT)->action_activate (adaptor,
object,
action_path);
}
+static GList *list_sizegroups (GladeWidget *gwidget)
+{
+ GladeProject *project = glade_widget_get_project (gwidget);
+ GList *groups = NULL;
+ const GList *list;
+
+ for (list = glade_project_get_objects (project); list; list = list->next)
+ {
+ GladeWidget *iter = glade_widget_get_from_gobject (list->data);
+ if (GTK_IS_SIZE_GROUP (iter->object))
+ groups = g_list_prepend (groups, iter);
+ }
+ return g_list_reverse (groups);
+}
+
+static void
+glade_gtk_widget_add2group_cb (GtkMenuItem *item, GladeWidget *gwidget)
+{
+ GladeWidget *group = g_object_get_data (G_OBJECT (item), "glade-group-widget");
+ gchar *desc = group ? g_strdup_printf (_("Adding %s to Size Group %s"), gwidget->name, group->name) :
+ g_strdup_printf (_("Adding %s to a new Size Group"), gwidget->name);
+ GladeWidgetAdaptor *adaptor = glade_widget_adaptor_get_by_type (GTK_TYPE_SIZE_GROUP);
+ GList *widget_list = NULL, *new_list;
+ GladeProperty *property;
+
+ glade_command_push_group (desc);
+ g_free (desc);
+
+ if (!group)
+ /* Cant cancel a size group */
+ group = glade_command_create (adaptor, NULL, NULL, glade_widget_get_project (gwidget));
+
+ property = glade_widget_get_property (group, "widgets");
+ glade_property_get (property, &widget_list);
+ new_list = g_list_copy (widget_list);
+ if (!g_list_find (widget_list, gwidget->object))
+ new_list = g_list_append (new_list, gwidget->object);
+ glade_command_set_property (property, new_list);
+
+ g_list_free (new_list);
+
+ glade_command_pop_group ();
+}
+
+
+GtkWidget *
+glade_gtk_widget_action_submenu (GladeWidgetAdaptor *adaptor,
+ GObject *object,
+ const gchar *action_path)
+{
+ GladeWidget *gwidget = glade_widget_get_from_gobject (object);
+ GList *groups, *list;
+
+ if (strcmp (action_path, "sizegroup_add") == 0)
+ {
+ GtkWidget *menu = gtk_menu_new ();
+ GtkWidget *separator, *item;
+ GladeWidget *group;
+
+ if ((groups = list_sizegroups (gwidget)) != NULL)
+ {
+ for (list = groups; list; list = list->next)
+ {
+ group = list->data;
+ item = gtk_menu_item_new_with_label (group->name);
+
+ g_object_set_data (G_OBJECT (item), "glade-group-widget", group);
+ g_signal_connect (G_OBJECT (item), "activate",
+ G_CALLBACK (glade_gtk_widget_add2group_cb), gwidget);
+
+ gtk_widget_show (item);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ }
+ g_list_free (groups);
+
+ separator = gtk_menu_item_new ();
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), separator);
+ gtk_widget_show (separator);
+ }
+
+ /* Add trailing new... item */
+ item = gtk_menu_item_new_with_label (_("New Size Group"));
+ g_signal_connect (G_OBJECT (item), "activate",
+ G_CALLBACK (glade_gtk_widget_add2group_cb), gwidget);
+
+ gtk_widget_show (item);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+
+ return menu;
+ }
+ else if (GWA_GET_CLASS (G_TYPE_OBJECT)->action_submenu)
+ return GWA_GET_CLASS (G_TYPE_OBJECT)->action_submenu (adaptor,
+ object,
+ action_path);
+
+ return NULL;
+}
+
+
/* ----------------------------- GtkContainer ------------------------------ */
void
@@ -8302,3 +8405,155 @@
GWA_GET_CLASS (GTK_TYPE_DIALOG)->get_property (adaptor, object,
property_name, value);
}
+
+/*--------------------------- GtkSizeGroup ---------------------------------*/
+#define GLADE_TAG_SIZEGROUP_WIDGETS "widgets"
+#define GLADE_TAG_SIZEGROUP_WIDGET "widget"
+
+static void
+glade_gtk_size_group_read_widgets (GladeWidget *widget,
+ GladeXmlNode *node)
+{
+ GladeXmlNode *widgets_node;
+ GladeProperty *property;
+ gchar *string = NULL;
+
+ if ((widgets_node =
+ glade_xml_search_child (node, GLADE_TAG_SIZEGROUP_WIDGETS)) != NULL)
+ {
+ GladeXmlNode *node;
+
+ for (node = glade_xml_node_get_children (widgets_node);
+ node; node = glade_xml_node_next (node))
+ {
+ gchar *widget_name, *tmp;
+
+ if (!glade_xml_node_verify_silent (node, GLADE_TAG_SIZEGROUP_WIDGET))
+ continue;
+
+ widget_name = glade_xml_get_property_string_required
+ (node, GLADE_TAG_NAME, NULL);
+
+ if (string == NULL)
+ string = widget_name;
+ else if (widget_name != NULL)
+ {
+ tmp = g_strdup_printf ("%s%s%s", string, GPC_OBJECT_DELIMITER, widget_name);
+ string = (g_free (string), tmp);
+ g_free (widget_name);
+ }
+ }
+ }
+
+
+ if (string)
+ {
+ property = glade_widget_get_property (widget, "widgets");
+ 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_size_group_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_size_group_read_widgets (widget, node);
+}
+
+
+static void
+glade_gtk_size_group_write_widgets (GladeWidget *widget,
+ GladeXmlContext *context,
+ GladeXmlNode *node)
+{
+ GladeXmlNode *widgets_node, *widget_node;
+ GList *widgets = NULL, *list;
+ GladeWidget *awidget;
+
+ widgets_node = glade_xml_node_new (context, GLADE_TAG_SIZEGROUP_WIDGETS);
+ glade_xml_node_append_child (node, widgets_node);
+
+ if (glade_widget_property_get (widget, "widgets", &widgets))
+ {
+ for (list = widgets; list; list = list->next)
+ {
+ awidget = glade_widget_get_from_gobject (list->data);
+ widget_node = glade_xml_node_new (context, GLADE_TAG_SIZEGROUP_WIDGET);
+ glade_xml_node_append_child (widgets_node, widget_node);
+ glade_xml_node_set_property_string (widget_node, GLADE_TAG_NAME, awidget->name);
+ }
+ }
+
+ if (!glade_xml_node_get_children (widgets_node))
+ {
+ glade_xml_node_remove (widgets_node);
+ glade_xml_node_delete (widgets_node);
+ }
+}
+
+
+void
+glade_gtk_size_group_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_size_group_write_widgets (widget, context, node);
+}
+
+
+void
+glade_gtk_size_group_set_property (GladeWidgetAdaptor *adaptor,
+ GObject *object,
+ const gchar *property_name,
+ const GValue *value)
+{
+ if (!strcmp (property_name, "widgets"))
+ {
+ GSList *sg_widgets, *slist;
+ GList *widgets, *list;
+
+ /* remove old widgets */
+ if ((sg_widgets = gtk_size_group_get_widgets (GTK_SIZE_GROUP (object))) != NULL)
+ {
+ /* copy since we are modifying an internal list */
+ sg_widgets = g_slist_copy (sg_widgets);
+ for (slist = sg_widgets; slist; slist = slist->next)
+ gtk_size_group_remove_widget (GTK_SIZE_GROUP (object), GTK_WIDGET (slist->data));
+ g_slist_free (sg_widgets);
+ }
+
+ /* add new widgets */
+ if ((widgets = g_value_get_boxed (value)) != NULL)
+ {
+ for (list = widgets; list; list = list->next)
+ gtk_size_group_add_widget (GTK_SIZE_GROUP (object), GTK_WIDGET (list->data));
+ }
+ }
+ else
+ GWA_GET_CLASS (G_TYPE_OBJECT)->set_property (adaptor, object,
+ property_name, value);
+}
Modified: trunk/plugins/gtk+/gtk+.xml.in
==============================================================================
--- trunk/plugins/gtk+/gtk+.xml.in (original)
+++ trunk/plugins/gtk+/gtk+.xml.in Sat Sep 20 19:36:17 2008
@@ -14,6 +14,7 @@
<set-property-function>glade_gtk_widget_set_property</set-property-function>
<get-property-function>glade_gtk_widget_get_property</get-property-function>
<action-activate-function>glade_gtk_widget_action_activate</action-activate-function>
+ <action-submenu-function>glade_gtk_widget_action_submenu</action-submenu-function>
<read-widget-function>glade_gtk_widget_read_widget</read-widget-function>
<write-widget-function>glade_gtk_widget_write_widget</write-widget-function>
<create-editor-property-function>glade_gtk_widget_create_eprop</create-editor-property-function>
@@ -41,6 +42,7 @@
<action id="hpaned" _name="Horizontal Panes"/>
<action id="vpaned" _name="Vertical Panes"/>
</action>
+ <action id="sizegroup_add" _name="Add to Size Group"/>
</actions>
@@ -1736,8 +1738,18 @@
</properties>
</glade-widget-class>
+ <glade-widget-class name="GtkSizeGroup" generic-name="sizegroup" _title="Size Group">
+ <read-widget-function>glade_gtk_size_group_read_widget</read-widget-function>
+ <write-widget-function>glade_gtk_size_group_write_widget</write-widget-function>
+ <set-property-function>glade_gtk_size_group_set_property</set-property-function>
+ <properties>
+ <property id="widgets" _name="Widgets" save="False">
+ <_tooltip>List of widgets in this group</_tooltip>
+ <spec>glade_standard_objects_spec</spec>
+ </property>
+ </properties>
+ </glade-widget-class>
- <glade-widget-class name="GtkSizeGroup" generic-name="sizegroup" _title="Size Group"/>
<glade-widget-class name="GtkTextBuffer" generic-name="textbuffer" _title="Text Buffer"/>
<glade-widget-class name="GtkTextTag" generic-name="texttag" _title="Text Tag"/>
<glade-widget-class name="GtkTextTagTable" generic-name="texttagtable" _title="Text Tag Table"/>
Modified: trunk/src/glade-window.c
==============================================================================
--- trunk/src/glade-window.c (original)
+++ trunk/src/glade-window.c Sat Sep 20 19:36:17 2008
@@ -647,7 +647,7 @@
/* Only update the toolbar & workspace if the selection has changed on
* the currently active project.
*/
- if (project == glade_app_get_project ())
+ if (project && (project == glade_app_get_project ()))
{
list = glade_project_selection_get (project);
num = g_list_length (list);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]