summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Janik <timj@imendio.com>2005-09-16 12:00:42 +0000
committerTim Janik <timj@src.gnome.org>2005-09-16 12:00:42 +0000
commit8ef635d70faaffb933f65a76ab357d1252c8e3f1 (patch)
tree92bc14e029e12f6b6e4584c8f2bb25f22b58a298
parent1cfa260e5f9a44125cb6b9b4bd831b94f88fae88 (diff)
downloadgdk-pixbuf-8ef635d70faaffb933f65a76ab357d1252c8e3f1.tar.gz
fix bug #316180. gtk_window_map_event(): new function to work around lost
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.
-rw-r--r--ChangeLog5
-rw-r--r--ChangeLog.pre-2-105
-rw-r--r--gtk/gtkwindow.c21
3 files changed, 31 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index b47812a32..1666e568b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)
{