From http://www.jwz.org/xscreensaver/xscreensaver-5.15.tar.gz
[xscreensaver] / hacks / glx / carousel.c
index 87de390515df7da312da9ed6726909e2543bc005..25fb5292d08a9203ad5c772390541369f3ac3d17 100644 (file)
@@ -1,4 +1,4 @@
-/* carousel, Copyright (c) 2005-2008 Jamie Zawinski <jwz@jwz.org>
+/* carousel, Copyright (c) 2005-2011 Jamie Zawinski <jwz@jwz.org>
  * Loads a sequence of images and rotates them around.
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
@@ -285,8 +285,11 @@ image_loaded_cb (const char *filename, XRectangle *geom,
     free (frame->loading.title);
   frame->loading.title = (filename ? strdup (filename) : 0);
 
-  if (frame->loading.title)   /* strip filename to part after last /. */
-    {
+  /* xscreensaver-getimage returns paths relative to the image directory
+     now, so leave the sub-directory part in.  Unless it's an absolute path.
+  */
+  if (frame->loading.title && frame->loading.title[0] == '/')
+    {    /* strip filename to part after last /. */
       char *s = strrchr (frame->loading.title, '/');
       if (s) strcpy (frame->loading.title, s+1);
     }
@@ -555,6 +558,7 @@ init_carousel (ModeInfo *mi)
 
   if ((ss->glx_context = init_GL(mi)) != NULL) {
     reshape_carousel (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+    clear_gl_error(); /* WTF? sometimes "invalid op" from glViewport! */
   } else {
     MI_CLEARWINDOW(mi);
   }