summaryrefslogtreecommitdiff
path: root/gtk/gtkwindow.c
diff options
context:
space:
mode:
authorTim Janik <timj@imendio.com>2005-09-15 13:31:33 +0000
committerTim Janik <timj@src.gnome.org>2005-09-15 13:31:33 +0000
commit71de8c8ea42602d6619f95bd375998fe46d214e9 (patch)
tree40e2c6bb6305c1ef97e528151e8ca006bdb5418c /gtk/gtkwindow.c
parent14bcc53ec50db99d26f3ff6e007fc5d1e75e2aad (diff)
downloadgtk+-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.c21
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)
{