summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2002-07-23 16:17:28 +0000
committerDana Jansens <danakj@orodu.net>2002-07-23 16:17:28 +0000
commit5cb2020b9b9cd146d7a5dffa47b44110d8d963ff (patch)
treeb8fded84f9521671f571e2727077df728b91392c /src
parent733b4f4a3366eca53dc68fd40069b673b0261c96 (diff)
make modal dialogs unmodal before reassigning focus when they are unmanaged
Diffstat (limited to 'src')
-rw-r--r--src/Screen.cc12
-rw-r--r--src/Window.cc19
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();