fix: XWindowsScreen: properly calculate xrandr/xinerama screens

this allows screens to overlap, use panning, etc
This commit is contained in:
Roman Vasiyarov
2025-09-17 17:46:34 +03:00
committed by Nick Bolton
parent 3aef2f4309
commit bf5b0de6ee

View File

@ -906,7 +906,7 @@ void XWindowsScreen::setShape(int32_t width, int32_t height)
m_w = width;
m_h = height;
// get center of default screen
// get center of screen
m_xCenter = m_x + (m_w >> 1);
m_yCenter = m_y + (m_h >> 1);
@ -934,13 +934,21 @@ void XWindowsScreen::setShape(int32_t width, int32_t height)
if (screens != nullptr) {
if (numScreens > 1) {
m_xinerama = true;
m_xCenter = screens[0].x_org + (screens[0].width >> 1);
m_yCenter = screens[0].y_org + (screens[0].height >> 1);
for (int n = 0; n < numScreens; n++) {
LOG_DEBUG(
"xinerama screen: %d origin: %d,%d size: %dx%d", n, screens[n].x_org, screens[n].y_org, screens[n].width,
screens[n].height
);
m_xCenter = std::max(m_xCenter, (screens[n].x_org + screens[n].width) >> 1);
m_yCenter = std::max(m_yCenter, (screens[n].y_org + screens[n].height) >> 1);
}
}
XFree(screens);
}
}
#endif
LOG_DEBUG("center: %d,%d", m_xCenter, m_yCenter);
}
Window XWindowsScreen::openWindow() const