X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fsystemkeyboardinput.cpp;h=f5657bd7d49066d4c854279bfbfde8705ddbd55a;hb=HEAD;hp=fe803a6ddd2e407abbe1cdbcadaed5ec4ce989da;hpb=1597579a34a8d87d4dea0a0cdc0895e6247b6126;p=libs%2Fgltk.git diff --git a/source/systemkeyboardinput.cpp b/source/systemkeyboardinput.cpp index fe803a6..3c44398 100644 --- a/source/systemkeyboardinput.cpp +++ b/source/systemkeyboardinput.cpp @@ -16,8 +16,17 @@ SystemKeyboardInput::SystemKeyboardInput(Root &r, Input::Keyboard &k): bool SystemKeyboardInput::key_press(unsigned key) { - // TODO modifiers - if(root.key_press(key, 0)) + if(!root.is_visible()) + return false; + + if(key==Input::KEY_SHIFT_L || key==Input::KEY_SHIFT_R) + modifier_state |= MOD_SHIFT; + else if(key==Input::KEY_CTRL_L || key==Input::KEY_CTRL_R) + modifier_state |= MOD_CTRL; + else if(key==Input::KEY_ALT_L || key==Input::KEY_ALT_R) + modifier_state |= MOD_ALT; + + if(root.key_press(key, modifier_state)) return true; switch(key) @@ -26,7 +35,7 @@ bool SystemKeyboardInput::key_press(unsigned key) case Input::KEY_RIGHT: return root.navigate(NAV_RIGHT); case Input::KEY_UP: return root.navigate(NAV_UP); case Input::KEY_DOWN: return root.navigate(NAV_DOWN); - case Input::KEY_TAB: return root.navigate(NAV_NEXT); + case Input::KEY_TAB: return root.navigate((modifier_state&MOD_SHIFT) ? NAV_PREVIOUS : NAV_NEXT); case Input::KEY_SPACE: return root.navigate(NAV_ACTIVATE); case Input::KEY_ENTER: return root.navigate(NAV_ACCEPT); case Input::KEY_ESC: return root.navigate(NAV_CANCEL); @@ -37,12 +46,29 @@ bool SystemKeyboardInput::key_press(unsigned key) bool SystemKeyboardInput::key_release(unsigned key) { - return root.key_release(key, 0); + if(root.is_visible()) + { + bool result = root.key_release(key, modifier_state); + + if(key==Input::KEY_SHIFT_L || key==Input::KEY_SHIFT_R) + modifier_state &= ~MOD_SHIFT; + else if(key==Input::KEY_CTRL_L || key==Input::KEY_CTRL_R) + modifier_state &= ~MOD_CTRL; + else if(key==Input::KEY_ALT_L || key==Input::KEY_ALT_R) + modifier_state &= ~MOD_ALT; + + return result; + } + else + return false; } bool SystemKeyboardInput::character(StringCodec::unichar ch) { - return root.character(ch); + if(root.is_visible()) + return root.character(ch); + else + return false; } } // namespace GLtk