diff options
author | Tristan Van Berkom <tristan@upstairslabs.com> | 2016-01-27 17:33:12 +0100 |
---|---|---|
committer | Tristan Van Berkom <tristan@upstairslabs.com> | 2016-01-27 17:47:17 +0100 |
commit | fa18850038d4cc2d6f2b9f4b4b15f43b45092fa0 (patch) | |
tree | 0bff7d461791cc0e66a7a5e1bd51f2eae0646c55 | |
parent | a784c69aa6da2ac1bb22dc788a7e8bfb951fbf8b (diff) | |
download | glade-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.c | 40 |
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); |