summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan@upstairslabs.com>2016-01-27 17:33:12 +0100
committerTristan Van Berkom <tristan@upstairslabs.com>2016-01-27 17:47:17 +0100
commitfa18850038d4cc2d6f2b9f4b4b15f43b45092fa0 (patch)
tree0bff7d461791cc0e66a7a5e1bd51f2eae0646c55
parenta784c69aa6da2ac1bb22dc788a7e8bfb951fbf8b (diff)
downloadglade-fa18850038d4cc2d6f2b9f4b4b15f43b45092fa0.tar.gz
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.
-rw-r--r--gladeui/glade-editor-table.c40
1 files changed, 34 insertions, 6 deletions
diff --git a/gladeui/glade-editor-table.c b/gladeui/glade-editor-table.c
index 80a8d65f..ba1e10b1 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);