]> Dogcows Code - chaz/openbox/commitdiff
make modal dialogs unmodal before reassigning focus when they are unmanaged
authorDana Jansens <danakj@orodu.net>
Tue, 23 Jul 2002 16:17:28 +0000 (16:17 +0000)
committerDana Jansens <danakj@orodu.net>
Tue, 23 Jul 2002 16:17:28 +0000 (16:17 +0000)
src/Screen.cc
src/Window.cc

index 6970fdf68111095befb48096e916cf5eadeafc67..eee7db1085692b2e9fd7b2f458ca85cb5ae33d73 100644 (file)
@@ -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());
 
   /*
index 6126bdc51bbf4f31b6640a3e2bb1b31c1cd205d0..6131ec4917b21524ac73a5c1635aa40ed70a5e3e 100644 (file)
@@ -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();
 
This page took 0.037312 seconds and 4 git commands to generate.