summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdk/gdkwindow.c20
-rw-r--r--gdk/x11/gdkwindow-x11.c20
2 files changed, 32 insertions, 8 deletions
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index 7531d08e1f..d95327ca16 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -1185,8 +1185,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;
@@ -1210,14 +1213,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 7531d08e1f..d95327ca16 100644
--- a/gdk/x11/gdkwindow-x11.c
+++ b/gdk/x11/gdkwindow-x11.c
@@ -1185,8 +1185,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;
@@ -1210,14 +1213,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;