mac: Correctly close popup menu

This commit is contained in:
Cheng Zhao 2018-01-01 15:39:43 +09:00
parent 5f4b62b6c8
commit d7bc127c60
3 changed files with 16 additions and 13 deletions

View file

@ -33,7 +33,7 @@ class MenuMac : public Menu {
private:
friend class Menu;
static void SendActionToFirstResponder(const std::string& action);
void OnClosed(int32_t window_id);
scoped_nsobject<AtomMenuController> menu_controller_;

View file

@ -108,14 +108,24 @@ void MenuMac::PopupOnUI(const base::WeakPtr<NativeWindow>& native_window,
}
void MenuMac::ClosePopupAt(int32_t window_id) {
auto it = popup_controllers_.find(window_id);
if (it != popup_controllers_.end()) {
popup_controllers_.erase(it);
auto controller = popup_controllers_.find(window_id);
if (controller != popup_controllers_.end()) {
// Close the controller for the window.
[controller->second cancel];
} else if (window_id == -1) {
popup_controllers_.clear();
// Or just close all opened controllers.
for (auto it = popup_controllers_.begin();
it != popup_controllers_.end();) {
// The iterator is invalidated after the call.
[(it++)->second cancel];
}
}
}
void MenuMac::OnClosed(int32_t window_id) {
popup_controllers_.erase(window_id);
}
// static
void Menu::SetApplicationMenu(Menu* base_menu) {
MenuMac* menu = static_cast<MenuMac*>(base_menu);