source/Platform/Unix/X11Mouse.cpp: implement hack for XButton1 and 2.
This commit is contained in:
parent
c082700891
commit
f6aa0246d3
1 changed files with 22 additions and 5 deletions
|
|
@ -5,8 +5,17 @@
|
|||
#include "X11Display.h"
|
||||
#include "X11Mouse.h"
|
||||
|
||||
#define XBUTTON1BIT (1<<0)
|
||||
#define XBUTTON2BIT (1<<1)
|
||||
|
||||
namespace sp {
|
||||
|
||||
namespace _priv {
|
||||
|
||||
// Variable to handle extra button state (not queryable in xlib)
|
||||
unsigned int xstate = 0;
|
||||
}
|
||||
|
||||
X11Mouse::X11Mouse() :
|
||||
m_btn_state(0)
|
||||
{
|
||||
|
|
@ -35,8 +44,6 @@ bool X11Mouse::isButtonDown(Mouse::Button button) const
|
|||
return false;
|
||||
}
|
||||
|
||||
// TODO: Button1 and 2 is defined in x11 and
|
||||
// therefore clashes with Mouse::Button::Button1 and 2.
|
||||
switch(button) {
|
||||
case Mouse::Button::Left :
|
||||
return m_btn_state & Button1Mask;
|
||||
|
|
@ -44,6 +51,10 @@ bool X11Mouse::isButtonDown(Mouse::Button button) const
|
|||
return m_btn_state & Button3Mask;
|
||||
case Mouse::Button::Middle :
|
||||
return m_btn_state & Button2Mask;
|
||||
case Mouse::Button::XButton1 :
|
||||
return _priv::xstate & XBUTTON1BIT;
|
||||
case Mouse::Button::XButton2 :
|
||||
return _priv::xstate & XBUTTON2BIT;
|
||||
default :
|
||||
return false;
|
||||
}
|
||||
|
|
@ -82,6 +93,11 @@ void X11Mouse::updateFocusedWindow()
|
|||
m_win = focus ? (::Window) focus->getHandle() : 0;
|
||||
}
|
||||
|
||||
#define SETXSTATE(bit) \
|
||||
_priv::xstate = (xevent->type == ButtonPress) \
|
||||
? _priv::xstate | (bit) \
|
||||
: _priv::xstate & ~(bit)
|
||||
|
||||
bool X11Mouse::handleMessage(XEvent* xevent, Event& event)
|
||||
{
|
||||
if (xevent->type == MotionNotify) {
|
||||
|
|
@ -99,9 +115,10 @@ bool X11Mouse::handleMessage(XEvent* xevent, Event& event)
|
|||
case Button1 : trans = Mouse::Button::Left; break;
|
||||
case Button2 : trans = Mouse::Button::Middle; break;
|
||||
case Button3 : trans = Mouse::Button::Right; break;
|
||||
// TODO: name clash, need to rename Mouse::Button enums.
|
||||
// case Button4 : trans = Mouse::Button::Button1; break; // clashes with X11's "Button1" define.
|
||||
// case Button5 : trans = Mouse::Button::Button2; break; // clashes with X11's "Button2" define.
|
||||
// Xlib do not support querying of button 8 and 9.
|
||||
// so we have to fake it.
|
||||
case 8 : trans = Mouse::Button::XButton1; SETXSTATE(XBUTTON1BIT); break;
|
||||
case 9 : trans = Mouse::Button::XButton2; SETXSTATE(XBUTTON2BIT); break;
|
||||
}
|
||||
|
||||
if (trans != Mouse::Button::Unknown) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue