- Slit *slit = screen.getSlit();
- Toolbar *toolbar = screen.getToolbar();
- int tbarh = screen.hideToolbar() ? 0 :
- toolbar->getExposedHeight() + screen.getBorderWidth() * 2;
- bool tbartop;
- switch (toolbar->placement()) {
- case Toolbar::TopLeft:
- case Toolbar::TopCenter:
- case Toolbar::TopRight:
- tbartop = true;
- break;
- case Toolbar::BottomLeft:
- case Toolbar::BottomCenter:
- case Toolbar::BottomRight:
- tbartop = false;
- break;
- default:
- ASSERT(false); // unhandled placement
- }
- if ((slit->direction() == Slit::Horizontal &&
- (slit->placement() == Slit::TopLeft ||
- slit->placement() == Slit::TopRight)) ||
- slit->placement() == Slit::TopCenter) {
- // exclude top
- if (tbartop) {
- space.setY(slit->area().y());
- space.setH(space.h() - space.y());
- } else
- space.setH(space.h() - tbarh);
- space.setY(space.y() + slit->area().h() + screen.getBorderWidth() * 2);
- space.setH(space.h() - (slit->area().h() + screen.getBorderWidth() * 2));
- } else if ((slit->direction() == Slit::Vertical &&
+ Slit *slit = screen.getSlit();
+ int slit_x = slit->autoHide() ? slit->hiddenOrigin().x() : slit->area().x(),
+ slit_y = slit->autoHide() ? slit->hiddenOrigin().y() : slit->area().y();
+ Toolbar *toolbar = screen.getToolbar();
+ int tbarh = screen.hideToolbar() ? 0 :
+ toolbar->getExposedHeight() + screen.getBorderWidth() * 2;
+ bool tbartop;
+ switch (toolbar->placement()) {
+ case Toolbar::TopLeft:
+ case Toolbar::TopCenter:
+ case Toolbar::TopRight:
+ tbartop = true;
+ break;
+ case Toolbar::BottomLeft:
+ case Toolbar::BottomCenter:
+ case Toolbar::BottomRight:
+ tbartop = false;
+ break;
+ default:
+ ASSERT(false); // unhandled placement
+ }
+ if ((slit->direction() == Slit::Horizontal &&
+ (slit->placement() == Slit::TopLeft ||
+ slit->placement() == Slit::TopRight)) ||
+ slit->placement() == Slit::TopCenter) {
+ // exclude top
+ if (tbartop && slit_y + slit->area().h() < tbarh) {
+ space.setY(space.y() + tbarh);
+ space.setH(space.h() - tbarh);
+ } else {
+ space.setY(space.y() + (slit_y + slit->area().h() +
+ screen.getBorderWidth() * 2));
+ space.setH(space.h() - (slit_y + slit->area().h() +
+ screen.getBorderWidth() * 2));
+ if (!tbartop)
+ space.setH(space.h() - tbarh);
+ }
+ } else if ((slit->direction() == Slit::Vertical &&