diff options
author | Tim Janik <timj@imendio.com> | 2005-09-15 13:31:33 +0000 |
---|---|---|
committer | Tim Janik <timj@src.gnome.org> | 2005-09-15 13:31:33 +0000 |
commit | 71de8c8ea42602d6619f95bd375998fe46d214e9 (patch) | |
tree | 40e2c6bb6305c1ef97e528151e8ca006bdb5418c /gtk/gtkwindow.c | |
parent | 14bcc53ec50db99d26f3ff6e007fc5d1e75e2aad (diff) | |
download | gtk+-71de8c8ea42602d6619f95bd375998fe46d214e9.tar.gz |
gtk_window_map_event(): new function to work around lost unmap requests.
Thu Sep 15 15:27:55 2005 Tim Janik <timj@imendio.com>
* gtk/gtkwindow.c:
gtk_window_map_event(): new function to work around lost unmap requests.
fixes bug #316180.
Diffstat (limited to 'gtk/gtkwindow.c')
-rw-r--r-- | gtk/gtkwindow.c | 21 |
1 files changed, 21 insertions, 0 deletions
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) { |