From 7358766ff69e064d8a31b18c54e3c1e22e303cb6 Mon Sep 17 00:00:00 2001 From: geequlim Date: Sun, 25 Jun 2017 23:50:45 +0800 Subject: IME window follow the input cursor. Abstruct set_ime_position to OS class. Update ime position for LineEdit and TextEdit. --- platform/x11/os_x11.cpp | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) (limited to 'platform/x11/os_x11.cpp') diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index 790182794e..4aca1468b1 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -508,22 +508,17 @@ void OS_X11::xim_destroy_callback(::XIM im, ::XPointer client_data, os->xic = NULL; } -void OS_X11::set_ime_position(short x, short y) { +void OS_X11::set_ime_position(const Point2 &p_pos) { - if (!xic) { + if (!xic) return; - } + ::XPoint spot; - spot.x = x; - spot.y = y; - XVaNestedList preedit_attr = XVaCreateNestedList(0, - XNSpotLocation, &spot, - NULL); - XSetICValues(xic, - XNPreeditAttributes, preedit_attr, - NULL); + spot.x = short(p_pos.x); + spot.y = short(p_pos.y); + XVaNestedList preedit_attr = XVaCreateNestedList(0, XNSpotLocation, &spot, NULL); + XSetICValues(xic, XNPreeditAttributes, preedit_attr, NULL); XFree(preedit_attr); - return; } void OS_X11::finalize() { @@ -1489,7 +1484,7 @@ void OS_X11::process_xevents() { case ConfigureNotify: if (xic) { // Not portable. - set_ime_position(0, 1); + set_ime_position(Point2(0, 1)); } /* call resizeGLScene only if our window-size changed */ -- cgit v1.2.3