29 lines
1.6 KiB
Diff
29 lines
1.6 KiB
Diff
From a4a41fdb2d116f15d7cec4c3fe9d23ef16deb1aa Mon Sep 17 00:00:00 2001
|
|
From: Jan Grulich <jgrulich@redhat.com>
|
|
Date: Fri, 29 Jul 2022 11:47:02 +0200
|
|
Subject: [PATCH] Client: do not take decoration shadows into account when placing popups
|
|
|
|
The anchor rectangle is relative to the window geometry, which according
|
|
to xdg-shell specs shouldn't include invisible portions like shadows.
|
|
This causes all popups be wrongly positioned when drop-shadows are used.
|
|
|
|
Pick-to: 6.4 6.3 6.2
|
|
Change-Id: Iac30ab264599f9898f3ddecd7f0c5f2aca824ad6
|
|
---
|
|
|
|
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
|
|
index e3dee44..c4b1942 100644
|
|
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
|
|
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
|
|
@@ -410,8 +410,8 @@
|
|
QPoint transientPos = m_window->geometry().topLeft(); // this is absolute
|
|
transientPos -= parent->geometry().topLeft();
|
|
if (parent->decoration()) {
|
|
- transientPos.setX(transientPos.x() + parent->decoration()->margins().left());
|
|
- transientPos.setY(transientPos.y() + parent->decoration()->margins().top());
|
|
+ transientPos.setX(transientPos.x() + parent->decoration()->margins(QWaylandAbstractDecoration::ShadowsExcluded).left());
|
|
+ transientPos.setY(transientPos.y() + parent->decoration()->margins(QWaylandAbstractDecoration::ShadowsExcluded).top());
|
|
}
|
|
positioner->set_anchor_rect(transientPos.x(), transientPos.y(), 1, 1);
|
|
positioner->set_anchor(QtWayland::xdg_positioner::anchor_top_left);
|