]> Dogcows Code - chaz/openbox/blobdiff - src/Toolbar.cc
merge from netwm-merge2 to netwm-merge3. Basically, all of netwm that we intend to...
[chaz/openbox] / src / Toolbar.cc
index 5ff333ad9c6a6501fd97f1cf2325904ebe6ab61a..9c7c2fafbbce319de7ee4099302446c87145f688 100644 (file)
@@ -161,14 +161,12 @@ Toolbar::Toolbar(BScreen *scrn) {
   screen->addStrut(&strut);
 
   reconfigure();
-
-  XMapSubwindows(display, frame.window);
-  XMapWindow(display, frame.window);
+  mapToolbar();
 }
 
 
 Toolbar::~Toolbar(void) {
-  XUnmapWindow(display, frame.window);
+  unmapToolbar();
 
   if (frame.base) screen->getImageControl()->removeImage(frame.base);
   if (frame.label) screen->getImageControl()->removeImage(frame.label);
@@ -198,6 +196,25 @@ Toolbar::~Toolbar(void) {
 }
 
 
+void Toolbar::mapToolbar() {
+  if (!screen->doHideToolbar()) {
+    //not hidden, so windows should not maximize over the toolbar
+    XMapSubwindows(display, frame.window);
+    XMapWindow(display, frame.window);
+  }
+  updateStrut();
+}
+
+
+void Toolbar::unmapToolbar() {
+  if (toolbarmenu->isVisible())
+    toolbarmenu->hide();
+  //hidden so we can maximize over the toolbar
+  XUnmapWindow(display, frame.window);
+  updateStrut();
+}
+
+
 void Toolbar::saveOnTop(bool b) {
   on_top = b;
   config->setValue(toolbarstr + "onTop", on_top);
@@ -511,14 +528,21 @@ void Toolbar::updateStrut(void) {
   // left and right are always 0
   strut.top = strut.bottom = 0;
 
-  switch(placement) {
-  case TopLeft:
-  case TopCenter:
-  case TopRight:
-    strut.top = getExposedHeight() + (screen->getBorderWidth() * 2);
-    break;
-  default:
-    strut.bottom = getExposedHeight() + (screen->getBorderWidth() * 2);
+  // when hidden only one border is visible
+  unsigned int border_width = screen->getBorderWidth();
+  if (! do_auto_hide)
+    border_width *= 2;
+
+  if (! screen->doHideToolbar()) {
+    switch(placement) {
+    case TopLeft:
+    case TopCenter:
+    case TopRight:
+      strut.top = getExposedHeight() + border_width;
+      break;
+    default:
+      strut.bottom = getExposedHeight() + border_width;
+    }
   }
 
   screen->updateAvailableArea();
@@ -955,6 +979,7 @@ void Toolbar::keyPressEvent(XKeyEvent *ke) {
 
       Workspace *wkspc = screen->getCurrentWorkspace();
       wkspc->setName(new_workspace_name);
+      screen->updateDesktopNames();
       wkspc->getMenu()->hide();
 
       screen->getWorkspacemenu()->changeItemLabel(wkspc->getID() + 2,
This page took 0.024193 seconds and 4 git commands to generate.