glade3 r1740 - in branches/gnome-2-22: . gladeui



Author: tvb
Date: Tue Mar 11 00:18:02 2008
New Revision: 1740
URL: http://svn.gnome.org/viewvc/glade3?rev=1740&view=rev

Log:
	* 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.



Modified:
   branches/gnome-2-22/ChangeLog
   branches/gnome-2-22/gladeui/glade-app.c
   branches/gnome-2-22/gladeui/glade-editor.c
   branches/gnome-2-22/gladeui/glade-id-allocator.c
   branches/gnome-2-22/gladeui/glade-project.c
   branches/gnome-2-22/gladeui/glade-widget.c

Modified: branches/gnome-2-22/gladeui/glade-app.c
==============================================================================
--- branches/gnome-2-22/gladeui/glade-app.c	(original)
+++ branches/gnome-2-22/gladeui/glade-app.c	Tue Mar 11 00:18:02 2008
@@ -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 @@
 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_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))

Modified: branches/gnome-2-22/gladeui/glade-editor.c
==============================================================================
--- branches/gnome-2-22/gladeui/glade-editor.c	(original)
+++ branches/gnome-2-22/gladeui/glade-editor.c	Tue Mar 11 00:18:02 2008
@@ -412,7 +412,8 @@
 
 	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 @@
 	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)
 	{

Modified: branches/gnome-2-22/gladeui/glade-id-allocator.c
==============================================================================
--- branches/gnome-2-22/gladeui/glade-id-allocator.c	(original)
+++ branches/gnome-2-22/gladeui/glade-id-allocator.c	Tue Mar 11 00:18:02 2008
@@ -154,7 +154,7 @@
 {
 	g_return_if_fail (allocator != NULL);
 
-	id--;
+	id = id > 0 ? id - 1 : 0;
 	allocator->data[id >> 5] |= 1 << (id & 31);
 }
 

Modified: branches/gnome-2-22/gladeui/glade-project.c
==============================================================================
--- branches/gnome-2-22/gladeui/glade-project.c	(original)
+++ branches/gnome-2-22/gladeui/glade-project.c	Tue Mar 11 00:18:02 2008
@@ -947,6 +947,15 @@
 	/* 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 @@
 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],

Modified: branches/gnome-2-22/gladeui/glade-widget.c
==============================================================================
--- branches/gnome-2-22/gladeui/glade-widget.c	(original)
+++ branches/gnome-2-22/gladeui/glade-widget.c	Tue Mar 11 00:18:02 2008
@@ -1348,14 +1348,7 @@
 	}
 	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 @@
 {
 	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);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]