]> Dogcows Code - chaz/openbox/blobdiff - src/Toolbar.cc
testing whether i caused a bug with this code
[chaz/openbox] / src / Toolbar.cc
index f6ff130a8d633bdf6f381d7e6c982e90d19c2bd3..955eb5a05223ed47384a204c2e7a2a2f187fa2de 100644 (file)
@@ -53,16 +53,14 @@ using std::string;
 
 #include "i18n.hh"
 #include "blackbox.hh"
-#include "Clientmenu.hh"
 #include "Font.hh"
 #include "GCCache.hh"
-#include "Iconmenu.hh"
 #include "Image.hh"
-#include "Rootmenu.hh"
 #include "Screen.hh"
 #include "Toolbar.hh"
 #include "Window.hh"
 #include "Workspace.hh"
+#include "Clientmenu.hh"
 #include "Workspacemenu.hh"
 #include "Slit.hh"
 
@@ -77,8 +75,8 @@ static long aMinuteFromNow(void) {
 Toolbar::Toolbar(BScreen *scrn) {
   screen = scrn;
   blackbox = screen->getBlackbox();
-  toolbarstr = (string)"session.screen" + itostring(screen->getScreenNumber())
-    ".toolbar.";
+  toolbarstr = "session.screen" + itostring(screen->getScreenNumber()) +
+    ".toolbar.";
   config = blackbox->getConfig();
 
   load_rc();
@@ -96,7 +94,6 @@ Toolbar::Toolbar(BScreen *scrn) {
 
   editing = False;
   new_name_pos = 0;
-  frame.grab_x = frame.grab_y = 0;
 
   toolbarmenu = new Toolbarmenu(this);
 
@@ -159,8 +156,6 @@ Toolbar::Toolbar(BScreen *scrn) {
   frame.base = frame.label = frame.wlabel = frame.clk = frame.button =
     frame.pbutton = None;
 
-  screen->addStrut(&strut);
-
   reconfigure();
   mapToolbar();
 }
@@ -203,6 +198,7 @@ void Toolbar::mapToolbar() {
     XMapSubwindows(display, frame.window);
     XMapWindow(display, frame.window);
   }
+  screen->addStrut(&strut);
   updateStrut();
 }
 
@@ -211,6 +207,9 @@ void Toolbar::unmapToolbar() {
   if (toolbarmenu->isVisible())
     toolbarmenu->hide();
   //hidden so we can maximize over the toolbar
+  screen->removeStrut(&strut);
+  screen->updateAvailableArea();
+
   XUnmapWindow(display, frame.window);
   updateStrut();
 }
@@ -623,6 +622,32 @@ void Toolbar::redrawWorkspaceLabel(bool redraw) {
 }
 
 
+void Toolbar::drawArrow(Drawable surface, bool left) const {
+  int hh = frame.button_w / 2, hw = frame.button_w / 2;
+  XPoint pts[3];
+  const int bullet_size = 3;
+
+  if (left) {
+    pts[0].x = hw - bullet_size;
+    pts[0].y = hh;
+    pts[1].x = 2 * bullet_size;
+    pts[1].y = bullet_size;
+    pts[2].x = 0;
+    pts[2].y = -(2 * bullet_size);
+  } else {
+    pts[0].x = hw - bullet_size;
+    pts[0].y = hh - bullet_size;
+    pts[1].x = (2 * bullet_size);
+    pts[1].y =  bullet_size;
+    pts[2].x = -(2 * bullet_size);
+    pts[2].y = bullet_size;
+  }
+  
+  BPen pen(screen->getToolbarStyle()->b_pic);
+  XFillPolygon(display, surface, pen.gc(), pts, 3, Convex, CoordModePrevious);
+}
+
+
 void Toolbar::redrawPrevWorkspaceButton(bool pressed, bool redraw) {
   if (redraw) {
     if (pressed) {
@@ -639,17 +664,7 @@ void Toolbar::redrawPrevWorkspaceButton(bool pressed, bool redraw) {
     XClearWindow(display, frame.psbutton);
   }
 
-  int hh = frame.button_w / 2, hw = frame.button_w / 2;
-
-  XPoint pts[3];
-  pts[0].x = hw - 2; pts[0].y = hh;
-  pts[1].x = 4; pts[1].y = 2;
-  pts[2].x = 0; pts[2].y = -4;
-
-  ToolbarStyle *style = screen->getToolbarStyle();
-  BPen pen(style->b_pic);
-  XFillPolygon(display, frame.psbutton, pen.gc(),
-               pts, 3, Convex, CoordModePrevious);
+  drawArrow(frame.psbutton, True);
 }
 
 
@@ -669,17 +684,7 @@ void Toolbar::redrawNextWorkspaceButton(bool pressed, bool redraw) {
     XClearWindow(display, frame.nsbutton);
   }
 
-  int hh = frame.button_w / 2, hw = frame.button_w / 2;
-
-  XPoint pts[3];
-  pts[0].x = hw - 2; pts[0].y = hh - 2;
-  pts[1].x = 4; pts[1].y =  2;
-  pts[2].x = -4; pts[2].y = 2;
-
-  ToolbarStyle *style = screen->getToolbarStyle();
-  BPen pen(style->b_pic);
-  XFillPolygon(display, frame.nsbutton, pen.gc(),
-               pts, 3, Convex, CoordModePrevious);
+  drawArrow(frame.nsbutton, False);
 }
 
 
@@ -699,17 +704,7 @@ void Toolbar::redrawPrevWindowButton(bool pressed, bool redraw) {
     XClearWindow(display, frame.pwbutton);
   }
 
-  int hh = frame.button_w / 2, hw = frame.button_w / 2;
-
-  XPoint pts[3];
-  pts[0].x = hw - 2; pts[0].y = hh;
-  pts[1].x = 4; pts[1].y = 2;
-  pts[2].x = 0; pts[2].y = -4;
-
-  ToolbarStyle *style = screen->getToolbarStyle();
-  BPen pen(style->b_pic);
-  XFillPolygon(display, frame.pwbutton, pen.gc(),
-               pts, 3, Convex, CoordModePrevious);
+  drawArrow(frame.pwbutton, True);
 }
 
 
@@ -729,17 +724,7 @@ void Toolbar::redrawNextWindowButton(bool pressed, bool redraw) {
     XClearWindow(display, frame.nwbutton);
   }
 
-  int hh = frame.button_w / 2, hw = frame.button_w / 2;
-
-  XPoint pts[3];
-  pts[0].x = hw - 2; pts[0].y = hh - 2;
-  pts[1].x = 4; pts[1].y =  2;
-  pts[2].x = -4; pts[2].y = 2;
-
-  ToolbarStyle *style = screen->getToolbarStyle();
-  BPen pen(style->b_pic);
-  XFillPolygon(display, frame.nwbutton, pen.gc(), pts, 3, Convex,
-               CoordModePrevious);
+  drawArrow(frame.nwbutton, False);
 }
 
 
@@ -777,7 +762,7 @@ void Toolbar::edit(void) {
 }
 
 
-void Toolbar::buttonPressEvent(XButtonEvent *be) {
+void Toolbar::buttonPressEvent(const XButtonEvent *be) {
   if (be->button == 1) {
     if (be->window == frame.psbutton)
       redrawPrevWorkspaceButton(True, True);
@@ -826,7 +811,7 @@ void Toolbar::buttonPressEvent(XButtonEvent *be) {
 
 
 
-void Toolbar::buttonReleaseEvent(XButtonEvent *re) {
+void Toolbar::buttonReleaseEvent(const XButtonEvent *re) {
   if (re->button == 1) {
     if (re->window == frame.psbutton) {
       redrawPrevWorkspaceButton(False, True);
@@ -873,7 +858,7 @@ void Toolbar::buttonReleaseEvent(XButtonEvent *re) {
 }
 
 
-void Toolbar::enterNotifyEvent(XCrossingEvent *) {
+void Toolbar::enterNotifyEvent(const XCrossingEvent *) {
   if (! do_auto_hide)
     return;
 
@@ -884,7 +869,7 @@ void Toolbar::enterNotifyEvent(XCrossingEvent *) {
   }
 }
 
-void Toolbar::leaveNotifyEvent(XCrossingEvent *) {
+void Toolbar::leaveNotifyEvent(const XCrossingEvent *) {
   if (! do_auto_hide)
     return;
 
@@ -896,7 +881,7 @@ void Toolbar::leaveNotifyEvent(XCrossingEvent *) {
 }
 
 
-void Toolbar::exposeEvent(XExposeEvent *ee) {
+void Toolbar::exposeEvent(const XExposeEvent *ee) {
   if (ee->window == frame.clock) checkClock(True);
   else if (ee->window == frame.workspace_label && (! editing))
     redrawWorkspaceLabel();
@@ -908,7 +893,7 @@ void Toolbar::exposeEvent(XExposeEvent *ee) {
 }
 
 
-void Toolbar::keyPressEvent(XKeyEvent *ke) {
+void Toolbar::keyPressEvent(const XKeyEvent *ke) {
   if (ke->window == frame.workspace_label && editing) {
     if (new_workspace_name.empty()) {
       new_name_pos = 0;
@@ -916,26 +901,21 @@ void Toolbar::keyPressEvent(XKeyEvent *ke) {
 
     KeySym ks;
     char keychar[1];
-    XLookupString(ke, keychar, 1, &ks, 0);
+    XLookupString(const_cast<XKeyEvent*>(ke), keychar, 1, &ks, 0);
 
     // either we are told to end with a return or we hit 127 chars
     if (ks == XK_Return || new_name_pos == 127) {
       editing = False;
 
       blackbox->setNoFocus(False);
-      if (blackbox->getFocusedWindow()) {
+      if (blackbox->getFocusedWindow())
         blackbox->getFocusedWindow()->setInputFocus();
-      } else {
+      else
         blackbox->setFocusedWindow(0);
-      }
-
-      Workspace *wkspc = screen->getCurrentWorkspace();
-      wkspc->setName(new_workspace_name);
-      wkspc->getMenu()->hide();
 
-      screen->getWorkspacemenu()->changeItemLabel(wkspc->getID() + 2,
-                                                  wkspc->getName());
-      screen->getWorkspacemenu()->update();
+      // the toolbar will be reconfigured when the change to the workspace name
+      // gets caught in the PropertyNotify event handler
+      screen->getCurrentWorkspace()->setName(new_workspace_name);
 
       new_workspace_name.erase();
       new_name_pos = 0;
@@ -951,7 +931,6 @@ void Toolbar::keyPressEvent(XKeyEvent *ke) {
       else
         XSetWindowBackgroundPixmap(display, frame.workspace_label,
                                    frame.wlabel);
-      reconfigure();
     } else if (! (ks == XK_Shift_L || ks == XK_Shift_R ||
                   ks == XK_Control_L || ks == XK_Control_R ||
                   ks == XK_Caps_Lock || ks == XK_Shift_Lock ||
This page took 0.02864 seconds and 4 git commands to generate.