From b15681fd9c6cd09861087c5638dcb6aa64a80d1d Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Wed, 12 Jan 2022 14:19:14 +0200 Subject: [PATCH] wayland: Port to XdgToplevelInterface::ResizeAnchor --- src/xdgshellclient.cpp | 48 ++++++++++++++++++++++++++++-------------- src/xdgshellclient.h | 2 +- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/src/xdgshellclient.cpp b/src/xdgshellclient.cpp index 0751edc70d..9f97e26888 100644 --- a/src/xdgshellclient.cpp +++ b/src/xdgshellclient.cpp @@ -1122,7 +1122,7 @@ void XdgToplevelClient::handleMoveRequested(SeatInterface *seat, quint32 serial) } } -void XdgToplevelClient::handleResizeRequested(SeatInterface *seat, Qt::Edges edges, quint32 serial) +void XdgToplevelClient::handleResizeRequested(SeatInterface *seat, XdgToplevelInterface::ResizeAnchor anchor, quint32 serial) { if (!seat->hasImplicitPointerGrab(serial) && !seat->hasImplicitTouchGrab(serial)) { return; @@ -1143,21 +1143,37 @@ void XdgToplevelClient::handleResizeRequested(SeatInterface *seat, Qt::Edges edg setInteractiveMoveOffset(cursorPos - pos()); // map from global setInvertedInteractiveMoveOffset(rect().bottomRight() - interactiveMoveOffset()); setUnrestrictedInteractiveMoveResize(false); - auto toPosition = [edges] { - Position position = PositionCenter; - if (edges.testFlag(Qt::TopEdge)) { - position = PositionTop; - } else if (edges.testFlag(Qt::BottomEdge)) { - position = PositionBottom; - } - if (edges.testFlag(Qt::LeftEdge)) { - position = Position(position | PositionLeft); - } else if (edges.testFlag(Qt::RightEdge)) { - position = Position(position | PositionRight); - } - return position; - }; - setInteractiveMoveResizePointerMode(toPosition()); + Position position; + switch (anchor) { + case XdgToplevelInterface::ResizeAnchor::TopLeft: + position = PositionTopLeft; + break; + case XdgToplevelInterface::ResizeAnchor::Top: + position = PositionTop; + break; + case XdgToplevelInterface::ResizeAnchor::TopRight: + position = PositionTopRight; + break; + case XdgToplevelInterface::ResizeAnchor::Right: + position = PositionRight; + break; + case XdgToplevelInterface::ResizeAnchor::BottomRight: + position = PositionBottomRight; + break; + case XdgToplevelInterface::ResizeAnchor::Bottom: + position = PositionBottom; + break; + case XdgToplevelInterface::ResizeAnchor::BottomLeft: + position = PositionBottomLeft; + break; + case XdgToplevelInterface::ResizeAnchor::Left: + position = PositionLeft; + break; + default: + position = PositionCenter; + break; + } + setInteractiveMoveResizePointerMode(position); if (!startInteractiveMoveResize()) { setInteractiveMoveResizePointerButtonDown(false); } diff --git a/src/xdgshellclient.h b/src/xdgshellclient.h index 27061eb9fc..e6c1df24f6 100644 --- a/src/xdgshellclient.h +++ b/src/xdgshellclient.h @@ -185,7 +185,7 @@ private: void handleWindowMenuRequested(KWaylandServer::SeatInterface *seat, const QPoint &surfacePos, quint32 serial); void handleMoveRequested(KWaylandServer::SeatInterface *seat, quint32 serial); - void handleResizeRequested(KWaylandServer::SeatInterface *seat, Qt::Edges, quint32 serial); + void handleResizeRequested(KWaylandServer::SeatInterface *seat, KWaylandServer::XdgToplevelInterface::ResizeAnchor anchor, quint32 serial); void handleStatesAcknowledged(const KWaylandServer::XdgToplevelInterface::States &states); void handleMaximizeRequested(); void handleUnmaximizeRequested();