X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=utils%2Fgrabclient.c;h=45053e9a6720664cae885c462eace6f445f00dc4;hp=438197e80da1ff1eb2b4db6dcbb9d8e5a47c7cae;hb=5f9c47ca98dd43d8f59b7c27d3fde6edfde4fe21;hpb=50be9bb40dc60130c99ffa568e6677779904ff70 diff --git a/utils/grabclient.c b/utils/grabclient.c index 438197e8..45053e9a 100644 --- a/utils/grabclient.c +++ b/utils/grabclient.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1992-2010 Jamie Zawinski +/* xscreensaver, Copyright (c) 1992-2011 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -545,6 +545,7 @@ struct pipe_closure { Screen *screen; Window xwindow; Drawable drawable; + char *directory; void (*callback) (Screen *, Window, Drawable, const char *name, XRectangle *geom, void *closure); @@ -559,6 +560,8 @@ pipe_cb (XtPointer closure, int *source, XtInputId *id) */ struct pipe_closure *clo2 = (struct pipe_closure *) closure; char buf[10240]; + const char *dir = clo2->directory; + char *absfile = 0; fgets (buf, sizeof(buf)-1, clo2->pipe); pclose (clo2->pipe); clo2->pipe = 0; @@ -573,8 +576,17 @@ pipe_cb (XtPointer closure, int *source, XtInputId *id) Display *dpy = DisplayOfScreen (clo2->screen); XRectangle geom; + if (*buf && *buf != '/') /* pathname is relative to dir. */ + { + absfile = malloc (strlen(dir) + strlen(buf) + 10); + strcpy (absfile, dir); + if (dir[strlen(dir)-1] != '/') + strcat (absfile, "/"); + strcat (absfile, buf); + } + if (! osx_load_image_file (clo2->screen, clo2->xwindow, clo2->drawable, - buf, &geom)) { + (absfile ? absfile : buf), &geom)) { /* unable to load image - draw colorbars */ XWindowAttributes xgwa; @@ -605,9 +617,11 @@ pipe_cb (XtPointer closure, int *source, XtInputId *id) geom.height = h; } + if (absfile) free (absfile); clo2->callback (clo2->screen, clo2->xwindow, clo2->drawable, buf, &geom, clo2->closure); clo2->callback = 0; + free (clo2->directory); free (clo2); } @@ -645,6 +659,7 @@ osx_load_image_file_async (Screen *screen, Window xwindow, Drawable drawable, Display *dpy = DisplayOfScreen (screen); struct pipe_closure *clo2 = (struct pipe_closure *) calloc (1, sizeof(*clo2)); + clo2->directory = strdup (dir); clo2->pipe = open_image_name_pipe (dir); clo2->id = XtAppAddInput (XtDisplayToApplicationContext (dpy), fileno (clo2->pipe),