From 848b89034e2c6bc7b4a990f832e2102f2c6044ba Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Sat, 27 May 2006 13:00:35 +0000 Subject: [PATCH] More hacks to BWindow's mousedown handler, to fix some problems with menus. Fixes bug 610 among other things. Note: I don't like this code so much, but apparently BeOS handles it in a similar way. I accept suggestions on how to improve this. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17606 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/Menu.cpp | 8 +++++++- src/kits/interface/Window.cpp | 12 +++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/kits/interface/Menu.cpp b/src/kits/interface/Menu.cpp index 55ac7fff11..a5cf6edfb6 100644 --- a/src/kits/interface/Menu.cpp +++ b/src/kits/interface/Menu.cpp @@ -2064,8 +2064,14 @@ BMenu::OkToProceed(BMenuItem* item) void BMenu::QuitTracking() { - fState = MENU_STATE_CLOSED; + if (IsStickyMode()) + SetStickyMode(false); + if (fSelected != NULL) + SelectItem(NULL); + if (BMenuBar *menuBar = dynamic_cast(this)) + menuBar->RestoreFocus(); + fState = MENU_STATE_CLOSED; } diff --git a/src/kits/interface/Window.cpp b/src/kits/interface/Window.cpp index 4368142f32..8642e4bcac 100644 --- a/src/kits/interface/Window.cpp +++ b/src/kits/interface/Window.cpp @@ -909,12 +909,14 @@ FrameMoved(origin); case B_MOUSE_DOWN: { - // Close an eventually opened menu. - if (BMenu *menu = dynamic_cast(fFocus)) { + BView *view = dynamic_cast(target); + + // Close an eventually opened menu, unless the target is the menu itself + BMenu *menu = dynamic_cast(fFocus); + if (menu != NULL && menu != view) menu->QuitTracking(); - } - - if (BView *view = dynamic_cast(target)) { + + if (view != NULL) { BPoint where; msg->FindPoint("be:view_where", &where); view->MouseDown(where);