diff --git a/legacy/ecore/ChangeLog b/legacy/ecore/ChangeLog index 5af4d48ce3..93652223b2 100644 --- a/legacy/ecore/ChangeLog +++ b/legacy/ecore/ChangeLog @@ -600,3 +600,8 @@ * Implement popup windows * Implement ecore_wl_window_transparent_set function * Implement function to allow setting Ecore_Wl_Window type. + +2012-03-26 Jihoon Kim (jihoon) + + * scim-immodule: fix bug candidate window covers the preedit string when preedit string appears in 2 line. + diff --git a/legacy/ecore/src/modules/immodules/scim/scim_imcontext.cpp b/legacy/ecore/src/modules/immodules/scim/scim_imcontext.cpp index 2426475826..5b01cbd4c0 100644 --- a/legacy/ecore/src/modules/immodules/scim/scim_imcontext.cpp +++ b/legacy/ecore/src/modules/immodules/scim/scim_imcontext.cpp @@ -1014,16 +1014,13 @@ isf_imf_context_cursor_location_set(Ecore_IMF_Context *ctx, int cx, int cy, int EcoreIMFContextISF *context_scim = (EcoreIMFContextISF *)ecore_imf_context_data_get(ctx); Ecore_Evas *ee; int canvas_x, canvas_y; + int new_cursor_x, new_cursor_y; if (cw == 0 && ch == 0) return; if (context_scim && context_scim->impl && context_scim == _focused_ic) { - // Don't update spot location while updating preedit string. - if (context_scim->impl->preedit_updating) - return; - if (context_scim->impl->client_canvas) { ee = ecore_evas_ecore_evas_get(context_scim->impl->client_canvas); @@ -1039,10 +1036,17 @@ isf_imf_context_cursor_location_set(Ecore_IMF_Context *ctx, int cx, int cy, int return; } - if (context_scim->impl->cursor_x != canvas_x + cx || context_scim->impl->cursor_y != canvas_y + cy + ch) + new_cursor_x = canvas_x + cx; + new_cursor_y = canvas_y + cy + ch; + + // Don't update spot location while updating preedit string. + if (context_scim->impl->preedit_updating && (context_scim->impl->cursor_y == new_cursor_y)) + return; + + if (context_scim->impl->cursor_x != new_cursor_x || context_scim->impl->cursor_y != new_cursor_y) { - context_scim->impl->cursor_x = canvas_x + cx; - context_scim->impl->cursor_y = canvas_y + cy + ch; + context_scim->impl->cursor_x = new_cursor_x; + context_scim->impl->cursor_y = new_cursor_y; _panel_client.prepare(context_scim->id); panel_req_update_spot_location(context_scim); _panel_client.send();