diff --git a/src/nsterm.m b/src/nsterm.m index 2ba167f189b..2372ea8ae06 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -3103,16 +3103,25 @@ Note that CURSOR_WIDTH is meaningful only for (h)bar cursors. case NO_CURSOR: break; case FILLED_BOX_CURSOR: + /* The call to draw_phys_cursor_glyph can end up undoing the + ns_focus, so unfocus here and regain focus later. */ + [ctx restoreGraphicsState]; + ns_unfocus (f); draw_phys_cursor_glyph (w, glyph_row, DRAW_CURSOR); + ns_focus (f, &r, 1); break; case HOLLOW_BOX_CURSOR: + [ctx restoreGraphicsState]; + ns_unfocus (f); draw_phys_cursor_glyph (w, glyph_row, DRAW_NORMAL_TEXT); + ns_focus (f, &r, 1); /* This works like it does in PostScript, not X Windows. */ [NSBezierPath strokeRect: NSInsetRect (r, 0.5, 0.5)]; break; case HBAR_CURSOR: NSRectFill (r); + [ctx restoreGraphicsState]; break; case BAR_CURSOR: s = r; @@ -3123,10 +3132,10 @@ Note that CURSOR_WIDTH is meaningful only for (h)bar cursors. s.origin.x += cursor_glyph->pixel_width - s.size.width; NSRectFill (s); + [ctx restoreGraphicsState]; break; } - [ctx restoreGraphicsState]; ns_unfocus (f); }