[glade] * gladeui/glade-previewer.c: Glade previewer main window is now free from uncontrolled pop-up wind
- From: Tristan Van Berkom <tvb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glade] * gladeui/glade-previewer.c: Glade previewer main window is now free from uncontrolled pop-up wind
- Date: Mon, 28 Feb 2011 23:14:32 +0000 (UTC)
commit 3419beba3b4d382fdda3e83f08cbebec177271a9
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date: Mon Feb 28 20:13:12 2011 +0900
* gladeui/glade-previewer.c:
Glade previewer main window is now free from uncontrolled pop-up windows.
ChangeLog | 5 ++
gladeui/glade-previewer.c | 161 +++++++++++++--------------------------------
2 files changed, 51 insertions(+), 115 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 4992b32..34c0f91 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2010-02-28 Marco Diego Aurélio Mesquita <marcodiegomesquita gmail com>
+
+ * gladeui/glade-previewer.c:
+ Glade previewer main window is now free from uncontrolled pop-up windows.
+
2011-02-28 Tristan Van Berkom <tristanvb openismus com>
* plugins/gtk+/gtk+.xml.in, plugins/gtk+/icons/...: Removed all GtkH/V orientable
diff --git a/gladeui/glade-previewer.c b/gladeui/glade-previewer.c
index f34bfcd..10788f5 100644
--- a/gladeui/glade-previewer.c
+++ b/gladeui/glade-previewer.c
@@ -177,32 +177,9 @@ static GtkWidget *
preview_widget (gchar * name, gchar * buffer, gsize length)
{
GtkWidget *widget;
- GtkWidget *widget_parent;
- GtkWidget *window;
widget = get_toplevel (name, buffer, length);
- if (GTK_IS_WINDOW (widget))
- {
- window = widget;
- }
- else
- {
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title (GTK_WINDOW (window), _("Preview"));
-
- /* Reparenting snippet */
- g_object_ref (widget);
- widget_parent = gtk_widget_get_parent (widget);
- if (widget_parent != NULL)
- gtk_container_remove (GTK_CONTAINER (widget_parent), widget);
- gtk_container_add (GTK_CONTAINER (window), widget);
- g_object_unref (widget);
- }
-
- g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
- gtk_widget_show_all (window);
-
return widget;
}
@@ -220,6 +197,37 @@ channel_from_stream (gint stream)
return channel;
}
+static GtkWidget*
+show_widget (GtkWidget *widget)
+{
+ GtkWidget *window;
+ GtkWidget *widget_parent;
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+ if (!GTK_IS_WINDOW (widget))
+ {
+ gtk_window_set_title (GTK_WINDOW (window), _("Preview"));
+
+ /* Reparenting snippet */
+ g_object_ref (widget);
+ widget_parent = gtk_widget_get_parent (widget);
+ if (widget_parent != NULL)
+ gtk_container_remove (GTK_CONTAINER (widget_parent), widget);
+ gtk_container_add (GTK_CONTAINER (window), widget);
+ g_object_unref (widget);
+ }
+ else
+ {
+ gtk_widget_realize (window);
+ gtk_widget_set_parent_window (widget, gtk_widget_get_window (window));
+ gtk_container_add (GTK_CONTAINER (window), widget);
+ }
+
+ g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
+ return window;
+}
+
static void
preview_file (gchar * toplevel_name, gchar * file_name)
{
@@ -228,6 +236,7 @@ preview_file (gchar * toplevel_name, gchar * file_name)
GError *error = NULL;
GIOChannel *input;
gint stream;
+ GtkWidget *widget;
stream = fileno (fopen (file_name, "r"));
input = channel_from_stream (stream);
@@ -240,7 +249,8 @@ preview_file (gchar * toplevel_name, gchar * file_name)
exit (1);
}
- preview_widget (toplevel_name, buffer, length);
+ widget = preview_widget (toplevel_name, buffer, length);
+ gtk_widget_show_all (show_widget (widget));
g_free (buffer);
g_io_channel_unref (input);
@@ -292,91 +302,7 @@ read_buffer (GIOChannel * source)
}
static void
-copy_window_properties (GtkWindow *old_window, GtkWindow *new_window)
-{
- GParamSpec **properties_list;
- guint i, n_properties;
- gint width, height;
- GValue copy_value = { 0,};
-
- if (!old_window || !new_window) return;
-
- properties_list = g_object_class_list_properties
- (G_OBJECT_GET_CLASS (G_OBJECT (new_window)),
- &n_properties);
-
- for (i = 0; i < n_properties; i++)
- {
- if (!((properties_list[i]->flags & G_PARAM_READABLE) &&
- (properties_list[i]->flags & G_PARAM_WRITABLE) &&
- (!(properties_list[i]->flags & G_PARAM_CONSTRUCT_ONLY))
- )) continue;
-
- /* We won't set some properties */
- if (g_strcmp0 ("parent", properties_list[i]->name) == 0) continue;
- if (g_strcmp0 ("visible", properties_list[i]->name) == 0) continue;
-
- g_value_init (©_value, properties_list[i]->value_type);
- g_object_get_property (G_OBJECT (new_window),
- properties_list[i]->name,
- ©_value);
-
- g_object_set_property (G_OBJECT (old_window),
- properties_list[i]->name,
- ©_value);
-
- g_value_unset (©_value);
- }
-
- /* Special code to copy default size */
- if (gtk_window_get_resizable (old_window))
- {
- gtk_window_get_default_size (new_window, &width, &height);
- if ((width > 0) && (height > 0))
- gtk_window_resize (old_window, width, height);
- }
-
- if (properties_list) g_free (properties_list);
-}
-
-static void
-update_window (GtkWindow *old_window, GtkWindow *new_window)
-{
- GtkWidget *window_child;
- GtkWidget *old_window_child;
-
- if (!old_window || !new_window) return;
-
- /* ref the new window child */
- window_child = gtk_bin_get_child (GTK_BIN (new_window));
- if (window_child)
- {
- g_object_ref (window_child);
-
- /* remove window child */
- gtk_container_remove (GTK_CONTAINER (new_window), window_child);
- }
-
- /* gtk_widget_destroy the *running preview's* window child */
- old_window_child = gtk_bin_get_child (GTK_BIN (old_window));
- if (old_window_child)
- gtk_widget_destroy (old_window_child);
-
- /* apply properties from the new window to the
- * old window (using GObjectapis)*/
- copy_window_properties (old_window, new_window);
-
- /* add new preview's window child to the old preview's window */
- if (window_child)
- {
- gtk_container_add (GTK_CONTAINER (old_window), window_child);
- /* unref the newly added child (which we added a ref to before) */
- g_object_unref (window_child);
- }
-}
-
-static void
-update_window_child (GtkWindow *old_window, GtkWidget *new_widget)
+update_window (GtkWindow *old_window, GtkWidget *new_widget)
{
GtkWidget *old_window_child;
@@ -389,7 +315,13 @@ update_window_child (GtkWindow *old_window, GtkWidget *new_widget)
/* add new widget as child to the old preview's window */
if (new_widget)
- gtk_container_add (GTK_CONTAINER (old_window), new_widget);
+ {
+ gtk_widget_set_parent_window (new_widget, gtk_widget_get_window (
+ GTK_WIDGET (old_window)));
+ gtk_container_add (GTK_CONTAINER (old_window), new_widget);
+ }
+
+ gtk_widget_show_all (GTK_WIDGET (old_window));
}
static gboolean
@@ -421,7 +353,9 @@ on_data_incoming (GIOChannel * source, GIOCondition condition, gpointer data)
/* if it is the first time this is called */
if (!preview_window)
{
- preview_window = preview_widget (toplevel_name, buffer, length);
+ new_widget = preview_widget (toplevel_name, buffer, length);
+ preview_window = show_widget (new_widget);
+ gtk_widget_show_all (preview_window);
}
else
{
@@ -437,10 +371,7 @@ on_data_incoming (GIOChannel * source, GIOCondition condition, gpointer data)
new_widget = get_toplevel (toplevel_name, buffer, length);
- if (GTK_IS_WINDOW (new_widget))
- update_window (GTK_WINDOW (preview_window),
- GTK_WINDOW (new_widget));
- else update_window_child (GTK_WINDOW (preview_window), new_widget);
+ update_window (GTK_WINDOW (preview_window), new_widget);
}
if (!split_buffer)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]