* Added a new flag kAcceptKeyboardFocusFlag that allows B_AVOID_FOCUS windows
to still receive keyboard events. This is now used for menu windows (before, the menu feel alone would trigger that behaviour). * This also fixes bug #4691, as tool tip windows use the menu feel as well. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33481 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
7f954bd566
commit
931cd377aa
@ -28,5 +28,7 @@ const window_type kWindowScreenWindow = window_type(1026);
|
|||||||
/* Private window flags */
|
/* Private window flags */
|
||||||
|
|
||||||
const uint32 kWindowScreenFlag = 0x10000;
|
const uint32 kWindowScreenFlag = 0x10000;
|
||||||
|
const uint32 kAcceptKeyboardFocusFlag = 0x40000;
|
||||||
|
// Accept keyboard input even if B_AVOID_FOCUS is set
|
||||||
|
|
||||||
#endif // _WINDOW_PRIVATE_H
|
#endif // _WINDOW_PRIVATE_H
|
||||||
|
@ -250,7 +250,8 @@ BMenuFrame::Draw(BRect updateRect)
|
|||||||
BMenuWindow::BMenuWindow(const char *name)
|
BMenuWindow::BMenuWindow(const char *name)
|
||||||
// The window will be resized by BMenu, so just pass a dummy rect
|
// The window will be resized by BMenu, so just pass a dummy rect
|
||||||
: BWindow(BRect(0, 0, 0, 0), name, B_BORDERED_WINDOW_LOOK, kMenuWindowFeel,
|
: BWindow(BRect(0, 0, 0, 0), name, B_BORDERED_WINDOW_LOOK, kMenuWindowFeel,
|
||||||
B_NOT_MOVABLE | B_NOT_ZOOMABLE | B_AVOID_FOCUS),
|
B_NOT_MOVABLE | B_NOT_ZOOMABLE | B_AVOID_FOCUS
|
||||||
|
| kAcceptKeyboardFocusFlag),
|
||||||
fMenu(NULL),
|
fMenu(NULL),
|
||||||
fMenuFrame(NULL),
|
fMenuFrame(NULL),
|
||||||
fUpperScroller(NULL),
|
fUpperScroller(NULL),
|
||||||
|
@ -1553,17 +1553,20 @@ Desktop::ViewUnderMouse(const Window* window)
|
|||||||
|
|
||||||
|
|
||||||
/*! Returns the current keyboard event target candidate - which is either the
|
/*! Returns the current keyboard event target candidate - which is either the
|
||||||
top-most window (in case it's a menu), or the one having focus.
|
top-most window (in case it has the kAcceptKeyboardFocusFlag flag set), or
|
||||||
|
the one having focus.
|
||||||
The window lock must be held when calling this function.
|
The window lock must be held when calling this function.
|
||||||
*/
|
*/
|
||||||
EventTarget*
|
EventTarget*
|
||||||
Desktop::KeyboardEventTarget()
|
Desktop::KeyboardEventTarget()
|
||||||
{
|
{
|
||||||
|
// Get the top most non-hidden window
|
||||||
Window* window = _CurrentWindows().LastWindow();
|
Window* window = _CurrentWindows().LastWindow();
|
||||||
while (window != NULL && window->IsHidden()) {
|
while (window != NULL && window->IsHidden()) {
|
||||||
window = window->PreviousWindow(fCurrentWorkspace);
|
window = window->PreviousWindow(fCurrentWorkspace);
|
||||||
}
|
}
|
||||||
if (window != NULL && window->Feel() == kMenuWindowFeel)
|
|
||||||
|
if (window != NULL && (window->Flags() & kAcceptKeyboardFocusFlag) != 0)
|
||||||
return &window->EventTarget();
|
return &window->EventTarget();
|
||||||
|
|
||||||
if (FocusWindow() != NULL)
|
if (FocusWindow() != NULL)
|
||||||
|
@ -1867,7 +1867,8 @@ Window::ValidWindowFlags()
|
|||||||
| B_AUTO_UPDATE_SIZE_LIMITS
|
| B_AUTO_UPDATE_SIZE_LIMITS
|
||||||
| B_CLOSE_ON_ESCAPE
|
| B_CLOSE_ON_ESCAPE
|
||||||
| B_NO_SERVER_SIDE_WINDOW_MODIFIERS
|
| B_NO_SERVER_SIDE_WINDOW_MODIFIERS
|
||||||
| kWindowScreenFlag;
|
| kWindowScreenFlag
|
||||||
|
| kAcceptKeyboardFocusFlag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user