summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tvb@src.gnome.org>2008-03-10 23:54:04 +0000
committerTristan Van Berkom <tvb@src.gnome.org>2008-03-10 23:54:04 +0000
commit481aceb852ba9ac7d57ddbbaf29e3ae719cce9fe (patch)
treec3ca1daa3c664b99a59be94dc7c8a629a968847f
parentfb149e09a55cdcd42e69768b09a34220efd3065e (diff)
downloadglade-481aceb852ba9ac7d57ddbbaf29e3ae719cce9fe.tar.gz
Moved widget name policing to gladeproject.
* gladeui/glade-widget.c, gladeui/glade-project.c: Moved widget name policing to gladeproject. * gladeui/glade-editor.c: Dont commit name values if name already exists in the project. svn path=/trunk/; revision=1739
-rw-r--r--ChangeLog8
-rw-r--r--gladeui/glade-editor.c3
-rw-r--r--gladeui/glade-id-allocator.c2
-rw-r--r--gladeui/glade-project.c29
-rw-r--r--gladeui/glade-widget.c20
5 files changed, 51 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 9e301696..87ff9a84 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -14,6 +14,14 @@
- Reintroducing GtkScaleButton and GtkVolumeButton in trunk.
- Reintroducing icon-theme dialog in trunk.
+ * gladeui/glade-id-allocator.c: Avoid crashing on id 0.
+
+ * gladeui/glade-widget.c, gladeui/glade-project.c: Moved
+ widget name policing to gladeproject.
+
+ * gladeui/glade-editor.c: Dont commit name values if name
+ already exists in the project.
+
2008-03-09 Tristan Van Berkom <tvb@gnome.org>
* NEWS, configure.ac: Rolling 3.4.2
diff --git a/gladeui/glade-editor.c b/gladeui/glade-editor.c
index 3723c020..b1a0ae0d 100644
--- a/gladeui/glade-editor.c
+++ b/gladeui/glade-editor.c
@@ -412,7 +412,8 @@ glade_editor_widget_name_changed (GtkWidget *editable, GladeEditor *editor)
widget = editor->loaded_widget;
new_name = gtk_editable_get_chars (GTK_EDITABLE (editable), 0, -1);
- glade_command_set_name (widget, new_name);
+ if (!glade_project_get_widget_by_name (widget->project, new_name))
+ glade_command_set_name (widget, new_name);
g_free (new_name);
}
diff --git a/gladeui/glade-id-allocator.c b/gladeui/glade-id-allocator.c
index e2053171..b208cd43 100644
--- a/gladeui/glade-id-allocator.c
+++ b/gladeui/glade-id-allocator.c
@@ -154,7 +154,7 @@ glade_id_allocator_release (GladeIDAllocator *allocator,
{
g_return_if_fail (allocator != NULL);
- id--;
+ id = id > 0 ? id - 1 : 0;
allocator->data[id >> 5] |= 1 << (id & 31);
}
diff --git a/gladeui/glade-project.c b/gladeui/glade-project.c
index 7928b78e..e32c2260 100644
--- a/gladeui/glade-project.c
+++ b/gladeui/glade-project.c
@@ -937,6 +937,7 @@ glade_project_add_object (GladeProject *project,
if (GLADE_IS_PLACEHOLDER (object))
return;
+
/* Only widgets accounted for in the catalog or widgets declared
* in the plugin with glade_widget_new_for_internal_child () are
* usefull in the project.
@@ -947,6 +948,16 @@ glade_project_add_object (GladeProject *project,
/* Dont add widgets that are already in the project */
if (glade_project_has_object (project, object))
return;
+
+
+ /* Police widget names here (just rename them on the way in the project)
+ */
+ if (glade_project_get_widget_by_name (project, gwidget->name) != NULL)
+ {
+ gchar *name = glade_project_new_widget_name (project, gwidget->name);
+ glade_widget_set_name (gwidget, name);
+ g_free (name);
+ }
/* Code body starts here */
reentrancy_count++;
@@ -1127,10 +1138,28 @@ glade_project_remove_object (GladeProject *project, GObject *object)
void
glade_project_widget_name_changed (GladeProject *project, GladeWidget *widget, const char *old_name)
{
+ GladeWidget *iter;
+ GList *l;
g_return_if_fail (GLADE_IS_PROJECT (project));
g_return_if_fail (GLADE_IS_WIDGET (widget));
glade_project_release_widget_name (project, widget, old_name);
+
+ /* Police widget names here (just rename them on the way in the project)
+ */
+ for (l = project->priv->objects; l; l = l->next)
+ {
+ iter = glade_widget_get_from_gobject (l->data);
+
+ if (widget != iter &&
+ !strcmp (widget->name, iter->name))
+ {
+ gchar *name = glade_project_new_widget_name (project, widget->name);
+ glade_widget_set_name (widget, name);
+ g_free (name);
+ }
+
+ }
g_signal_emit (G_OBJECT (project),
glade_project_signals [WIDGET_NAME_CHANGED],
diff --git a/gladeui/glade-widget.c b/gladeui/glade-widget.c
index 2634e9d8..bddbb7f6 100644
--- a/gladeui/glade-widget.c
+++ b/gladeui/glade-widget.c
@@ -1348,14 +1348,7 @@ glade_widget_dup_internal (GladeWidget *parent,
}
else
{
- gchar *name;
-
- if (exact)
- name = g_strdup (template_widget->name);
- else
- name = glade_project_new_widget_name (template_widget->project,
- template_widget->name);
-
+ gchar *name = g_strdup (template_widget->name);
gwidget = glade_widget_adaptor_create_widget
(template_widget->adaptor, FALSE,
"name", name,
@@ -2172,7 +2165,7 @@ glade_widget_show (GladeWidget *widget)
GtkWidget *layout;
g_return_if_fail (GLADE_IS_WIDGET (widget));
-
+
/* Position window at saved coordinates or in the center */
if (GTK_IS_WINDOW (widget->object) && glade_widget_embed (widget))
{
@@ -2613,8 +2606,17 @@ glade_widget_set_name (GladeWidget *widget, const gchar *name)
{
g_return_if_fail (GLADE_IS_WIDGET (widget));
if (widget->name != name) {
+
+ if (widget->project &&
+ glade_project_get_widget_by_name (widget->project, name))
+ {
+ /* print a warning ? */
+ return;
+ }
+
if (widget->name)
g_free (widget->name);
+
widget->name = g_strdup (name);
g_object_notify (G_OBJECT (widget), "name");
}