Revert "Remove mysterious s_cursorUpdateBlocking boolean flag in pointer_input.cpp"
This reverts commit 3d0bdc56a4
.
seat->setFocusedPointerSurface() before notifyPointerMotion() is needed
to prevent sending a motion event that's outside the previously focused
surface.
BUG: 449273
This commit is contained in:
parent
d54723cbf2
commit
aaa07f0605
1 changed files with 11 additions and 0 deletions
|
@ -553,6 +553,8 @@ void PointerInputRedirection::cleanupDecoration(Decoration::DecoratedClientImpl
|
||||||
m_decorationDestroyedConnection = connect(now, &QObject::destroyed, this, &PointerInputRedirection::update, Qt::QueuedConnection);
|
m_decorationDestroyedConnection = connect(now, &QObject::destroyed, this, &PointerInputRedirection::update, Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool s_cursorUpdateBlocking = false;
|
||||||
|
|
||||||
void PointerInputRedirection::focusUpdate(Toplevel *focusOld, Toplevel *focusNow)
|
void PointerInputRedirection::focusUpdate(Toplevel *focusOld, Toplevel *focusNow)
|
||||||
{
|
{
|
||||||
if (AbstractClient *ac = qobject_cast<AbstractClient*>(focusOld)) {
|
if (AbstractClient *ac = qobject_cast<AbstractClient*>(focusOld)) {
|
||||||
|
@ -573,6 +575,11 @@ void PointerInputRedirection::focusUpdate(Toplevel *focusOld, Toplevel *focusNow
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// prevent updating cursor and sending motion event outside the previously focused surface
|
||||||
|
s_cursorUpdateBlocking = true;
|
||||||
|
seat->setFocusedPointerSurface(nullptr);
|
||||||
|
s_cursorUpdateBlocking = false;
|
||||||
|
|
||||||
seat->notifyPointerMotion(m_pos.toPoint());
|
seat->notifyPointerMotion(m_pos.toPoint());
|
||||||
seat->setFocusedPointerSurface(focusNow->surface(), focusNow->inputTransformation());
|
seat->setFocusedPointerSurface(focusNow->surface(), focusNow->inputTransformation());
|
||||||
|
|
||||||
|
@ -1021,6 +1028,10 @@ void CursorImage::handlePointerChanged()
|
||||||
|
|
||||||
void CursorImage::handleFocusedSurfaceChanged()
|
void CursorImage::handleFocusedSurfaceChanged()
|
||||||
{
|
{
|
||||||
|
if (s_cursorUpdateBlocking) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
KWaylandServer::PointerInterface *pointer = waylandServer()->seat()->pointer();
|
KWaylandServer::PointerInterface *pointer = waylandServer()->seat()->pointer();
|
||||||
disconnect(m_serverCursor.connection);
|
disconnect(m_serverCursor.connection);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue