wayland: Port to XdgToplevelInterface::ResizeAnchor

This commit is contained in:
Vlad Zahorodnii 2022-01-12 14:19:14 +02:00
parent 9a4a960886
commit b15681fd9c
2 changed files with 33 additions and 17 deletions

View file

@ -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)) { if (!seat->hasImplicitPointerGrab(serial) && !seat->hasImplicitTouchGrab(serial)) {
return; return;
@ -1143,21 +1143,37 @@ void XdgToplevelClient::handleResizeRequested(SeatInterface *seat, Qt::Edges edg
setInteractiveMoveOffset(cursorPos - pos()); // map from global setInteractiveMoveOffset(cursorPos - pos()); // map from global
setInvertedInteractiveMoveOffset(rect().bottomRight() - interactiveMoveOffset()); setInvertedInteractiveMoveOffset(rect().bottomRight() - interactiveMoveOffset());
setUnrestrictedInteractiveMoveResize(false); setUnrestrictedInteractiveMoveResize(false);
auto toPosition = [edges] { Position position;
Position position = PositionCenter; switch (anchor) {
if (edges.testFlag(Qt::TopEdge)) { case XdgToplevelInterface::ResizeAnchor::TopLeft:
position = PositionTop; position = PositionTopLeft;
} else if (edges.testFlag(Qt::BottomEdge)) { break;
position = PositionBottom; case XdgToplevelInterface::ResizeAnchor::Top:
} position = PositionTop;
if (edges.testFlag(Qt::LeftEdge)) { break;
position = Position(position | PositionLeft); case XdgToplevelInterface::ResizeAnchor::TopRight:
} else if (edges.testFlag(Qt::RightEdge)) { position = PositionTopRight;
position = Position(position | PositionRight); break;
} case XdgToplevelInterface::ResizeAnchor::Right:
return position; position = PositionRight;
}; break;
setInteractiveMoveResizePointerMode(toPosition()); 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()) { if (!startInteractiveMoveResize()) {
setInteractiveMoveResizePointerButtonDown(false); setInteractiveMoveResizePointerButtonDown(false);
} }

View file

@ -185,7 +185,7 @@ private:
void handleWindowMenuRequested(KWaylandServer::SeatInterface *seat, void handleWindowMenuRequested(KWaylandServer::SeatInterface *seat,
const QPoint &surfacePos, quint32 serial); const QPoint &surfacePos, quint32 serial);
void handleMoveRequested(KWaylandServer::SeatInterface *seat, 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 handleStatesAcknowledged(const KWaylandServer::XdgToplevelInterface::States &states);
void handleMaximizeRequested(); void handleMaximizeRequested();
void handleUnmaximizeRequested(); void handleUnmaximizeRequested();