better solution for warping transient windows

see #3088856 / 09f99a4674.

at the moment this fix looks side-effect free, time will tell.
This commit is contained in:
Mathias Gumz 2011-02-24 16:55:55 +01:00
parent 09f99a4674
commit 4a161132c2
2 changed files with 7 additions and 2 deletions

View file

@ -2455,7 +2455,7 @@ void FluxboxWindow::motionNotifyEvent(XMotionEvent &me) {
frame().height() + 2*frame().window().borderWidth()-1);
}
if (moved_x && screen().isWorkspaceWarping() && !isTransient() ) {
if (moved_x && screen().isWorkspaceWarping()) {
unsigned int cur_id = screen().currentWorkspaceID();
unsigned int new_id = cur_id;
const int warpPad = screen().getEdgeSnapThreshold();

View file

@ -103,7 +103,12 @@ int Workspace::removeWindow(FluxboxWindow *w, bool still_alive) {
if (w == 0)
return -1;
if (w->isFocused() && still_alive)
// if w is focused and alive, remove the focus ... except if it
// is a transient window. removing the focus from such a window
// leads in a wild race between BScreen::reassociateWindow(),
// BScreen::changeWorkspaceID(), FluxboxWindow::focus() etc. which
// finally leads to crash.
if (w->isFocused() && !w->isTransient() && still_alive)
FocusControl::unfocusWindow(w->winClient(), true, true);
m_windowlist.remove(w);