Fixed regression where cursor wasn't locked to screen when a mouse
button is down on win32.
This commit is contained in:
parent
4d2d4a2171
commit
dcfe49ef48
|
@ -964,8 +964,8 @@ bool
|
||||||
CMSWindowsScreen::onMouseButton(WPARAM wParam, LPARAM lParam)
|
CMSWindowsScreen::onMouseButton(WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
// get which button
|
// get which button
|
||||||
bool pressed = false;
|
bool pressed = mapPressFromEvent(wParam, lParam);
|
||||||
const ButtonID button = mapButtonFromEvent(wParam, lParam);
|
ButtonID button = mapButtonFromEvent(wParam, lParam);
|
||||||
|
|
||||||
// keep our shadow key state up to date
|
// keep our shadow key state up to date
|
||||||
if (button >= kButtonLeft && button <= kButtonExtra0 + 1) {
|
if (button >= kButtonLeft && button <= kButtonExtra0 + 1) {
|
||||||
|
@ -979,44 +979,17 @@ CMSWindowsScreen::onMouseButton(WPARAM wParam, LPARAM lParam)
|
||||||
|
|
||||||
// ignore message if posted prior to last mark change
|
// ignore message if posted prior to last mark change
|
||||||
if (!ignore()) {
|
if (!ignore()) {
|
||||||
switch (wParam) {
|
if (pressed) {
|
||||||
case WM_LBUTTONDOWN:
|
|
||||||
case WM_MBUTTONDOWN:
|
|
||||||
case WM_RBUTTONDOWN:
|
|
||||||
case WM_XBUTTONDOWN:
|
|
||||||
case WM_LBUTTONDBLCLK:
|
|
||||||
case WM_MBUTTONDBLCLK:
|
|
||||||
case WM_RBUTTONDBLCLK:
|
|
||||||
case WM_XBUTTONDBLCLK:
|
|
||||||
case WM_NCLBUTTONDOWN:
|
|
||||||
case WM_NCMBUTTONDOWN:
|
|
||||||
case WM_NCRBUTTONDOWN:
|
|
||||||
case WM_NCXBUTTONDOWN:
|
|
||||||
case WM_NCLBUTTONDBLCLK:
|
|
||||||
case WM_NCMBUTTONDBLCLK:
|
|
||||||
case WM_NCRBUTTONDBLCLK:
|
|
||||||
case WM_NCXBUTTONDBLCLK:
|
|
||||||
LOG((CLOG_DEBUG1 "event: button press button=%d", button));
|
LOG((CLOG_DEBUG1 "event: button press button=%d", button));
|
||||||
if (button != kButtonNone) {
|
if (button != kButtonNone) {
|
||||||
sendEvent(getButtonDownEvent(), CButtonInfo::alloc(button));
|
sendEvent(getButtonDownEvent(), CButtonInfo::alloc(button));
|
||||||
}
|
}
|
||||||
pressed = true;
|
}
|
||||||
break;
|
else {
|
||||||
|
|
||||||
case WM_LBUTTONUP:
|
|
||||||
case WM_MBUTTONUP:
|
|
||||||
case WM_RBUTTONUP:
|
|
||||||
case WM_XBUTTONUP:
|
|
||||||
case WM_NCLBUTTONUP:
|
|
||||||
case WM_NCMBUTTONUP:
|
|
||||||
case WM_NCRBUTTONUP:
|
|
||||||
case WM_NCXBUTTONUP:
|
|
||||||
LOG((CLOG_DEBUG1 "event: button release button=%d", button));
|
LOG((CLOG_DEBUG1 "event: button release button=%d", button));
|
||||||
if (button != kButtonNone) {
|
if (button != kButtonNone) {
|
||||||
sendEvent(getButtonUpEvent(), CButtonInfo::alloc(button));
|
sendEvent(getButtonUpEvent(), CButtonInfo::alloc(button));
|
||||||
}
|
}
|
||||||
pressed = false;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1302,6 +1275,43 @@ CMSWindowsScreen::mapButtonFromEvent(WPARAM msg, LPARAM button) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
CMSWindowsScreen::mapPressFromEvent(WPARAM msg, LPARAM) const
|
||||||
|
{
|
||||||
|
switch (msg) {
|
||||||
|
case WM_LBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_RBUTTONDOWN:
|
||||||
|
case WM_XBUTTONDOWN:
|
||||||
|
case WM_LBUTTONDBLCLK:
|
||||||
|
case WM_MBUTTONDBLCLK:
|
||||||
|
case WM_RBUTTONDBLCLK:
|
||||||
|
case WM_XBUTTONDBLCLK:
|
||||||
|
case WM_NCLBUTTONDOWN:
|
||||||
|
case WM_NCMBUTTONDOWN:
|
||||||
|
case WM_NCRBUTTONDOWN:
|
||||||
|
case WM_NCXBUTTONDOWN:
|
||||||
|
case WM_NCLBUTTONDBLCLK:
|
||||||
|
case WM_NCMBUTTONDBLCLK:
|
||||||
|
case WM_NCRBUTTONDBLCLK:
|
||||||
|
case WM_NCXBUTTONDBLCLK:
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case WM_LBUTTONUP:
|
||||||
|
case WM_MBUTTONUP:
|
||||||
|
case WM_RBUTTONUP:
|
||||||
|
case WM_XBUTTONUP:
|
||||||
|
case WM_NCLBUTTONUP:
|
||||||
|
case WM_NCMBUTTONUP:
|
||||||
|
case WM_NCRBUTTONUP:
|
||||||
|
case WM_NCXBUTTONUP:
|
||||||
|
return false;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CMSWindowsScreen::fixKeys()
|
CMSWindowsScreen::fixKeys()
|
||||||
{
|
{
|
||||||
|
|
|
@ -157,6 +157,9 @@ private:
|
||||||
// map a button event to a button ID
|
// map a button event to a button ID
|
||||||
ButtonID mapButtonFromEvent(WPARAM msg, LPARAM button) const;
|
ButtonID mapButtonFromEvent(WPARAM msg, LPARAM button) const;
|
||||||
|
|
||||||
|
// map a button event to a press (true) or release (false)
|
||||||
|
bool mapPressFromEvent(WPARAM msg, LPARAM button) const;
|
||||||
|
|
||||||
// fix the key state, synthesizing fake key releases for keys
|
// fix the key state, synthesizing fake key releases for keys
|
||||||
// that aren't down anymore.
|
// that aren't down anymore.
|
||||||
void fixKeys();
|
void fixKeys();
|
||||||
|
|
Loading…
Reference in New Issue