http://packetstormsecurity.org/UNIX/admin/xscreensaver-4.14.tar.gz
[xscreensaver] / utils / grabclient.c
index 92481b20292181a0da98844acc36ea286a2c233a..0568d9b911557479c89c795d5fe4399e42efc1d0 100644 (file)
@@ -104,13 +104,13 @@ static void
 checkerboard (Screen *screen, Drawable drawable)
 {
   Display *dpy = DisplayOfScreen (screen);
-  int x, y;
+  unsigned int x, y;
   int size = 24;
   XColor fg, bg;
   XGCValues gcv;
   GC gc = XCreateGC (dpy, drawable, 0, &gcv);
   Colormap cmap;
-  int win_width, win_height;
+  unsigned int win_width, win_height;
 
   fg.flags = bg.flags = DoRed|DoGreen|DoBlue;
   fg.red = fg.green = fg.blue = 0x0000;
@@ -180,7 +180,8 @@ hack_subproc_environment (Display *dpy)
    When grabbing desktop images, the Window will be unmapped first.
  */
 void
-load_random_image (Screen *screen, Window window, Drawable drawable)
+load_random_image (Screen *screen, Window window, Drawable drawable,
+                   char **name_ret)
 {
   Display *dpy = DisplayOfScreen (screen);
   char *grabber = get_string_resource ("desktopGrabber", "DesktopGrabber");
@@ -218,4 +219,24 @@ load_random_image (Screen *screen, Window window, Drawable drawable)
   system (cmd);
   free (cmd);
   XSync (dpy, True);
+
+  if (name_ret) 
+    {
+      Atom type;
+      int format;
+      unsigned long nitems, bytesafter;
+      char *name=NULL;
+
+      *name_ret = NULL;
+
+      if (XGetWindowProperty (dpy, window,
+                              XInternAtom (dpy, XA_XSCREENSAVER_IMAGE_FILENAME,
+                                           False),
+                              0, 1024, False, XA_STRING,
+                              &type, &format, &nitems, &bytesafter,
+                              (unsigned char **) &name)
+          == Success
+          && type != None)
+        *name_ret = strdup(name);
+    }
 }