Quellcode durchsuchen

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 vor 2 Jahren
Ursprung
Commit
86a564a706
1 geänderte Dateien mit 8 neuen und 5 gelöschten Zeilen
  1. 8
    5
      unix/x0vncserver/XDesktop.cxx

+ 8
- 5
unix/x0vncserver/XDesktop.cxx Datei anzeigen

@@ -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;
}


Laden…
Abbrechen
Speichern