From 5cb2020b9b9cd146d7a5dffa47b44110d8d963ff Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Tue, 23 Jul 2002 16:17:28 +0000 Subject: [PATCH] make modal dialogs unmodal before reassigning focus when they are unmanaged --- src/Screen.cc | 12 ++++++++++++ src/Window.cc | 19 +++++-------------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/Screen.cc b/src/Screen.cc index 6970fdf6..eee7db10 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -1257,6 +1257,15 @@ void BScreen::manageWindow(Window w) { 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); @@ -1272,6 +1281,9 @@ void BScreen::unmanageWindow(BlackboxWindow *w, bool remap) { assert(it != end); // the window wasnt a desktop window? } + if (blackbox->getFocusedWindow() == w) + blackbox->setFocusedWindow((BlackboxWindow *) 0); + removeNetizen(w->getClientWindow()); /* diff --git a/src/Window.cc b/src/Window.cc index 6126bdc5..6131ec49 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -347,6 +347,10 @@ BlackboxWindow::~BlackboxWindow(void) { 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 @@ BlackboxWindow::~BlackboxWindow(void) { 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(); @@ -377,10 +372,6 @@ BlackboxWindow::~BlackboxWindow(void) { } } - delete timer; - - delete windowmenu; - if (frame.title) destroyTitlebar(); -- 2.39.2