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);