Browse Source

Move screen layout bootstraping around so that it can handle if all screens

are purged on framebuffer resize.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@3707 3789f03b-4d11-0410-bbf8-ca57d06f2519
tags/v0.0.90
Pierre Ossman 15 years ago
parent
commit
d85ea3e199
1 changed files with 20 additions and 20 deletions
  1. 20
    20
      common/rfb/VNCServerST.cxx

+ 20
- 20
common/rfb/VNCServerST.cxx View File

@@ -263,29 +263,29 @@ void VNCServerST::setPixelBuffer(PixelBuffer* pb_)
cursor.setPF(pb->getPF());
renderedCursor.setPF(pb->getPF());

// Check that the screen layout is still valid
if (!screenLayout.validate(pb->width(), pb->height())) {
Rect fbRect;
ScreenSet::iterator iter, iter_next;

fbRect.setXYWH(0, 0, pb->width(), pb->height());

for (iter = screenLayout.begin();iter != screenLayout.end();iter = iter_next) {
iter_next = iter; ++iter_next;
if (iter->dimensions.enclosed_by(fbRect))
continue;
iter->dimensions = iter->dimensions.intersect(fbRect);
if (iter->dimensions.is_empty()) {
slog.info("Removing screen %d (%x) as it is completely outside the new framebuffer",
(int)iter->id, (unsigned)iter->id);
screenLayout.remove_screen(iter->id);
}
}
}

if (screenLayout.num_screens() == 0) {
// Boot strap the screen layout
screenLayout.add_screen(Screen(0, 0, 0, pb->width(), pb->height(), 0));
} else {
// Check that the screen layout is still valid
if (!screenLayout.validate(pb->width(), pb->height())) {
Rect fbRect;
ScreenSet::iterator iter, iter_next;

fbRect.setXYWH(0, 0, pb->width(), pb->height());

for (iter = screenLayout.begin();iter != screenLayout.end();iter = iter_next) {
iter_next = iter; ++iter_next;
if (iter->dimensions.enclosed_by(fbRect))
continue;
iter->dimensions = iter->dimensions.intersect(fbRect);
if (iter->dimensions.is_empty()) {
slog.info("Removing screen %d (%x) as it is completely outside the new framebuffer",
(int)iter->id, (unsigned)iter->id);
screenLayout.remove_screen(iter->id);
}
}
}
}

std::list<VNCSConnectionST*>::iterator ci, ci_next;

Loading…
Cancel
Save