+#else /* MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
+
+ 10.5+ code.
+
+ This version of the code is simpler and more reliable, but
+ uses an API that only exist on 10.5 and newer, so we can only
+ use it if when being compiled against the 10.5 SDK or later.
+ */
+
+/* Loads an image into the Drawable, returning once the image is loaded.
+ */
+void
+osx_grab_desktop_image (Screen *screen, Window xwindow, Drawable drawable)
+{
+ Display *dpy = DisplayOfScreen (screen);
+ NSView *nsview = jwxyz_window_view (xwindow);
+ XWindowAttributes xgwa;
+ int window_x, window_y;
+ Window unused;
+
+ // Figure out where this window is on the screen.
+ //
+ XGetWindowAttributes (dpy, xwindow, &xgwa);
+ XTranslateCoordinates (dpy, xwindow, RootWindowOfScreen (screen), 0, 0,
+ &window_x, &window_y, &unused);
+
+ // Grab only the rectangle of the screen underlying this window.
+ //
+ CGRect cgrect;
+ cgrect.origin.x = window_x;
+ cgrect.origin.y = window_y;
+ cgrect.size.width = xgwa.width;
+ cgrect.size.height = xgwa.height;
+
+ // Grab a screen shot of those windows below this one
+ // (hey, X11 can't do that!)
+ //
+ CGImageRef img =
+ CGWindowListCreateImage (cgrect,
+ kCGWindowListOptionOnScreenBelowWindow,
+ [[nsview window] windowNumber],
+ kCGWindowImageDefault);
+
+ // Render the grabbed CGImage into the Drawable.
+ if (img) {
+ jwxyz_draw_NSImage_or_CGImage (DisplayOfScreen (screen), drawable,
+ False, img, NULL, 0);
+ CGImageRelease (img);
+ }
+}
+
+#endif /* 10.5+ code */
+
+
+/* Returns the EXIF rotation property of the image, if any.
+ */
+static int
+exif_rotation (const char *filename)
+{
+ /* This is a ridiculous amount of rigamarole to go through, but for some
+ reason the "Orientation" tag does not exist in the "NSImageEXIFData"
+ dictionary inside the NSBitmapImageRep of the NSImage. Several other
+ EXIF tags are there (e.g., shutter speed) but not orientation. WTF?
+ */
+ CFStringRef s = CFStringCreateWithCString (NULL, filename,
+ kCFStringEncodingUTF8);
+ CFURLRef url = CFURLCreateWithFileSystemPath (NULL, s,
+ kCFURLPOSIXPathStyle, 0);
+ CGImageSourceRef cgimg = CGImageSourceCreateWithURL (url, NULL);
+ if (! cgimg) return -1;
+
+ NSDictionary *props = (NSDictionary *)
+ CGImageSourceCopyPropertiesAtIndex (cgimg, 0, NULL);
+ int rot = [[props objectForKey:@"Orientation"] intValue];
+ CFRelease (cgimg);
+ CFRelease (url);
+ CFRelease (s);
+ return rot;
+}
+
+