diff options
Diffstat (limited to 'src/Remember.cc')
-rw-r--r-- | src/Remember.cc | 126 |
1 files changed, 57 insertions, 69 deletions
diff --git a/src/Remember.cc b/src/Remember.cc index 77cc889..f946ad0 100644 --- a/src/Remember.cc +++ b/src/Remember.cc | |||
@@ -34,6 +34,7 @@ | |||
34 | #include "Debug.hh" | 34 | #include "Debug.hh" |
35 | 35 | ||
36 | #include "FbTk/I18n.hh" | 36 | #include "FbTk/I18n.hh" |
37 | #include "FbTk/FbString.hh" | ||
37 | #include "FbTk/StringUtil.hh" | 38 | #include "FbTk/StringUtil.hh" |
38 | #include "FbTk/FileUtil.hh" | 39 | #include "FbTk/FileUtil.hh" |
39 | #include "FbTk/MenuItem.hh" | 40 | #include "FbTk/MenuItem.hh" |
@@ -256,8 +257,8 @@ string escapeRememberChars(const string& str) { | |||
256 | 257 | ||
257 | class RememberMenuItem : public FbTk::MenuItem { | 258 | class RememberMenuItem : public FbTk::MenuItem { |
258 | public: | 259 | public: |
259 | RememberMenuItem(const FbTk::FbString &label, | 260 | RememberMenuItem(const FbTk::BiDiString &label, |
260 | Remember::Attribute attrib) : | 261 | const Remember::Attribute attrib) : |
261 | FbTk::MenuItem(label), | 262 | FbTk::MenuItem(label), |
262 | m_attrib(attrib) { | 263 | m_attrib(attrib) { |
263 | setToggleItem(true); | 264 | setToggleItem(true); |
@@ -270,8 +271,7 @@ public: | |||
270 | 271 | ||
271 | if (FbMenu::window()->numClients()) // ensure it HAS clients | 272 | if (FbMenu::window()->numClients()) // ensure it HAS clients |
272 | return Remember::instance().isRemembered(FbMenu::window()->winClient(), m_attrib); | 273 | return Remember::instance().isRemembered(FbMenu::window()->winClient(), m_attrib); |
273 | else | 274 | return false; |
274 | return false; | ||
275 | } | 275 | } |
276 | 276 | ||
277 | bool isEnabled() const { | 277 | bool isEnabled() const { |
@@ -282,21 +282,22 @@ public: | |||
282 | return true; | 282 | return true; |
283 | else if (FbMenu::window()->numClients()) | 283 | else if (FbMenu::window()->numClients()) |
284 | return (Remember::instance().isRemembered(FbMenu::window()->winClient(), Remember::REM_WORKSPACE)); | 284 | return (Remember::instance().isRemembered(FbMenu::window()->winClient(), Remember::REM_WORKSPACE)); |
285 | else | 285 | return false; |
286 | return false; | ||
287 | } | 286 | } |
288 | 287 | ||
289 | void click(int button, int time, unsigned int mods) { | 288 | void click(int button, int time, unsigned int mods) { |
290 | // reconfigure only does stuff if the apps file has changed | 289 | // reconfigure only does stuff if the apps file has changed |
291 | Remember::instance().checkReload(); | 290 | Remember& r = Remember::instance(); |
291 | r.checkReload(); | ||
292 | if (FbMenu::window() != 0) { | 292 | if (FbMenu::window() != 0) { |
293 | WinClient wc = FbMenu::window()->winClient(); | ||
293 | if (isSelected()) { | 294 | if (isSelected()) { |
294 | Remember::instance().forgetAttrib(FbMenu::window()->winClient(), m_attrib); | 295 | r.forgetAttrib(wc, m_attrib); |
295 | } else { | 296 | } else { |
296 | Remember::instance().rememberAttrib(FbMenu::window()->winClient(), m_attrib); | 297 | r.rememberAttrib(wc, m_attrib); |
297 | } | 298 | } |
298 | } | 299 | } |
299 | Remember::instance().save(); | 300 | r.save(); |
300 | FbTk::MenuItem::click(button, time, mods); | 301 | FbTk::MenuItem::click(button, time, mods); |
301 | } | 302 | } |
302 | 303 | ||
@@ -305,51 +306,38 @@ private: | |||
305 | }; | 306 | }; |
306 | 307 | ||
307 | FbTk::Menu *createRememberMenu(BScreen &screen) { | 308 | FbTk::Menu *createRememberMenu(BScreen &screen) { |
309 | |||
310 | _FB_USES_NLS; | ||
311 | |||
312 | typedef struct { bool is_alpha; const FbTk::BiDiString label; Remember::Attribute attr; } MenuEntry; | ||
313 | static const MenuEntry _entries[] = { | ||
314 | { false, _FB_XTEXT(Remember, Workspace, "Workspace", "Remember Workspace"), Remember::REM_WORKSPACE }, | ||
315 | { false, _FB_XTEXT(Remember, JumpToWorkspace, "Jump to workspace", "Change active workspace to remembered one on open"), Remember::REM_JUMPWORKSPACE }, | ||
316 | { false, _FB_XTEXT(Remember, Head, "Head", "Remember Head"), Remember::REM_HEAD}, | ||
317 | { false, _FB_XTEXT(Remember, Dimensions, "Dimensions", "Remember Dimensions - with width and height"), Remember::REM_DIMENSIONS}, | ||
318 | { false, _FB_XTEXT(Remember, Position, "Position", "Remember position - window co-ordinates"), Remember::REM_POSITION}, | ||
319 | { false, _FB_XTEXT(Remember, Sticky, "Sticky", "Remember Sticky"), Remember::REM_STUCKSTATE}, | ||
320 | { false, _FB_XTEXT(Remember, Decorations, "Decorations", "Remember window decorations"), Remember::REM_DECOSTATE}, | ||
321 | { false, _FB_XTEXT(Remember, Shaded, "Shaded", "Remember shaded"), Remember::REM_SHADEDSTATE}, | ||
322 | { false, _FB_XTEXT(Remember, Minimized, "Minimized", "Remember minimized"), Remember::REM_MINIMIZEDSTATE}, | ||
323 | { false, _FB_XTEXT(Remember, Maximized, "Maximized", "Remember maximized"), Remember::REM_MAXIMIZEDSTATE}, | ||
324 | { false, _FB_XTEXT(Remember, Fullscreen, "Fullscreen", "Remember fullscreen"), Remember::REM_FULLSCREENSTATE}, | ||
325 | { true, _FB_XTEXT(Remember, Alpha, "Transparency", "Remember window tranparency settings"), Remember::REM_ALPHA}, | ||
326 | { false, _FB_XTEXT(Remember, Layer, "Layer", "Remember Layer"), Remember::REM_LAYER}, | ||
327 | { false, _FB_XTEXT(Remember, SaveOnClose, "Save on close", "Save remembered attributes on close"), Remember::REM_SAVEONCLOSE} | ||
328 | }; | ||
329 | bool needs_alpha = (FbTk::Transparent::haveComposite() || FbTk::Transparent::haveRender()); | ||
330 | |||
308 | // each fluxboxwindow has its own windowmenu | 331 | // each fluxboxwindow has its own windowmenu |
309 | // so we also create a remember menu just for it... | 332 | // so we also create a remember menu just for it... |
310 | FbTk::Menu *menu = MenuCreator::createMenu("Remember", screen); | 333 | FbTk::Menu *menu = MenuCreator::createMenu("Remember", screen); |
311 | 334 | size_t i; | |
312 | // if enabled, then we want this to be a unavailable menu | 335 | for (i = 0; i < sizeof(_entries)/sizeof(_entries[0]); i++) { |
313 | /* | 336 | if (_entries[i].is_alpha && !needs_alpha) { // skip alpha-entry when not needed |
314 | if (!enabled) { | 337 | continue; |
315 | FbTk::MenuItem *item = new FbTk::MenuItem("unavailable"); | 338 | } |
316 | item->setEnabled(false); | 339 | menu->insertItem(new RememberMenuItem(_entries[i].label, _entries[i].attr)); |
317 | menu->insert(item); | ||
318 | menu->updateMenu(); | ||
319 | return menu; | ||
320 | } | 340 | } |
321 | */ | ||
322 | _FB_USES_NLS; | ||
323 | menu->insertItem(new RememberMenuItem(_FB_XTEXT(Remember, Workspace, "Workspace", "Remember Workspace"), | ||
324 | Remember::REM_WORKSPACE)); | ||
325 | menu->insertItem(new RememberMenuItem(_FB_XTEXT(Remember, JumpToWorkspace, "Jump to workspace", "Change active workspace to remembered one on open"), | ||
326 | Remember::REM_JUMPWORKSPACE)); | ||
327 | menu->insertItem(new RememberMenuItem(_FB_XTEXT(Remember, Head, "Head", "Remember Head"), | ||
328 | Remember::REM_HEAD)); | ||
329 | menu->insertItem(new RememberMenuItem(_FB_XTEXT(Remember, Dimensions, "Dimensions", "Remember Dimensions - with width and height"), | ||
330 | Remember::REM_DIMENSIONS)); | ||
331 | menu->insertItem(new RememberMenuItem(_FB_XTEXT(Remember, Position, "Position", "Remember position - window co-ordinates"), | ||
332 | Remember::REM_POSITION)); | ||
333 | menu->insertItem(new RememberMenuItem(_FB_XTEXT(Remember, Sticky, "Sticky", "Remember Sticky"), | ||
334 | Remember::REM_STUCKSTATE)); | ||
335 | menu->insertItem(new RememberMenuItem(_FB_XTEXT(Remember, Decorations, "Decorations", "Remember window decorations"), | ||
336 | Remember::REM_DECOSTATE)); | ||
337 | menu->insertItem(new RememberMenuItem(_FB_XTEXT(Remember, Shaded, "Shaded", "Remember shaded"), | ||
338 | Remember::REM_SHADEDSTATE)); | ||
339 | menu->insertItem(new RememberMenuItem(_FB_XTEXT(Remember, Minimized, "Minimized", "Remember minimized"), | ||
340 | Remember::REM_MINIMIZEDSTATE)); | ||
341 | menu->insertItem(new RememberMenuItem(_FB_XTEXT(Remember, Maximized, "Maximized", "Remember maximized"), | ||
342 | Remember::REM_MAXIMIZEDSTATE)); | ||
343 | menu->insertItem(new RememberMenuItem(_FB_XTEXT(Remember, Fullscreen, "Fullscreen", "Remember fullscreen"), | ||
344 | Remember::REM_FULLSCREENSTATE)); | ||
345 | if (FbTk::Transparent::haveComposite() | ||
346 | || FbTk::Transparent::haveRender()) | ||
347 | menu->insertItem(new RememberMenuItem(_FB_XTEXT(Remember, Alpha, "Transparency", "Remember window tranparency settings"), | ||
348 | Remember::REM_ALPHA)); | ||
349 | menu->insertItem(new RememberMenuItem(_FB_XTEXT(Remember, Layer, "Layer", "Remember Layer"), | ||
350 | Remember::REM_LAYER)); | ||
351 | menu->insertItem(new RememberMenuItem(_FB_XTEXT(Remember, SaveOnClose, "Save on close", "Save remembered attributes on close"), | ||
352 | Remember::REM_SAVEONCLOSE)); | ||
353 | 341 | ||
354 | menu->updateMenu(); | 342 | menu->updateMenu(); |
355 | return menu; | 343 | return menu; |
@@ -462,6 +450,7 @@ int parseApp(ifstream &file, Application &app, string *first_line = 0) { | |||
462 | continue; //read next line | 450 | continue; //read next line |
463 | 451 | ||
464 | str_key = FbTk::StringUtil::toLower(str_key); | 452 | str_key = FbTk::StringUtil::toLower(str_key); |
453 | str_label = FbTk::StringUtil::toLower(str_label); | ||
465 | 454 | ||
466 | if (str_key == "workspace") { | 455 | if (str_key == "workspace") { |
467 | unsigned int w; | 456 | unsigned int w; |
@@ -481,7 +470,7 @@ int parseApp(ifstream &file, Application &app, string *first_line = 0) { | |||
481 | if (!had_error) | 470 | if (!had_error) |
482 | app.rememberLayer(l); | 471 | app.rememberLayer(l); |
483 | } else if (str_key == "dimensions") { | 472 | } else if (str_key == "dimensions") { |
484 | unsigned int h,w; | 473 | unsigned int h, w; |
485 | if (sscanf(str_label.c_str(), "%u %u", &w, &h) == 2) { | 474 | if (sscanf(str_label.c_str(), "%u %u", &w, &h) == 2) { |
486 | app.rememberDimensions(w, h, false); | 475 | app.rememberDimensions(w, h, false); |
487 | } else if(sscanf(str_label.c_str(), "%u%% %u%%", &w, &h) == 2) { | 476 | } else if(sscanf(str_label.c_str(), "%u%% %u%%", &w, &h) == 2) { |
@@ -509,16 +498,16 @@ int parseApp(ifstream &file, Application &app, string *first_line = 0) { | |||
509 | had_error = true; | 498 | had_error = true; |
510 | } | 499 | } |
511 | } else if (str_key == "shaded") { | 500 | } else if (str_key == "shaded") { |
512 | app.rememberShadedstate((strcasecmp(str_label.c_str(), "yes") == 0)); | 501 | app.rememberShadedstate(str_label == "yes"); |
513 | } else if (str_key == "tab") { | 502 | } else if (str_key == "tab") { |
514 | app.rememberTabstate((strcasecmp(str_label.c_str(), "yes") == 0)); | 503 | app.rememberTabstate(str_label == "yes"); |
515 | } else if (str_key == "focushidden") { | 504 | } else if (str_key == "focushidden") { |
516 | app.rememberFocusHiddenstate((strcasecmp(str_label.c_str(), "yes") == 0)); | 505 | app.rememberFocusHiddenstate(str_label == "yes"); |
517 | } else if (str_key == "iconhidden") { | 506 | } else if (str_key == "iconhidden") { |
518 | app.rememberIconHiddenstate((strcasecmp(str_label.c_str(), "yes") == 0)); | 507 | app.rememberIconHiddenstate(str_label == "yes"); |
519 | } else if (str_key == "hidden") { | 508 | } else if (str_key == "hidden") { |
520 | app.rememberIconHiddenstate((strcasecmp(str_label.c_str(), "yes") == 0)); | 509 | app.rememberIconHiddenstate(str_label == "yes"); |
521 | app.rememberFocusHiddenstate((strcasecmp(str_label.c_str(), "yes") == 0)); | 510 | app.rememberFocusHiddenstate(str_label == "yes"); |
522 | } else if (str_key == "deco") { | 511 | } else if (str_key == "deco") { |
523 | int deco = WindowState::getDecoMaskFromString(str_label); | 512 | int deco = WindowState::getDecoMaskFromString(str_label); |
524 | if (deco == -1) | 513 | if (deco == -1) |
@@ -540,26 +529,25 @@ int parseApp(ifstream &file, Application &app, string *first_line = 0) { | |||
540 | break; | 529 | break; |
541 | } | 530 | } |
542 | } else if (str_key == "sticky") { | 531 | } else if (str_key == "sticky") { |
543 | app.rememberStuckstate((strcasecmp(str_label.c_str(), "yes") == 0)); | 532 | app.rememberStuckstate(str_label == "yes"); |
544 | } else if (str_key == "focusnewwindow") { | 533 | } else if (str_key == "focusnewwindow") { |
545 | app.rememberFocusNewWindow((strcasecmp(str_label.c_str(), "yes") == 0)); | 534 | app.rememberFocusNewWindow(str_label == "yes"); |
546 | } else if (str_key == "minimized") { | 535 | } else if (str_key == "minimized") { |
547 | app.rememberMinimizedstate((strcasecmp(str_label.c_str(), "yes") == 0)); | 536 | app.rememberMinimizedstate(str_label == "yes"); |
548 | } else if (str_key == "maximized") { | 537 | } else if (str_key == "maximized") { |
549 | if (strcasecmp(str_label.c_str(), "yes") == 0) | 538 | if (str_label == "yes") |
550 | app.rememberMaximizedstate(WindowState::MAX_FULL); | 539 | app.rememberMaximizedstate(WindowState::MAX_FULL); |
551 | else if (strcasecmp(str_label.c_str(), "horz") == 0) | 540 | else if (str_label == "horz") |
552 | app.rememberMaximizedstate(WindowState::MAX_HORZ); | 541 | app.rememberMaximizedstate(WindowState::MAX_HORZ); |
553 | else if (strcasecmp(str_label.c_str(), "vert") == 0) | 542 | else if (str_label == "vert") |
554 | app.rememberMaximizedstate(WindowState::MAX_VERT); | 543 | app.rememberMaximizedstate(WindowState::MAX_VERT); |
555 | else | 544 | app.rememberMaximizedstate(WindowState::MAX_NONE); |
556 | app.rememberMaximizedstate(WindowState::MAX_NONE); | ||
557 | } else if (str_key == "fullscreen") { | 545 | } else if (str_key == "fullscreen") { |
558 | app.rememberFullscreenstate((strcasecmp(str_label.c_str(), "yes") == 0)); | 546 | app.rememberFullscreenstate(str_label == "yes"); |
559 | } else if (str_key == "jump") { | 547 | } else if (str_key == "jump") { |
560 | app.rememberJumpworkspace((strcasecmp(str_label.c_str(), "yes") == 0)); | 548 | app.rememberJumpworkspace(str_label == "yes"); |
561 | } else if (str_key == "close") { | 549 | } else if (str_key == "close") { |
562 | app.rememberSaveOnClose((strcasecmp(str_label.c_str(), "yes") == 0)); | 550 | app.rememberSaveOnClose(str_label == "yes"); |
563 | } else if (str_key == "end") { | 551 | } else if (str_key == "end") { |
564 | return row; | 552 | return row; |
565 | } else { | 553 | } else { |