diff options
author | Federico Mena <federico@bananoid.nuclecu.unam.mx> | 1998-01-16 23:43:10 +0000 |
---|---|---|
committer | Arturo Espinosa <unammx@src.gnome.org> | 1998-01-16 23:43:10 +0000 |
commit | c44ba4b377870e3741a90a15922da8e31a0253a1 (patch) | |
tree | 0e73958696744f85b6b52e4d30316a860ab3db4c | |
parent | a6252a3297c66ba754a3202972d272b9e8388751 (diff) | |
download | gtk+-c44ba4b377870e3741a90a15922da8e31a0253a1.tar.gz |
Now we use a GtkWindow of type GTK_WINDOW_DIALOG as a destination for
Fri Jan 16 00:36:31 1998 Federico Mena <federico@bananoid.nuclecu.unam.mx>
* gtk/gtkhandlebox.c: Now we use a GtkWindow of type
GTK_WINDOW_DIALOG as a destination for reparenting the child of
the handle box. This solves the problem of having X calls in
Gtk. It also makes the handle box work with KWM, OLVWM, 4Dwm (so
I expect mwm to work as well). I hadn't noticed that previously
it only worked with fvwm and twm.
* gtk/gtkhandlebox.h (struct _GtkHandleBox): Removed the
real_parent field, as it is never used.
(struct _GtkHandleBox): Added a float_window field. This is a
GtkWindow to where the child is now reparented.
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | ChangeLog.pre-2-0 | 12 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 12 | ||||
-rw-r--r-- | ChangeLog.pre-2-2 | 12 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 12 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 12 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 12 | ||||
-rw-r--r-- | gtk/Makefile.in | 55 | ||||
-rw-r--r-- | gtk/gtkhandlebox.c | 112 | ||||
-rw-r--r-- | gtk/gtkhandlebox.h | 2 | ||||
-rw-r--r-- | gtk/testgtk.c | 26 | ||||
-rw-r--r-- | tests/testgtk.c | 26 |
12 files changed, 186 insertions, 119 deletions
@@ -1,5 +1,17 @@ Fri Jan 16 00:36:31 1998 Federico Mena <federico@bananoid.nuclecu.unam.mx> + * gtk/gtkhandlebox.c: Now we use a GtkWindow of type + GTK_WINDOW_DIALOG as a destination for reparenting the child of + the handle box. This solves the problem of having X calls in + Gtk. It also makes the handle box work with KWM, OLVWM, 4Dwm (so + I expect mwm to work as well). I hadn't noticed that previously + it only worked with fvwm and twm. + + * gtk/gtkhandlebox.h (struct _GtkHandleBox): Removed the + real_parent field, as it is never used. + (struct _GtkHandleBox): Added a float_window field. This is a + GtkWindow to where the child is now reparented. + * gtk/gtkhandlebox.c: Lots of changes all over the place. Now the widget has two windows. The steady_window stays put in the parent container, and the widget->window is the one that gets diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 05f15f2aab..388a3c86b1 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,5 +1,17 @@ Fri Jan 16 00:36:31 1998 Federico Mena <federico@bananoid.nuclecu.unam.mx> + * gtk/gtkhandlebox.c: Now we use a GtkWindow of type + GTK_WINDOW_DIALOG as a destination for reparenting the child of + the handle box. This solves the problem of having X calls in + Gtk. It also makes the handle box work with KWM, OLVWM, 4Dwm (so + I expect mwm to work as well). I hadn't noticed that previously + it only worked with fvwm and twm. + + * gtk/gtkhandlebox.h (struct _GtkHandleBox): Removed the + real_parent field, as it is never used. + (struct _GtkHandleBox): Added a float_window field. This is a + GtkWindow to where the child is now reparented. + * gtk/gtkhandlebox.c: Lots of changes all over the place. Now the widget has two windows. The steady_window stays put in the parent container, and the widget->window is the one that gets diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 05f15f2aab..388a3c86b1 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,5 +1,17 @@ Fri Jan 16 00:36:31 1998 Federico Mena <federico@bananoid.nuclecu.unam.mx> + * gtk/gtkhandlebox.c: Now we use a GtkWindow of type + GTK_WINDOW_DIALOG as a destination for reparenting the child of + the handle box. This solves the problem of having X calls in + Gtk. It also makes the handle box work with KWM, OLVWM, 4Dwm (so + I expect mwm to work as well). I hadn't noticed that previously + it only worked with fvwm and twm. + + * gtk/gtkhandlebox.h (struct _GtkHandleBox): Removed the + real_parent field, as it is never used. + (struct _GtkHandleBox): Added a float_window field. This is a + GtkWindow to where the child is now reparented. + * gtk/gtkhandlebox.c: Lots of changes all over the place. Now the widget has two windows. The steady_window stays put in the parent container, and the widget->window is the one that gets diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 05f15f2aab..388a3c86b1 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,5 +1,17 @@ Fri Jan 16 00:36:31 1998 Federico Mena <federico@bananoid.nuclecu.unam.mx> + * gtk/gtkhandlebox.c: Now we use a GtkWindow of type + GTK_WINDOW_DIALOG as a destination for reparenting the child of + the handle box. This solves the problem of having X calls in + Gtk. It also makes the handle box work with KWM, OLVWM, 4Dwm (so + I expect mwm to work as well). I hadn't noticed that previously + it only worked with fvwm and twm. + + * gtk/gtkhandlebox.h (struct _GtkHandleBox): Removed the + real_parent field, as it is never used. + (struct _GtkHandleBox): Added a float_window field. This is a + GtkWindow to where the child is now reparented. + * gtk/gtkhandlebox.c: Lots of changes all over the place. Now the widget has two windows. The steady_window stays put in the parent container, and the widget->window is the one that gets diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 05f15f2aab..388a3c86b1 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,5 +1,17 @@ Fri Jan 16 00:36:31 1998 Federico Mena <federico@bananoid.nuclecu.unam.mx> + * gtk/gtkhandlebox.c: Now we use a GtkWindow of type + GTK_WINDOW_DIALOG as a destination for reparenting the child of + the handle box. This solves the problem of having X calls in + Gtk. It also makes the handle box work with KWM, OLVWM, 4Dwm (so + I expect mwm to work as well). I hadn't noticed that previously + it only worked with fvwm and twm. + + * gtk/gtkhandlebox.h (struct _GtkHandleBox): Removed the + real_parent field, as it is never used. + (struct _GtkHandleBox): Added a float_window field. This is a + GtkWindow to where the child is now reparented. + * gtk/gtkhandlebox.c: Lots of changes all over the place. Now the widget has two windows. The steady_window stays put in the parent container, and the widget->window is the one that gets diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 05f15f2aab..388a3c86b1 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,5 +1,17 @@ Fri Jan 16 00:36:31 1998 Federico Mena <federico@bananoid.nuclecu.unam.mx> + * gtk/gtkhandlebox.c: Now we use a GtkWindow of type + GTK_WINDOW_DIALOG as a destination for reparenting the child of + the handle box. This solves the problem of having X calls in + Gtk. It also makes the handle box work with KWM, OLVWM, 4Dwm (so + I expect mwm to work as well). I hadn't noticed that previously + it only worked with fvwm and twm. + + * gtk/gtkhandlebox.h (struct _GtkHandleBox): Removed the + real_parent field, as it is never used. + (struct _GtkHandleBox): Added a float_window field. This is a + GtkWindow to where the child is now reparented. + * gtk/gtkhandlebox.c: Lots of changes all over the place. Now the widget has two windows. The steady_window stays put in the parent container, and the widget->window is the one that gets diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 05f15f2aab..388a3c86b1 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,5 +1,17 @@ Fri Jan 16 00:36:31 1998 Federico Mena <federico@bananoid.nuclecu.unam.mx> + * gtk/gtkhandlebox.c: Now we use a GtkWindow of type + GTK_WINDOW_DIALOG as a destination for reparenting the child of + the handle box. This solves the problem of having X calls in + Gtk. It also makes the handle box work with KWM, OLVWM, 4Dwm (so + I expect mwm to work as well). I hadn't noticed that previously + it only worked with fvwm and twm. + + * gtk/gtkhandlebox.h (struct _GtkHandleBox): Removed the + real_parent field, as it is never used. + (struct _GtkHandleBox): Added a float_window field. This is a + GtkWindow to where the child is now reparented. + * gtk/gtkhandlebox.c: Lots of changes all over the place. Now the widget has two windows. The steady_window stays put in the parent container, and the widget->window is the one that gets diff --git a/gtk/Makefile.in b/gtk/Makefile.in index 9a537b9ff9..8c90842144 100644 --- a/gtk/Makefile.in +++ b/gtk/Makefile.in @@ -90,7 +90,9 @@ libgtk_la_SOURCES = \ gtkbutton.c \ gtkcheckbutton.c \ gtkcheckmenuitem.c \ + gtkclist.c \ gtkcolorsel.c \ + gtkcombobox.c \ gtkcontainer.c \ gtkcurve.c \ gtkdata.c \ @@ -103,7 +105,7 @@ libgtk_la_SOURCES = \ gtkframe.c \ gtkgamma.c \ gtkgc.c \ - gtkhandlebox.c \ + gtkhandlebox.c \ gtkhbbox.c \ gtkhbox.c \ gtkhpaned.c \ @@ -177,7 +179,9 @@ gtkinclude_HEADERS = \ gtkbutton.h \ gtkcheckbutton.h \ gtkcheckmenuitem.h \ + gtkclist.h \ gtkcolorsel.h \ + gtkcombobox.h \ gtkcontainer.h \ gtkcurve.h \ gtkdata.h \ @@ -342,21 +346,22 @@ libgtk_la_LIBADD = libgtk_la_OBJECTS = gtkaccelerator.lo gtkadjustment.lo \ gtkaspectframe.lo gtkalignment.lo gtkarrow.lo gtkbin.lo gtkbbox.lo \ gtkbox.lo gtkbutton.lo gtkcheckbutton.lo gtkcheckmenuitem.lo \ -gtkcolorsel.lo gtkcontainer.lo gtkcurve.lo gtkdata.lo gtkdialog.lo \ -gtkdrawingarea.lo gtkentry.lo gtkeventbox.lo gtkfilesel.lo gtkfixed.lo \ -gtkframe.lo gtkgamma.lo gtkgc.lo gtkhandlebox.lo gtkhbbox.lo gtkhbox.lo \ -gtkhpaned.lo gtkhruler.lo gtkhscale.lo gtkhscrollbar.lo \ -gtkhseparator.lo gtkimage.lo gtkinputdialog.lo gtkitem.lo gtklabel.lo \ -gtklist.lo gtklistitem.lo gtkmain.lo gtkmenu.lo gtkmenubar.lo \ -gtkmenufactory.lo gtkmenuitem.lo gtkmenushell.lo gtkmisc.lo \ -gtknotebook.lo gtkobject.lo gtkoptionmenu.lo gtkpaned.lo gtkpixmap.lo \ -gtkpreview.lo gtkprogressbar.lo gtkradiobutton.lo gtkradiomenuitem.lo \ -gtkrange.lo gtkrc.lo gtkruler.lo gtkscale.lo gtkscrollbar.lo \ -gtkscrolledwindow.lo gtkselection.lo gtkseparator.lo gtksignal.lo \ -gtkstyle.lo gtktable.lo gtktext.lo gtktogglebutton.lo gtktoolbar.lo \ -gtktooltips.lo gtktree.lo gtktreeitem.lo gtktypeutils.lo gtkvbbox.lo \ -gtkvbox.lo gtkviewport.lo gtkvpaned.lo gtkvruler.lo gtkvscale.lo \ -gtkvscrollbar.lo gtkvseparator.lo gtkwidget.lo gtkwindow.lo fnmatch.lo +gtkclist.lo gtkcolorsel.lo gtkcombobox.lo gtkcontainer.lo gtkcurve.lo \ +gtkdata.lo gtkdialog.lo gtkdrawingarea.lo gtkentry.lo gtkeventbox.lo \ +gtkfilesel.lo gtkfixed.lo gtkframe.lo gtkgamma.lo gtkgc.lo \ +gtkhandlebox.lo gtkhbbox.lo gtkhbox.lo gtkhpaned.lo gtkhruler.lo \ +gtkhscale.lo gtkhscrollbar.lo gtkhseparator.lo gtkimage.lo \ +gtkinputdialog.lo gtkitem.lo gtklabel.lo gtklist.lo gtklistitem.lo \ +gtkmain.lo gtkmenu.lo gtkmenubar.lo gtkmenufactory.lo gtkmenuitem.lo \ +gtkmenushell.lo gtkmisc.lo gtknotebook.lo gtkobject.lo gtkoptionmenu.lo \ +gtkpaned.lo gtkpixmap.lo gtkpreview.lo gtkprogressbar.lo \ +gtkradiobutton.lo gtkradiomenuitem.lo gtkrange.lo gtkrc.lo gtkruler.lo \ +gtkscale.lo gtkscrollbar.lo gtkscrolledwindow.lo gtkselection.lo \ +gtkseparator.lo gtksignal.lo gtkstyle.lo gtktable.lo gtktext.lo \ +gtktogglebutton.lo gtktoolbar.lo gtktooltips.lo gtktree.lo \ +gtktreeitem.lo gtktypeutils.lo gtkvbbox.lo gtkvbox.lo gtkviewport.lo \ +gtkvpaned.lo gtkvruler.lo gtkvscale.lo gtkvscrollbar.lo \ +gtkvseparator.lo gtkwidget.lo gtkwindow.lo fnmatch.lo PROGRAMS = $(noinst_PROGRAMS) testgtk_SOURCES = testgtk.c @@ -391,15 +396,15 @@ DEP_FILES = .deps/fnmatch.P .deps/gtkaccelerator.P \ .deps/gtkadjustment.P .deps/gtkalignment.P .deps/gtkarrow.P \ .deps/gtkaspectframe.P .deps/gtkbbox.P .deps/gtkbin.P .deps/gtkbox.P \ .deps/gtkbutton.P .deps/gtkcheckbutton.P .deps/gtkcheckmenuitem.P \ -.deps/gtkcolorsel.P .deps/gtkcontainer.P .deps/gtkcurve.P \ -.deps/gtkdata.P .deps/gtkdialog.P .deps/gtkdrawingarea.P \ -.deps/gtkentry.P .deps/gtkeventbox.P .deps/gtkfilesel.P \ -.deps/gtkfixed.P .deps/gtkframe.P .deps/gtkgamma.P .deps/gtkgc.P \ -.deps/gtkhandlebox.P .deps/gtkhbbox.P .deps/gtkhbox.P .deps/gtkhpaned.P \ -.deps/gtkhruler.P .deps/gtkhscale.P .deps/gtkhscrollbar.P \ -.deps/gtkhseparator.P .deps/gtkimage.P .deps/gtkinputdialog.P \ -.deps/gtkitem.P .deps/gtklabel.P .deps/gtklist.P .deps/gtklistitem.P \ -.deps/gtkmain.P .deps/gtkmenu.P .deps/gtkmenubar.P \ +.deps/gtkclist.P .deps/gtkcolorsel.P .deps/gtkcombobox.P \ +.deps/gtkcontainer.P .deps/gtkcurve.P .deps/gtkdata.P .deps/gtkdialog.P \ +.deps/gtkdrawingarea.P .deps/gtkentry.P .deps/gtkeventbox.P \ +.deps/gtkfilesel.P .deps/gtkfixed.P .deps/gtkframe.P .deps/gtkgamma.P \ +.deps/gtkgc.P .deps/gtkhandlebox.P .deps/gtkhbbox.P .deps/gtkhbox.P \ +.deps/gtkhpaned.P .deps/gtkhruler.P .deps/gtkhscale.P \ +.deps/gtkhscrollbar.P .deps/gtkhseparator.P .deps/gtkimage.P \ +.deps/gtkinputdialog.P .deps/gtkitem.P .deps/gtklabel.P .deps/gtklist.P \ +.deps/gtklistitem.P .deps/gtkmain.P .deps/gtkmenu.P .deps/gtkmenubar.P \ .deps/gtkmenufactory.P .deps/gtkmenuitem.P .deps/gtkmenushell.P \ .deps/gtkmisc.P .deps/gtknotebook.P .deps/gtkobject.P \ .deps/gtkoptionmenu.P .deps/gtkpaned.P .deps/gtkpixmap.P \ diff --git a/gtk/gtkhandlebox.c b/gtk/gtkhandlebox.c index 0abf39c920..827203f4eb 100644 --- a/gtk/gtkhandlebox.c +++ b/gtk/gtkhandlebox.c @@ -23,6 +23,7 @@ #include "gtkhandlebox.h" #include "gtkmain.h" #include "gtksignal.h" +#include "gtkwindow.h" #define DRAG_HANDLE_SIZE 10 @@ -48,14 +49,15 @@ static void gtk_handle_box_paint (GtkWidget *widget, GdkRectangle *area); static void gtk_handle_box_draw (GtkWidget *widget, GdkRectangle *area); -static gint gtk_handle_box_delete (GtkWidget *widget, - GdkEventAny *event); static gint gtk_handle_box_expose (GtkWidget *widget, GdkEventExpose *event); static gint gtk_handle_box_button_changed (GtkWidget *widget, GdkEventButton *event); static gint gtk_handle_box_motion (GtkWidget *widget, GdkEventMotion *event); +static gint gtk_handle_box_delete_float (GtkWidget *widget, + GdkEvent *event, + gpointer data); static GtkBinClass *parent_class; @@ -105,7 +107,6 @@ gtk_handle_box_class_init (GtkHandleBoxClass *class) widget_class->size_request = gtk_handle_box_size_request; widget_class->size_allocate = gtk_handle_box_size_allocate; widget_class->draw = gtk_handle_box_draw; - widget_class->delete_event = gtk_handle_box_delete; widget_class->expose_event = gtk_handle_box_expose; widget_class->button_press_event = gtk_handle_box_button_changed; widget_class->button_release_event = gtk_handle_box_button_changed; @@ -119,9 +120,9 @@ gtk_handle_box_init (GtkHandleBox *handle_box) GTK_WIDGET_SET_FLAGS (handle_box, GTK_BASIC); /* FIXME: are we really a basic widget? */ handle_box->steady_window = NULL; + handle_box->float_window = NULL; handle_box->is_being_dragged = FALSE; handle_box->is_onroot = FALSE; - handle_box->real_parent = NULL; handle_box->fleur_cursor = gdk_cursor_new (GDK_FLEUR); handle_box->dragoff_x = 0; handle_box->dragoff_y = 0; @@ -204,6 +205,19 @@ gtk_handle_box_realize (GtkWidget *widget) GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); + /* FIXME: we need a property that would tell the window manager not + * to put decoration on this window. This is not part of the ICCCM, + * so we'll have to define our own (a la KWM) and hack some window + * managers to support it. + */ + + hb->float_window = gtk_window_new (GTK_WINDOW_DIALOG); + gtk_window_set_policy (GTK_WINDOW (hb->float_window), FALSE, FALSE, FALSE); + gtk_container_border_width (GTK_CONTAINER (hb->float_window), 0); + gtk_signal_connect (GTK_OBJECT (hb->float_window), "delete_event", + (GtkSignalFunc) gtk_handle_box_delete_float, + hb); + attributes.x = widget->allocation.x; attributes.y = widget->allocation.y; attributes.width = widget->allocation.width; @@ -256,6 +270,11 @@ gtk_handle_box_unrealize (GtkWidget *widget) hb->steady_window = NULL; widget->window = NULL; + + /* FIXME: do we have to unref the float_window before destroying it? */ + + gtk_widget_destroy (hb->float_window); + hb->float_window = NULL; } static void @@ -286,7 +305,7 @@ gtk_handle_box_size_request (GtkWidget *widget, hb->real_requisition = *requisition; if (hb->is_onroot) requisition->height = GHOST_HEIGHT; - /* Should also set requisition->width to a small value? */ + /* FIXME: Should also set requisition->width to a small value? */ } static void @@ -325,6 +344,9 @@ gtk_handle_box_size_allocate (GtkWidget *widget, } else { + gtk_widget_set_usize (hb->float_window, + hb->real_requisition.width, + hb->real_requisition.height); gdk_window_resize (widget->window, hb->real_requisition.width, hb->real_requisition.height); @@ -462,29 +484,6 @@ gtk_handle_box_draw (GtkWidget *widget, } static gint -gtk_handle_box_delete (GtkWidget *widget, - GdkEventAny *event) -{ - GtkHandleBox *hb; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GTK_IS_HANDLE_BOX (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - hb = GTK_HANDLE_BOX (widget); - - if (event->window == widget->window) - { - hb->is_onroot = FALSE; - - gdk_window_reparent (widget->window, hb->steady_window, 0, 0); - gtk_widget_queue_resize (widget); - } - - return FALSE; -} - -static gint gtk_handle_box_expose (GtkWidget *widget, GdkEventExpose *event) { @@ -578,6 +577,8 @@ gtk_handle_box_motion (GtkWidget *widget, gdk_window_reparent (widget->window, hb->steady_window, 0, 0); + gtk_widget_hide (hb->float_window); + while (gdk_pointer_grab (widget->window, FALSE, GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, @@ -591,37 +592,19 @@ gtk_handle_box_motion (GtkWidget *widget, else { if (hb->is_onroot) - gdk_window_move (widget->window, newx, newy); + { + gtk_widget_set_uposition (hb->float_window, newx, newy); + gdk_window_raise (hb->float_window->window); + } else { hb->is_onroot = TRUE; gdk_pointer_ungrab (GDK_CURRENT_TIME); - gdk_window_reparent (widget->window, GDK_ROOT_PARENT (), newx, newy); - - /* We move the window explicitly because the window manager may - * have set the position itself, ignoring what we asked in the - * reparent call. - */ - gdk_window_move (widget->window, newx, newy); - - /* FIXME: are X calls Gtk-kosher? */ + gtk_widget_show (hb->float_window); + gtk_widget_set_uposition (hb->float_window, newx, newy); - XSetTransientForHint (GDK_DISPLAY(), - GDK_WINDOW_XWINDOW (widget->window), - GDK_WINDOW_XWINDOW (gtk_widget_get_toplevel (widget)->window)); - - XSetWMProtocols (GDK_DISPLAY (), - GDK_WINDOW_XWINDOW (widget->window), - &gdk_wm_delete_window, - 1); - - /* FIXME: we need a property that would tell the window - * manager not to put decoration on this window. This - * is not part of the ICCCM, so we'll have to define our - * own (a la KWM) and hack some window managers to - * support it. - */ + gdk_window_reparent (widget->window, hb->float_window->window, 0, 0); while (gdk_pointer_grab (widget->window, FALSE, @@ -637,3 +620,26 @@ gtk_handle_box_motion (GtkWidget *widget, return TRUE; } + +static gint +gtk_handle_box_delete_float (GtkWidget *widget, + GdkEvent *event, + gpointer data) +{ + GtkHandleBox *hb; + + g_return_if_fail (widget != NULL); + g_return_if_fail (event != NULL); + g_return_if_fail (data != NULL); + g_return_if_fail (GTK_IS_HANDLE_BOX (data)); + + hb = GTK_HANDLE_BOX (data); + + hb->is_onroot = FALSE; + + gdk_window_reparent (GTK_WIDGET (hb)->window, hb->steady_window, 0, 0); + gtk_widget_hide (hb->float_window); + gtk_widget_queue_resize (GTK_WIDGET (hb)); + + return FALSE; +} diff --git a/gtk/gtkhandlebox.h b/gtk/gtkhandlebox.h index ac20a08222..8c3ad7593c 100644 --- a/gtk/gtkhandlebox.h +++ b/gtk/gtkhandlebox.h @@ -47,8 +47,8 @@ struct _GtkHandleBox { GtkBin bin; - GtkWidget *real_parent; GdkWindow *steady_window; /* the window that stays in the parent container */ + GtkWidget *float_window; GtkRequisition real_requisition; gboolean is_being_dragged; gboolean is_onroot; diff --git a/gtk/testgtk.c b/gtk/testgtk.c index 0f7cc51ef6..4d618ac866 100644 --- a/gtk/testgtk.c +++ b/gtk/testgtk.c @@ -795,10 +795,8 @@ void create_handle_box () { static GtkWidget* window = NULL; - GtkWidget* hbox; -#if 0 - GtkWidget* button; -#endif + GtkWidget *hbox; + GtkWidget *toolbar; if (!window) { @@ -816,22 +814,10 @@ create_handle_box () hbox = gtk_handle_box_new (); gtk_container_add (GTK_CONTAINER (window), hbox); gtk_widget_show (hbox); -#if 0 -#if 0 - button = gtk_toggle_button_new_with_label ("Let's try this"); -#else - button = gtk_label_new ("Let's try this"); -#endif - gtk_container_add (GTK_CONTAINER (hbox), button); - gtk_widget_set_usize(button, 250, 40); - gtk_widget_show (button); -#else - { - GtkWidget *toolbar = make_toolbar (window); - gtk_container_add (GTK_CONTAINER (hbox), toolbar); - gtk_widget_show (toolbar); - } -#endif + + toolbar = make_toolbar (window); + gtk_container_add (GTK_CONTAINER (hbox), toolbar); + gtk_widget_show (toolbar); } if (!GTK_WIDGET_VISIBLE (window)) diff --git a/tests/testgtk.c b/tests/testgtk.c index 0f7cc51ef6..4d618ac866 100644 --- a/tests/testgtk.c +++ b/tests/testgtk.c @@ -795,10 +795,8 @@ void create_handle_box () { static GtkWidget* window = NULL; - GtkWidget* hbox; -#if 0 - GtkWidget* button; -#endif + GtkWidget *hbox; + GtkWidget *toolbar; if (!window) { @@ -816,22 +814,10 @@ create_handle_box () hbox = gtk_handle_box_new (); gtk_container_add (GTK_CONTAINER (window), hbox); gtk_widget_show (hbox); -#if 0 -#if 0 - button = gtk_toggle_button_new_with_label ("Let's try this"); -#else - button = gtk_label_new ("Let's try this"); -#endif - gtk_container_add (GTK_CONTAINER (hbox), button); - gtk_widget_set_usize(button, 250, 40); - gtk_widget_show (button); -#else - { - GtkWidget *toolbar = make_toolbar (window); - gtk_container_add (GTK_CONTAINER (hbox), toolbar); - gtk_widget_show (toolbar); - } -#endif + + toolbar = make_toolbar (window); + gtk_container_add (GTK_CONTAINER (hbox), toolbar); + gtk_widget_show (toolbar); } if (!GTK_WIDGET_VISIBLE (window)) |