aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathias Gumz <akira at fluxbox dot org>2011-02-24 15:55:55 (GMT)
committerMathias Gumz <akira at fluxbox dot org>2011-02-24 15:55:55 (GMT)
commit4a161132c2aacdbe4a7039f3f73f870607b5bce0 (patch)
tree7695badf08e849f81f1492dadf4c7ef62dbf959d
parent09f99a4674a75a201effdc912d79a28c2dad4225 (diff)
downloadfluxbox-4a161132c2aacdbe4a7039f3f73f870607b5bce0.zip
fluxbox-4a161132c2aacdbe4a7039f3f73f870607b5bce0.tar.bz2
better solution for warping transient windows
see #3088856 / 09f99a4674a75a201effdc912d79a28c2dad4225. at the moment this fix looks side-effect free, time will tell.
-rw-r--r--src/Window.cc2
-rw-r--r--src/Workspace.cc7
2 files changed, 7 insertions, 2 deletions
diff --git a/src/Window.cc b/src/Window.cc
index e5e9f37..51a66df 100644
--- a/src/Window.cc
+++ b/src/Window.cc
@@ -2455,7 +2455,7 @@ void FluxboxWindow::motionNotifyEvent(XMotionEvent &me) {
2455 frame().height() + 2*frame().window().borderWidth()-1); 2455 frame().height() + 2*frame().window().borderWidth()-1);
2456 } 2456 }
2457 2457
2458 if (moved_x && screen().isWorkspaceWarping() && !isTransient() ) { 2458 if (moved_x && screen().isWorkspaceWarping()) {
2459 unsigned int cur_id = screen().currentWorkspaceID(); 2459 unsigned int cur_id = screen().currentWorkspaceID();
2460 unsigned int new_id = cur_id; 2460 unsigned int new_id = cur_id;
2461 const int warpPad = screen().getEdgeSnapThreshold(); 2461 const int warpPad = screen().getEdgeSnapThreshold();
diff --git a/src/Workspace.cc b/src/Workspace.cc
index 3da8162..a162b4c 100644
--- a/src/Workspace.cc
+++ b/src/Workspace.cc
@@ -103,7 +103,12 @@ int Workspace::removeWindow(FluxboxWindow *w, bool still_alive) {
103 if (w == 0) 103 if (w == 0)
104 return -1; 104 return -1;
105 105
106 if (w->isFocused() && still_alive) 106 // if w is focused and alive, remove the focus ... except if it
107 // is a transient window. removing the focus from such a window
108 // leads in a wild race between BScreen::reassociateWindow(),
109 // BScreen::changeWorkspaceID(), FluxboxWindow::focus() etc. which
110 // finally leads to crash.
111 if (w->isFocused() && !w->isTransient() && still_alive)
107 FocusControl::unfocusWindow(w->winClient(), true, true); 112 FocusControl::unfocusWindow(w->winClient(), true, true);
108 113
109 m_windowlist.remove(w); 114 m_windowlist.remove(w);