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:
parent
09f99a4674
commit
4a161132c2
2 changed files with 7 additions and 2 deletions
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue