From 71de8c8ea42602d6619f95bd375998fe46d214e9 Mon Sep 17 00:00:00 2001 From: Tim Janik Date: Thu, 15 Sep 2005 13:31:33 +0000 Subject: gtk_window_map_event(): new function to work around lost unmap requests. Thu Sep 15 15:27:55 2005 Tim Janik * gtk/gtkwindow.c: gtk_window_map_event(): new function to work around lost unmap requests. fixes bug #316180. --- gtk/gtkwindow.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'gtk/gtkwindow.c') diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 85cc9a27e2..0edd23ff6a 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -191,6 +191,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, @@ -385,6 +387,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; @@ -4107,6 +4110,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) { -- cgit v1.2.1