better sticky windows.

This commit is contained in:
Dana Jansens 2002-07-29 06:21:31 +00:00
parent f61a455ec1
commit 77c518f808
3 changed files with 17 additions and 24 deletions

View file

@ -1269,9 +1269,14 @@ void BScreen::unmanageWindow(BlackboxWindow *w, bool remap) {
if (w->isModal()) w->setModal(False); if (w->isModal()) w->setModal(False);
if (w->getWorkspaceNumber() != BSENTINEL && if (w->getWorkspaceNumber() != BSENTINEL &&
w->getWindowNumber() != BSENTINEL) w->getWindowNumber() != BSENTINEL) {
getWorkspace(w->getWorkspaceNumber())->removeWindow(w); getWorkspace(w->getWorkspaceNumber())->removeWindow(w);
else if (w->isIconic()) if (w->isStuck()) {
for (unsigned int i = 0; i < getNumberOfWorkspaces(); ++i)
if (i != w->getWorkspaceNumber())
getWorkspace(i)->removeWindow(w, True);
}
} else if (w->isIconic())
removeIcon(w); removeIcon(w);
if (w->isNormal()) { if (w->isNormal()) {
@ -1515,6 +1520,10 @@ void BScreen::reassociateWindow(BlackboxWindow *w, unsigned int wkspc_id,
if (w->isIconic()) { if (w->isIconic()) {
removeIcon(w); removeIcon(w);
getWorkspace(wkspc_id)->addWindow(w); getWorkspace(wkspc_id)->addWindow(w);
if (w->isStuck())
for (unsigned int i = 0; i < getNumberOfWorkspaces(); ++i)
if (i != w->getWorkspaceNumber())
getWorkspace(i)->addWindow(w, True);
} else if (ignore_sticky || ! w->isStuck()) { } else if (ignore_sticky || ! w->isStuck()) {
if (w->isStuck()) if (w->isStuck())
w->stick(); w->stick();

View file

@ -1540,8 +1540,7 @@ void BlackboxWindow::configureShape(void) {
bool BlackboxWindow::setInputFocus(void) { bool BlackboxWindow::setInputFocus(void) {
if (flags.focused) return True; if (flags.focused) return True;
assert(! flags.iconic && assert((flags.stuck || // window must be on the current workspace or sticky
(flags.stuck || // window must be on the current workspace or sticky
blackbox_attrib.workspace == screen->getCurrentWorkspaceID())); blackbox_attrib.workspace == screen->getCurrentWorkspaceID()));
/* /*
@ -1631,6 +1630,11 @@ void BlackboxWindow::iconify(void) {
setState(IconicState); setState(IconicState);
screen->getWorkspace(blackbox_attrib.workspace)->removeWindow(this); screen->getWorkspace(blackbox_attrib.workspace)->removeWindow(this);
if (flags.stuck) {
for (unsigned int i = 0; i < screen->getNumberOfWorkspaces(); ++i)
if (i != blackbox_attrib.workspace)
screen->getWorkspace(i)->removeWindow(this, True);
}
if (isTransient()) { if (isTransient()) {
if (client.transient_for != (BlackboxWindow *) ~0ul && if (client.transient_for != (BlackboxWindow *) ~0ul &&
@ -1935,10 +1939,6 @@ void BlackboxWindow::stick(void) {
blackbox_attrib.flags ^= AttribOmnipresent; blackbox_attrib.flags ^= AttribOmnipresent;
blackbox_attrib.attrib ^= AttribOmnipresent; blackbox_attrib.attrib ^= AttribOmnipresent;
for (unsigned int i = 0; i < screen->getNumberOfWorkspaces(); ++i)
if (i != blackbox_attrib.workspace)
screen->getWorkspace(i)->removeWindow(this, True);
flags.stuck = False; flags.stuck = False;
if (! flags.iconic) if (! flags.iconic)

View file

@ -118,14 +118,6 @@ void Workspace::addWindow(BlackboxWindow *w, bool place, bool sticky) {
raiseWindow(w); raiseWindow(w);
else else
lowerWindow(w); lowerWindow(w);
// if the window is sticky, then it needs to be added on all other
// workspaces too!
if (! sticky && w->isStuck()) {
for (unsigned int i = 0; i < screen->getWorkspaceCount(); ++i)
if (i != id)
screen->getWorkspace(i)->addWindow(w, place, True);
}
} }
@ -140,14 +132,6 @@ void Workspace::removeWindow(BlackboxWindow *w, bool sticky) {
focusFallback(w); focusFallback(w);
} }
// if the window is sticky, then it needs to be removed on all other
// workspaces too!
if (! sticky && w->isStuck()) {
for (unsigned int i = 0; i < screen->getWorkspaceCount(); ++i)
if (i != id)
screen->getWorkspace(i)->removeWindow(w, True);
}
if (! w->isNormal()) return; if (! w->isNormal()) return;
BlackboxWindowList::iterator it, end = windowList.end(); BlackboxWindowList::iterator it, end = windowList.end();