remember position patch from Mathias Gumz

This commit is contained in:
fluxgen 2003-12-11 15:23:14 +00:00
parent 19fe500ba2
commit 96c1445408
2 changed files with 76 additions and 9 deletions

View file

@ -21,7 +21,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Remember.cc,v 1.31 2003/12/10 23:08:03 fluxgen Exp $
// $Id: Remember.cc,v 1.32 2003/12/11 15:23:14 fluxgen Exp $
#include "Remember.hh"
#include "ClientPattern.hh"
@ -291,10 +291,18 @@ int Remember::parseApp(ifstream &file, Application &app, string *first_line) {
if (line[0] == '#')
continue; //the line is commented
int parse_pos = 0, err = 0;
string str_key, str_label;
string str_key, str_option, str_label;
err = FbTk::StringUtil::getStringBetween(str_key,
line.c_str(),
'[', ']');
if (err > 0) {
int tmp;
tmp= FbTk::StringUtil::getStringBetween(str_option,
line.c_str() + err,
'(', ')');
if (tmp>0)
err += tmp;
}
if (err > 0 ) {
parse_pos += err;
err = FbTk::StringUtil::getStringBetween(str_label,
@ -324,10 +332,30 @@ int Remember::parseApp(ifstream &file, Application &app, string *first_line) {
iss >> w >> h;
app.rememberDimensions(w,h);
} else if (str_key == "Position") {
unsigned int x,y;
FB_istringstream iss(str_label.c_str());
FB_istringstream iss;
unsigned int r= 0;
unsigned int x= 0;
unsigned int y= 0;
// more info about the parameter
// in ::rememberPosition
if ( str_option.length() )
{
if ( str_option == "UPPERLEFT" ) r= POS_UPPERLEFT;
else if ( str_option == "UPPERRIGHT" ) r= POS_UPPERRIGHT;
else if ( str_option == "LOWERLEFT" ) r= POS_LOWERLEFT;
else if ( str_option == "LOWERRIGHT" ) r= POS_LOWERRIGHT;
else if ( str_option == "CENTER" ) r= POS_CENTER;
else if ( str_option == "WINCENTER" ) r= POS_WINCENTER;
else {
iss.str(str_option);
iss >> r;
}
}
iss.str(str_label.c_str());
iss >> x >> y;
app.rememberPosition(x,y);
app.rememberPosition(x, y, r);
} else if (str_key == "Shaded") {
app.rememberShadedstate((str_label=="yes"));
} else if (str_key == "Tab") {
@ -719,8 +747,32 @@ void Remember::setupFrame(FluxboxWindow &win) {
if (app->dimensions_remember)
win.resize(app->w, app->h);
if (app->position_remember)
if (app->position_remember) {
switch (app->refc) {
default:
case POS_UPPERLEFT: // upperleft corner
win.move(app->x, app->y);
break;
case POS_UPPERRIGHT: // upperright corner
win.move(screen.width() - win.width() - app->x, app->y);
break;
case POS_LOWERLEFT: // lowerleft corner
win.move(app->x, screen.height() - win.height() - app->y);
break;
case POS_LOWERRIGHT: // lowerright corner
win.move(screen.width() - win.width() - app->x,
screen.height() - win.height() - app->y);
break;
case POS_CENTER: // center of the screen, windows topleft corner is on the center
win.move((screen.width() / 2) + app->x,
(screen.height() / 2) + app->y);
break;
case POS_WINCENTER: // the window is centered REALLY upon the center
win.move((screen.width() / 2) - ( win.width() / 2 ) + app->x,
(screen.height() / 2) - ( win.height() / 2 ) + app->y);
break;
};
}
if (app->shadedstate_remember)
// if inconsistent...

View file

@ -21,7 +21,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Remember.hh,v 1.12 2003/07/28 15:06:33 rathnor Exp $
// $Id: Remember.hh,v 1.13 2003/12/11 15:23:14 fluxgen Exp $
/* Based on the original "Remember patch" by Xavier Brouckaert */
@ -59,8 +59,8 @@ public:
{ workspace = ws; workspace_remember = true; }
inline void rememberDimensions(int width, int height)
{ w = width; h = height; dimensions_remember = true; }
inline void rememberPosition(int posx, int posy)
{ x = posx; y = posy; position_remember = true; }
inline void rememberPosition(int posx, int posy, unsigned char rfc= 0 )
{ x = posx; y = posy; refc = rfc; position_remember = true; }
inline void rememberShadedstate(bool state)
{ shadedstate = state; shadedstate_remember = true; }
inline void rememberTabstate(bool state)
@ -85,6 +85,10 @@ public:
bool position_remember;
int x,y;
unsigned char refc; // referenceCorner-> 0 - upperleft
// 1 - upperight
// 2 - lowerleft
// 3 - lowerright
bool shadedstate_remember;
bool shadedstate;
@ -138,6 +142,17 @@ public:
REM_LASTATTRIB // not actually used
};
enum {
POS_UPPERLEFT= 0,
POS_UPPERRIGHT,
POS_LOWERLEFT,
POS_LOWERRIGHT,
POS_CENTER,
POS_WINCENTER
};
// a "pattern" to the relevant app
// each app exists ONLY for that pattern.
// And we need to keep a list of pairs as we want to keep the