aboutsummaryrefslogtreecommitdiff
path: root/src/Remember.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/Remember.cc')
-rw-r--r--src/Remember.cc65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/Remember.cc b/src/Remember.cc
index 6dcd378..43a4d16 100644
--- a/src/Remember.cc
+++ b/src/Remember.cc
@@ -98,6 +98,7 @@ public:
98 void forgetIconHiddenstate() { iconhiddenstate_remember= false; } 98 void forgetIconHiddenstate() { iconhiddenstate_remember= false; }
99 void forgetStuckstate() { stuckstate_remember = false; } 99 void forgetStuckstate() { stuckstate_remember = false; }
100 void forgetFocusNewWindow() { focusnewwindow_remember = false; } 100 void forgetFocusNewWindow() { focusnewwindow_remember = false; }
101 void forgetFocusProtection() { focusprotection_remember = false; }
101 void forgetJumpworkspace() { jumpworkspace_remember = false; } 102 void forgetJumpworkspace() { jumpworkspace_remember = false; }
102 void forgetLayer() { layer_remember = false; } 103 void forgetLayer() { layer_remember = false; }
103 void forgetSaveOnClose() { save_on_close_remember = false; } 104 void forgetSaveOnClose() { save_on_close_remember = false; }
@@ -140,6 +141,8 @@ public:
140 { stuckstate = state; stuckstate_remember = true; } 141 { stuckstate = state; stuckstate_remember = true; }
141 void rememberFocusNewWindow(bool state) 142 void rememberFocusNewWindow(bool state)
142 { focusnewwindow = state; focusnewwindow_remember = true; } 143 { focusnewwindow = state; focusnewwindow_remember = true; }
144 void rememberFocusProtection(unsigned int protect)
145 { focusprotection = protect; focusprotection_remember = true; }
143 void rememberJumpworkspace(bool state) 146 void rememberJumpworkspace(bool state)
144 { jumpworkspace = state; jumpworkspace_remember = true; } 147 { jumpworkspace = state; jumpworkspace_remember = true; }
145 void rememberLayer(int layernum) 148 void rememberLayer(int layernum)
@@ -191,6 +194,9 @@ public:
191 bool focusnewwindow_remember; 194 bool focusnewwindow_remember;
192 bool focusnewwindow; 195 bool focusnewwindow;
193 196
197 bool focusprotection_remember;
198 unsigned int focusprotection;
199
194 bool focushiddenstate_remember; 200 bool focushiddenstate_remember;
195 bool focushiddenstate; 201 bool focushiddenstate;
196 202
@@ -242,6 +248,7 @@ void Application::reset() {
242 shadedstate_remember = 248 shadedstate_remember =
243 stuckstate_remember = 249 stuckstate_remember =
244 focusnewwindow_remember = 250 focusnewwindow_remember =
251 focusprotection_remember =
245 tabstate_remember = 252 tabstate_remember =
246 workspace_remember = 253 workspace_remember =
247 head_remember = 254 head_remember =
@@ -549,6 +556,26 @@ int parseApp(ifstream &file, Application &app, string *first_line = 0) {
549 app.rememberStuckstate(str_label == "yes"); 556 app.rememberStuckstate(str_label == "yes");
550 } else if (str_key == "focusnewwindow") { 557 } else if (str_key == "focusnewwindow") {
551 app.rememberFocusNewWindow(str_label == "yes"); 558 app.rememberFocusNewWindow(str_label == "yes");
559 } else if (str_key == "focusprotection") {
560 Focus::Protection protect = Focus::NoProtection;
561 std::list<std::string> labels;
562 FbTk::StringUtil::stringtok(labels, str_label, ", ");
563 std::list<std::string>::iterator it = labels.begin();
564 for (; it != labels.end(); ++it) {
565 if (*it == "lock")
566 protect = (protect & ~Focus::Deny) | Focus::Lock;
567 else if (*it == "deny")
568 protect = (protect & ~Focus::Lock) | Focus::Deny;
569 else if (*it == "gain")
570 protect = (protect & ~Focus::Refuse) | Focus::Gain;
571 else if (*it == "refuse")
572 protect = (protect & ~Focus::Gain) | Focus::Refuse;
573 else if (*it == "none")
574 protect = Focus::NoProtection;
575 else
576 had_error = 1;
577 }
578 app.rememberFocusProtection(protect);
552 } else if (str_key == "minimized") { 579 } else if (str_key == "minimized") {
553 app.rememberMinimizedstate(str_label == "yes"); 580 app.rememberMinimizedstate(str_label == "yes");
554 } else if (str_key == "maximized") { 581 } else if (str_key == "maximized") {
@@ -1009,6 +1036,31 @@ void Remember::save() {
1009 if (a.focusnewwindow_remember) { 1036 if (a.focusnewwindow_remember) {
1010 apps_file << " [FocusNewWindow]\t{" << ((a.focusnewwindow)?"yes":"no") << "}" << endl; 1037 apps_file << " [FocusNewWindow]\t{" << ((a.focusnewwindow)?"yes":"no") << "}" << endl;
1011 } 1038 }
1039 if (a.focusprotection_remember) {
1040 apps_file << " [FocusProtection]\t{";
1041 if (a.focusprotection == Focus::NoProtection) {
1042 apps_file << "none";
1043 } else {
1044 bool b = false;
1045 if (a.focusprotection & Focus::Gain) {
1046 apps_file << (b?",":"") << "gain";
1047 b = true;
1048 }
1049 if (a.focusprotection & Focus::Refuse) {
1050 apps_file << (b?",":"") << "refuse";
1051 b = true;
1052 }
1053 if (a.focusprotection & Focus::Lock) {
1054 apps_file << (b?",":"") << "lock";
1055 b = true;
1056 }
1057 if (a.focusprotection & Focus::Deny) {
1058 apps_file << (b?",":"") << "deny";
1059 b = true;
1060 }
1061 }
1062 apps_file << "}" << endl;
1063 }
1012 if (a.minimizedstate_remember) { 1064 if (a.minimizedstate_remember) {
1013 apps_file << " [Minimized]\t{" << ((a.minimizedstate)?"yes":"no") << "}" << endl; 1065 apps_file << " [Minimized]\t{" << ((a.minimizedstate)?"yes":"no") << "}" << endl;
1014 } 1066 }
@@ -1083,6 +1135,9 @@ bool Remember::isRemembered(WinClient &winclient, Attribute attrib) {
1083 case REM_FOCUSNEWWINDOW: 1135 case REM_FOCUSNEWWINDOW:
1084 return app->focusnewwindow_remember; 1136 return app->focusnewwindow_remember;
1085 break; 1137 break;
1138 case REM_FOCUSPROTECTION:
1139 return app->focusprotection_remember;
1140 break;
1086 case REM_MINIMIZEDSTATE: 1141 case REM_MINIMIZEDSTATE:
1087 return app->minimizedstate_remember; 1142 return app->minimizedstate_remember;
1088 break; 1143 break;
@@ -1166,6 +1221,9 @@ void Remember::rememberAttrib(WinClient &winclient, Attribute attrib) {
1166 case REM_FOCUSNEWWINDOW: 1221 case REM_FOCUSNEWWINDOW:
1167 app->rememberFocusNewWindow(win->isFocusNew()); 1222 app->rememberFocusNewWindow(win->isFocusNew());
1168 break; 1223 break;
1224 case REM_FOCUSPROTECTION:
1225 app->rememberFocusProtection(win->focusProtection());
1226 break;
1169 case REM_MINIMIZEDSTATE: 1227 case REM_MINIMIZEDSTATE:
1170 app->rememberMinimizedstate(win->isIconic()); 1228 app->rememberMinimizedstate(win->isIconic());
1171 break; 1229 break;
@@ -1229,6 +1287,9 @@ void Remember::forgetAttrib(WinClient &winclient, Attribute attrib) {
1229 case REM_FOCUSNEWWINDOW: 1287 case REM_FOCUSNEWWINDOW:
1230 app->forgetFocusNewWindow(); 1288 app->forgetFocusNewWindow();
1231 break; 1289 break;
1290 case REM_FOCUSPROTECTION:
1291 app->forgetFocusProtection();
1292 break;
1232 case REM_MINIMIZEDSTATE: 1293 case REM_MINIMIZEDSTATE:
1233 app->forgetMinimizedstate(); 1294 app->forgetMinimizedstate();
1234 break; 1295 break;
@@ -1355,6 +1416,10 @@ void Remember::setupFrame(FluxboxWindow &win) {
1355 if (app->focusnewwindow_remember) 1416 if (app->focusnewwindow_remember)
1356 win.setFocusNew(app->focusnewwindow); 1417 win.setFocusNew(app->focusnewwindow);
1357 1418
1419 if (app->focusprotection_remember) {
1420 win.setFocusProtection(app->focusprotection);
1421 }
1422
1358 if (app->minimizedstate_remember) { 1423 if (app->minimizedstate_remember) {
1359 // if inconsistent... 1424 // if inconsistent...
1360 // this one doesn't actually work, but I can't imagine needing it 1425 // this one doesn't actually work, but I can't imagine needing it