changing the number of workspaces in the rc does something without restarting now!

This commit is contained in:
Dana Jansens 2002-07-19 14:38:10 +00:00
parent f586e55a8c
commit 256bcbed81
3 changed files with 27 additions and 17 deletions

View file

@ -686,6 +686,23 @@ void BScreen::load_rc(void) {
}
void BScreen::changeWorkspaceCount(unsigned int new_count) {
assert(new_count > 0);
if (new_count < workspacesList.size()) {
// shrink
for (unsigned int i = workspacesList.size(); i > new_count; --i)
removeLastWorkspace();
// removeLast already sets the current workspace to the
// last available one.
} else if (new_count > workspacesList.size()) {
// grow
for(unsigned int i = workspacesList.size(); i < new_count; ++i)
addWorkspace();
}
}
void BScreen::reconfigure(void) {
// don't reconfigure while saving the initial rc file, it's a waste and it
// breaks somethings (workspace names)
@ -696,6 +713,10 @@ void BScreen::reconfigure(void) {
slit->load_rc();
LoadStyle();
// we need to do this explicitly, because just loading this value from the rc
// does nothing
changeWorkspaceCount(resource.workspaces);
XGCValues gcv;
gcv.foreground = WhitePixel(blackbox->getXDisplay(),
getScreenNumber());

View file

@ -267,6 +267,8 @@ public:
inline int getColPlacementDirection(void) const
{ return resource.col_direction; }
void changeWorkspaceCount(unsigned int new_count);
inline void setRootColormapInstalled(bool r) { root_colormap_installed = r; }
void saveSloppyFocus(bool s);
void saveAutoRaise(bool a);

View file

@ -755,7 +755,8 @@ void Blackbox::process_event(XEvent *e) {
else
win->show();
screen->reassociateWindow(win, wksp, True);
} else if (wksp == 0xfffffffe) { // XXX: BUG, BUT DOING THIS SO KDE WORKS FOR NOW!!
} else if (wksp == 0xfffffffe || // XXX: BUG, BUT DOING THIS SO KDE WORKS FOR NOW!!
wksp == 0xffffffff) {
if (win->isIconic()) win->deiconify(False, True);
if (! win->isStuck()) win->stick();
if (! win->isVisible()) win->show();
@ -781,22 +782,8 @@ void Blackbox::process_event(XEvent *e) {
// NET_NUMBER_OF_DESKTOPS
BScreen *screen = searchScreen(e->xclient.window);
if (e->xclient.data.l[0] > 0) {
if ((unsigned) e->xclient.data.l[0] < screen->getWorkspaceCount()) {
// shrink
for (int i = screen->getWorkspaceCount();
i > e->xclient.data.l[0]; --i)
screen->removeLastWorkspace();
// removeLast already sets the current workspace to the
// last available one.
} else if ((unsigned) e->xclient.data.l[0] >
screen->getWorkspaceCount()) {
// grow
for(int i = screen->getWorkspaceCount();
i < e->xclient.data.l[0]; ++i)
screen->addWorkspace();
}
}
if (e->xclient.data.l[0] > 0)
screen->changeWorkspaceCount((unsigned) e->xclient.data.l[0]);
} else if (e->xclient.message_type ==
xatom->getAtom(XAtom::net_close_window)) {
// NET_CLOSE_WINDOW