From bb4c4893272b4500d30cb5b1f92fa477d38e18e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Mon, 17 Aug 2026 03:44:44 +0200 Subject: [PATCH] [Completer] Fix popup going offscreen by clamping in screen coordinates The position clamping in applyPopupWidth() was comparing popup->pos() (parent coordinates) against screen->availableGeometry() (screen coordinates). When the parent widget is not at the screen origin the clamping computed a position in the wrong coordinate space, placing the popup offscreen. Convert to global coordinates first, clamp, then map back to parent coordinates. --- .../interface/widgets/utility/card_completer_styler.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cockatrice/src/interface/widgets/utility/card_completer_styler.cpp b/cockatrice/src/interface/widgets/utility/card_completer_styler.cpp index 2e670e0fe..c2dbf299c 100644 --- a/cockatrice/src/interface/widgets/utility/card_completer_styler.cpp +++ b/cockatrice/src/interface/widgets/utility/card_completer_styler.cpp @@ -169,9 +169,12 @@ void CardCompleterStyler::applyPopupWidth() popup->resize(minWidth, popup->height()); if (!available.isEmpty()) { - QPoint pos = popup->pos(); - pos.setX(qBound(available.left(), pos.x(), qMax(available.left(), available.right() - popup->width() + 1))); - popup->move(pos); + // Clamp in screen coordinates, then map back to parent coordinates. + QPoint globalPos = popup->mapToGlobal(QPoint(0, 0)); + int clampedGlobalX = + qBound(available.left(), globalPos.x(), qMax(available.left(), available.right() - popup->width() + 1)); + QPoint parentPos = popup->mapFromGlobal(QPoint(clampedGlobalX, globalPos.y())); + popup->move(parentPos); } } }