Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/sugar/sugar-preview.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sugar/sugar-preview.c')
-rw-r--r--src/sugar/sugar-preview.c29
1 files changed, 25 insertions, 4 deletions
diff --git a/src/sugar/sugar-preview.c b/src/sugar/sugar-preview.c
index f54045b..44b83e4 100644
--- a/src/sugar/sugar-preview.c
+++ b/src/sugar/sugar-preview.c
@@ -19,6 +19,7 @@
#include <gdk/gdkx.h>
#include <gtk/gtkwindow.h>
+#include <X11/extensions/XShm.h>
#include "sugar-preview.h"
@@ -37,8 +38,6 @@ sugar_preview_set_size(SugarPreview *preview, int width, int height)
GdkPixbuf *
sugar_preview_get_pixbuf(SugarPreview *preview)
{
- GdkPixbuf *pixbuf;
-
if (preview->pixbuf != NULL) {
return preview->pixbuf;
}
@@ -70,16 +69,38 @@ sugar_preview_clear(SugarPreview *preview)
}
}
+static gboolean
+widget_is_off_screen(GtkWidget *widget)
+{
+ GdkScreen *screen;
+ gint x, y, width, height;
+
+ screen = gtk_widget_get_screen(widget);
+
+ gdk_window_get_geometry(widget->window, &x, &y, &width, &height, NULL);
+
+ return (x < 0 || y < 0 ||
+ x + width > gdk_screen_get_width(screen) ||
+ y + height > gdk_screen_get_height(screen));
+}
+
void
-sugar_preview_take_screenshot(SugarPreview *preview, GdkDrawable *drawable)
+sugar_preview_take_screenshot(SugarPreview *preview, GtkWidget *widget)
{
+ GdkDrawable *drawable;
GdkScreen *screen;
GdkVisual *visual;
GdkColormap *colormap;
gint width, height;
+ if (widget->window == NULL || widget_is_off_screen(widget)) {
+ return;
+ }
+
sugar_preview_clear(preview);
+ drawable = GDK_DRAWABLE(widget->window);
+
gdk_drawable_get_size(drawable, &width, &height);
screen = gdk_drawable_get_screen(drawable);
@@ -92,7 +113,7 @@ sugar_preview_take_screenshot(SugarPreview *preview, GdkDrawable *drawable)
XShmGetImage(GDK_SCREEN_XDISPLAY(screen),
GDK_DRAWABLE_XID(drawable),
gdk_x11_image_get_ximage(preview->image),
- 0, 0, AllPlanes, ZPixmap);
+ 0, 0, AllPlanes);
}
static void