]> git.eshelyaron.com Git - emacs.git/commitdiff
(get_window_cursor_type): Replace BOX cursor on images
authorKim F. Storm <storm@cua.dk>
Sun, 27 Aug 2006 22:23:07 +0000 (22:23 +0000)
committerKim F. Storm <storm@cua.dk>
Sun, 27 Aug 2006 22:23:07 +0000 (22:23 +0000)
with a hollow box cursor if image is larger than 32x32 (or the default
frame font if that is bigger).  Replace any other cursor on images
with hollow box cursor, as redisplay doesn't support bar and hbar
cursors on images.

src/xdisp.c

index 4144cf51f6ae7ad3127164b90a40bbfdf78a07f4..87fa20fc0643f2ab304ecbbb7ece10bb614aee61 100644 (file)
@@ -21213,9 +21213,30 @@ get_window_cursor_type (w, glyph, width, active_cursor)
   /* Use normal cursor if not blinked off.  */
   if (!w->cursor_off_p)
     {
-      if (glyph != NULL && glyph->type == IMAGE_GLYPH) {
-       if (cursor_type == FILLED_BOX_CURSOR)
-         cursor_type = HOLLOW_BOX_CURSOR;
+      if (glyph != NULL && glyph->type == IMAGE_GLYPH)
+       {
+         if (cursor_type == FILLED_BOX_CURSOR)
+           {
+             /* Using a block cursor on large images can be very annoying.
+                So use a hollow cursor for "large" images.  */
+             struct image *img = IMAGE_FROM_ID (f, glyph->u.img_id);
+             if (img != NULL && IMAGEP (img->spec))
+               {
+                 /* Arbitrarily, interpret "Large" as >32x32 and >NxN
+                    where N = size of default frame font size.
+                    This should cover most of the "tiny" icons people may use.  */
+                 if (img->width > max (32, WINDOW_FRAME_COLUMN_WIDTH (w))
+                     || img->height > max (32, WINDOW_FRAME_LINE_HEIGHT (w)))
+                   cursor_type = HOLLOW_BOX_CURSOR;
+               }
+           }
+         else if (cursor_type != NO_CURSOR)
+           {
+             /* Display current only supports BOX and HOLLOW cursors for images.
+                So for now, unconditionally use a HOLLOW cursor when cursor is
+                not a solid box cursor.  */
+             cursor_type = HOLLOW_BOX_CURSOR;
+           }
       }
       return cursor_type;
     }