if(!root.is_visible())
return false;
- // TODO modifiers
- if(root.key_press(key, 0))
+ 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)
{
if(root.is_visible())
- return root.key_release(key, 0);
+ {
+ 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;
}