Fix switch desktop through edge when moving window
Summary: There was a regression introduced in ScreenEdges when introducing the activatesForPointer method. It considered the switch desktop on edge, but not the special case of switch desktop when moving windows. Due to that the edges did not activate when moving the window. This change addresses the regression and extends the autotest to ensure it's properly covered. BUG: 380440 FIXED-IN: 5.10.3 Test Plan: Manual testing and extended auto test Reviewers: #kwin, #plasma Subscribers: plasma-devel, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D6257
This commit is contained in:
parent
a6dee74ee4
commit
c45e165514
6 changed files with 41 additions and 7 deletions
|
@ -30,6 +30,7 @@ AbstractClient::AbstractClient(QObject *parent)
|
||||||
, m_hiddenInternal(false)
|
, m_hiddenInternal(false)
|
||||||
, m_keepBelow(false)
|
, m_keepBelow(false)
|
||||||
, m_geometry()
|
, m_geometry()
|
||||||
|
, m_resize(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,4 +104,14 @@ void AbstractClient::setKeepBelow(bool keepBelow)
|
||||||
emit keepBelowChanged();
|
emit keepBelowChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AbstractClient::isResize() const
|
||||||
|
{
|
||||||
|
return m_resize;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AbstractClient::setResize(bool set)
|
||||||
|
{
|
||||||
|
m_resize = set;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,8 @@ public:
|
||||||
void setHiddenInternal(bool set);
|
void setHiddenInternal(bool set);
|
||||||
void setGeometry(const QRect &rect);
|
void setGeometry(const QRect &rect);
|
||||||
void setKeepBelow(bool);
|
void setKeepBelow(bool);
|
||||||
|
bool isResize() const;
|
||||||
|
void setResize(bool set);
|
||||||
virtual void showOnScreenEdge() = 0;
|
virtual void showOnScreenEdge() = 0;
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
|
@ -60,6 +62,7 @@ private:
|
||||||
bool m_hiddenInternal;
|
bool m_hiddenInternal;
|
||||||
bool m_keepBelow;
|
bool m_keepBelow;
|
||||||
QRect m_geometry;
|
QRect m_geometry;
|
||||||
|
bool m_resize;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,9 +35,4 @@ void Client::showOnScreenEdge()
|
||||||
setHiddenInternal(false);
|
setHiddenInternal(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Client::isResize() const
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,8 +34,6 @@ class Client : public AbstractClient
|
||||||
public:
|
public:
|
||||||
explicit Client(QObject *parent);
|
explicit Client(QObject *parent);
|
||||||
virtual ~Client();
|
virtual ~Client();
|
||||||
|
|
||||||
bool isResize() const;
|
|
||||||
void showOnScreenEdge() override;
|
void showOnScreenEdge() override;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -392,6 +392,27 @@ void TestScreenEdges::testCreatingInitialEdges()
|
||||||
QCOMPARE(e->activatesForTouchGesture(), false);
|
QCOMPARE(e->activatesForTouchGesture(), false);
|
||||||
QCOMPARE(e->approachGeometry(), expectedGeometries.at(i*2+1));
|
QCOMPARE(e->approachGeometry(), expectedGeometries.at(i*2+1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// let's start a move of window.
|
||||||
|
Client client(workspace());
|
||||||
|
workspace()->setMovingClient(&client);
|
||||||
|
for (int i = 0; i < 8; ++i) {
|
||||||
|
auto e = edges.at(i);
|
||||||
|
QVERIFY(!e->isReserved());
|
||||||
|
QCOMPARE(e->activatesForPointer(), true);
|
||||||
|
QCOMPARE(e->activatesForTouchGesture(), false);
|
||||||
|
QCOMPARE(e->approachGeometry(), expectedGeometries.at(i*2+1));
|
||||||
|
}
|
||||||
|
// not for resize
|
||||||
|
client.setResize(true);
|
||||||
|
for (int i = 0; i < 8; ++i) {
|
||||||
|
auto e = edges.at(i);
|
||||||
|
QVERIFY(!e->isReserved());
|
||||||
|
QCOMPARE(e->activatesForPointer(), false);
|
||||||
|
QCOMPARE(e->activatesForTouchGesture(), false);
|
||||||
|
QCOMPARE(e->approachGeometry(), expectedGeometries.at(i*2+1));
|
||||||
|
}
|
||||||
|
workspace()->setMovingClient(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestScreenEdges::testCallback()
|
void TestScreenEdges::testCallback()
|
||||||
|
|
|
@ -183,6 +183,12 @@ bool Edge::activatesForPointer() const
|
||||||
if (m_edges->isDesktopSwitching()) {
|
if (m_edges->isDesktopSwitching()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
if (m_edges->isDesktopSwitchingMovingClients()) {
|
||||||
|
auto c = Workspace::self()->getMovingClient();
|
||||||
|
if (c && !c->isResize()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!m_callBacks.isEmpty()) {
|
if (!m_callBacks.isEmpty()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue