SystemKeyboardInput::SystemKeyboardInput(Root &r, Input::Keyboard &k):
InputMethod(r),
- keyboard(k)
+ keyboard(k),
+ modifier_state(0)
{
keyboard.signal_button_press.connect(sigc::mem_fun(this, &SystemKeyboardInput::key_press));
keyboard.signal_button_release.connect(sigc::mem_fun(this, &SystemKeyboardInput::key_release));
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)
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;
}