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->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();
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in a new issue