소스 검색

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 년 전
부모
커밋
86a564a706
1개의 변경된 파일8개의 추가작업 그리고 5개의 파일을 삭제
  1. 8
    5
      unix/x0vncserver/XDesktop.cxx

+ 8
- 5
unix/x0vncserver/XDesktop.cxx 파일 보기

@@ -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…
취소
저장