diff options
Diffstat (limited to 'src/Slit.cc')
-rw-r--r-- | src/Slit.cc | 54 |
1 files changed, 39 insertions, 15 deletions
diff --git a/src/Slit.cc b/src/Slit.cc index bb910f7..421ff79 100644 --- a/src/Slit.cc +++ b/src/Slit.cc | |||
@@ -22,7 +22,7 @@ | |||
22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
23 | // DEALINGS IN THE SOFTWARE. | 23 | // DEALINGS IN THE SOFTWARE. |
24 | 24 | ||
25 | // $Id: Slit.cc,v 1.39 2003/04/16 13:43:43 rathnor Exp $ | 25 | // $Id: Slit.cc,v 1.40 2003/04/16 16:18:02 rathnor Exp $ |
26 | 26 | ||
27 | #include "Slit.hh" | 27 | #include "Slit.hh" |
28 | 28 | ||
@@ -185,9 +185,10 @@ private: | |||
185 | 185 | ||
186 | class SlitDirMenuItem: public FbTk::MenuItem { | 186 | class SlitDirMenuItem: public FbTk::MenuItem { |
187 | public: | 187 | public: |
188 | SlitDirMenuItem(const char *label, Slit &slit):FbTk::MenuItem(label), | 188 | SlitDirMenuItem(const char *label, Slit &slit, FbTk::RefCount<FbTk::Command> &cmd) |
189 | m_slit(slit), | 189 | :FbTk::MenuItem(label,cmd), |
190 | m_label(label ? label : "") { | 190 | m_slit(slit), |
191 | m_label(label ? label : "") { | ||
191 | setLabel(m_label.c_str()); // update label | 192 | setLabel(m_label.c_str()); // update label |
192 | } | 193 | } |
193 | void click(int button, int time) { | 194 | void click(int button, int time) { |
@@ -197,6 +198,7 @@ public: | |||
197 | else | 198 | else |
198 | m_slit.setDirection(Slit::HORIZONTAL); | 199 | m_slit.setDirection(Slit::HORIZONTAL); |
199 | setLabel(m_label.c_str()); | 200 | setLabel(m_label.c_str()); |
201 | FbTk::MenuItem::click(button, time); | ||
200 | } | 202 | } |
201 | 203 | ||
202 | void setLabel(const char *label) { | 204 | void setLabel(const char *label) { |
@@ -219,13 +221,14 @@ private: | |||
219 | 221 | ||
220 | class PlaceSlitMenuItem: public FbTk::MenuItem { | 222 | class PlaceSlitMenuItem: public FbTk::MenuItem { |
221 | public: | 223 | public: |
222 | PlaceSlitMenuItem(const char *label, Slit &slit, Slit::Placement place): | 224 | PlaceSlitMenuItem(const char *label, Slit &slit, Slit::Placement place, FbTk::RefCount<FbTk::Command> &cmd): |
223 | FbTk::MenuItem(label), m_slit(slit), m_place(place) { | 225 | FbTk::MenuItem(label, cmd), m_slit(slit), m_place(place) { |
224 | 226 | ||
225 | } | 227 | } |
226 | bool isEnabled() const { return m_slit.placement() != m_place; } | 228 | bool isEnabled() const { return m_slit.placement() != m_place; } |
227 | void click(int button, int time) { | 229 | void click(int button, int time) { |
228 | m_slit.setPlacement(m_place); | 230 | m_slit.setPlacement(m_place); |
231 | FbTk::MenuItem::click(button, time); | ||
229 | } | 232 | } |
230 | private: | 233 | private: |
231 | Slit &m_slit; | 234 | Slit &m_slit; |
@@ -258,9 +261,9 @@ Slit::Slit(BScreen &scr, FbTk::XLayer &layer, const char *filename) | |||
258 | true)); | 261 | true)); |
259 | 262 | ||
260 | // default placement and direction | 263 | // default placement and direction |
261 | m_direction = HORIZONTAL; | 264 | m_direction = screen().getSlitDirection(); |
262 | m_placement = BOTTOMRIGHT; | 265 | m_placement = screen().getSlitPlacement(); |
263 | hidden = do_auto_hide = false; | 266 | hidden = do_auto_hide = screen().doSlitAutoHide(); |
264 | 267 | ||
265 | frame.pixmap = None; | 268 | frame.pixmap = None; |
266 | 269 | ||
@@ -456,11 +459,13 @@ void Slit::addClient(Window w) { | |||
456 | 459 | ||
457 | void Slit::setDirection(Direction dir) { | 460 | void Slit::setDirection(Direction dir) { |
458 | m_direction = dir; | 461 | m_direction = dir; |
462 | screen().saveSlitDirection(dir); | ||
459 | reconfigure(); | 463 | reconfigure(); |
460 | } | 464 | } |
461 | 465 | ||
462 | void Slit::setPlacement(Placement place) { | 466 | void Slit::setPlacement(Placement place) { |
463 | m_placement = place; | 467 | m_placement = place; |
468 | screen().saveSlitPlacement(place); | ||
464 | reconfigure(); | 469 | reconfigure(); |
465 | } | 470 | } |
466 | 471 | ||
@@ -533,6 +538,9 @@ void Slit::reconfigure() { | |||
533 | frame.width = 0; | 538 | frame.width = 0; |
534 | frame.height = 0; | 539 | frame.height = 0; |
535 | 540 | ||
541 | // be sure to sync slit auto hide up with the screen's menu resource | ||
542 | do_auto_hide = screen().doSlitAutoHide(); | ||
543 | |||
536 | // Need to count windows because not all client list entries | 544 | // Need to count windows because not all client list entries |
537 | // actually correspond to mapped windows. | 545 | // actually correspond to mapped windows. |
538 | int num_windows = 0; | 546 | int num_windows = 0; |
@@ -1091,6 +1099,7 @@ void Slit::saveClientList() { | |||
1091 | 1099 | ||
1092 | void Slit::setAutoHide(bool val) { | 1100 | void Slit::setAutoHide(bool val) { |
1093 | do_auto_hide = val; | 1101 | do_auto_hide = val; |
1102 | screen().saveSlitAutoHide(val); | ||
1094 | } | 1103 | } |
1095 | 1104 | ||
1096 | void Slit::setupMenu() { | 1105 | void Slit::setupMenu() { |
@@ -1098,7 +1107,14 @@ void Slit::setupMenu() { | |||
1098 | using namespace FBNLS; | 1107 | using namespace FBNLS; |
1099 | using namespace FbTk; | 1108 | using namespace FbTk; |
1100 | 1109 | ||
1101 | RefCount<Command> menu_cmd(new SimpleCommand<Slit>(*this, &Slit::reconfigure)); | 1110 | FbTk::MacroCommand *s_a_reconf_macro = new FbTk::MacroCommand(); |
1111 | FbTk::RefCount<FbTk::Command> saverc_cmd(new FbTk::SimpleCommand<Fluxbox>(*Fluxbox::instance(), | ||
1112 | &Fluxbox::save_rc)); | ||
1113 | FbTk::RefCount<FbTk::Command> reconf_cmd(new FbCommands::ReconfigureFluxboxCmd()); | ||
1114 | s_a_reconf_macro->add(saverc_cmd); | ||
1115 | s_a_reconf_macro->add(reconf_cmd); | ||
1116 | FbTk::RefCount<FbTk::Command> save_and_reconfigure(s_a_reconf_macro); | ||
1117 | |||
1102 | // setup base menu | 1118 | // setup base menu |
1103 | slitmenu.setLabel("Slit"); | 1119 | slitmenu.setLabel("Slit"); |
1104 | slitmenu.insert(i18n->getMessage( | 1120 | slitmenu.insert(i18n->getMessage( |
@@ -1111,12 +1127,14 @@ void Slit::setupMenu() { | |||
1111 | slitmenu.insert(new BoolMenuItem(i18n->getMessage( | 1127 | slitmenu.insert(new BoolMenuItem(i18n->getMessage( |
1112 | CommonSet, CommonAutoHide, | 1128 | CommonSet, CommonAutoHide, |
1113 | "Auto hide"), | 1129 | "Auto hide"), |
1114 | do_auto_hide, | 1130 | screen().doSlitAutoHide(), |
1115 | menu_cmd)); | 1131 | save_and_reconfigure)); |
1116 | 1132 | ||
1117 | slitmenu.insert(new SlitDirMenuItem(i18n->getMessage( | 1133 | slitmenu.insert(new SlitDirMenuItem(i18n->getMessage( |
1118 | SlitSet, SlitSlitDirection, | 1134 | SlitSet, SlitSlitDirection, |
1119 | "Slit Direction"), *this)); | 1135 | "Slit Direction"), |
1136 | *this, | ||
1137 | save_and_reconfigure)); | ||
1120 | slitmenu.insert("Clients", &clientlist_menu); | 1138 | slitmenu.insert("Clients", &clientlist_menu); |
1121 | slitmenu.update(); | 1139 | slitmenu.update(); |
1122 | 1140 | ||
@@ -1156,9 +1174,15 @@ void Slit::setupMenu() { | |||
1156 | place_menu[i].base, | 1174 | place_menu[i].base, |
1157 | place_menu[i].default_str); | 1175 | place_menu[i].default_str); |
1158 | placement_menu.insert(new PlaceSlitMenuItem(i18n_str, *this, | 1176 | placement_menu.insert(new PlaceSlitMenuItem(i18n_str, *this, |
1159 | place_menu[i].slit_placement)); | 1177 | place_menu[i].slit_placement, |
1178 | save_and_reconfigure)); | ||
1160 | } | 1179 | } |
1161 | } | 1180 | } |
1162 | // finaly update sub menu | 1181 | // finaly update sub menu |
1163 | placement_menu.update(); | 1182 | placement_menu.update(); |
1164 | } | 1183 | } |
1184 | |||
1185 | void Slit::moveToLayer(int layernum) { | ||
1186 | m_layeritem->moveToLayer(layernum); | ||
1187 | m_screen.saveSlitLayer((Fluxbox::Layer) layernum); | ||
1188 | } | ||