summaryrefslogtreecommitdiff
path: root/src/managers/XWaylandManager.cpp
diff options
context:
space:
mode:
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;
}