]> git.tdb.fi Git - libs/gltk.git/commitdiff
Pass modifier state to key_press and key_release functions
authorMikko Rasa <tdb@tdb.fi>
Tue, 10 Sep 2019 08:40:37 +0000 (11:40 +0300)
committerMikko Rasa <tdb@tdb.fi>
Tue, 10 Sep 2019 08:40:37 +0000 (11:40 +0300)
source/systemkeyboardinput.cpp
source/systemkeyboardinput.h

index f5657bd7d49066d4c854279bfbfde8705ddbd55a..a99183231f08e66203e5d16112e9cfbacdecbe3c 100644 (file)
@@ -7,7 +7,8 @@ namespace GLtk {
 
 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));
@@ -19,8 +20,14 @@ bool SystemKeyboardInput::key_press(unsigned key)
        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)
@@ -41,7 +48,18 @@ bool SystemKeyboardInput::key_press(unsigned 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;
 }
index ae988ca1aaccb4aac488b6e584c8ce727ec8afe2..1b37e543cbe7917199491bf5c5f49da4ef1d52a5 100644 (file)
@@ -11,6 +11,7 @@ class SystemKeyboardInput: public InputMethod, public sigc::trackable
 {
 private:
        Input::Keyboard &keyboard;
+       unsigned modifier_state;
 
 public:
        SystemKeyboardInput(Root &, Input::Keyboard &);