force instant reaction for dnd border events

BUG: 136856
FIXED-IN: 4.9
REVIEW: 105254
This commit is contained in:
Thomas Lübking 2012-06-14 22:40:12 +02:00
parent 30bb8be037
commit 8cae5fc073
2 changed files with 5 additions and 4 deletions

View file

@ -192,7 +192,7 @@ void ScreenEdge::unreserve(ElectricBorder border)
QTimer::singleShot(0, this, SLOT(update())); QTimer::singleShot(0, this, SLOT(update()));
} }
void ScreenEdge::check(const QPoint& pos, Time now) void ScreenEdge::check(const QPoint& pos, Time now, bool forceNoPushback)
{ {
if ((pos.x() != m_screenEdgeLeft) && if ((pos.x() != m_screenEdgeLeft) &&
(pos.x() != m_screenEdgeRight) && (pos.x() != m_screenEdgeRight) &&
@ -211,7 +211,7 @@ void ScreenEdge::check(const QPoint& pos, Time now)
Time treshold_reset = 250; // Reset timeout Time treshold_reset = 250; // Reset timeout
Time treshold_trigger = options->electricBorderCooldown(); // Minimum time between triggers Time treshold_trigger = options->electricBorderCooldown(); // Minimum time between triggers
int distance_reset = 30; // Mouse should not move more than this many pixels int distance_reset = 30; // Mouse should not move more than this many pixels
int pushback_pixels = options->electricBorderPushbackPixels(); int pushback_pixels = forceNoPushback ? 0 : options->electricBorderPushbackPixels();
ElectricBorder border; ElectricBorder border;
if (pos.x() == m_screenEdgeLeft && pos.y() == m_screenEdgeTop) if (pos.x() == m_screenEdgeLeft && pos.y() == m_screenEdgeTop)
@ -374,7 +374,7 @@ bool ScreenEdge::isEntered(XEvent* e)
for (int i = 0; i < ELECTRIC_COUNT; ++i) for (int i = 0; i < ELECTRIC_COUNT; ++i)
if (m_screenEdgeWindows[i] != None && e->xclient.window == m_screenEdgeWindows[i]) { if (m_screenEdgeWindows[i] != None && e->xclient.window == m_screenEdgeWindows[i]) {
updateXTime(); updateXTime();
check(QPoint(e->xclient.data.l[2] >> 16, e->xclient.data.l[2] & 0xffff), xTime()); check(QPoint(e->xclient.data.l[2] >> 16, e->xclient.data.l[2] & 0xffff), xTime(), true);
return true; return true;
} }
} }

View file

@ -58,8 +58,9 @@ public:
* if one is enabled for the current region and the timeout is satisfied * if one is enabled for the current region and the timeout is satisfied
* @param pos the position of the mouse pointer * @param pos the position of the mouse pointer
* @param now the time when the function is called * @param now the time when the function is called
* @param forceNoPushBack needs to be called to workaround some DnD clients, don't use unless you want to chek on a DnD event
*/ */
void check(const QPoint& pos, Time now); void check(const QPoint& pos, Time now, bool forceNoPushBack = false);
/** /**
* Restore the size of the specified screen edges * Restore the size of the specified screen edges
* @param border the screen edge to restore the size of * @param border the screen edge to restore the size of