diff --git a/src/Magnum/Platform/AbstractXApplication.cpp b/src/Magnum/Platform/AbstractXApplication.cpp index 634467a38..8d84f51c9 100644 --- a/src/Magnum/Platform/AbstractXApplication.cpp +++ b/src/Magnum/Platform/AbstractXApplication.cpp @@ -169,18 +169,18 @@ bool AbstractXApplication::mainLoopIteration() { /* Key/mouse events */ case KeyPress: case KeyRelease: { - KeyEvent e(static_cast(XLookupKeysym(&event.xkey, 0)), static_cast(event.xkey.state), {event.xkey.x, event.xkey.y}); + KeyEvent e(static_cast(XLookupKeysym(&event.xkey, 0)), event.xkey.state, {event.xkey.x, event.xkey.y}); event.type == KeyPress ? keyPressEvent(e) : keyReleaseEvent(e); } break; case ButtonPress: case ButtonRelease: { - MouseEvent e(static_cast(event.xbutton.button), static_cast(event.xkey.state), {event.xbutton.x, event.xbutton.y}); + MouseEvent e(static_cast(event.xbutton.button), event.xkey.state, {event.xbutton.x, event.xbutton.y}); event.type == ButtonPress ? mousePressEvent(e) : mouseReleaseEvent(e); } break; /* Mouse move events */ case MotionNotify: { - MouseMoveEvent e(static_cast(event.xmotion.state), {event.xmotion.x, event.xmotion.y}); + MouseMoveEvent e(event.xmotion.state, {event.xmotion.x, event.xmotion.y}); mouseMoveEvent(e); } break; } diff --git a/src/Magnum/Platform/AbstractXApplication.h b/src/Magnum/Platform/AbstractXApplication.h index 0206bdbeb..5e9182f7e 100644 --- a/src/Magnum/Platform/AbstractXApplication.h +++ b/src/Magnum/Platform/AbstractXApplication.h @@ -643,20 +643,24 @@ class AbstractXApplication::InputEvent { bool isAccepted() const { return _accepted; } /** @brief Modifiers */ - Modifiers modifiers() const { return _modifiers; } + Modifiers modifiers() const { + return Modifiers(_modifiers & (ShiftMask|ControlMask|Mod1Mask|Mod5Mask|LockMask|Mod2Mask)); + } /** @brief Mouse buttons */ - Buttons buttons() const { return Button(static_cast(_modifiers)); } + Buttons buttons() const { + return Buttons(_modifiers & (Button1Mask|Button2Mask|Button3Mask)); + } #ifndef DOXYGEN_GENERATING_OUTPUT protected: - explicit InputEvent(Modifiers modifiers): _modifiers(modifiers), _accepted(false) {} + explicit InputEvent(unsigned int modifiers): _modifiers(modifiers), _accepted(false) {} ~InputEvent() = default; #endif private: - Modifiers _modifiers; + unsigned int _modifiers; bool _accepted; }; @@ -1014,7 +1018,7 @@ class AbstractXApplication::KeyEvent: public AbstractXApplication::InputEvent { Vector2i position() const { return _position; } private: - explicit KeyEvent(Key key, Modifiers modifiers, const Vector2i& position): InputEvent(modifiers), _key(key), _position(position) {} + explicit KeyEvent(Key key, unsigned int modifiers, const Vector2i& position): InputEvent(modifiers), _key(key), _position(position) {} const Key _key; const Vector2i _position; @@ -1049,7 +1053,7 @@ class AbstractXApplication::MouseEvent: public AbstractXApplication::InputEvent Vector2i position() const { return _position; } private: - explicit MouseEvent(Button button, Modifiers modifiers, const Vector2i& position): InputEvent(modifiers), _button(button), _position(position) {} + explicit MouseEvent(Button button, unsigned int modifiers, const Vector2i& position): InputEvent(modifiers), _button(button), _position(position) {} const Button _button; const Vector2i _position; @@ -1068,7 +1072,7 @@ class AbstractXApplication::MouseMoveEvent: public AbstractXApplication::InputEv Vector2i position() const { return _position; } private: - explicit MouseMoveEvent(Modifiers modifiers, const Vector2i& position): InputEvent(modifiers), _position(position) {} + explicit MouseMoveEvent(unsigned int modifiers, const Vector2i& position): InputEvent(modifiers), _position(position) {} const Vector2i _position; };