diff --git a/src/Contexts/AbstractXContext.cpp b/src/Contexts/AbstractXContext.cpp index 26e108771..9c0747aaf 100644 --- a/src/Contexts/AbstractXContext.cpp +++ b/src/Contexts/AbstractXContext.cpp @@ -20,7 +20,7 @@ #define None 0L // redef Xlib nonsense /* Mask for X events */ -#define INPUT_MASK KeyPressMask|KeyReleaseMask|ButtonPressMask|ButtonReleaseMask|StructureNotifyMask +#define INPUT_MASK KeyPressMask|KeyReleaseMask|ButtonPressMask|ButtonReleaseMask|PointerMotionMask|StructureNotifyMask using namespace std; @@ -122,6 +122,11 @@ int AbstractXContext::exec() { case ButtonRelease: mouseReleaseEvent(static_cast(event.xbutton.button), static_cast(event.xkey.state), {event.xbutton.x, event.xbutton.y}); break; + + /* Mouse move events */ + case MotionNotify: + mouseMotionEvent(static_cast(event.xmotion.state), {event.xmotion.x, event.xmotion.y}); + break; } } diff --git a/src/Contexts/AbstractXContext.h b/src/Contexts/AbstractXContext.h index 59fa93bf5..620a777ac 100644 --- a/src/Contexts/AbstractXContext.h +++ b/src/Contexts/AbstractXContext.h @@ -91,7 +91,7 @@ class AbstractXContext: public AbstractContext { * @brief %Modifier * * @see Modifiers, keyPressEvent(), keyReleaseEvent(), - * mousePressEvent(), mouseReleaseEvent() + * mousePressEvent(), mouseReleaseEvent(), mouseMotionEvent() */ enum class Modifier: unsigned int { Shift = ShiftMask, /**< Shift */ @@ -99,7 +99,11 @@ class AbstractXContext: public AbstractContext { Ctrl = ControlMask, /**< Ctrl */ Alt = Mod1Mask, /**< Alt */ NumLock = Mod2Mask, /**< Num lock */ - AltGr = Mod5Mask /**< AltGr */ + AltGr = Mod5Mask, /**< AltGr */ + + LeftButton = Button1Mask, /**< Left mouse button */ + MiddleButton = Button2Mask, /**< Middle mouse button */ + RightButton = Button3Mask /**< Right mouse button */ }; /** @@ -248,6 +252,15 @@ class AbstractXContext: public AbstractContext { */ virtual void mouseReleaseEvent(MouseButton button, Modifiers modifiers, const Math::Vector2& position); + /** + * @brief Mouse motion event + * @param modifiers Active modifiers + * @param position Cursor position + * + * Called when mouse is moved. + */ + virtual void mouseMotionEvent(Modifiers modifiers, const Math::Vector2& position); + /*@}*/ private: @@ -279,6 +292,7 @@ inline void AbstractXContext::keyPressEvent(Key, Modifiers, const Math::Vector2< inline void AbstractXContext::keyReleaseEvent(Key, Modifiers, const Math::Vector2&) {} inline void AbstractXContext::mousePressEvent(MouseButton, Modifiers, const Math::Vector2&) {} inline void AbstractXContext::mouseReleaseEvent(MouseButton, Modifiers, const Math::Vector2&) {} +inline void AbstractXContext::mouseMotionEvent(Modifiers, const Math::Vector2&) {} }}