aboutsummaryrefslogtreecommitdiff
path: root/src/Remember.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/Remember.cc')
-rw-r--r--src/Remember.cc91
1 files changed, 30 insertions, 61 deletions
diff --git a/src/Remember.cc b/src/Remember.cc
index 3e9e16a..d5b2ece 100644
--- a/src/Remember.cc
+++ b/src/Remember.cc
@@ -103,7 +103,8 @@ public:
103 { focushiddenstate= state; focushiddenstate_remember= true; } 103 { focushiddenstate= state; focushiddenstate_remember= true; }
104 void rememberIconHiddenstate(bool state) 104 void rememberIconHiddenstate(bool state)
105 { iconhiddenstate= state; iconhiddenstate_remember= true; } 105 { iconhiddenstate= state; iconhiddenstate_remember= true; }
106 void rememberPosition(int posx, int posy, unsigned char rfc= 0 ) 106 void rememberPosition(int posx, int posy,
107 FluxboxWindow::ReferenceCorner rfc = FluxboxWindow::LEFTTOP)
107 { x = posx; y = posy; refc = rfc; position_remember = true; } 108 { x = posx; y = posy; refc = rfc; position_remember = true; }
108 void rememberShadedstate(bool state) 109 void rememberShadedstate(bool state)
109 { shadedstate = state; shadedstate_remember = true; } 110 { shadedstate = state; shadedstate_remember = true; }
@@ -139,10 +140,7 @@ public:
139 140
140 bool position_remember; 141 bool position_remember;
141 int x,y; 142 int x,y;
142 unsigned char refc; // referenceCorner-> 0 - upperleft 143 FluxboxWindow::ReferenceCorner refc;
143 // 1 - upperight
144 // 2 - lowerleft
145 // 3 - lowerright
146 144
147 bool alpha_remember; 145 bool alpha_remember;
148 int focused_alpha; 146 int focused_alpha;
@@ -477,27 +475,16 @@ int parseApp(ifstream &file, Application &app, string *first_line = 0) {
477 else 475 else
478 had_error = true; 476 had_error = true;
479 } else if (str_key == "position") { 477 } else if (str_key == "position") {
480 unsigned int r= 0; 478 FluxboxWindow::ReferenceCorner r = FluxboxWindow::LEFTTOP;
481 unsigned int x= 0; 479 int x = 0, y = 0;
482 unsigned int y= 0;
483 // more info about the parameter 480 // more info about the parameter
484 // in ::rememberPosition 481 // in ::rememberPosition
485 482
486 str_option == FbTk::StringUtil::toUpper(str_option); 483 if (str_option.length())
487 if ( str_option.length() ) 484 r = FluxboxWindow::getCorner(str_option);
488 { 485 had_error = (r == FluxboxWindow::ERROR);
489 if (str_option == "UPPERLEFT") r= Remember::POS_UPPERLEFT;
490 else if (str_option == "UPPERRIGHT") r= Remember::POS_UPPERRIGHT;
491 else if (str_option == "LOWERLEFT") r= Remember::POS_LOWERLEFT;
492 else if (str_option == "LOWERRIGHT") r= Remember::POS_LOWERRIGHT;
493 else if (str_option == "CENTER") r= Remember::POS_CENTER;
494 else if (str_option == "WINCENTER") r= Remember::POS_WINCENTER;
495 else if (!getuint(str_option.c_str(), r)) {
496 had_error = 1;
497 }
498 }
499 486
500 if (!had_error && sscanf(str_label.c_str(), "%u %u", &x, &y) == 2) 487 if (!had_error && sscanf(str_label.c_str(), "%d %d", &x, &y) == 2)
501 app.rememberPosition(x, y, r); 488 app.rememberPosition(x, y, r);
502 else 489 else
503 had_error = true; 490 had_error = true;
@@ -916,21 +903,30 @@ void Remember::save() {
916 if (a.position_remember) { 903 if (a.position_remember) {
917 apps_file << " [Position]\t("; 904 apps_file << " [Position]\t(";
918 switch(a.refc) { 905 switch(a.refc) {
919 case POS_WINCENTER: 906 case FluxboxWindow::CENTER:
920 apps_file << "WINCENTER";
921 break;
922 case POS_CENTER:
923 apps_file << "CENTER"; 907 apps_file << "CENTER";
924 break; 908 break;
925 case POS_LOWERLEFT: 909 case FluxboxWindow::LEFTBOTTOM:
926 apps_file << "LOWERLEFT"; 910 apps_file << "LOWERLEFT";
927 break; 911 break;
928 case POS_LOWERRIGHT: 912 case FluxboxWindow::RIGHTBOTTOM:
929 apps_file << "LOWERRIGHT"; 913 apps_file << "LOWERRIGHT";
930 break; 914 break;
931 case POS_UPPERRIGHT: 915 case FluxboxWindow::RIGHTTOP:
932 apps_file << "UPPERRIGHT"; 916 apps_file << "UPPERRIGHT";
933 break; 917 break;
918 case FluxboxWindow::LEFT:
919 apps_file << "LEFT";
920 break;
921 case FluxboxWindow::RIGHT:
922 apps_file << "RIGHT";
923 break;
924 case FluxboxWindow::TOP:
925 apps_file << "TOP";
926 break;
927 case FluxboxWindow::BOTTOM:
928 apps_file << "BOTTOM";
929 break;
934 default: 930 default:
935 apps_file << "UPPERLEFT"; 931 apps_file << "UPPERLEFT";
936 } 932 }
@@ -1114,8 +1110,8 @@ void Remember::rememberAttrib(WinClient &winclient, Attribute attrib) {
1114 break; 1110 break;
1115 case REM_POSITION: { 1111 case REM_POSITION: {
1116 int head = win->screen().getHead(win->fbWindow()); 1112 int head = win->screen().getHead(win->fbWindow());
1117 int head_x = win->screen().getHeadX(head); 1113 int head_x = win->screen().maxLeft(head);
1118 int head_y = win->screen().getHeadY(head); 1114 int head_y = win->screen().maxTop(head);
1119 app->rememberPosition(win->normalX() - head_x, win->normalY() - head_y); 1115 app->rememberPosition(win->normalX() - head_x, win->normalY() - head_y);
1120 break; 1116 break;
1121 } 1117 }
@@ -1275,37 +1271,10 @@ void Remember::setupFrame(FluxboxWindow &win) {
1275 if (app->dimensions_remember) 1271 if (app->dimensions_remember)
1276 win.resize(app->w, app->h); 1272 win.resize(app->w, app->h);
1277 1273
1278 int head = screen.getHead(win.fbWindow());
1279
1280 if (app->position_remember) { 1274 if (app->position_remember) {
1281 1275 int newx = app->x, newy = app->y;
1282 switch (app->refc) { 1276 win.translateCoords(newx, newy, app->refc);
1283 default: 1277 win.move(newx, newy);
1284 case POS_UPPERLEFT: // upperleft corner
1285 win.move(screen.getHeadX(head) + app->x,
1286 screen.getHeadY(head) + app->y);
1287 break;
1288 case POS_UPPERRIGHT: // upperright corner
1289 win.move(screen.getHeadX(head) + screen.getHeadWidth(head) - win.width() - app->x,
1290 screen.getHeadY(head) + app->y);
1291 break;
1292 case POS_LOWERLEFT: // lowerleft corner
1293 win.move(screen.getHeadX(head) + app->x,
1294 screen.getHeadHeight(head) - win.height() - app->y);
1295 break;
1296 case POS_LOWERRIGHT: // lowerright corner
1297 win.move(screen.getHeadWidth(head) - win.width() - app->x,
1298 screen.getHeadHeight(head) - win.height() - app->y);
1299 break;
1300 case POS_CENTER: // center of the screen, windows topleft corner is on the center
1301 win.move((screen.getHeadWidth(head) / 2) + app->x,
1302 (screen.getHeadHeight(head) / 2) + app->y);
1303 break;
1304 case POS_WINCENTER: // the window is centered REALLY upon the center
1305 win.move((screen.getHeadWidth(head) / 2) - ( win.width() / 2 ) + app->x,
1306 (screen.getHeadHeight(head) / 2) - ( win.height() / 2 ) + app->y);
1307 break;
1308 };
1309 } 1278 }
1310 1279
1311 if (app->shadedstate_remember) 1280 if (app->shadedstate_remember)