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)
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);
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