summaryrefslogtreecommitdiff
path: root/src/managers/XWaylandManager.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2024-07-21 17:41:26 +0200
committerVaxry <vaxry@vaxry.net>2024-07-21 17:41:26 +0200
commit7f624d2236162db847c70ce1caa12851e77e60eb (patch)
tree55d4349fd15fd3aebbe04ac85bee0e15ca7b6cbd /src/managers/XWaylandManager.cpp
parentf7fb7e7e49e3b47f9b72c55fbf2d093e1a7981f5 (diff)
xwayland: fixup WM_SIZE_HINTS handling according to ICCCM
Diffstat (limited to 'src/managers/XWaylandManager.cpp')
-rw-r--r--src/managers/XWaylandManager.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/managers/XWaylandManager.cpp b/src/managers/XWaylandManager.cpp
index e702a172..f329dbe1 100644
--- a/src/managers/XWaylandManager.cpp
+++ b/src/managers/XWaylandManager.cpp
@@ -76,13 +76,21 @@ void CHyprXWaylandManager::getGeometryForWindow(PHLWINDOW pWindow, CBox* pbox) {
const auto SIZEHINTS = pWindow->m_pXWaylandSurface->sizeHints.get();
if (SIZEHINTS && pWindow->m_iX11Type != 2) {
- pbox->x = SIZEHINTS->x;
- pbox->y = SIZEHINTS->y;
- pbox->width = SIZEHINTS->width;
- pbox->height = SIZEHINTS->height;
- } else {
+ // WM_SIZE_HINTS' x,y,w,h is deprecated it seems.
+ // Source: https://x.org/releases/X11R7.6/doc/xorg-docs/specs/ICCCM/icccm.html#wm_normal_hints_property
+ pbox->x = pWindow->m_pXWaylandSurface->geometry.x;
+ pbox->y = pWindow->m_pXWaylandSurface->geometry.y;
+
+ if ((SIZEHINTS->flags & 0x2 /* ICCCM USSize */) || (SIZEHINTS->flags & 0x8 /* ICCCM PSize */)) {
+ pbox->w = SIZEHINTS->base_width;
+ pbox->h = SIZEHINTS->base_height;
+ } else {
+ pbox->w = pWindow->m_pXWaylandSurface->geometry.w;
+ pbox->h = pWindow->m_pXWaylandSurface->geometry.h;
+ }
+ } else
*pbox = pWindow->m_pXWaylandSurface->geometry;
- }
+
} else if (pWindow->m_pXDGSurface)
*pbox = pWindow->m_pXDGSurface->current.geometry;
}