Made double tap require moving farther away from the tapped edge
before arming. This should reduce spurious double taps.
This commit is contained in:
parent
bdecca0bcc
commit
d577d457e3
|
@ -68,6 +68,7 @@ CServer::CServer(const CString& serverName) :
|
||||||
m_switchTwoTapDelay(0.0),
|
m_switchTwoTapDelay(0.0),
|
||||||
m_switchTwoTapEngaged(false),
|
m_switchTwoTapEngaged(false),
|
||||||
m_switchTwoTapArmed(false),
|
m_switchTwoTapArmed(false),
|
||||||
|
m_switchTwoTapZone(3),
|
||||||
m_status(kNotRunning)
|
m_status(kNotRunning)
|
||||||
{
|
{
|
||||||
// do nothing
|
// do nothing
|
||||||
|
@ -726,8 +727,16 @@ CServer::onMouseMovePrimaryNoLock(SInt32 x, SInt32 y)
|
||||||
dir = kBottom;
|
dir = kBottom;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// still on local screen
|
// still on local screen. check if we're inside the tap region.
|
||||||
onNoSwitch();
|
SInt32 tapZone = (zoneSize < m_switchTwoTapZone) ?
|
||||||
|
m_switchTwoTapZone : zoneSize;
|
||||||
|
bool inTapZone = (x < ax + tapZone ||
|
||||||
|
x >= ax + aw - tapZone ||
|
||||||
|
y < ay + tapZone ||
|
||||||
|
y >= ay + ah - tapZone);
|
||||||
|
|
||||||
|
// failed to switch
|
||||||
|
onNoSwitch(inTapZone);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -831,7 +840,17 @@ CServer::onMouseMoveSecondaryNoLock(SInt32 dx, SInt32 dy)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (clearWait) {
|
if (clearWait) {
|
||||||
onNoSwitch();
|
// still on local screen. check if we're inside the
|
||||||
|
// tap region.
|
||||||
|
SInt32 tapZone = (zoneSize < m_switchTwoTapZone) ?
|
||||||
|
m_switchTwoTapZone : zoneSize;
|
||||||
|
bool inTapZone = (m_x < ax + tapZone ||
|
||||||
|
m_x >= ax + aw - tapZone ||
|
||||||
|
m_y < ay + tapZone ||
|
||||||
|
m_y >= ay + ah - tapZone);
|
||||||
|
|
||||||
|
// failed to switch
|
||||||
|
onNoSwitch(inTapZone);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1290,7 +1309,7 @@ CServer::isSwitchOkay(IClient* newScreen, EDirection dir, SInt32 x, SInt32 y)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CServer::onNoSwitch()
|
CServer::onNoSwitch(bool inTapZone)
|
||||||
{
|
{
|
||||||
if (m_switchTwoTapEngaged) {
|
if (m_switchTwoTapEngaged) {
|
||||||
if (m_switchTwoTapTimer.getTime() > m_switchTwoTapDelay) {
|
if (m_switchTwoTapTimer.getTime() > m_switchTwoTapDelay) {
|
||||||
|
@ -1298,7 +1317,7 @@ CServer::onNoSwitch()
|
||||||
m_switchTwoTapEngaged = false;
|
m_switchTwoTapEngaged = false;
|
||||||
m_switchTwoTapArmed = false;
|
m_switchTwoTapArmed = false;
|
||||||
}
|
}
|
||||||
else {
|
else if (!inTapZone) {
|
||||||
// we've moved away from the edge and there's still
|
// we've moved away from the edge and there's still
|
||||||
// time to get back for a double tap.
|
// time to get back for a double tap.
|
||||||
m_switchTwoTapArmed = true;
|
m_switchTwoTapArmed = true;
|
||||||
|
|
|
@ -258,7 +258,7 @@ private:
|
||||||
|
|
||||||
// update switch state due to a mouse move that doesn't try to
|
// update switch state due to a mouse move that doesn't try to
|
||||||
// switch screens.
|
// switch screens.
|
||||||
void onNoSwitch();
|
void onNoSwitch(bool inTapZone);
|
||||||
|
|
||||||
// reset switch wait state
|
// reset switch wait state
|
||||||
void clearSwitchState();
|
void clearSwitchState();
|
||||||
|
@ -403,6 +403,7 @@ private:
|
||||||
CStopwatch m_switchTwoTapTimer;
|
CStopwatch m_switchTwoTapTimer;
|
||||||
bool m_switchTwoTapEngaged;
|
bool m_switchTwoTapEngaged;
|
||||||
bool m_switchTwoTapArmed;
|
bool m_switchTwoTapArmed;
|
||||||
|
SInt32 m_switchTwoTapZone;
|
||||||
|
|
||||||
// the status change jobs and status
|
// the status change jobs and status
|
||||||
CJobList m_statusJobs;
|
CJobList m_statusJobs;
|
||||||
|
|
Loading…
Reference in New Issue