diff --git a/kitty/screen.c b/kitty/screen.c index ee3a3411e..d87e1c032 100644 --- a/kitty/screen.c +++ b/kitty/screen.c @@ -747,6 +747,7 @@ screen_draw(Screen *self, uint32_t och, bool from_input_stream) { if (overlay_text) { screen_draw_overlay_text(self, PyUnicode_AsUTF8(overlay_text)); Py_DECREF(overlay_text); + update_ime_position_for_window(self->window_id); } } diff --git a/kitty/state.c b/kitty/state.c index 90f176aba..747ea9106 100644 --- a/kitty/state.c +++ b/kitty/state.c @@ -569,7 +569,7 @@ send_pending_click_to_window_id(id_type timer_id UNUSED, void *data) { } } -static bool +bool update_ime_position_for_window(id_type window_id) { for (size_t o = 0; o < global_state.num_os_windows; o++) { OSWindow *osw = global_state.os_windows + o; @@ -578,7 +578,7 @@ update_ime_position_for_window(id_type window_id) { for (size_t w = 0; w < qtab->num_windows; w++) { Window *window = qtab->windows + w; if (window->id == window_id) { - if (window->render_data.screen) { + if (window->render_data.screen && osw->is_focused) { OSWindow *orig = global_state.callback_os_window; global_state.callback_os_window = osw; update_ime_position(window, window->render_data.screen); diff --git a/kitty/state.h b/kitty/state.h index b4dac9b03..42cd10643 100644 --- a/kitty/state.h +++ b/kitty/state.h @@ -323,3 +323,4 @@ bool draw_window_title(OSWindow *window, const char *text, color_type fg, color_ uint8_t* draw_single_ascii_char(const char ch, size_t *result_width, size_t *result_height); bool is_os_window_fullscreen(OSWindow *); void update_ime_position(Window* w, Screen *screen); +bool update_ime_position_for_window(id_type window_id);