summaryrefslogtreecommitdiff
path: root/gtk/testgtk.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@src.gnome.org>2000-03-14 19:57:25 +0000
committerOwen Taylor <otaylor@src.gnome.org>2000-03-14 19:57:25 +0000
commit10ba4fd066042b4335ae45e7560565872f71ba9b (patch)
tree17f68ffb0d402b6e66bb891d4a7d9a02a9b6108b /gtk/testgtk.c
parent3f98a849c70ae570b78095cef0152a33ec07c64e (diff)
downloadgdk-pixbuf-10ba4fd066042b4335ae45e7560565872f71ba9b.tar.gz
Merges from gtk-1-2
Diffstat (limited to 'gtk/testgtk.c')
-rw-r--r--gtk/testgtk.c93
1 files changed, 62 insertions, 31 deletions
diff --git a/gtk/testgtk.c b/gtk/testgtk.c
index 2bbaadd68..df1b4940d 100644
--- a/gtk/testgtk.c
+++ b/gtk/testgtk.c
@@ -2488,32 +2488,6 @@ create_item_factory (void)
}
/*
- * GtkScrolledWindow
- */
-
-static void
-scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
-{
- static GtkWidget *parent = NULL;
- static GtkWidget *float_parent;
-
- if (parent)
- {
- gtk_widget_reparent (scrollwin, parent);
- gtk_widget_destroy (float_parent);
- float_parent = NULL;
- parent = NULL;
- }
- else
- {
- parent = widget->parent;
- float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_widget_reparent (scrollwin, float_parent);
- gtk_widget_show (float_parent);
- }
-}
-
-/*
create_modal_window
*/
@@ -2644,6 +2618,63 @@ create_modal_window (void)
* GtkScrolledWindow
*/
+static GtkWidget *sw_parent = NULL;
+static GtkWidget *sw_float_parent;
+static guint sw_destroyed_handler = 0;
+
+static gboolean
+scrolled_windows_delete_cb (GtkWidget *widget, GdkEventAny *event, GtkWidget *scrollwin)
+{
+ gtk_widget_reparent (scrollwin, sw_parent);
+
+ gtk_signal_disconnect (GTK_OBJECT (sw_parent), sw_destroyed_handler);
+ sw_float_parent = NULL;
+ sw_parent = NULL;
+ sw_destroyed_handler = 0;
+
+ return FALSE;
+}
+
+static void
+scrolled_windows_destroy_cb (GtkWidget *widget, GtkWidget *scrollwin)
+{
+ gtk_widget_destroy (sw_float_parent);
+
+ sw_float_parent = NULL;
+ sw_parent = NULL;
+ sw_destroyed_handler = 0;
+}
+
+static void
+scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
+{
+ if (sw_parent)
+ {
+ gtk_widget_reparent (scrollwin, sw_parent);
+ gtk_widget_destroy (sw_float_parent);
+
+ gtk_signal_disconnect (GTK_OBJECT (sw_parent), sw_destroyed_handler);
+ sw_float_parent = NULL;
+ sw_parent = NULL;
+ sw_destroyed_handler = 0;
+ }
+ else
+ {
+ sw_parent = scrollwin->parent;
+ sw_float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_default_size (GTK_WINDOW (sw_float_parent), 200, 200);
+
+ gtk_widget_reparent (scrollwin, sw_float_parent);
+ gtk_widget_show (sw_float_parent);
+
+ sw_destroyed_handler =
+ gtk_signal_connect (GTK_OBJECT (sw_parent), "destroy",
+ GTK_SIGNAL_FUNC (scrolled_windows_destroy_cb), scrollwin);
+ gtk_signal_connect (GTK_OBJECT (sw_float_parent), "delete_event",
+ GTK_SIGNAL_FUNC (scrolled_windows_delete_cb), scrollwin);
+ }
+}
+
static void
create_scrolled_windows (void)
{
@@ -2696,7 +2727,7 @@ create_scrolled_windows (void)
}
- button = gtk_button_new_with_label ("close");
+ button = gtk_button_new_with_label ("Close");
gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC(gtk_widget_destroy),
GTK_OBJECT (window));
@@ -2706,10 +2737,10 @@ create_scrolled_windows (void)
gtk_widget_grab_default (button);
gtk_widget_show (button);
- button = gtk_button_new_with_label ("remove");
- gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC(scrolled_windows_remove),
- GTK_OBJECT (scrolled_window));
+ button = gtk_button_new_with_label ("Reparent Out");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC(scrolled_windows_remove),
+ scrolled_window);
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
button, TRUE, TRUE, 0);