diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 5 | ||||
-rw-r--r-- | gtk/gtkwindow.c | 21 |
3 files changed, 31 insertions, 0 deletions
@@ -1,3 +1,8 @@ +Fri Sep 16 14:00:20 2005 Tim Janik <timj@imendio.com> + + * gtk/gtkwindow.c: fix bug #316180. + gtk_window_map_event(): new function to work around lost unmap requests. + 2005-09-16 Tor Lillqvist <tml@novell.com> * modules/engines/ms-windows/msw_style.c (draw_extension, diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index b47812a32..1666e568b 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,8 @@ +Fri Sep 16 14:00:20 2005 Tim Janik <timj@imendio.com> + + * gtk/gtkwindow.c: fix bug #316180. + gtk_window_map_event(): new function to work around lost unmap requests. + 2005-09-16 Tor Lillqvist <tml@novell.com> * modules/engines/ms-windows/msw_style.c (draw_extension, diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 747e9b617..0e330de88 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -189,6 +189,8 @@ static void gtk_window_size_allocate (GtkWidget *widget, GtkAllocation *allocation); static gint gtk_window_event (GtkWidget *widget, GdkEvent *event); +static gboolean gtk_window_map_event (GtkWidget *widget, + GdkEventAny *event); static gboolean gtk_window_frame_event (GtkWindow *window, GdkEvent *event); static gint gtk_window_configure_event (GtkWidget *widget, @@ -383,6 +385,7 @@ gtk_window_class_init (GtkWindowClass *klass) widget_class->show = gtk_window_show; widget_class->hide = gtk_window_hide; widget_class->map = gtk_window_map; + widget_class->map_event = gtk_window_map_event; widget_class->unmap = gtk_window_unmap; widget_class->realize = gtk_window_realize; widget_class->unrealize = gtk_window_unrealize; @@ -4013,6 +4016,24 @@ gtk_window_map (GtkWidget *widget) } } +static gboolean +gtk_window_map_event (GtkWidget *widget, + GdkEventAny *event) +{ + if (!GTK_WIDGET_MAPPED (widget)) + { + /* we should be be unmapped, but are getting a MapEvent, this may happen + * to toplevel XWindows if mapping was intercepted by a window manager + * and an unmap request occoured while the MapRequestEvent was still + * being handled. we work around this situaiton here by re-requesting + * the window being unmapped. more details can be found in: + * http://bugzilla.gnome.org/show_bug.cgi?id=316180 + */ + gdk_window_hide (widget->window); + } + return FALSE; +} + static void gtk_window_unmap (GtkWidget *widget) { |