raiseWindows(0, 0); // this also initializes the empty stacking list
rootmenu->update();
- updateClientList(); // initialize the client list, which will be empty
+ updateClientList(); // initialize the client lists, which will be empty
updateAvailableArea();
changeWorkspaceID(0);
std::for_each(netizenList.begin(), netizenList.end(), PointerAssassin());
+ while (! desktopWindowList.empty())
+ removeDesktopWindow(desktopWindowList[0]);
+
+ while (! systrayWindowList.empty())
+ removeSystrayWindow(systrayWindowList[0]);
+
delete rootmenu;
delete workspacemenu;
delete iconmenu;
}
+void BScreen::saveResizeZones(unsigned int z) {
+ resource.resize_zones = z;
+ config->setValue(screenstr + "resizeZones", resource.resize_zones);
+}
+
+
void BScreen::saveWindowCornerSnap(bool s) {
resource.window_corner_snap = s;
config->setValue(screenstr + "windowCornerSnap",
saveAutoRaise(resource.auto_raise);
saveImageDither(doImageDither());
saveAAFonts(resource.aa_fonts);
+ saveResizeZones(resource.resize_zones);
saveOpaqueMove(resource.opaque_move);
saveFullMax(resource.full_max);
saveFocusNew(resource.focus_new);
if (! config->getValue(screenstr + "antialiasFonts", resource.aa_fonts))
resource.aa_fonts = true;
+ if (! config->getValue(screenstr + "resizeZones", resource.resize_zones) ||
+ (resource.resize_zones != 1 && resource.resize_zones != 2 &&
+ resource.resize_zones != 4))
+ resource.resize_zones = 4;
+
if (! config->getValue(screenstr + "hideToolbar", resource.hide_toolbar))
resource.hide_toolbar = false;
void BScreen::changeWorkspaceID(unsigned int id) {
- if (! current_workspace) return;
-
- if (id != current_workspace->getID()) {
- 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);
- } else {
- // if no window had focus, no need to store a last focus
- current_workspace->setLastFocusedWindow((BlackboxWindow *) 0);
- }
- // when we switch workspaces, unfocus whatever was focused
- blackbox->setFocusedWindow((BlackboxWindow *) 0);
+ if (! current_workspace || id == current_workspace->getID()) return;
+
+ BlackboxWindow *focused = blackbox->getFocusedWindow();
+ if (focused && focused->getScreen() == this) {
+ assert(focused->isStuck() ||
+ focused->getWorkspaceNumber() == current_workspace->getID());
+
+ current_workspace->setLastFocusedWindow(focused);
+ } else {
+ // if no window had focus, no need to store a last focus
+ current_workspace->setLastFocusedWindow((BlackboxWindow *) 0);
+ }
+
+ // when we switch workspaces, unfocus whatever was focused
+ blackbox->setFocusedWindow((BlackboxWindow *) 0);
- current_workspace->hideAll();
- workspacemenu->setItemSelected(current_workspace->getID() + 2, False);
+ current_workspace->hideAll();
+ workspacemenu->setItemSelected(current_workspace->getID() + 2, False);
- current_workspace = getWorkspace(id);
+ current_workspace = getWorkspace(id);
- xatom->setValue(getRootWindow(), XAtom::net_current_desktop,
- XAtom::cardinal, id);
+ xatom->setValue(getRootWindow(), XAtom::net_current_desktop,
+ XAtom::cardinal, id);
- workspacemenu->setItemSelected(current_workspace->getID() + 2, True);
- toolbar->redrawWorkspaceLabel(True);
+ workspacemenu->setItemSelected(current_workspace->getID() + 2, True);
+ toolbar->redrawWorkspaceLabel(True);
- current_workspace->showAll();
+ current_workspace->showAll();
- if (resource.focus_last && current_workspace->getLastFocusedWindow()) {
- XSync(blackbox->getXDisplay(), False);
- current_workspace->getLastFocusedWindow()->setInputFocus();
- }
+ if (resource.focus_last && current_workspace->getLastFocusedWindow()) {
+ XSync(blackbox->getXDisplay(), False);
+ current_workspace->getLastFocusedWindow()->setInputFocus();
}
updateNetizenCurrentWorkspace();
} else
xatom->setValue(getRootWindow(), XAtom::net_client_list, XAtom::window,
0, 0);
+
+ updateStackingList();
}
BlackboxWindowList stack_order;
/*
- * Get the atacking order from all of the workspaces.
+ * Get the stacking order from all of the workspaces.
* We start with the current workspace so that the sticky windows will be
* in the right order on the current workspace.
* XXX: Do we need to have sticky windows in the list once for each workspace?
for (unsigned int i = 0; i < getWorkspaceCount(); ++i)
if (i != getCurrentWorkspaceID())
getWorkspace(i)->appendStackOrder(stack_order);
-
+
if (stack_order.size() > 0) {
// set the client list atoms
Window *windows = new Window[stack_order.size()];
Window *win_it = windows;
- BlackboxWindowList::iterator it = stack_order.begin();
- const BlackboxWindowList::iterator end = stack_order.end();
+ BlackboxWindowList::iterator it = stack_order.begin(),
+ end = stack_order.end();
for (; it != end; ++it, ++win_it)
*win_it = (*it)->getClientWindow();
xatom->setValue(getRootWindow(), XAtom::net_client_list_stacking,
getWorkspace(w->getWorkspaceNumber())->removeWindow(w);
getWorkspace(wkspc_id)->addWindow(w);
}
+ updateStackingList();
}