From 535ef199778614c6465eccf10038e1d1c8cac0d8 Mon Sep 17 00:00:00 2001 From: Jinhao Date: Thu, 23 Apr 2015 02:49:05 +0800 Subject: [PATCH] fix shift+tab issue --- include/nana/detail/linux_X11/msg_dispatcher.hpp | 2 +- source/gui/detail/linux_X11/bedrock.cpp | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/include/nana/detail/linux_X11/msg_dispatcher.hpp b/include/nana/detail/linux_X11/msg_dispatcher.hpp index a1ca507c..eab77f2f 100644 --- a/include/nana/detail/linux_X11/msg_dispatcher.hpp +++ b/include/nana/detail/linux_X11/msg_dispatcher.hpp @@ -172,7 +172,7 @@ namespace detail { int pending; { - nana::detail::platform_scope_guard psg; + nana::detail::platform_scope_guard lock; pending = ::XPending(display_); if(pending) { diff --git a/source/gui/detail/linux_X11/bedrock.cpp b/source/gui/detail/linux_X11/bedrock.cpp index 94f35223..1add84a6 100644 --- a/source/gui/detail/linux_X11/bedrock.cpp +++ b/source/gui/detail/linux_X11/bedrock.cpp @@ -371,6 +371,7 @@ namespace detail XKeyEvent xkey; nana::detail::platform_spec::instance().read_keystate(xkey); arg.ctrl = (xkey.state & ControlMask); + arg.shift = (xkey.state & ShiftMask); } bool bedrock::set_keyboard_shortkey(bool yes) @@ -981,8 +982,8 @@ namespace detail else { nana::detail::platform_scope_guard psg; - status = XLookupBoth; - len = ::XLookupString(&xevent.xkey, keybuf, 32, &keysym, 0); + status = XLookupKeySym; + keysym = ::XLookupKeysym(&xevent.xkey, 0); } keybuf[len] = 0; @@ -1019,7 +1020,9 @@ namespace detail context.platform.keychar = keychar; if(keychar == keyboard::tab && (false == (msgwnd->flags.tab & detail::tab_type::eating))) //Tab { - auto the_next = brock.wd_manager.tabstop(msgwnd, true); + arg_keyboard argkey; + brock.get_key_state(argkey); + auto the_next = brock.wd_manager.tabstop(msgwnd, !argkey.shift); if(the_next) { brock.wd_manager.set_focus(the_next, false);