X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FSlit.cc;h=b95c840c2ed4587c26aba5b51d77f9c3c9329b38;hb=bcb14a3ce94ee4b4cba07de7a297470719390331;hp=171432af9b2be2be84509313c6c40c807a8553cf;hpb=1766453ca2ce30adf84798cb504e8b4d258bd08f;p=chaz%2Fopenbox diff --git a/src/Slit.cc b/src/Slit.cc index 171432af..b95c840c 100644 --- a/src/Slit.cc +++ b/src/Slit.cc @@ -40,8 +40,7 @@ extern "C" { Slit::Slit(BScreen *scr) { screen = scr; blackbox = screen->getBlackbox(); - slitstr = (std::string)"session.screen" + itostring(screen->getScreenNumber()) - + ".slit."; + slitstr = "session.screen" + itostring(screen->getScreenNumber()) + ".slit."; config = blackbox->getConfig(); load_rc(); @@ -86,6 +85,9 @@ Slit::~Slit(void) { delete slitmenu; + screen->removeStrut(&strut); + screen->updateAvailableArea(); + screen->getImageControl()->removeImage(frame.pixmap); blackbox->removeSlitSearch(frame.window); @@ -488,106 +490,60 @@ void Slit::updateStrut(void) { void Slit::reposition(void) { - // place the slit in the appropriate place + int x = 0, y = 0; + switch (placement) { case TopLeft: - frame.rect.setPos(0, 0); - - if (direction == Vertical) { - frame.x_hidden = screen->getBevelWidth() - screen->getBorderWidth() - - frame.rect.width(); - frame.y_hidden = 0; - } else { - frame.x_hidden = 0; - frame.y_hidden = screen->getBevelWidth() - screen->getBorderWidth() - - frame.rect.height(); - } - break; - case CenterLeft: - frame.rect.setPos(0, (screen->getHeight() - frame.rect.height()) / 2); - + case BottomLeft: + x = 0; frame.x_hidden = screen->getBevelWidth() - screen->getBorderWidth() - - frame.rect.width(); - frame.y_hidden = frame.rect.y(); - break; + - frame.rect.width(); - case BottomLeft: - frame.rect.setPos(0, (screen->getHeight() - frame.rect.height() - - (screen->getBorderWidth() * 2))); + if (placement == TopLeft) + y = 0; + else if (placement == CenterLeft) + y = (screen->getHeight() - frame.rect.height()) / 2; + else + y = screen->getHeight() - frame.rect.height() + - (screen->getBorderWidth() * 2); - if (direction == Vertical) { - frame.x_hidden = screen->getBevelWidth() - screen->getBorderWidth() - - frame.rect.width(); - frame.y_hidden = frame.rect.y(); - } else { - frame.x_hidden = 0; - frame.y_hidden = screen->getHeight() - screen->getBevelWidth() - - screen->getBorderWidth(); - } break; case TopCenter: - frame.rect.setPos((screen->getWidth() - frame.rect.width()) / 2, 0); - - frame.x_hidden = frame.rect.x(); - frame.y_hidden = screen->getBevelWidth() - screen->getBorderWidth() - - frame.rect.height(); - break; - case BottomCenter: - frame.rect.setPos((screen->getWidth() - frame.rect.width()) / 2, - (screen->getHeight() - frame.rect.height() - - (screen->getBorderWidth() * 2))); - frame.x_hidden = frame.rect.x(); - frame.y_hidden = screen->getHeight() - screen->getBevelWidth() - - screen->getBorderWidth(); - break; + x = (screen->getWidth() - frame.rect.width()) / 2; + frame.x_hidden = x; - case TopRight: - frame.rect.setPos((screen->getWidth() - frame.rect.width() - - (screen->getBorderWidth() * 2)), 0); + if (placement == TopCenter) + y = 0; + else + y = screen->getHeight() - frame.rect.height() + - (screen->getBorderWidth() * 2); - if (direction == Vertical) { - frame.x_hidden = screen->getWidth() - screen->getBevelWidth() - - screen->getBorderWidth(); - frame.y_hidden = 0; - } else { - frame.x_hidden = frame.rect.x(); - frame.y_hidden = screen->getBevelWidth() - screen->getBorderWidth() - - frame.rect.height(); - } break; + case TopRight: case CenterRight: - default: - frame.rect.setPos((screen->getWidth() - frame.rect.width() - - (screen->getBorderWidth() * 2)), - (screen->getHeight() - frame.rect.height()) / 2); - + case BottomRight: + x = screen->getWidth() - frame.rect.width() + - (screen->getBorderWidth() * 2); frame.x_hidden = screen->getWidth() - screen->getBevelWidth() - - screen->getBorderWidth(); - frame.y_hidden = frame.rect.y(); - break; + - screen->getBorderWidth(); - case BottomRight: - frame.rect.setPos((screen->getWidth() - frame.rect.width() - - (screen->getBorderWidth() * 2)), - (screen->getHeight() - frame.rect.height() - - (screen->getBorderWidth() * 2))); - - if (direction == Vertical) { - frame.x_hidden = screen->getWidth() - screen->getBevelWidth() - - screen->getBorderWidth(); - frame.y_hidden = frame.rect.y(); - } else { - frame.x_hidden = frame.rect.x(); - frame.y_hidden = screen->getHeight() - screen->getBevelWidth() - - screen->getBorderWidth(); - } + if (placement == TopRight) + y = 0; + else if (placement == CenterRight) + y = (screen->getHeight() - frame.rect.height()) / 2; + else + y = screen->getHeight() - frame.rect.height() + - (screen->getBorderWidth() * 2); break; } + frame.rect.setPos(x, y); + + // we have to add the border to the rect as it is not accounted for Rect tbar_rect = screen->getToolbar()->getRect(); tbar_rect.setSize(tbar_rect.width() + (screen->getBorderWidth() * 2), tbar_rect.height() + (screen->getBorderWidth() * 2)); @@ -596,25 +552,32 @@ void Slit::reposition(void) { slit_rect.height() + (screen->getBorderWidth() * 2)); if (slit_rect.intersects(tbar_rect)) { - Toolbar *tbar = screen->getToolbar(); - frame.y_hidden = frame.rect.y(); - - int delta = tbar->getExposedHeight() + (screen->getBorderWidth() * 2); - if (frame.rect.bottom() <= tbar_rect.bottom()) { + int delta = screen->getToolbar()->getExposedHeight() + + screen->getBorderWidth(); + if (frame.rect.bottom() <= tbar_rect.bottom()) delta = -delta; - } + frame.rect.setY(frame.rect.y() + delta); - if (direction == Vertical) - frame.y_hidden += delta; } + if (placement == TopCenter) + frame.y_hidden = 0 - frame.rect.height() + screen->getBorderWidth() + + screen->getBevelWidth(); + else if (placement == BottomCenter) + frame.y_hidden = screen->getHeight() - screen->getBorderWidth() + - screen->getBevelWidth(); + else + frame.y_hidden = frame.rect.y(); + updateStrut(); if (hidden) - XMoveResizeWindow(display, frame.window, frame.x_hidden, - frame.y_hidden, frame.rect.width(), frame.rect.height()); + XMoveResizeWindow(display, frame.window, + frame.x_hidden, frame.y_hidden, + frame.rect.width(), frame.rect.height()); else - XMoveResizeWindow(display, frame.window, frame.rect.x(), frame.rect.y(), + XMoveResizeWindow(display, frame.window, + frame.rect.x(), frame.rect.y(), frame.rect.width(), frame.rect.height()); } @@ -625,7 +588,7 @@ void Slit::shutdown(void) { } -void Slit::buttonPressEvent(XButtonEvent *e) { +void Slit::buttonPressEvent(const XButtonEvent *e) { if (e->window != frame.window) return; if (e->button == Button1 && (! on_top)) { @@ -659,7 +622,7 @@ void Slit::buttonPressEvent(XButtonEvent *e) { } -void Slit::enterNotifyEvent(XCrossingEvent *) { +void Slit::enterNotifyEvent(const XCrossingEvent *) { if (! do_auto_hide) return; @@ -671,7 +634,7 @@ void Slit::enterNotifyEvent(XCrossingEvent *) { } -void Slit::leaveNotifyEvent(XCrossingEvent *) { +void Slit::leaveNotifyEvent(const XCrossingEvent *) { if (! do_auto_hide) return; @@ -683,7 +646,7 @@ void Slit::leaveNotifyEvent(XCrossingEvent *) { } -void Slit::configureRequestEvent(XConfigureRequestEvent *e) { +void Slit::configureRequestEvent(const XConfigureRequestEvent *e) { if (! blackbox->validateWindow(e->window)) return; @@ -737,7 +700,7 @@ void Slit::toggleAutoHide(void) { } -void Slit::unmapNotifyEvent(XUnmapEvent *e) { +void Slit::unmapNotifyEvent(const XUnmapEvent *e) { removeClient(e->window); }