* added new command:

sethead <int>

  which sets the current window to head<int>

* added remembering of the head to apps-file:
    
   [Head] {<int>}
This commit is contained in:
mathias 2004-12-21 16:09:36 +00:00
parent f3dfb80c40
commit 6dffafc39e
6 changed files with 119 additions and 57 deletions

View file

@ -42,6 +42,10 @@ void KillWindowCmd::real_execute() {
winclient().sendClose(true); winclient().sendClose(true);
} }
void SetHeadCmd::real_execute() {
fbwindow().screen().setOnHead(fbwindow(), m_head);
}
void SendToWorkspaceCmd::real_execute() { void SendToWorkspaceCmd::real_execute() {
if (m_workspace_num >= 0 && m_workspace_num < fbwindow().screen().getNumberOfWorkspaces()) if (m_workspace_num >= 0 && m_workspace_num < fbwindow().screen().getNumberOfWorkspaces())
fbwindow().screen().sendToWorkspace(m_workspace_num, &fbwindow()); fbwindow().screen().sendToWorkspace(m_workspace_num, &fbwindow());

View file

@ -60,6 +60,15 @@ protected:
void real_execute(); void real_execute();
}; };
class SetHeadCmd : public WindowHelperCmd {
public:
explicit SetHeadCmd(int head) : m_head(head) { }
protected:
void real_execute();
private:
const int m_head;
};
class SendToWorkspaceCmd: public WindowHelperCmd { class SendToWorkspaceCmd: public WindowHelperCmd {
public: public:
explicit SendToWorkspaceCmd(int workspace_num):m_workspace_num(workspace_num) { } explicit SendToWorkspaceCmd(int workspace_num):m_workspace_num(workspace_num) { }

View file

@ -118,6 +118,7 @@ FbCommandFactory::FbCommandFactory() {
"rootmenu", "rootmenu",
"saverc", "saverc",
"setenv", "setenv",
"sethead",
"sendtoworkspace", "sendtoworkspace",
"sendtonextworkspace", "sendtonextworkspace",
"sendtoprevworkspace", "sendtoprevworkspace",
@ -279,6 +280,8 @@ FbTk::Command *FbCommandFactory::stringToCommand(const std::string &command,
return new CurrentWindowCmd(&FluxboxWindow::stick); return new CurrentWindowCmd(&FluxboxWindow::stick);
else if (command == "toggledecor") else if (command == "toggledecor")
return new CurrentWindowCmd(&FluxboxWindow::toggleDecoration); return new CurrentWindowCmd(&FluxboxWindow::toggleDecoration);
else if (command == "sethead")
return new SetHeadCmd(atoi(arguments.c_str()));
else if (command == "sendtoworkspace") else if (command == "sendtoworkspace")
return new SendToWorkspaceCmd(atoi(arguments.c_str()) - 1); // make 1-indexed to user return new SendToWorkspaceCmd(atoi(arguments.c_str()) - 1); // make 1-indexed to user
else if (command == "sendtonextworkspace") else if (command == "sendtonextworkspace")

View file

@ -59,7 +59,7 @@
#ifdef HAVE_SSTREAM #ifdef HAVE_SSTREAM
#include <sstream> #include <sstream>
#define FB_istringstream istringstream #define FB_istringstream istringstream
#elif HAVE_STRSTREAM #elif HAVE_STRSTREAM
#include <strstream> #include <strstream>
#define FB_istringstream istrstream #define FB_istringstream istrstream
#else #else
@ -75,9 +75,9 @@ public:
RememberMenuItem(const char *label, Remember &remember, RememberMenuItem(const char *label, Remember &remember,
FluxboxWindow &fbwin, FluxboxWindow &fbwin,
Remember::Attribute attrib) : Remember::Attribute attrib) :
FbTk::MenuItem(label), m_remember(remember), FbTk::MenuItem(label), m_remember(remember),
m_win(fbwin), m_attrib(attrib) { m_win(fbwin), m_attrib(attrib) {
setToggleItem(true); setToggleItem(true);
} }
bool isSelected() const { bool isSelected() const {
@ -88,7 +88,7 @@ public:
} }
bool isEnabled() const { bool isEnabled() const {
if (m_attrib != Remember::REM_JUMPWORKSPACE) if (m_attrib != Remember::REM_JUMPWORKSPACE)
return true; return true;
else if (m_win.numClients()) else if (m_win.numClients())
return (m_remember.isRemembered(m_win.winClient(), Remember::REM_WORKSPACE)); return (m_remember.isRemembered(m_win.winClient(), Remember::REM_WORKSPACE));
@ -126,17 +126,19 @@ FbTk::Menu *createRememberMenu(Remember &remember, FluxboxWindow &win, bool enab
menu->updateMenu(); menu->updateMenu();
return menu; return menu;
} }
_FB_USES_NLS; _FB_USES_NLS;
menu->insert(new RememberMenuItem(_FBTEXT(Remember, Workspace, "Workspace", "Remember Workspace"), menu->insert(new RememberMenuItem(_FBTEXT(Remember, Workspace, "Workspace", "Remember Workspace"),
remember, win, Remember::REM_WORKSPACE)); remember, win, Remember::REM_WORKSPACE));
menu->insert(new RememberMenuItem(_FBTEXT(Remember, JumpToWorkspace, "Jump to workspace", "Change active workspace to remembered one on open"), menu->insert(new RememberMenuItem(_FBTEXT(Remember, JumpToWorkspace, "Jump to workspace", "Change active workspace to remembered one on open"),
remember, win, Remember::REM_JUMPWORKSPACE)); remember, win, Remember::REM_JUMPWORKSPACE));
menu->insert(new RememberMenuItem(_FBTEXT(Remember, Dimensions, "Dimensions", "Remember Dimensions - windth width and height"), menu->insert(new RememberMenuItem(_FBTEXT(Remember, Head, "Head", "Remember Head"),
remember, win, Remember::REM_HEAD));
menu->insert(new RememberMenuItem(_FBTEXT(Remember, Dimensions, "Dimensions", "Remember Dimensions - with width and height"),
remember, win, Remember::REM_DIMENSIONS)); remember, win, Remember::REM_DIMENSIONS));
menu->insert(new RememberMenuItem(_FBTEXT(Remember, Position, "Position", "Remember position - window co-ordinates"), menu->insert(new RememberMenuItem(_FBTEXT(Remember, Position, "Position", "Remember position - window co-ordinates"),
remember, win, Remember::REM_POSITION)); remember, win, Remember::REM_POSITION));
menu->insert(new RememberMenuItem(_FBTEXT(Remember, Sticky, "Sticky", "Remember Sticky"), menu->insert(new RememberMenuItem(_FBTEXT(Remember, Sticky, "Sticky", "Remember Sticky"),
remember, win, Remember::REM_STUCKSTATE)); remember, win, Remember::REM_STUCKSTATE));
menu->insert(new RememberMenuItem(_FBTEXT(Remember, Decorations, "Decorations", "Remember window decorations"), menu->insert(new RememberMenuItem(_FBTEXT(Remember, Decorations, "Decorations", "Remember window decorations"),
remember, win, Remember::REM_DECOSTATE)); remember, win, Remember::REM_DECOSTATE));
@ -160,8 +162,8 @@ bool handleStartupItem(const string &line, int offset) {
// accept some options, for now only "screen=NN" // accept some options, for now only "screen=NN"
// these option are given in parentheses before the command // these option are given in parentheses before the command
next = FbTk::StringUtil::getStringBetween(str, next = FbTk::StringUtil::getStringBetween(str,
line.c_str() + offset, line.c_str() + offset,
'(', ')'); '(', ')');
if (next > 0) { if (next > 0) {
// there are some options // there are some options
@ -187,8 +189,8 @@ bool handleStartupItem(const string &line, int offset) {
next = 0; next = 0;
} }
next = FbTk::StringUtil::getStringBetween(str, next = FbTk::StringUtil::getStringBetween(str,
line.c_str() + offset + next, line.c_str() + offset + next,
'{', '}'); '{', '}');
if (next <= 0) { if (next <= 0) {
@ -212,17 +214,18 @@ Application::Application(bool grouped)
: is_grouped(grouped), : is_grouped(grouped),
group(0) group(0)
{ {
decostate_remember = decostate_remember =
dimensions_remember = dimensions_remember =
focushiddenstate_remember = focushiddenstate_remember =
iconhiddenstate_remember = iconhiddenstate_remember =
jumpworkspace_remember = jumpworkspace_remember =
layer_remember = layer_remember =
position_remember = position_remember =
shadedstate_remember = shadedstate_remember =
stuckstate_remember = stuckstate_remember =
tabstate_remember = tabstate_remember =
workspace_remember = workspace_remember =
head_remember =
save_on_close_remember = false; save_on_close_remember = false;
} }
@ -264,7 +267,7 @@ Application* Remember::find(WinClient &winclient) {
return wc_it->second; return wc_it->second;
else { else {
Patterns::iterator it = m_pats.begin(); Patterns::iterator it = m_pats.begin();
for (; it != m_pats.end(); it++) for (; it != m_pats.end(); it++)
if (it->first->match(winclient)) { if (it->first->match(winclient)) {
it->first->addMatch(); it->first->addMatch();
m_clients[&winclient] = it->second; m_clients[&winclient] = it->second;
@ -304,8 +307,8 @@ int Remember::parseApp(ifstream &file, Application &app, string *first_line) {
continue; //the line is commented or blank continue; //the line is commented or blank
int parse_pos = 0, err = 0; int parse_pos = 0, err = 0;
string str_key, str_option, str_label; string str_key, str_option, str_label;
err = FbTk::StringUtil::getStringBetween(str_key, err = FbTk::StringUtil::getStringBetween(str_key,
line.c_str(), line.c_str(),
'[', ']'); '[', ']');
if (err > 0) { if (err > 0) {
int tmp; int tmp;
@ -317,8 +320,8 @@ int Remember::parseApp(ifstream &file, Application &app, string *first_line) {
} }
if (err > 0 ) { if (err > 0 ) {
parse_pos += err; parse_pos += err;
err = FbTk::StringUtil::getStringBetween(str_label, err = FbTk::StringUtil::getStringBetween(str_label,
line.c_str() + parse_pos, line.c_str() + parse_pos,
'{', '}'); '{', '}');
if (err>0) { if (err>0) {
parse_pos += err; parse_pos += err;
@ -333,6 +336,9 @@ int Remember::parseApp(ifstream &file, Application &app, string *first_line) {
FB_istringstream iss(str_label.c_str()); FB_istringstream iss(str_label.c_str());
iss >> w; iss >> w;
app.rememberWorkspace(w); app.rememberWorkspace(w);
} else if (str_key == "Head") {
int h = atoi(str_label.c_str());
app.rememberHead(h);
} else if (str_key == "Layer") { } else if (str_key == "Layer") {
unsigned int l; unsigned int l;
if (str_label == "DESKTOP") { if (str_label == "DESKTOP") {
@ -366,7 +372,7 @@ int Remember::parseApp(ifstream &file, Application &app, string *first_line) {
unsigned int y= 0; unsigned int y= 0;
// more info about the parameter // more info about the parameter
// in ::rememberPosition // in ::rememberPosition
if ( str_option.length() ) if ( str_option.length() )
{ {
if ( str_option == "UPPERLEFT" ) r= POS_UPPERLEFT; if ( str_option == "UPPERLEFT" ) r= POS_UPPERLEFT;
@ -389,9 +395,9 @@ int Remember::parseApp(ifstream &file, Application &app, string *first_line) {
} else if (str_key == "Tab") { } else if (str_key == "Tab") {
app.rememberTabstate((str_label=="yes")); app.rememberTabstate((str_label=="yes"));
} else if (str_key == "FocusHidden") { } else if (str_key == "FocusHidden") {
app.rememberFocusHiddenstate((str_label=="yes")); app.rememberFocusHiddenstate((str_label=="yes"));
} else if (str_key == "IconHidden") { } else if (str_key == "IconHidden") {
app.rememberIconHiddenstate((str_label=="yes")); app.rememberIconHiddenstate((str_label=="yes"));
} else if (str_key == "Hidden") { } else if (str_key == "Hidden") {
app.rememberIconHiddenstate((str_label=="yes")); app.rememberIconHiddenstate((str_label=="yes"));
app.rememberFocusHiddenstate((str_label=="yes")); app.rememberFocusHiddenstate((str_label=="yes"));
@ -402,7 +408,7 @@ int Remember::parseApp(ifstream &file, Application &app, string *first_line) {
app.rememberDecostate((unsigned int) 0xfffffff); app.rememberDecostate((unsigned int) 0xfffffff);
} else if (str_label == "TINY") { } else if (str_label == "TINY") {
app.rememberDecostate((unsigned int) app.rememberDecostate((unsigned int)
FluxboxWindow::DECORM_TITLEBAR FluxboxWindow::DECORM_TITLEBAR
| FluxboxWindow::DECORM_ICONIFY | FluxboxWindow::DECORM_ICONIFY
| FluxboxWindow::DECORM_MENU | FluxboxWindow::DECORM_MENU
); );
@ -468,8 +474,8 @@ void Remember::load() {
continue; continue;
string key; string key;
int err=0; int err=0;
int pos = FbTk::StringUtil::getStringBetween(key, int pos = FbTk::StringUtil::getStringBetween(key,
line.c_str(), line.c_str(),
'[', ']'); '[', ']');
if (pos > 0 && key == "app") { if (pos > 0 && key == "app") {
@ -502,7 +508,7 @@ void Remember::load() {
m_pats.push_back(make_pair(grouped_pats.front(), app)); m_pats.push_back(make_pair(grouped_pats.front(), app));
grouped_pats.pop_front(); grouped_pats.pop_front();
} }
// we hit end... probably don't have attribs for the group // we hit end... probably don't have attribs for the group
// so finish it off with an empty application // so finish it off with an empty application
// otherwise parse the app // otherwise parse the app
@ -512,7 +518,7 @@ void Remember::load() {
in_group = false; in_group = false;
} else } else
cerr<<"Error in apps file on line "<<row<<"."<<endl; cerr<<"Error in apps file on line "<<row<<"."<<endl;
} }
} else { } else {
#ifdef DEBUG #ifdef DEBUG
@ -566,6 +572,9 @@ void Remember::save() {
if (a.workspace_remember) { if (a.workspace_remember) {
apps_file << " [Workspace]\t{" << a.workspace << "}" << endl; apps_file << " [Workspace]\t{" << a.workspace << "}" << endl;
} }
if (a.head_remember) {
apps_file << " [Head]\t{" << a.head << "}" << endl;
}
if (a.dimensions_remember) { if (a.dimensions_remember) {
apps_file << " [Dimensions]\t{" << a.w << " " << a.h << "}" << endl; apps_file << " [Dimensions]\t{" << a.w << " " << a.h << "}" << endl;
} }
@ -581,22 +590,22 @@ void Remember::save() {
if (a.decostate_remember) { if (a.decostate_remember) {
switch (a.decostate) { switch (a.decostate) {
case (0) : case (0) :
apps_file << " [Deco]\t{NONE}" << endl; apps_file << " [Deco]\t{NONE}" << endl;
break; break;
case (0xffffffff): case (0xffffffff):
case (FluxboxWindow::DECORM_LAST - 1): case (FluxboxWindow::DECORM_LAST - 1):
apps_file << " [Deco]\t{NORMAL}" << endl; apps_file << " [Deco]\t{NORMAL}" << endl;
break; break;
case (FluxboxWindow::DECORM_TITLEBAR case (FluxboxWindow::DECORM_TITLEBAR
| FluxboxWindow::DECORM_ICONIFY | FluxboxWindow::DECORM_ICONIFY
| FluxboxWindow::DECORM_MENU): | FluxboxWindow::DECORM_MENU):
apps_file << " [Deco]\t{TOOL}" << endl; apps_file << " [Deco]\t{TOOL}" << endl;
break; break;
case (FluxboxWindow::DECORM_TITLEBAR case (FluxboxWindow::DECORM_TITLEBAR
| FluxboxWindow::DECORM_MENU): | FluxboxWindow::DECORM_MENU):
apps_file << " [Deco]\t{TINY}" << endl; apps_file << " [Deco]\t{TINY}" << endl;
break; break;
case (FluxboxWindow::DECORM_BORDER case (FluxboxWindow::DECORM_BORDER
| FluxboxWindow::DECORM_MENU): | FluxboxWindow::DECORM_MENU):
apps_file << " [Deco]\t{BORDER}" << endl; apps_file << " [Deco]\t{BORDER}" << endl;
break; break;
@ -608,7 +617,7 @@ void Remember::save() {
if (a.focushiddenstate_remember || a.iconhiddenstate_remember) { if (a.focushiddenstate_remember || a.iconhiddenstate_remember) {
if (a.focushiddenstate_remember && a.iconhiddenstate_remember && if (a.focushiddenstate_remember && a.iconhiddenstate_remember &&
a.focushiddenstate && a.iconhiddenstate) a.focushiddenstate && a.iconhiddenstate)
apps_file << " [Hidden]\t{" << ((a.focushiddenstate)?"yes":"no") << "}" << endl; apps_file << " [Hidden]\t{" << ((a.focushiddenstate)?"yes":"no") << "}" << endl;
else if (a.focushiddenstate_remember) { else if (a.focushiddenstate_remember) {
apps_file << " [FocusHidden]\t{" << ((a.focushiddenstate)?"yes":"no") << "}" << endl; apps_file << " [FocusHidden]\t{" << ((a.focushiddenstate)?"yes":"no") << "}" << endl;
@ -639,6 +648,9 @@ bool Remember::isRemembered(WinClient &winclient, Attribute attrib) {
case REM_WORKSPACE: case REM_WORKSPACE:
return app->workspace_remember; return app->workspace_remember;
break; break;
case REM_HEAD:
return app->head_remember;
break;
case REM_DIMENSIONS: case REM_DIMENSIONS:
return app->dimensions_remember; return app->dimensions_remember;
break; break;
@ -690,6 +702,9 @@ void Remember::rememberAttrib(WinClient &winclient, Attribute attrib) {
case REM_WORKSPACE: case REM_WORKSPACE:
app->rememberWorkspace(win->workspaceNumber()); app->rememberWorkspace(win->workspaceNumber());
break; break;
case REM_HEAD:
app->rememberHead(win->screen().getHead(win->fbWindow()));
break;
case REM_DIMENSIONS: case REM_DIMENSIONS:
app->rememberDimensions(win->width(), win->height()); app->rememberDimensions(win->width(), win->height());
break; break;
@ -741,6 +756,9 @@ void Remember::forgetAttrib(WinClient &winclient, Attribute attrib) {
case REM_WORKSPACE: case REM_WORKSPACE:
app->forgetWorkspace(); app->forgetWorkspace();
break; break;
case REM_HEAD:
app->forgetHead();
break;
case REM_DIMENSIONS: case REM_DIMENSIONS:
app->forgetDimensions(); app->forgetDimensions();
break; break;
@ -790,11 +808,11 @@ void Remember::setupFrame(FluxboxWindow &win) {
win.addExtraMenu(_FBTEXT(Remember, MenuItemName, "Remember...", "Remember item in menu"), win.addExtraMenu(_FBTEXT(Remember, MenuItemName, "Remember...", "Remember item in menu"),
createRememberMenu(*this, win, (winclient.transientFor() == 0))); createRememberMenu(*this, win, (winclient.transientFor() == 0)));
if (winclient.transientFor()) if (winclient.transientFor())
return; return;
Application *app = find(winclient); Application *app = find(winclient);
if (app == 0) if (app == 0)
return; // nothing to do return; // nothing to do
if (app->is_grouped && app->group == 0) if (app->is_grouped && app->group == 0)
@ -804,41 +822,51 @@ void Remember::setupFrame(FluxboxWindow &win) {
if (app->workspace_remember) { if (app->workspace_remember) {
// TODO: fix placement to initialise properly // TODO: fix placement to initialise properly
screen.reassociateWindow(&win, app->workspace, true); screen.reassociateWindow(&win, app->workspace, true);
if (app->jumpworkspace_remember) if (app->jumpworkspace_remember)
screen.changeWorkspaceID(app->workspace); screen.changeWorkspaceID(app->workspace);
} }
if (app->head_remember) {
win.screen().setOnHead<FluxboxWindow>(win, app->head);
}
if (app->decostate_remember) if (app->decostate_remember)
win.setDecorationMask(app->decostate); win.setDecorationMask(app->decostate);
if (app->dimensions_remember) if (app->dimensions_remember)
win.resize(app->w, app->h); win.resize(app->w, app->h);
int head = screen.getHead(win.fbWindow());
if (app->position_remember) { if (app->position_remember) {
switch (app->refc) { switch (app->refc) {
default: default:
case POS_UPPERLEFT: // upperleft corner case POS_UPPERLEFT: // upperleft corner
win.move(app->x, app->y); win.move(screen.getHeadX(head) + app->x,
screen.getHeadY(head) + app->y);
break; break;
case POS_UPPERRIGHT: // upperright corner case POS_UPPERRIGHT: // upperright corner
win.move(screen.width() - win.width() - app->x, app->y); win.move(screen.getHeadX(head) + screen.getHeadWidth(head) - win.width() - app->x,
screen.getHeadY(head) + app->y);
break; break;
case POS_LOWERLEFT: // lowerleft corner case POS_LOWERLEFT: // lowerleft corner
win.move(app->x, screen.height() - win.height() - app->y); win.move(screen.getHeadX(head) + app->x,
screen.getHeadHeight(head) - win.height() - app->y);
break; break;
case POS_LOWERRIGHT: // lowerright corner case POS_LOWERRIGHT: // lowerright corner
win.move(screen.width() - win.width() - app->x, win.move(screen.getHeadWidth(head) - win.width() - app->x,
screen.height() - win.height() - app->y); screen.getHeadHeight(head) - win.height() - app->y);
break; break;
case POS_CENTER: // center of the screen, windows topleft corner is on the center case POS_CENTER: // center of the screen, windows topleft corner is on the center
win.move((screen.width() / 2) + app->x, win.move((screen.getHeadWidth(head) / 2) + app->x,
(screen.height() / 2) + app->y); (screen.getHeadHeight(head) / 2) + app->y);
break; break;
case POS_WINCENTER: // the window is centered REALLY upon the center case POS_WINCENTER: // the window is centered REALLY upon the center
win.move((screen.width() / 2) - ( win.width() / 2 ) + app->x, win.move((screen.getHeadWidth(head) / 2) - ( win.width() / 2 ) + app->x,
(screen.height() / 2) - ( win.height() / 2 ) + app->y); (screen.getHeadHeight(head) / 2) - ( win.height() / 2 ) + app->y);
break; break;
}; };
} }
@ -870,7 +898,7 @@ void Remember::setupFrame(FluxboxWindow &win) {
void Remember::setupClient(WinClient &winclient) { void Remember::setupClient(WinClient &winclient) {
Application *app = find(winclient); Application *app = find(winclient);
if (app == 0) if (app == 0)
return; // nothing to do return; // nothing to do
if (winclient.fbwindow() == 0 && app->is_grouped && app->group) { if (winclient.fbwindow() == 0 && app->is_grouped && app->group) {

View file

@ -45,6 +45,7 @@ class Application {
public: public:
Application(bool grouped); Application(bool grouped);
inline void forgetWorkspace() { workspace_remember = false; } inline void forgetWorkspace() { workspace_remember = false; }
inline void forgetHead() { head_remember = false; }
inline void forgetDimensions() { dimensions_remember = false; } inline void forgetDimensions() { dimensions_remember = false; }
inline void forgetPosition() { position_remember = false; } inline void forgetPosition() { position_remember = false; }
inline void forgetShadedstate() { shadedstate_remember = false; } inline void forgetShadedstate() { shadedstate_remember = false; }
@ -56,10 +57,12 @@ public:
inline void forgetJumpworkspace() { jumpworkspace_remember = false; } inline void forgetJumpworkspace() { jumpworkspace_remember = false; }
inline void forgetLayer() { layer_remember = false; } inline void forgetLayer() { layer_remember = false; }
inline void forgetSaveOnClose() { save_on_close_remember = false; } inline void forgetSaveOnClose() { save_on_close_remember = false; }
inline void rememberWorkspace(int ws) inline void rememberWorkspace(int ws)
{ workspace = ws; workspace_remember = true; } { workspace = ws; workspace_remember = true; }
inline void rememberDimensions(int width, int height) inline void rememberHead(int h)
{ head = h; head_remember = true; }
inline void rememberDimensions(int width, int height)
{ w = width; h = height; dimensions_remember = true; } { w = width; h = height; dimensions_remember = true; }
inline void rememberFocusHiddenstate(bool state) inline void rememberFocusHiddenstate(bool state)
{ focushiddenstate= state; focushiddenstate_remember= true; } { focushiddenstate= state; focushiddenstate_remember= true; }
@ -86,6 +89,9 @@ public:
bool workspace_remember; bool workspace_remember;
unsigned int workspace; unsigned int workspace;
bool head_remember;
int head;
bool dimensions_remember; bool dimensions_remember;
int w,h; // width, height int w,h; // width, height
@ -153,6 +159,7 @@ public:
REM_STUCKSTATE, REM_STUCKSTATE,
//REM_TABSTATE, ... external tabs disabled atm //REM_TABSTATE, ... external tabs disabled atm
REM_WORKSPACE, REM_WORKSPACE,
REM_HEAD,
REM_LASTATTRIB // not actually used REM_LASTATTRIB // not actually used
}; };
@ -176,7 +183,7 @@ public:
// We keep track of which app is assigned to a winclient // We keep track of which app is assigned to a winclient
// particularly useful to update counters etc on windowclose // particularly useful to update counters etc on windowclose
typedef std::map<WinClient *, Application *> Clients; typedef std::map<WinClient *, Application *> Clients;
// we have to remember any startups we did so that they are saved again // we have to remember any startups we did so that they are saved again
typedef std::list<std::string> Startups; typedef std::list<std::string> Startups;
@ -194,7 +201,7 @@ public:
void forgetAttrib(WinClient &win, Attribute attrib); void forgetAttrib(WinClient &win, Attribute attrib);
// Functions relating to AtomHandler // Functions relating to AtomHandler
// Functions we actually use // Functions we actually use
void setupFrame(FluxboxWindow &win); void setupFrame(FluxboxWindow &win);
void setupClient(WinClient &winclient); void setupClient(WinClient &winclient);

View file

@ -2372,7 +2372,7 @@ pair<int,int> BScreen::clampToHead(int head, int x, int y, int w, int h) const {
// this can be gone and a consistent interface for the two used // this can be gone and a consistent interface for the two used
// on the actual objects // on the actual objects
/* FIXME: dead code?
#ifdef SLIT #ifdef SLIT
template <> template <>
int BScreen::getOnHead<Slit>(Slit &slit) { int BScreen::getOnHead<Slit>(Slit &slit) {
@ -2385,3 +2385,14 @@ void BScreen::setOnHead<Slit>(Slit &slit, int head) {
slit.reconfigure(); slit.reconfigure();
} }
#endif // SLIT #endif // SLIT
*/
template<>
void BScreen::setOnHead<FluxboxWindow>(FluxboxWindow& win, int head) {
if (head > 0 && head <= numHeads()) {
int current_head = getHead(win.fbWindow());
win.move(getHeadX(head) + win.frame().x() - getHeadX(current_head),
getHeadY(head) + win.frame().y() - getHeadY(current_head));
}
}