workspacemenu->setItemSelected(current_workspace->getID() + 2, False);
- if (blackbox->getFocusedWindow() &&
- blackbox->getFocusedWindow()->getScreen() == this &&
- ! blackbox->getFocusedWindow()->isStuck()) {
- current_workspace->setLastFocusedWindow(blackbox->getFocusedWindow());
+ BlackboxWindow *focused = blackbox->getFocusedWindow();
+ if (focused && focused->getScreen() == this && ! focused->isStuck()) {
+ if (focused->getWorkspaceNumber() != current_workspace->getID()) {
+ fprintf(stderr, "%s is on the wrong workspace, aborting\n",
+ focused->getTitle());
+ abort();
+ }
+ current_workspace->setLastFocusedWindow(focused);
blackbox->setFocusedWindow((BlackboxWindow *) 0);
}
XMapRequestEvent mre;
mre.window = w;
- win->restoreAttributes();
+ if (blackbox->isStartup())
+ win->restoreAttributes();
win->mapRequestEvent(&mre);
}
BlackboxWindow::~BlackboxWindow(void) {
-
#ifdef DEBUG
fprintf(stderr, "BlackboxWindow::~BlackboxWindow: destroying 0x%lx\n",
client.window);
} else if(e->xclient.message_type == getBlackboxChangeWorkspaceAtom()) {
BScreen *screen = searchScreen(e->xclient.window);
- if (screen && e->xclient.data.l[0] >= 0 &&
- e->xclient.data.l[0] <
- static_cast<signed>(screen->getWorkspaceCount()))
- screen->changeWorkspaceID(e->xclient.data.l[0]);
+ unsigned int workspace = e->xclient.data.l[0];
+ if (screen && workspace < screen->getWorkspaceCount())
+ screen->changeWorkspaceID(workspace);
} else if (e->xclient.message_type == getBlackboxChangeWindowFocusAtom()) {
BlackboxWindow *win = searchWindow(e->xclient.window);