summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJihoon Kim <jihoon48.kim@samsung.com>2014-10-02 10:09:12 +0900
committerJihoon Kim <jihoon48.kim@samsung.com>2014-10-06 08:30:17 +0900
commit139d01007975706badaa662c9d66d5653d1c7277 (patch)
tree519794a4d23ad8a2db6b6b0ee289a09f7519daf7
parent1ca436f48ad9e874a7d4581ac3bf8448d73c9d8b (diff)
downloadefl-139d01007975706badaa662c9d66d5653d1c7277.tar.gz
ecore_imf/ibus: fix candidate word window position issue
In case application window locates in top left position, The candidate word window provided by ibus could overlap the position of entry widget when typing Chinese and Japanese.
-rw-r--r--src/modules/ecore_imf/ibus/ibus_imcontext.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/modules/ecore_imf/ibus/ibus_imcontext.c b/src/modules/ecore_imf/ibus/ibus_imcontext.c
index c7cedeb66a..abd83f589a 100644
--- a/src/modules/ecore_imf/ibus/ibus_imcontext.c
+++ b/src/modules/ecore_imf/ibus/ibus_imcontext.c
@@ -573,27 +573,29 @@ _ecore_imf_context_ibus_cursor_location_set(Ecore_IMF_Context *ctx)
IBusIMContext *ibusimcontext = (IBusIMContext *)ecore_imf_context_data_get(ctx);
Ecore_Evas *ee;
int canvas_x, canvas_y;
+ Ecore_X_Window client_window = 0;
EINA_SAFETY_ON_NULL_RETURN(ibusimcontext);
if (ibusimcontext->ibuscontext == NULL)
return;
- if (ibusimcontext->client_canvas)
- {
- ee = ecore_evas_ecore_evas_get(ibusimcontext->client_canvas);
- if (!ee) return;
-
- ecore_evas_geometry_get(ee, &canvas_x, &canvas_y, NULL, NULL);
- }
+ if (ibusimcontext->client_window)
+ client_window = ibusimcontext->client_window;
else
{
- if (ibusimcontext->client_window)
- _ecore_imf_ibus_window_to_screen_geometry_get(ibusimcontext->client_window, &canvas_x, &canvas_y);
- else
- return;
+ if (ibusimcontext->client_canvas)
+ {
+ ee = ecore_evas_ecore_evas_get(ibusimcontext->client_canvas);
+ if (ee)
+ client_window = (Ecore_X_Window)ecore_evas_window_get(ee);
+ }
}
+ _ecore_imf_ibus_window_to_screen_geometry_get(client_window,
+ &canvas_x,
+ &canvas_y);
+
ibus_input_context_set_cursor_location(ibusimcontext->ibuscontext,
ibusimcontext->cursor_x + canvas_x,
ibusimcontext->cursor_y + canvas_y,