+ int cx, cy;
+
+ if (!has_focus) return;
+
+ /*
+ * Avoid gratuitously re-updating the cursor position and IMM
+ * window if there's no actual change required.
+ */
+ cx = x * font_width + offset_width;
+ cy = y * font_height + offset_height;
+ if (cx == caret_x && cy == caret_y)
+ return;
+ caret_x = cx;
+ caret_y = cy;
+
+ sys_cursor_update();
+}
+
+static void sys_cursor_update(void)
+{