summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog14
-rw-r--r--NEWS9
-rw-r--r--configure.ac3
-rw-r--r--gladeui/glade-command.c7
-rw-r--r--gladeui/glade-inspector.c2
-rw-r--r--gladeui/glade-project.c267
-rw-r--r--gladeui/glade-project.h3
-rw-r--r--plugins/gtk+/glade-gtk.c10
-rw-r--r--plugins/gtk+/gtk+.xml.in2
-rw-r--r--plugins/python/Makefile.am2
10 files changed, 193 insertions, 126 deletions
diff --git a/ChangeLog b/ChangeLog
index 6d3684aa..cee47f38 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2009-06-12 Tristan Van Berkom <tvb@gnome.org>
+
+ * configure.in, NEWS: Rolling Glade 3.6.5 (added more output in configure.ac
+ config summery).
+
+ * gladeui/glade-project.[ch], gladeui/glade-command.c, gladeui/glade-inspector.c:
+ Really fixing widget naming policies again, this time I hope it sticks (bug 580745).
+
+ * plugins/gtk+/glade-gtk.c, plugins/gtk+/gtk+.xml.in: Fixed dissapearing
+ dialogs on ESC (bug 582559)
+
+ * plugins/python/Makefile.am: Fixed relocated link problems with python
+ plugin build (bug 582982, patch by Arun Raghavan).
+
2009-06-11 Tristan Van Berkom <tvb@gnome.org>
* configure.ac, src/Makefile.am, src/glade-window.c: Use ige-mac-integration
diff --git a/NEWS b/NEWS
index f5a67754..5a42e3ca 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,13 @@
===========
+Glade 3.6.5
+===========
+ - Quartz build support and use ige-mac-integration to setup the menubar
+ as an optional build dependancy.
+ - Fixed dissapearing dialogs on ESC (bug 582559)
+ - Really fixing widget naming policies again, this time I hope it sticks (bug 580745)
+ - Fixed relocated link problems with python plugin build (bug 582982, patch by Arun Raghavan)
+
+===========
Glade 3.6.4
===========
- Check project naming policy at add_object() time (bug 580745).
diff --git a/configure.ac b/configure.ac
index 2d8ad1ad..cc188565 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@ AC_PREREQ(2.52)
m4_define(glade_major_version, 3)
m4_define(glade_minor_version, 6)
-m4_define(glade_micro_version, 4)
+m4_define(glade_micro_version, 5)
m4_define(glade_version, glade_major_version.glade_minor_version.glade_micro_version)
AC_INIT([glade3], [glade_version],
@@ -287,4 +287,5 @@ Configuration:
PYTHON Widgets support: ${have_python}
Build Reference Manual: ${enable_gtk_doc}
+ Build User Manual: ${gdu_cv_have_gdu}
"
diff --git a/gladeui/glade-command.c b/gladeui/glade-command.c
index d408d24f..f2d8ebe9 100644
--- a/gladeui/glade-command.c
+++ b/gladeui/glade-command.c
@@ -2566,7 +2566,6 @@ typedef struct {
GladeProject *project;
GladeNamingPolicy policy;
GladeNamingPolicy old_policy;
- gboolean run_once;
} GladeCommandSetPolicy;
@@ -2588,14 +2587,12 @@ glade_command_set_policy_execute(GladeCommand *cmd)
g_return_val_if_fail (me->project != NULL, TRUE);
/* set the new policy */
- glade_project_set_naming_policy (me->project, me->policy, me->run_once == FALSE);
+ glade_project_set_naming_policy (me->project, me->policy);
/* swap the current values with the old values to prepare for undo */
policy = me->policy;
me->policy = me->old_policy;
me->old_policy = policy;
-
- me->run_once = TRUE;
return TRUE;
}
@@ -2670,8 +2667,6 @@ glade_command_set_project_naming_policy (GladeProject *project,
me->policy = policy;
me->old_policy = glade_project_get_naming_policy (project);
- me->run_once = FALSE;
-
GLADE_COMMAND(me)->description = g_strdup_printf("dummy string");
glade_command_check_group(GLADE_COMMAND(me));
diff --git a/gladeui/glade-inspector.c b/gladeui/glade-inspector.c
index 94e4bbe6..11be2bf1 100644
--- a/gladeui/glade-inspector.c
+++ b/gladeui/glade-inspector.c
@@ -755,6 +755,8 @@ project_add_widget_cb (GladeProject *project,
&widget_iter);
g_list_free (l);
+
+ gtk_tree_view_expand_all (GTK_TREE_VIEW (inspector->priv->view));
}
static void
diff --git a/gladeui/glade-project.c b/gladeui/glade-project.c
index 86c3f343..5f653852 100644
--- a/gladeui/glade-project.c
+++ b/gladeui/glade-project.c
@@ -1045,7 +1045,7 @@ glade_project_read_naming_policy (GladeProject *project,
break;
}
- glade_project_set_naming_policy (project, policy, FALSE);
+ glade_project_set_naming_policy (project, policy);
}
@@ -2139,9 +2139,9 @@ name_context_by_widget (GladeProject *project,
TopLevelInfo *tinfo;
GladeWidget *iter;
GList *list;
-
- if (project->priv->naming_policy == GLADE_POLICY_PROJECT_WIDE)
- return project->priv->toplevel_names;
+
+ if (!gwidget->parent)
+ return NULL;
iter = gwidget;
while (iter->parent) iter = iter->parent;
@@ -2253,19 +2253,24 @@ glade_project_release_widget_name (GladeProject *project, GladeWidget *gwidget,
}
if (context)
+ {
glade_name_context_release_name (context, widget_name);
+ //g_print ("Released widget name %s from sub context\n", widget_name);
+ }
- if (!gwidget->parent)
+ if (project->priv->naming_policy == GLADE_POLICY_PROJECT_WIDE || !gwidget->parent)
{
glade_name_context_release_name (project->priv->toplevel_names, widget_name);
+ //g_print ("Released widget name %s from toplevel context\n", widget_name);
+ }
- if (context && glade_name_context_n_names (context) == 0)
- {
- glade_name_context_destroy (context);
- g_free (tinfo);
- project->priv->toplevels = g_list_remove (project->priv->toplevels, tinfo);
- }
+ if (context && glade_name_context_n_names (context) == 0)
+ {
+ glade_name_context_destroy (context);
+ g_free (tinfo);
+ project->priv->toplevels = g_list_remove (project->priv->toplevels, tinfo);
}
+
}
/**
@@ -2284,7 +2289,9 @@ glade_project_available_widget_name (GladeProject *project,
const gchar *name)
{
GladeNameContext *context;
-
+ gboolean sub_has_name = FALSE;
+ gboolean available = FALSE;
+
g_return_val_if_fail (GLADE_IS_PROJECT (project), FALSE);
g_return_val_if_fail (GLADE_IS_WIDGET (widget), FALSE);
g_return_val_if_fail (widget->project == project, FALSE);
@@ -2292,14 +2299,50 @@ glade_project_available_widget_name (GladeProject *project,
if (!name || !name[0])
return FALSE;
- context = name_context_by_widget (project, widget);
- g_assert (context);
+ if ((context = name_context_by_widget (project, widget)) != NULL)
+ sub_has_name = glade_name_context_has_name (context, name);
+
+ if (project->priv->naming_policy == GLADE_POLICY_PROJECT_WIDE)
+ {
+ available = (!sub_has_name &&
+ !glade_name_context_has_name (project->priv->toplevel_names, name));
+
+ }
+ else if (context)
+ available = !sub_has_name;
+ else
+ available = !glade_name_context_has_name (project->priv->toplevel_names, name);
+
+ //g_print ("widget name %s is available: %d (policy %d)\n", name, available, project->priv->naming_policy);
+
+ return available;
+}
+
+static void
+glade_project_reserve_widget_name (GladeProject *project, GladeWidget *gwidget, const char *widget_name)
+{
+ GladeNameContext *context;
+
+ if (!glade_project_available_widget_name (project, gwidget, widget_name))
+ {
+ g_warning ("BUG: widget '%s' attempting to reserve an unavailable widget name '%s' !",
+ gwidget->name, widget_name);
+ return;
+ }
+
+ /* Add to name context(s) */
+ if ((context = name_context_by_widget (project, gwidget)) != NULL)
+ {
+ //g_print ("Reserving widget name %s from sub context\n", widget_name);
+ glade_name_context_add_name (context, widget_name);
+ }
- if (project->priv->naming_policy == GLADE_POLICY_PROJECT_WIDE || !widget->parent)
- return (!glade_name_context_has_name (context, name) &&
- !glade_name_context_has_name (project->priv->toplevel_names, name));
+ if (project->priv->naming_policy == GLADE_POLICY_PROJECT_WIDE || !gwidget->parent)
+ {
+ glade_name_context_add_name (project->priv->toplevel_names, widget_name);
+ //g_print ("Reserving widget name %s from main context\n", widget_name);
+ }
- return !glade_name_context_has_name (context, name);
}
/**
@@ -2329,14 +2372,20 @@ glade_project_new_widget_name (GladeProject *project,
context = name_context_by_widget (project, widget);
- /* should use dual here to encourage unique names across the file... */
- if (context && widget->parent)
- name = glade_name_context_new_name (context, base_name);
+ if (project->priv->naming_policy == GLADE_POLICY_PROJECT_WIDE)
+ {
+ if (context)
+ name = glade_name_context_dual_new_name (context, project->priv->toplevel_names, base_name);
+ else
+ name = glade_name_context_new_name (project->priv->toplevel_names, base_name);
+ }
else if (context)
- name = glade_name_context_dual_new_name (context, project->priv->toplevel_names, base_name);
+ name = glade_name_context_new_name (context, base_name);
else
name = glade_name_context_new_name (project->priv->toplevel_names, base_name);
+ //g_print ("Allocating widget name %s, widget parent %p\n", name, widget->parent);
+
return name;
}
@@ -2354,8 +2403,7 @@ glade_project_set_widget_name (GladeProject *project,
GladeWidget *widget,
const gchar *name)
{
- GladeNameContext *context = NULL;
- gchar *new_name;
+ gchar *new_name;
g_return_if_fail (GLADE_IS_PROJECT (project));
g_return_if_fail (GLADE_IS_WIDGET (widget));
@@ -2371,13 +2419,7 @@ glade_project_set_widget_name (GladeProject *project,
else
new_name = g_strdup (name);
-
- /* Add to name context(s) */
- context = name_context_by_widget (project, widget);
- g_assert (context);
- glade_name_context_add_name (context, new_name);
- if (!widget->parent)
- glade_name_context_add_name (project->priv->toplevel_names, new_name);
+ glade_project_reserve_widget_name (project, widget, new_name);
/* Release old name and set new widget name */
glade_project_release_widget_name (project, widget, widget->name);
@@ -2420,7 +2462,6 @@ glade_project_add_object (GladeProject *project,
GladeProject *old_project,
GObject *object)
{
- GladeNameContext *context;
GladeWidget *gwidget;
GList *list, *children;
gchar *name;
@@ -2468,16 +2509,13 @@ glade_project_add_object (GladeProject *project,
if (!glade_project_available_widget_name (project, gwidget, gwidget->name))
{
name = glade_project_new_widget_name (project, gwidget, gwidget->name);
+
glade_widget_set_name (gwidget, name);
+
g_free (name);
}
- /* Now lock down the widget name. */
- context = name_context_by_widget (project, gwidget);
- g_assert (context);
- glade_name_context_add_name (context, gwidget->name);
- if (!gwidget->parent)
- glade_name_context_add_name (project->priv->toplevel_names, gwidget->name);
+ glade_project_reserve_widget_name (project, gwidget, gwidget->name);
if ((children = glade_widget_adaptor_get_children
(gwidget->adaptor, gwidget->object)) != NULL)
@@ -2563,92 +2601,53 @@ glade_project_remove_object (GladeProject *project, GObject *object)
glade_project_release_widget_name (project, gwidget,
glade_widget_get_name (gwidget));
project->priv->objects = g_list_delete_link (project->priv->objects, link);
- }
- g_signal_emit (G_OBJECT (project),
- glade_project_signals [REMOVE_WIDGET],
- 0,
- gwidget);
+ g_signal_emit (G_OBJECT (project),
+ glade_project_signals [REMOVE_WIDGET],
+ 0,
+ gwidget);
+ }
}
static void
-adjust_naming_policy (GladeProject *project, gboolean use_command)
+adjust_naming_policy (GladeProject *project,
+ GladeNamingPolicy policy)
{
- GList *list;
+ GList *list, *objects;
GladeWidget *widget;
- TopLevelInfo *tinfo;
- GladeNameContext *context;
-
- if (project->priv->naming_policy == GLADE_POLICY_PROJECT_WIDE)
- {
- for (list = project->priv->objects; list; list = list->next)
- {
- widget = glade_widget_get_from_gobject (list->data);
-
- if (!widget->parent)
- continue;
- if (!glade_name_context_has_name (project->priv->toplevel_names, widget->name))
- glade_name_context_add_name (project->priv->toplevel_names, widget->name);
- else
- {
- gchar *new_name = glade_name_context_new_name (project->priv->toplevel_names,
- widget->name);
-
- if (use_command)
- glade_command_set_name (widget, new_name);
- else
- glade_widget_set_name (widget, new_name);
+ objects = g_list_copy (project->priv->objects);
- glade_name_context_add_name (project->priv->toplevel_names, new_name);
- g_free (new_name);
- }
+ /* Remove all toplevels (recursive operation) */
+ for (list = objects; list; list = list->next)
+ {
+ widget = glade_widget_get_from_gobject (list->data);
+ if (!widget->parent)
+ {
+ g_object_ref (widget->object);
+ g_object_ref (widget);
+ glade_project_remove_object (project, widget->object);
}
- for (list = project->priv->toplevels; list; list = list->next)
- {
- tinfo = list->data;
- glade_name_context_destroy (tinfo->names);
- g_free (tinfo);
- }
- project->priv->toplevels =
- (g_list_free (project->priv->toplevels), NULL);
}
- else
- {
- /* First add toplevel names */
- for (list = project->priv->objects; list; list = list->next)
- {
- widget = glade_widget_get_from_gobject (list->data);
-
- if (!widget->parent)
- {
- TopLevelInfo *tinfo = g_new0 (TopLevelInfo, 1);
- tinfo->toplevel = widget;
- tinfo->names = glade_name_context_new ();
- project->priv->toplevels = g_list_prepend (project->priv->toplevels, tinfo);
- glade_name_context_add_name (tinfo->names, widget->name);
- }
- }
+ project->priv->naming_policy = policy;
- /* Now add child names */
- for (list = project->priv->objects; list; list = list->next)
+ /* Put the toplevels back with the new policy (recursive operation) */
+ for (list = objects; list; list = list->next)
+ {
+ widget = glade_widget_get_from_gobject (list->data);
+ if (!widget->parent)
{
- widget = glade_widget_get_from_gobject (list->data);
-
- if (widget->parent)
- {
- context = name_context_by_widget (project, widget);
- glade_name_context_add_name (context, widget->name);
- glade_name_context_release_name (project->priv->toplevel_names, widget->name);
- }
+ glade_project_add_object (project, project, widget->object);
+ g_object_unref (widget->object);
+ g_object_unref (widget);
}
}
+ g_list_free (objects);
}
-
/*******************************************************************
Remaining stubs and api
*******************************************************************/
@@ -3335,16 +3334,13 @@ glade_project_get_modified (GladeProject *project)
void
glade_project_set_naming_policy (GladeProject *project,
- GladeNamingPolicy policy,
- gboolean use_command)
+ GladeNamingPolicy policy)
{
g_return_if_fail (GLADE_IS_PROJECT (project));
if (project->priv->naming_policy != policy)
{
- project->priv->naming_policy = policy;
-
- adjust_naming_policy (project, use_command);
+ adjust_naming_policy (project, policy);
/* Update the toggle button in the prefs dialog here: */
g_signal_handlers_block_by_func (project->priv->project_wide_radio,
@@ -3437,11 +3433,62 @@ format_builder_button_toggled (GtkWidget *widget,
glade_command_set_project_format (project, GLADE_PROJECT_FORMAT_GTKBUILDER);
}
+static gint
+count_objects_with_name (GladeProject *project,
+ const gchar *name)
+{
+ GList *l;
+ GladeWidget *widget;
+ gint count = 0;
+
+ for (l = project->priv->objects; l; l = l->next)
+ {
+ widget = glade_widget_get_from_gobject (l->data);
+ if (!strcmp (widget->name, name))
+ count++;
+ }
+ return count;
+}
+
static void
policy_project_wide_button_clicked (GtkWidget *widget,
GladeProject *project)
{
+ GList *l, *objects;
+ GladeWidget *gwidget;
+
+ /* The formatting here is only to avoid a string change in a stable series... */
+ gchar *prj_name = glade_project_get_name (project);
+ glade_command_push_group (_("Setting %s to use a %s naming policy"),
+ prj_name, "project wide");
+ g_free (prj_name);
+
+ /* Uniquify names here before switching policy (so names undo) */
+ objects = g_list_copy (project->priv->objects);
+ for (l = g_list_last (objects); l; l = l->prev)
+ {
+ gwidget = glade_widget_get_from_gobject (l->data);
+
+ if (count_objects_with_name (project, gwidget->name) > 1)
+ {
+ GladeNameContext *context =
+ name_context_by_widget (project, gwidget);
+ gchar *new_name;
+
+ if (context)
+ new_name = glade_name_context_dual_new_name
+ (context, project->priv->toplevel_names, gwidget->name);
+ else
+ new_name = glade_name_context_new_name (project->priv->toplevel_names, gwidget->name);
+
+ glade_command_set_name (gwidget, new_name);
+ }
+ }
+ g_list_free (objects);
+
glade_command_set_project_naming_policy (project, GLADE_POLICY_PROJECT_WIDE);
+
+ glade_command_pop_group ();
}
static void
diff --git a/gladeui/glade-project.h b/gladeui/glade-project.h
index 8e6b00a4..4a679f55 100644
--- a/gladeui/glade-project.h
+++ b/gladeui/glade-project.h
@@ -182,8 +182,7 @@ void glade_project_verify_project_for_ui (GladeProject *project);
GList *glade_project_required_libs (GladeProject *project);
void glade_project_set_naming_policy (GladeProject *project,
- GladeNamingPolicy policy,
- gboolean use_command);
+ GladeNamingPolicy policy);
GladeNamingPolicy glade_project_get_naming_policy (GladeProject *project);
diff --git a/plugins/gtk+/glade-gtk.c b/plugins/gtk+/glade-gtk.c
index f6a2216b..2d52cbf2 100644
--- a/plugins/gtk+/glade-gtk.c
+++ b/plugins/gtk+/glade-gtk.c
@@ -4962,18 +4962,18 @@ glade_gtk_fixed_layout_remove_child (GladeWidgetAdaptor *adaptor,
/* ----------------------------- GtkWindow ------------------------------ */
void
-glade_gtk_window_post_create (GladeWidgetAdaptor *adaptor,
- GObject *object,
- GladeCreateReason reason)
+glade_gtk_window_deep_post_create (GladeWidgetAdaptor *adaptor,
+ GObject *object,
+ GladeCreateReason reason)
{
GtkWindow *window = GTK_WINDOW (object);
g_return_if_fail (GTK_IS_WINDOW (window));
/* Chain her up first */
- GWA_GET_CLASS (GTK_TYPE_CONTAINER)->post_create (adaptor, object, reason);
-
+ GWA_GET_CLASS (GTK_TYPE_CONTAINER)->deep_post_create (adaptor, object, reason);
+ g_signal_connect (object, "delete", G_CALLBACK (gtk_widget_show), NULL);
}
#define GLADE_TAG_ACCEL_GROUPS "accel-groups"
diff --git a/plugins/gtk+/gtk+.xml.in b/plugins/gtk+/gtk+.xml.in
index c1b33cff..58efd09e 100644
--- a/plugins/gtk+/gtk+.xml.in
+++ b/plugins/gtk+/gtk+.xml.in
@@ -335,7 +335,7 @@ embedded in another object</_tooltip>
</glade-widget-class>
<glade-widget-class name="GtkWindow" generic-name="window" _title="Window" toplevel="True" default-width="440" default-height="250">
- <post-create-function>glade_gtk_window_post_create</post-create-function>
+ <deep-post-create-function>glade_gtk_window_deep_post_create</deep-post-create-function>
<read-widget-function>glade_gtk_window_read_widget</read-widget-function>
<write-widget-function>glade_gtk_window_write_widget</write-widget-function>
diff --git a/plugins/python/Makefile.am b/plugins/python/Makefile.am
index d6900c5d..0c215428 100644
--- a/plugins/python/Makefile.am
+++ b/plugins/python/Makefile.am
@@ -19,7 +19,7 @@ libgladepython_la_CFLAGS = \
$(GTK_CFLAGS) \
$(PLUGINS_WARN_CFLAGS) \
$(AM_CPPFLAGS)
-libgladepython_la_LDFLAGS = -module -avoid-version $(PYTHON_LIBS) $(AM_LDFLAGS)
+libgladepython_la_LDFLAGS = -module -avoid-version $(AM_LDFLAGS)
libgladepython_la_LIBADD = $(libgladeui) $(PYTHON_LIBS)
if PLATFORM_WIN32