better sticky windows.
This commit is contained in:
parent
f61a455ec1
commit
77c518f808
3 changed files with 17 additions and 24 deletions
|
@ -1269,9 +1269,14 @@ void BScreen::unmanageWindow(BlackboxWindow *w, bool remap) {
|
|||
if (w->isModal()) w->setModal(False);
|
||||
|
||||
if (w->getWorkspaceNumber() != BSENTINEL &&
|
||||
w->getWindowNumber() != BSENTINEL)
|
||||
w->getWindowNumber() != BSENTINEL) {
|
||||
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);
|
||||
|
||||
if (w->isNormal()) {
|
||||
|
@ -1515,6 +1520,10 @@ void BScreen::reassociateWindow(BlackboxWindow *w, unsigned int wkspc_id,
|
|||
if (w->isIconic()) {
|
||||
removeIcon(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()) {
|
||||
if (w->isStuck())
|
||||
w->stick();
|
||||
|
|
|
@ -1540,8 +1540,7 @@ void BlackboxWindow::configureShape(void) {
|
|||
bool BlackboxWindow::setInputFocus(void) {
|
||||
if (flags.focused) return True;
|
||||
|
||||
assert(! flags.iconic &&
|
||||
(flags.stuck || // window must be on the current workspace or sticky
|
||||
assert((flags.stuck || // window must be on the current workspace or sticky
|
||||
blackbox_attrib.workspace == screen->getCurrentWorkspaceID()));
|
||||
|
||||
/*
|
||||
|
@ -1631,6 +1630,11 @@ void BlackboxWindow::iconify(void) {
|
|||
setState(IconicState);
|
||||
|
||||
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 (client.transient_for != (BlackboxWindow *) ~0ul &&
|
||||
|
@ -1935,10 +1939,6 @@ void BlackboxWindow::stick(void) {
|
|||
blackbox_attrib.flags ^= 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;
|
||||
|
||||
if (! flags.iconic)
|
||||
|
|
|
@ -118,14 +118,6 @@ void Workspace::addWindow(BlackboxWindow *w, bool place, bool sticky) {
|
|||
raiseWindow(w);
|
||||
else
|
||||
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);
|
||||
}
|
||||
|
||||
// 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;
|
||||
|
||||
BlackboxWindowList::iterator it, end = windowList.end();
|
||||
|
|
Loading…
Reference in a new issue