diff --git a/src/kits/interface/Menu.cpp b/src/kits/interface/Menu.cpp index cd5b7053f6..ebf3eb418e 100644 --- a/src/kits/interface/Menu.cpp +++ b/src/kits/interface/Menu.cpp @@ -1266,15 +1266,16 @@ BMenu::RemoveItems(int32 index, int32 count, BMenuItem *item, bool deleteItems) bool invalidateLayout = false; bool locked = LockLooper(); + BWindow *window = Window(); // The plan is simple: If we're given a BMenuItem directly, we use it // and ignore index and count. Otherwise, we use them instead. if (item != NULL) { if (fItems.RemoveItem(item)) { - if (item == fSelected) + if (item == fSelected && window != NULL) SelectItem(NULL); - item->SetSuper(NULL); item->Uninstall(); + item->SetSuper(NULL); if (deleteItems) delete item; success = invalidateLayout = true; @@ -1290,10 +1291,10 @@ BMenu::RemoveItems(int32 index, int32 count, BMenuItem *item, bool deleteItems) item = static_cast(fItems.ItemAt(i)); if (item != NULL) { if (fItems.RemoveItem(item)) { - if (item == fSelected) + if (item == fSelected && window != NULL) SelectItem(NULL); - item->SetSuper(NULL); item->Uninstall(); + item->SetSuper(NULL); if (deleteItems) delete item; success = true; @@ -1307,8 +1308,10 @@ BMenu::RemoveItems(int32 index, int32 count, BMenuItem *item, bool deleteItems) } } - if (invalidateLayout && locked && fResizeToFit) - InvalidateLayout(); + if (invalidateLayout && locked && fResizeToFit) { + LayoutItems(0); + Invalidate(); + } if (locked) UnlockLooper(); diff --git a/src/kits/interface/MenuItem.cpp b/src/kits/interface/MenuItem.cpp index 13d24a3322..56308b29fe 100644 --- a/src/kits/interface/MenuItem.cpp +++ b/src/kits/interface/MenuItem.cpp @@ -630,7 +630,7 @@ BMenuItem::Uninstall() if (Target() == fWindow) SetTarget(BMessenger()); - if (fShortcutChar != 0 && fModifiers != 0 && fWindow != NULL) + if (fShortcutChar != 0 && (fModifiers & B_COMMAND_KEY) && fWindow != NULL) fWindow->RemoveShortcut(fShortcutChar, fModifiers); fWindow = NULL;