summaryrefslogtreecommitdiff
path: root/gdk/gdkpixbuf-drawable.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdk/gdkpixbuf-drawable.c')
-rw-r--r--gdk/gdkpixbuf-drawable.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/gdk/gdkpixbuf-drawable.c b/gdk/gdkpixbuf-drawable.c
index 07175a638..776ebe606 100644
--- a/gdk/gdkpixbuf-drawable.c
+++ b/gdk/gdkpixbuf-drawable.c
@@ -1195,14 +1195,12 @@ gdk_pixbuf_get_from_drawable (GdkPixbuf *dest,
int src_width, src_height;
GdkImage *image;
int rowstride, bpp, alpha;
-
+
/* General sanity checks */
g_return_val_if_fail (src != NULL, NULL);
- if (GDK_IS_PIXMAP (src))
- g_return_val_if_fail (cmap != NULL, NULL);
- else
+ if (GDK_IS_WINDOW (src))
/* FIXME: this is not perfect, since is_viewable() only tests
* recursively up the Gdk parent window tree, but stops at
* foreign windows or Gdk toplevels. I.e. if a window manager
@@ -1219,6 +1217,17 @@ gdk_pixbuf_get_from_drawable (GdkPixbuf *dest,
g_return_val_if_fail (dest->bits_per_sample == 8, NULL);
}
+ if (cmap == NULL)
+ cmap = gdk_drawable_get_colormap (src);
+
+ if (cmap == NULL)
+ {
+ g_warning ("%s: Source drawable has no colormap; either pass "
+ "in a colormap, or set the colormap on the drawable "
+ "with gdk_drawable_set_colormap()", G_STRLOC);
+ return NULL;
+ }
+
/* Coordinate sanity checks */
gdk_drawable_get_size (src, &src_width, &src_height);
@@ -1233,7 +1242,7 @@ gdk_pixbuf_get_from_drawable (GdkPixbuf *dest,
g_return_val_if_fail (dest_y + height <= dest->height, NULL);
}
- if (!GDK_IS_PIXMAP (src))
+ if (GDK_IS_WINDOW (src))
{
int ret;
int src_xorigin, src_yorigin;
@@ -1269,10 +1278,6 @@ gdk_pixbuf_get_from_drawable (GdkPixbuf *dest,
}
}
- /* Get the colormap if needed */
- if (!GDK_IS_PIXMAP (src))
- cmap = gdk_window_get_colormap (src);
-
alpha = dest->has_alpha;
rowstride = dest->rowstride;
bpp = alpha ? 4 : 3;