summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tvb@src.gnome.org>2008-03-11 00:18:02 +0000
committerTristan Van Berkom <tvb@src.gnome.org>2008-03-11 00:18:02 +0000
commit4143760c93c5aef6c54d1796861004b6dfb15ba9 (patch)
tree77de6bc6c58a43196b5cf0b8962368e07ea32fb3
parent92d17d167d2da3ca8da866c8ed28ef6638616ae2 (diff)
downloadglade-4143760c93c5aef6c54d1796861004b6dfb15ba9.tar.gz
Avoid crashing on id 0 (bug 442860)
* gladeui/glade-id-allocator.c: Avoid crashing on id 0 (bug 442860) * 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=/branches/gnome-2-22/; revision=1740
-rw-r--r--ChangeLog15
-rw-r--r--gladeui/glade-app.c10
-rw-r--r--gladeui/glade-editor.c5
-rw-r--r--gladeui/glade-id-allocator.c2
-rw-r--r--gladeui/glade-project.c27
-rw-r--r--gladeui/glade-widget.c17
6 files changed, 63 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index fe446c4b..b8b71179 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,20 @@
2008-03-10 Tristan Van Berkom <tvb@gnome.org>
+ * gladeui/glade-app.c: Now if an empty project is loaded
+ and anothther project with widgets is loaded, they will
+ also be shown at load time (first widget in the layout
+ gets autoloaded).
+
+ * gladeui/glade-id-allocator.c: Avoid crashing on id 0 (bug 442860)
+
+ * 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-10 Tristan Van Berkom <tvb@gnome.org>
+
* NEWS, configure.ac: Rolling 3.4.3
* plugins/gtk+/gtk+.xml.in: Backing out GtkScaleButton
diff --git a/gladeui/glade-app.c b/gladeui/glade-app.c
index c7eebecf..9dc242b1 100644
--- a/gladeui/glade-app.c
+++ b/gladeui/glade-app.c
@@ -38,6 +38,7 @@
#include "glade-cursor.h"
#include "glade-catalog.h"
#include "glade-fixed.h"
+#include "glade-design-view.h"
#include "glade-marshallers.h"
#include "glade-accumulators.h"
@@ -916,6 +917,8 @@ void
glade_app_add_project (GladeProject *project)
{
GladeApp *app;
+ GladeDesignView *view;
+ GladeDesignLayout *layout;
g_return_if_fail (GLADE_IS_PROJECT (project));
/* If the project was previously loaded, don't re-load */
@@ -945,9 +948,12 @@ glade_app_add_project (GladeProject *project)
glade_app_set_project (project);
/* Select the first window in the project */
- if (g_list_length (app->priv->projects) == 1)
+ if (g_list_length (app->priv->projects) == 1 ||
+ !(view = glade_design_view_get_from_project (project)) ||
+ !(layout = glade_design_view_get_layout (view)) ||
+ !GTK_BIN (layout)->child)
{
- GList *node;
+ const GList *node;
for (node = glade_project_get_objects (project);
node != NULL;
node = g_list_next (node))
diff --git a/gladeui/glade-editor.c b/gladeui/glade-editor.c
index 3723c020..535f69a2 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);
}
@@ -646,7 +647,7 @@ glade_editor_get_table_from_class (GladeEditor *editor,
GladeEditorTable *table;
GList *list;
- g_return_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor));
+ g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), NULL);
for (list = editor->widget_tables; list; list = list->next)
{
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..40f0c967 100644
--- a/gladeui/glade-project.c
+++ b/gladeui/glade-project.c
@@ -947,6 +947,15 @@ 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 +1136,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..bb019b94 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,
@@ -2613,6 +2606,14 @@ 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);