1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- 2 // BlackboxResource.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 __BlackboxResource_hh 26 #define __BlackboxResource_hh 27 28 #include "ScreenResource.hh" 29 30 #include <Timer.hh> 31 #include <Util.hh> 32 33 class Blackbox; 34 35 enum FocusModel { 36 SloppyFocusModel, 37 ClickToFocusModel 38 }; 39 40 enum WindowPlacementPolicy { 41 RowSmartPlacement = 400, 42 ColSmartPlacement, 43 CenterPlacement, 44 CascadePlacement, 45 LeftRight, 46 RightLeft, 47 TopBottom, 48 BottomTop 49 }; 50 51 struct Cursors { 52 Cursor pointer; 53 Cursor move; 54 Cursor resize_top_left; 55 Cursor resize_bottom_left; 56 Cursor resize_top_right; 57 Cursor resize_bottom_right; 58 }; 59 60 class BlackboxResource: public bt::NoCopy { 61 private: 62 ScreenResource *screen_resources; 63 64 Cursors _cursors; 65 66 std::string menu_file, style_file, rc_file; 67 Time double_click_interval; 68 bt::timeval auto_raise_delay; 69 70 FocusModel focus_model; 71 int window_placement_policy; 72 int row_direction, col_direction; 73 bool ignore_shaded; 74 bool auto_raise; 75 bool click_raise; 76 bool opaque_move; 77 bool opaque_resize; 78 bool full_max; 79 bool focus_new_windows; 80 bool focus_last_window_on_workspace; 81 bool allow_scroll_lock; 82 bool change_workspace_with_mouse_wheel; 83 bool shade_window_with_mouse_wheel; 84 bool toolbar_actions_with_mouse_wheel; 85 unsigned int edge_snap_threshold; 86 unsigned int window_snap_threshold; 87 88 public: 89 BlackboxResource(const std::string& rc); 90 ~BlackboxResource(void); 91 92 void load(Blackbox& blackbox); 93 void save(Blackbox& blackbox); 94 screenResource(unsigned int screen)95 inline ScreenResource &screenResource(unsigned int screen) 96 { return screen_resources[screen]; } 97 cursors(void) const98 inline const Cursors &cursors(void) const 99 { return _cursors; } 100 rcFilename(void) const101 inline const char* rcFilename(void) const 102 { return rc_file.c_str(); } menuFilename(void) const103 inline const char* menuFilename(void) const 104 { return menu_file.c_str(); } styleFilename(void) const105 inline const char* styleFilename(void) const 106 { return style_file.c_str(); } 107 saveStyleFilename(const std::string & name)108 inline void saveStyleFilename(const std::string& name) 109 { style_file = name; } 110 doubleClickInterval(void) const111 inline Time doubleClickInterval(void) const 112 { return double_click_interval; } autoRaiseDelay(void) const113 inline const bt::timeval& autoRaiseDelay(void) const 114 { return auto_raise_delay; } 115 116 // window focus model focusModel(void) const117 inline FocusModel focusModel(void) const 118 { return focus_model; } setFocusModel(FocusModel fm)119 inline void setFocusModel(FocusModel fm) 120 { focus_model = fm; } 121 autoRaise(void) const122 inline bool autoRaise(void) const 123 { return auto_raise; } setAutoRaise(bool b=true)124 inline void setAutoRaise(bool b = true) 125 { auto_raise = b; } 126 clickRaise(void) const127 inline bool clickRaise(void) const 128 { return click_raise; } setClickRaise(bool b=true)129 inline void setClickRaise(bool b = true) 130 { click_raise = b; } 131 132 // window placement windowPlacementPolicy(void) const133 inline int windowPlacementPolicy(void) const 134 { return window_placement_policy; } setWindowPlacementPolicy(int p)135 inline void setWindowPlacementPolicy(int p) 136 { window_placement_policy = p; } 137 rowPlacementDirection(void) const138 inline int rowPlacementDirection(void) const 139 { return row_direction; } setRowPlacementDirection(int d)140 inline void setRowPlacementDirection(int d) 141 { row_direction = d; } 142 colPlacementDirection(void) const143 inline int colPlacementDirection(void) const 144 { return col_direction; } setColPlacementDirection(int d)145 inline void setColPlacementDirection(int d) 146 { col_direction = d; } 147 placementIgnoresShaded(void) const148 inline bool placementIgnoresShaded(void) const 149 { return ignore_shaded; } setPlacementIgnoresShaded(bool f)150 inline void setPlacementIgnoresShaded(bool f) 151 { ignore_shaded = f; } 152 153 // other window options opaqueMove(void) const154 inline bool opaqueMove(void) const 155 { return opaque_move; } setOpaqueMove(bool b=true)156 inline void setOpaqueMove(bool b = true) 157 { opaque_move = b; } 158 opaqueResize(void) const159 inline bool opaqueResize(void) const 160 { return opaque_resize; } setOpaqueResize(bool b=true)161 inline void setOpaqueResize(bool b = true) 162 { opaque_resize = b; } 163 fullMaximization(void) const164 inline bool fullMaximization(void) const 165 { return full_max; } setFullMaximization(bool b=true)166 inline void setFullMaximization(bool b = true) 167 { full_max = b; } 168 focusNewWindows(void) const169 inline bool focusNewWindows(void) const 170 { return focus_new_windows; } setFocusNewWindows(bool b=true)171 inline void setFocusNewWindows(bool b = true) 172 { focus_new_windows = b; } 173 focusLastWindowOnWorkspace(void) const174 inline bool focusLastWindowOnWorkspace(void) const 175 { return focus_last_window_on_workspace; } setFocusLastWindowOnWorkspace(bool b=true)176 inline void setFocusLastWindowOnWorkspace(bool b = true) 177 { focus_last_window_on_workspace = b; } 178 changeWorkspaceWithMouseWheel(void) const179 inline bool changeWorkspaceWithMouseWheel(void) const 180 { return change_workspace_with_mouse_wheel; } setChangeWorkspaceWithMouseWheel(bool b=true)181 inline void setChangeWorkspaceWithMouseWheel(bool b = true) 182 { change_workspace_with_mouse_wheel = b; } 183 shadeWindowWithMouseWheel(void) const184 inline bool shadeWindowWithMouseWheel(void) const 185 { return shade_window_with_mouse_wheel; } setShadeWindowWithMouseWheel(bool b=true)186 inline void setShadeWindowWithMouseWheel(bool b = true) 187 { shade_window_with_mouse_wheel = b; } 188 toolbarActionsWithMouseWheel(void) const189 inline bool toolbarActionsWithMouseWheel(void) const 190 { return toolbar_actions_with_mouse_wheel; } setToolbarActionsWithMouseWheel(bool b=true)191 inline void setToolbarActionsWithMouseWheel(bool b = true) 192 { toolbar_actions_with_mouse_wheel = b; } 193 allowScrollLock(void) const194 inline bool allowScrollLock(void) const 195 { return allow_scroll_lock; } setAllowScrollLock(bool a)196 inline void setAllowScrollLock(bool a) 197 { allow_scroll_lock = a; } 198 edgeSnapThreshold(void) const199 inline unsigned int edgeSnapThreshold(void) const 200 { return edge_snap_threshold; } setEdgeSnapThreshold(unsigned int t)201 inline void setEdgeSnapThreshold(unsigned int t) 202 { edge_snap_threshold = t; } 203 windowSnapThreshold(void) const204 inline unsigned int windowSnapThreshold(void) const 205 { return window_snap_threshold; } setWindowSnapThreshold(unsigned int t)206 inline void setWindowSnapThreshold(unsigned int t) 207 { window_snap_threshold = t; } 208 }; 209 210 #endif 211