block warps after warping for VD switch
until the event cycle finished - xcb_flush nor even XSync around the cursor setting does not help and the pushback operates on a false position, purging the VD switch warp BUG: 338593 REVIEW: 119960
This commit is contained in:
parent
ed02a9fb96
commit
32dbb57618
2 changed files with 15 additions and 0 deletions
|
@ -43,6 +43,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
// DBus generated
|
// DBus generated
|
||||||
#include "screenlocker_interface.h"
|
#include "screenlocker_interface.h"
|
||||||
// Qt
|
// Qt
|
||||||
|
#include <QSharedPointer>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QVector>
|
#include <QVector>
|
||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
|
@ -63,6 +64,7 @@ Edge::Edge(ScreenEdges *parent)
|
||||||
, m_approaching(false)
|
, m_approaching(false)
|
||||||
, m_lastApproachingFactor(0)
|
, m_lastApproachingFactor(0)
|
||||||
, m_blocked(false)
|
, m_blocked(false)
|
||||||
|
, m_pushBackBlocked(false)
|
||||||
, m_client(nullptr)
|
, m_client(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -288,12 +290,24 @@ void Edge::switchDesktop(const QPoint &cursorPos)
|
||||||
}
|
}
|
||||||
vds->setCurrent(desktop);
|
vds->setCurrent(desktop);
|
||||||
if (vds->current() != oldDesktop) {
|
if (vds->current() != oldDesktop) {
|
||||||
|
m_pushBackBlocked = true;
|
||||||
Cursor::setPos(pos);
|
Cursor::setPos(pos);
|
||||||
|
QSharedPointer<QMetaObject::Connection> me(new QMetaObject::Connection);
|
||||||
|
*me = QObject::connect(QCoreApplication::eventDispatcher(),
|
||||||
|
&QAbstractEventDispatcher::aboutToBlock, this,
|
||||||
|
[this, me](){
|
||||||
|
QObject::disconnect(*me);
|
||||||
|
const_cast<QSharedPointer<QMetaObject::Connection>*>(&me)->reset(nullptr);
|
||||||
|
m_pushBackBlocked = false;
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Edge::pushCursorBack(const QPoint &cursorPos)
|
void Edge::pushCursorBack(const QPoint &cursorPos)
|
||||||
{
|
{
|
||||||
|
if (m_pushBackBlocked)
|
||||||
|
return;
|
||||||
int x = cursorPos.x();
|
int x = cursorPos.x();
|
||||||
int y = cursorPos.y();
|
int y = cursorPos.y();
|
||||||
const QSize &distance = edges()->cursorPushBackDistance();
|
const QSize &distance = edges()->cursorPushBackDistance();
|
||||||
|
|
|
@ -112,6 +112,7 @@ private:
|
||||||
bool m_approaching;
|
bool m_approaching;
|
||||||
int m_lastApproachingFactor;
|
int m_lastApproachingFactor;
|
||||||
bool m_blocked;
|
bool m_blocked;
|
||||||
|
bool m_pushBackBlocked;
|
||||||
Client *m_client;
|
Client *m_client;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue