[glade/glade-3-8] * gladeui/glade-widget.[ch], gladeui/glade-project.c, gladeui/glade-utils.c: Now update the Glad
- From: Tristan Van Berkom <tvb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glade/glade-3-8] * gladeui/glade-widget.[ch], gladeui/glade-project.c, gladeui/glade-utils.c: Now update the Glad
- Date: Thu, 3 Feb 2011 09:10:33 +0000 (UTC)
commit ea43dd1e724e1449615d41bef1ad34fb040057b0
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date: Thu Feb 3 17:58:09 2011 +0900
* gladeui/glade-widget.[ch], gladeui/glade-project.c, gladeui/glade-utils.c: Now update
the GladeWidget's project pointer when going in and out of a project.
ChangeLog | 5 +++++
gladeui/glade-project.c | 32 ++++++++++++++++++++++++--------
gladeui/glade-utils.c | 2 +-
gladeui/glade-widget.c | 29 ++++++++++++++++-------------
gladeui/glade-widget.h | 23 +++++++++++++----------
5 files changed, 59 insertions(+), 32 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 316dd92..e57e197 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-02-03 Tristan Van Berkom <tristanvb openismus com>
+
+ * gladeui/glade-widget.[ch], gladeui/glade-project.c, gladeui/glade-utils.c: Now update
+ the GladeWidget's project pointer when going in and out of a project.
+
2011-01-29 Tristan Van Berkom <tristanvb openismus com>
* plugins/gtk+/glade-model-data.c: Avoid committing the data if the data did not
diff --git a/gladeui/glade-project.c b/gladeui/glade-project.c
index 163290e..5b7ba0f 100644
--- a/gladeui/glade-project.c
+++ b/gladeui/glade-project.c
@@ -2406,7 +2406,14 @@ glade_project_verify_signals (GladeWidget *widget,
void
glade_project_verify_properties (GladeWidget *widget)
{
+ GladeProject *project;
+
g_return_if_fail (GLADE_IS_WIDGET (widget));
+
+ project = glade_widget_get_project (widget);
+ if (!project || project->priv->loading)
+ return;
+
glade_project_verify_properties_internal (widget, NULL, NULL, TRUE);
glade_project_verify_signals (widget, NULL, NULL, TRUE);
@@ -2860,7 +2867,6 @@ glade_project_available_widget_name (GladeProject *project,
g_return_val_if_fail (GLADE_IS_PROJECT (project), FALSE);
g_return_val_if_fail (GLADE_IS_WIDGET (widget), FALSE);
- g_return_val_if_fail (widget->project == project, FALSE);
if (!name || !name[0])
return FALSE;
@@ -2933,7 +2939,6 @@ glade_project_new_widget_name (GladeProject *project,
g_return_val_if_fail (GLADE_IS_PROJECT (project), NULL);
g_return_val_if_fail (GLADE_IS_WIDGET (widget), NULL);
- g_return_val_if_fail (widget->project == project, NULL);
g_return_val_if_fail (base_name && base_name[0], NULL);
context = name_context_by_widget (project, widget);
@@ -2975,7 +2980,6 @@ glade_project_set_widget_name (GladeProject *project,
g_return_if_fail (GLADE_IS_PROJECT (project));
g_return_if_fail (GLADE_IS_WIDGET (widget));
- g_return_if_fail (widget->project == project);
g_return_if_fail (name && name[0]);
if (strcmp (name, widget->name) == 0)
@@ -3138,6 +3142,7 @@ glade_project_add_object (GladeProject *project,
glade_project_reserve_widget_name (project, gwidget, gwidget->name);
glade_widget_set_project (gwidget, (gpointer)project);
+ gwidget->in_project = TRUE;
g_object_ref_sink (gwidget);
/* Be sure to update the lists before emitting signals */
@@ -3180,9 +3185,15 @@ glade_project_add_object (GladeProject *project,
gboolean
glade_project_has_object (GladeProject *project, GObject *object)
{
+ GladeWidget *gwidget;
+
g_return_val_if_fail (GLADE_IS_PROJECT (project), FALSE);
g_return_val_if_fail (G_IS_OBJECT (object), FALSE);
- return (g_list_find (project->priv->objects, object)) != NULL;
+
+ gwidget = glade_widget_get_from_gobject (object);
+ g_return_val_if_fail (GLADE_IS_WIDGET (gwidget), FALSE);
+
+ return (glade_widget_get_project (gwidget) == project && gwidget->in_project);
}
/**
@@ -3205,6 +3216,9 @@ glade_project_remove_object (GladeProject *project, GObject *object)
g_return_if_fail (GLADE_IS_PROJECT (project));
g_return_if_fail (G_IS_OBJECT (object));
+ if (!glade_project_has_object (project, object))
+ return;
+
if (GLADE_IS_PLACEHOLDER (object))
return;
@@ -3236,6 +3250,10 @@ glade_project_remove_object (GladeProject *project, GObject *object)
/* Update internal data structure (remove from lists) */
project->priv->tree = g_list_remove (project->priv->tree, object);
project->priv->objects = g_list_remove (project->priv->objects, object);
+
+ /* Unset the project pointer on the GladeWidget */
+ glade_widget_set_project (gwidget, NULL);
+ gwidget->in_project = FALSE;
g_object_unref (gwidget);
glade_project_update_previewable (project);
@@ -3518,7 +3536,7 @@ glade_project_selection_add (GladeProject *project,
{
g_return_if_fail (GLADE_IS_PROJECT (project));
g_return_if_fail (G_IS_OBJECT (object));
- g_return_if_fail (g_list_find (project->priv->objects, object) != NULL);
+ g_return_if_fail (glade_project_has_object (project, object));
if (glade_project_is_selected (project, object) == FALSE)
{
@@ -3550,9 +3568,7 @@ glade_project_selection_set (GladeProject *project,
{
g_return_if_fail (GLADE_IS_PROJECT (project));
g_return_if_fail (G_IS_OBJECT (object));
-
- if (g_list_find (project->priv->objects, object) == NULL)
- return;
+ g_return_if_fail (glade_project_has_object (project, object));
if (project->priv->selection == NULL)
glade_project_set_has_selection (project, TRUE);
diff --git a/gladeui/glade-utils.c b/gladeui/glade-utils.c
index 1fb5484..a7c4f15 100644
--- a/gladeui/glade-utils.c
+++ b/gladeui/glade-utils.c
@@ -1796,7 +1796,7 @@ glade_util_object_is_loading (GObject *object)
project = glade_widget_get_project (widget);
- return glade_project_is_loading (project);
+ return project && glade_project_is_loading (project);
}
/**
diff --git a/gladeui/glade-widget.c b/gladeui/glade-widget.c
index 30e52ee..a0bf81e 100644
--- a/gladeui/glade-widget.c
+++ b/gladeui/glade-widget.c
@@ -2334,6 +2334,7 @@ glade_widget_rebuild (GladeWidget *gwidget)
{
GObject *new_object, *old_object;
GladeWidgetAdaptor *adaptor;
+ GladeProject *project = NULL;
GList *children;
gboolean reselect = FALSE, inproject;
GList *restore_properties = NULL;
@@ -2343,6 +2344,10 @@ glade_widget_rebuild (GladeWidget *gwidget)
adaptor = gwidget->adaptor;
+ if (gwidget->project &&
+ glade_project_has_object (gwidget->project, gwidget->object))
+ project = gwidget->project;
+
g_object_ref (gwidget);
/* Extract and keep the child hierarchies aside... */
@@ -2355,16 +2360,15 @@ glade_widget_rebuild (GladeWidget *gwidget)
(glade_project_has_object
(gwidget->project, gwidget->object) ? TRUE : FALSE) : FALSE;
- if (inproject)
+ if (project)
{
- if (glade_project_is_selected (gwidget->project,
- gwidget->object))
+ if (glade_project_is_selected (project, gwidget->object))
{
reselect = TRUE;
glade_project_selection_remove
- (gwidget->project, gwidget->object, FALSE);
+ (project, gwidget->object, FALSE);
}
- glade_project_remove_object (gwidget->project, gwidget->object);
+ glade_project_remove_object (project, gwidget->object);
}
/* parentless_widget and object properties that reffer to this widget
@@ -2459,13 +2463,11 @@ glade_widget_rebuild (GladeWidget *gwidget)
/* If the widget was in a project (and maybe the selection), then
* restore that stuff.
*/
- if (inproject)
+ if (project)
{
- glade_project_add_object (gwidget->project, NULL,
- gwidget->object);
+ glade_project_add_object (project, NULL, gwidget->object);
if (reselect)
- glade_project_selection_add
- (gwidget->project, gwidget->object, TRUE);
+ glade_project_selection_add (project, gwidget->object, TRUE);
}
/* We shouldnt show if its not already visible */
@@ -3774,13 +3776,13 @@ glade_widget_read (GladeProject *project,
if (glade_project_load_cancelled (project))
return NULL;
-
- glade_widget_push_superuser ();
if (!glade_xml_node_verify
(node, GLADE_XML_TAG_WIDGET (glade_project_get_format (project))))
return NULL;
+ glade_widget_push_superuser ();
+
if ((klass =
glade_xml_get_property_string_required
(node, GLADE_XML_TAG_CLASS, NULL)) != NULL)
@@ -3809,7 +3811,7 @@ glade_widget_read (GladeProject *project,
"internal child %s of %s",
internal,
glade_widget_get_name (parent));
- return FALSE;
+ goto out;
}
if (!(widget =
@@ -3839,6 +3841,7 @@ glade_widget_read (GladeProject *project,
g_free (klass);
}
+ out:
glade_widget_pop_superuser ();
glade_project_push_progress (project);
diff --git a/gladeui/glade-widget.h b/gladeui/glade-widget.h
index 541e2f1..95d8601 100644
--- a/gladeui/glade-widget.h
+++ b/gladeui/glade-widget.h
@@ -48,11 +48,6 @@ struct _GladeWidget
* Internal children cannot be deleted.
*/
- gboolean anarchist; /* Some composite widgets have internal children
- * that are not part of the same hierarchy; hence 'anarchists',
- * typicly a popup window or its child (we need to mark
- * them so we can avoid bookkeeping packing props on them etc.).
- */
GObject *object; /* A pointer to the object that was created.
* if it is a GtkWidget; it is shown as a "view"
@@ -84,10 +79,6 @@ struct _GladeWidget
GHashTable *signals; /* A table with a GPtrArray of GladeSignals (signal handlers),
* indexed by its name */
- gboolean visible; /* Local copy of widget visibility, we need to keep track of this
- * since the objects copy may be invalid due to a rebuild.
- */
-
GList *prop_refs; /* List of properties in the project who's value are `this object'
* (this is used to set/unset those properties when the object is
* added/removed from the project).
@@ -112,7 +103,19 @@ struct _GladeWidget
GladeWidget *construct_template;
GladeCreateReason construct_reason;
gchar *construct_internal;
- gboolean construct_exact;
+ guint construct_exact : 1;
+
+
+ guint visible : 1; /* Local copy of widget visibility, we need to keep track of this
+ * since the objects copy may be invalid due to a rebuild.
+ */
+ guint anarchist : 1; /* Some composite widgets have internal children
+ * that are not part of the same hierarchy; hence 'anarchists',
+ * typicly a popup window or its child (we need to mark
+ * them so we can avoid bookkeeping packing props on them etc.).
+ */
+
+ guint in_project : 1; /* Whether the widget is currently actually in the project */
};
struct _GladeWidgetClass
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]