bonefish + axeld:
* When moving a window to another workspace (using the mouse or the keyboard), the fLastWorkspaceFocus array of the old workspace could still point to that window. * This could also lead to a stale pointer and might have caused crashes in SetFocusWindow(). This should fix #5124, and its duplicates #5294, and #5688. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36165 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -179,7 +179,7 @@ KeyboardFilter::Filter(BMessage* message, EventTarget** _target,
|
|||||||
{
|
{
|
||||||
STRACE(("Set Workspace %ld\n", key - 1));
|
STRACE(("Set Workspace %ld\n", key - 1));
|
||||||
|
|
||||||
fDesktop->SetWorkspaceAsync(key - 2,
|
fDesktop->SetWorkspaceAsync(key - B_F1_KEY,
|
||||||
(modifiers & B_SHIFT_KEY) != 0);
|
(modifiers & B_SHIFT_KEY) != 0);
|
||||||
return B_SKIP_MESSAGE;
|
return B_SKIP_MESSAGE;
|
||||||
}
|
}
|
||||||
@@ -1620,7 +1620,8 @@ Desktop::KeyboardEventTarget()
|
|||||||
|
|
||||||
|
|
||||||
/*! Tries to set the focus to the specified \a focus window. It will make sure,
|
/*! Tries to set the focus to the specified \a focus window. It will make sure,
|
||||||
however, that the window actually can have focus.
|
however, that the window actually can have focus. You are allowed to pass
|
||||||
|
in a NULL pointer for \a focus.
|
||||||
|
|
||||||
Besides the B_AVOID_FOCUS flag, a modal window, or a BWindowScreen can both
|
Besides the B_AVOID_FOCUS flag, a modal window, or a BWindowScreen can both
|
||||||
prevent it from getting focus.
|
prevent it from getting focus.
|
||||||
@@ -3119,7 +3120,10 @@ Desktop::_SetWorkspace(int32 index, bool moveFocusWindow)
|
|||||||
movedWindow->Anchor(index).position = movedWindow->Frame().LeftTop();
|
movedWindow->Anchor(index).position = movedWindow->Frame().LeftTop();
|
||||||
}
|
}
|
||||||
|
|
||||||
fLastWorkspaceFocus[previousIndex] = FocusWindow();
|
if (movedWindow == NULL || movedWindow->InWorkspace(previousIndex))
|
||||||
|
fLastWorkspaceFocus[previousIndex] = FocusWindow();
|
||||||
|
else
|
||||||
|
fLastWorkspaceFocus[previousIndex] = NULL;
|
||||||
|
|
||||||
// build region of windows that are no longer visible in the new workspace
|
// build region of windows that are no longer visible in the new workspace
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user