diff --git a/src/wayland/popupanchor.cpp b/src/wayland/popupanchor.cpp index ec6e5dbe..e38eeff0 100644 --- a/src/wayland/popupanchor.cpp +++ b/src/wayland/popupanchor.cpp @@ -1,5 +1,6 @@ #include "popupanchor.hpp" +#include #include #include #include @@ -41,6 +42,14 @@ void WaylandPopupPositioner::reposition(PopupAnchor* anchor, QWindow* window, bo positioner.set_constraint_adjustment(anchor->adjustment().toInt()); auto anchorRect = anchor->rect(); + + if (auto* p = window->transientParent()) { + anchorRect.x = QHighDpi::toNativePixels(anchorRect.x, p); + anchorRect.y = QHighDpi::toNativePixels(anchorRect.y, p); + anchorRect.w = QHighDpi::toNativePixels(anchorRect.w, p); + anchorRect.h = QHighDpi::toNativePixels(anchorRect.h, p); + } + positioner.set_anchor_rect(anchorRect.x, anchorRect.y, anchorRect.w, anchorRect.h); XdgPositioner::anchor anchorFlag = XdgPositioner::anchor_none; @@ -92,9 +101,18 @@ void WaylandPopupPositioner::reposition(PopupAnchor* anchor, QWindow* window, bo bool WaylandPopupPositioner::shouldRepositionOnMove() const { return true; } void WaylandPopupPositioner::setFlags(PopupAnchor* anchor, QWindow* window) { + auto anchorRect = anchor->rect(); + + if (auto* p = window->transientParent()) { + anchorRect.x = QHighDpi::toNativePixels(anchorRect.x, p); + anchorRect.y = QHighDpi::toNativePixels(anchorRect.y, p); + anchorRect.w = QHighDpi::toNativePixels(anchorRect.w, p); + anchorRect.h = QHighDpi::toNativePixels(anchorRect.h, p); + } + // clang-format off window->setProperty("_q_waylandPopupConstraintAdjustment", anchor->adjustment().toInt()); - window->setProperty("_q_waylandPopupAnchorRect", anchor->rect().qrect()); + window->setProperty("_q_waylandPopupAnchorRect", anchorRect.qrect()); window->setProperty("_q_waylandPopupAnchor", QVariant::fromValue(Edges::toQt(anchor->edges()))); window->setProperty("_q_waylandPopupGravity", QVariant::fromValue(Edges::toQt(anchor->gravity()))); // clang-format on diff --git a/src/wayland/wlr_layershell/surface.cpp b/src/wayland/wlr_layershell/surface.cpp index 695ecc48..ca5e7d10 100644 --- a/src/wayland/wlr_layershell/surface.cpp +++ b/src/wayland/wlr_layershell/surface.cpp @@ -1,6 +1,7 @@ #include "surface.hpp" #include +#include #include #include #include @@ -70,7 +71,7 @@ QSWaylandLayerSurface::QSWaylandLayerSurface( // new updates will be sent from the extension this->ext->surface = this; - auto size = constrainedSize(this->ext->mAnchors, qwindow->size()); + auto size = constrainedSize(this->ext->mAnchors, window->surfaceSize()); this->set_size(size.width(), size.height()); } @@ -137,7 +138,8 @@ void QSWaylandLayerSurface::updateMargins() { } void QSWaylandLayerSurface::updateExclusiveZone() { - this->set_exclusive_zone(this->ext->mExclusiveZone); + auto nativeZone = QHighDpi::toNativePixels(this->ext->mExclusiveZone, this->window()->window()); + this->set_exclusive_zone(nativeZone); this->window()->waylandSurface()->commit(); }