Browse Source

Correctly handle screen layout with offset

We miscalculated the screen layout if the geometry had an offset as we
adjusted the real screen layout to account for the offset, but compared
it to the unadjusted geometry.
tags/v1.11.90
Pierre Ossman 2 years ago
parent
commit
86a564a706
1 changed files with 8 additions and 5 deletions
  1. 8
    5
      unix/x0vncserver/XDesktop.cxx

+ 8
- 5
unix/x0vncserver/XDesktop.cxx View File

@@ -422,6 +422,7 @@ void XDesktop::clientCutText(const char* str) {
ScreenSet XDesktop::computeScreenLayout()
{
ScreenSet layout;
char buffer[2048];

#ifdef HAVE_XRANDR
XRRScreenResources *res = XRRGetScreenResources(dpy, DefaultRootWindow(dpy));
@@ -439,13 +440,11 @@ ScreenSet XDesktop::computeScreenLayout()
Point offset(-geometry->offsetLeft(), -geometry->offsetTop());
for (iter = layout.begin();iter != layout.end();iter = iter_next) {
iter_next = iter; ++iter_next;
iter->dimensions = iter->dimensions.translate(offset);
if (iter->dimensions.enclosed_by(geometry->getRect()))
continue;
iter->dimensions = iter->dimensions.intersect(geometry->getRect());
if (iter->dimensions.is_empty()) {
if (iter->dimensions.is_empty())
layout.remove_screen(iter->id);
}
else
iter->dimensions = iter->dimensions.translate(offset);
}
#endif

@@ -454,6 +453,10 @@ ScreenSet XDesktop::computeScreenLayout()
layout.add_screen(rfb::Screen(0, 0, 0, geometry->width(),
geometry->height(), 0));

vlog.debug("Detected screen layout:");
layout.print(buffer, sizeof(buffer));
vlog.debug("%s", buffer);

return layout;
}


Loading…
Cancel
Save