make modal dialogs unmodal before reassigning focus when they are unmanaged
Dana Jansens danakj@orodu.net
2 files changed,
17 insertions(+),
14 deletions(-)
M
src/Screen.cc
→
src/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.cc
→
src/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();