In my case 32 for width is the trigger and `(frame-char-height) == 53' for height triggers the hollow cursor behaviour.
Looks like a bug
I've found this in xdisp.c:
....
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.
If image is not transparent (no mask), also use hollow cursor. */
struct image *img = IMAGE_OPT_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->mask
|| img->width > max (32, WINDOW_FRAME_COLUMN_WIDTH (w))
|| img->height > max (32, WINDOW_FRAME_LINE_HEIGHT (w)))
cursor_type = HOLLOW_BOX_CURSOR;
}
....
Maybe introduce some property in image spec to control cursor behaviour? Or make customizable definition for "tiny" icons?
Thanks