all repos — openbox @ 77c518f8088dfae042f96f4f6424232e6400de40

openbox fork - make it a bit more like ryudo

better sticky windows.
Dana Jansens danakj@orodu.net
commit

77c518f8088dfae042f96f4f6424232e6400de40

parent

f61a455ec1704d305d8643b8215c8e0647f4c869

3 files changed, 17 insertions(+), 24 deletions(-)

jump to
M src/Screen.ccsrc/Screen.cc

@@ -1269,9 +1269,14 @@ // Remove the modality so that its parent won't try to re-focus the window

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 @@

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();
M src/Window.ccsrc/Window.cc

@@ -1540,8 +1540,7 @@

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 @@

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 &&

@@ -1934,10 +1938,6 @@ void BlackboxWindow::stick(void) {

if (flags.stuck) { 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;
M src/Workspace.ccsrc/Workspace.cc

@@ -118,14 +118,6 @@ if (! w->isDesktop())

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 @@ ! screen->getBlackbox()->doShutdown()) {

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();