From 1c7cc31b52a6c2e8224da23e33d296f6fe495995 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Sat, 1 Oct 2022 16:02:10 +0200 Subject: [PATCH] source/Platform/Unix/X11Display.cpp: Fix getPosition() as it did not take border width into account. --- source/Platform/Unix/X11Display.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/source/Platform/Unix/X11Display.cpp b/source/Platform/Unix/X11Display.cpp index d960670..9e087f6 100644 --- a/source/Platform/Unix/X11Display.cpp +++ b/source/Platform/Unix/X11Display.cpp @@ -132,14 +132,20 @@ void X11Display::setPosition(unsigned int x, unsigned int y) Vector2u X11Display::getPosition() const { - Vector2u pos(0, 0); - XWindowAttributes attr; + int x, y; + unsigned int w, h, bw, d; + ::Display* disp = Xlib::getDisplay(); + ::Window ancestor = m_win; + ::Window root = DefaultRootWindow(disp); - if (XGetWindowAttributes(Xlib::getDisplay(), m_win, &attr)) { - pos.x = attr.x; - pos.y = attr.y; + while (Xlib::getParentWindow(ancestor) != root) { + // Next window up (parent window). + ancestor = Xlib::getParentWindow(ancestor); } - return pos; + + ::XGetGeometry(disp, ancestor, &root, &x, &y, &w, &h, &bw, &d); + + return Vector2u(x, y); } void X11Display::setVisible(bool visible)