1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- 2 // Toolbar.hh for Blackbox - an X11 Window manager 3 // Copyright (c) 2001 - 2005 Sean 'Shaleh' Perry <shaleh@debian.org> 4 // Copyright (c) 1997 - 2000, 2002 - 2005 5 // Bradley T Hughes <bhughes at trolltech.com> 6 // 7 // Permission is hereby granted, free of charge, to any person obtaining a 8 // copy of this software and associated documentation files (the "Software"), 9 // to deal in the Software without restriction, including without limitation 10 // the rights to use, copy, modify, merge, publish, distribute, sublicense, 11 // and/or sell copies of the Software, and to permit persons to whom the 12 // Software is furnished to do so, subject to the following conditions: 13 // 14 // The above copyright notice and this permission notice shall be included in 15 // all copies or substantial portions of the Software. 16 // 17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 23 // DEALINGS IN THE SOFTWARE. 24 25 #ifndef __Toolbar_hh 26 #define __Toolbar_hh 27 28 #include <Timer.hh> 29 #include <Util.hh> 30 31 #include "Screen.hh" 32 33 class Toolbar : public StackEntity, public bt::TimeoutHandler, 34 public bt::EventHandler, public bt::NoCopy 35 { 36 private: 37 bool hidden; 38 Display *display; 39 40 struct ToolbarFrame { 41 unsigned long button_pixel, pbutton_pixel; 42 Pixmap base, slabel, wlabel, clk, button, pbutton; 43 Window window, workspace_label, window_label, clock, psbutton, nsbutton, 44 pwbutton, nwbutton; 45 46 int y_hidden; 47 bt::Rect rect, slabel_rect, wlabel_rect, clock_rect, ps_rect, ns_rect, 48 pw_rect, nw_rect; 49 } frame; 50 51 Blackbox *blackbox; 52 BScreen *_screen; 53 bt::Timer *clock_timer, *hide_timer; 54 bt::EWMH::Strut strut; 55 56 int clock_timer_resolution; 57 58 std::string new_workspace_name; 59 size_t new_name_pos; 60 61 void redrawPrevWorkspaceButton(bool pressed = False); 62 void redrawNextWorkspaceButton(bool pressed = False); 63 void redrawPrevWindowButton(bool preseed = False); 64 void redrawNextWindowButton(bool preseed = False); 65 void redrawClockLabel(void); 66 67 void updateStrut(void); 68 69 public: 70 Toolbar(BScreen *scrn); 71 virtual ~Toolbar(void); 72 isHidden(void) const73 bool isHidden(void) const { return hidden; } 74 rect(void) const75 inline const bt::Rect &rect(void) const 76 { return frame.rect; } 77 78 unsigned int exposedHeight(void) const; 79 80 // StackEntity interface windowID(void) const81 Window windowID(void) const { return frame.window; } 82 83 // TimeoutHandler interface 84 void timeout(bt::Timer *timer); 85 86 // EventHandler interface 87 void buttonPressEvent(const XButtonEvent * const event); 88 void buttonReleaseEvent(const XButtonEvent * const event); 89 void enterNotifyEvent(const XCrossingEvent * const /*unused*/); 90 void leaveNotifyEvent(const XCrossingEvent * const /*unused*/); 91 void exposeEvent(const XExposeEvent * const event); 92 93 void reconfigure(void); 94 void toggleAutoHide(void); 95 96 void redrawWindowLabel(void); 97 void redrawWorkspaceLabel(void); 98 99 enum Placement { TopLeft = 1, BottomLeft, TopCenter, 100 BottomCenter, TopRight, BottomRight }; 101 102 void setPlacement(Placement placement); 103 }; 104 105 #endif // __Toolbar_hh 106