From 2117f4ac7e5f025aac8d41e26bce32e382ef8a17 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Fri, 1 May 1998 04:53:18 +0000 Subject: [PATCH] Fix up getting colormap for FOREIGN windows to go along with Raster's fix Fri May 1 00:42:25 1998 Owen Taylor * gdk/gdkwindow.c (gdk_window_get_colormap): Fix up getting colormap for FOREIGN windows to go along with Raster's fix for visuals. --- gdk/gdkwindow.c | 20 ++++++++++++++++---- gdk/x11/gdkwindow-x11.c | 20 ++++++++++++++++---- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index a6784dd8e7..024a4123e3 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -1184,8 +1184,11 @@ gdk_window_get_visual (GdkWindow *window) XWindowAttributes window_attributes; g_return_val_if_fail (window != NULL, NULL); - + window_private = (GdkWindowPrivate*) window; + /* Huh? ->parent is never set for a pixmap. We should just return + * null immeditately + */ while (window_private && (window_private->window_type == GDK_WINDOW_PIXMAP)) window_private = (GdkWindowPrivate*) window_private->parent; @@ -1209,14 +1212,23 @@ GdkColormap* gdk_window_get_colormap (GdkWindow *window) { GdkWindowPrivate *window_private; + XWindowAttributes window_attributes; g_return_val_if_fail (window != NULL, NULL); - window_private = (GdkWindowPrivate*) window; - + + g_return_val_if_fail (window_private->window_type != GDK_WINDOW_PIXMAP, NULL); if (!window_private->destroyed) { - return window_private->colormap; + if (window_private->window_type == GDK_WINDOW_FOREIGN) + { + XGetWindowAttributes (window_private->xdisplay, + window_private->xwindow, + &window_attributes); + return gdk_colormap_lookup (window_attributes.colormap); + } + else + return window_private->colormap; } return NULL; diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c index a6784dd8e7..024a4123e3 100644 --- a/gdk/x11/gdkwindow-x11.c +++ b/gdk/x11/gdkwindow-x11.c @@ -1184,8 +1184,11 @@ gdk_window_get_visual (GdkWindow *window) XWindowAttributes window_attributes; g_return_val_if_fail (window != NULL, NULL); - + window_private = (GdkWindowPrivate*) window; + /* Huh? ->parent is never set for a pixmap. We should just return + * null immeditately + */ while (window_private && (window_private->window_type == GDK_WINDOW_PIXMAP)) window_private = (GdkWindowPrivate*) window_private->parent; @@ -1209,14 +1212,23 @@ GdkColormap* gdk_window_get_colormap (GdkWindow *window) { GdkWindowPrivate *window_private; + XWindowAttributes window_attributes; g_return_val_if_fail (window != NULL, NULL); - window_private = (GdkWindowPrivate*) window; - + + g_return_val_if_fail (window_private->window_type != GDK_WINDOW_PIXMAP, NULL); if (!window_private->destroyed) { - return window_private->colormap; + if (window_private->window_type == GDK_WINDOW_FOREIGN) + { + XGetWindowAttributes (window_private->xdisplay, + window_private->xwindow, + &window_attributes); + return gdk_colormap_lookup (window_attributes.colormap); + } + else + return window_private->colormap; } return NULL;