all repos — openbox @ 5cb2020b9b9cd146d7a5dffa47b44110d8d963ff

openbox fork - make it a bit more like ryudo

make modal dialogs unmodal before reassigning focus when they are unmanaged
Dana Jansens danakj@orodu.net
commit

5cb2020b9b9cd146d7a5dffa47b44110d8d963ff

parent

733b4f4a3366eca53dc68fd40069b673b0261c96

2 files changed, 17 insertions(+), 14 deletions(-)

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

@@ -1257,6 +1257,15 @@

void BScreen::unmanageWindow(BlackboxWindow *w, bool remap) { w->restore(remap); + // 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) + getWorkspace(w->getWorkspaceNumber())->removeWindow(w); + else if (w->isIconic()) + removeIcon(w); + if (w->isNormal()) { // we don't list non-normal windows as managed windows windowList.remove(w);

@@ -1271,6 +1280,9 @@ break;

} assert(it != end); // the window wasnt a desktop window? } + + if (blackbox->getFocusedWindow() == w) + blackbox->setFocusedWindow((BlackboxWindow *) 0); removeNetizen(w->getClientWindow());
M src/Window.ccsrc/Window.cc

@@ -347,6 +347,10 @@ // server. This should only ever happen if using opaque moving.

if (flags.moving) endMove(); + delete timer; + + delete windowmenu; + if (client.window_group) { BWindowGroup *group = blackbox->searchGroup(client.window_group); if (group) group->removeWindow(this);

@@ -357,18 +361,9 @@ if (isTransient()) {

if (client.transient_for != (BlackboxWindow *) ~0ul) { client.transient_for->client.transientList.remove(this); } - // we save our transient_for though because the workspace will use it - // when determining the next window to get focus + client.transient_for = (BlackboxWindow*) 0; } - if (blackbox_attrib.workspace != BSENTINEL && - window_number != BSENTINEL) - screen->getWorkspace(blackbox_attrib.workspace)->removeWindow(this); - else if (flags.iconic) - screen->removeIcon(this); - - client.transient_for = (BlackboxWindow*) 0; - if (client.transientList.size() > 0) { // reset transient_for for all transients BlackboxWindowList::iterator it, end = client.transientList.end();

@@ -376,10 +371,6 @@ for (it = client.transientList.begin(); it != end; ++it) {

(*it)->client.transient_for = (BlackboxWindow*) 0; } } - - delete timer; - - delete windowmenu; if (frame.title) destroyTitlebar();