[glade/wip/support-no-ids] GladeEditorTable: Adjusting name/ID edit rules.



commit fa18850038d4cc2d6f2b9f4b4b15f43b45092fa0
Author: Tristan Van Berkom <tristan upstairslabs com>
Date:   Wed Jan 27 17:33:12 2016 +0100

    GladeEditorTable: Adjusting name/ID edit rules.
    
    Now you are allowed to clear the widget ID as long as
    that widget is not referred to by anything else in the
    project.

 gladeui/glade-editor-table.c |   40 ++++++++++++++++++++++++++++++++++------
 1 files changed, 34 insertions(+), 6 deletions(-)
---
diff --git a/gladeui/glade-editor-table.c b/gladeui/glade-editor-table.c
index 80a8d65..ba1e10b 100644
--- a/gladeui/glade-editor-table.c
+++ b/gladeui/glade-editor-table.c
@@ -224,9 +224,25 @@ widget_name_edited (GtkWidget *editable, GladeEditorTable *table)
   widget = table->priv->loaded_widget;
   new_name = gtk_editable_get_chars (GTK_EDITABLE (editable), 0, -1);
 
-  if (glade_project_available_widget_name (glade_widget_get_project (widget), 
-                                          widget, new_name))
+  if (new_name == NULL || new_name[0] == '\0')
+    {
+      /* If we are explicitly trying to set the widget name to be empty,
+       * then we must not allow it there are any active references to
+       * the widget which would otherwise break.
+       *
+       * Otherwise, we need to allocate a new unnamed prefix name for the widget
+       */
+      if (!glade_widget_has_prop_refs (widget))
+       {
+         gchar *unnamed_name = glade_project_new_widget_name (glade_widget_get_project (widget), NULL, 
GLADE_UNNAMED_PREFIX);
+         glade_command_set_name (widget, unnamed_name);
+         g_free (unnamed_name);
+       }
+    }
+  else if (glade_project_available_widget_name (glade_widget_get_project (widget), 
+                                               widget, new_name))
     glade_command_set_name (widget, new_name);
+
   g_free (new_name);
 }
 
@@ -264,9 +280,16 @@ widget_name_changed (GladeWidget      *widget,
 
   if (table->priv->name_entry)
     {
+      const gchar *widget_name;
+
       BLOCK_NAME_ENTRY_CB (table);
-      gtk_entry_set_text (GTK_ENTRY (table->priv->name_entry),
-                          glade_widget_get_name (table->priv->loaded_widget));
+
+      widget_name = glade_widget_get_name (table->priv->loaded_widget);
+      if (!widget_name || strncmp (widget_name, GLADE_UNNAMED_PREFIX, strlen (GLADE_UNNAMED_PREFIX)) == 0)
+       gtk_entry_set_text (GTK_ENTRY (table->priv->name_entry), "");
+      else
+       gtk_entry_set_text (GTK_ENTRY (table->priv->name_entry), widget_name);
+
       UNBLOCK_NAME_ENTRY_CB (table);
     }
 }
@@ -368,8 +391,13 @@ glade_editor_table_load (GladeEditable *editable, GladeWidget *widget)
        }
 
       if (table->priv->name_entry)
-        gtk_entry_set_text (GTK_ENTRY (table->priv->name_entry), 
-                           glade_widget_get_name (widget));
+       {
+         const gchar *widget_name = glade_widget_get_name (widget);
+         if (!widget_name || strncmp (widget_name, GLADE_UNNAMED_PREFIX, strlen (GLADE_UNNAMED_PREFIX)) == 0)
+           gtk_entry_set_text (GTK_ENTRY (table->priv->name_entry), "");
+         else
+           gtk_entry_set_text (GTK_ENTRY (table->priv->name_entry), widget_name);
+       }
 
       if (table->priv->name_label)
        widget_composite_changed (widget, NULL, table);


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