| Index: ui/views/controls/menu/menu_runner_impl_cocoa.mm
|
| diff --git a/ui/views/controls/menu/menu_runner_impl_cocoa.mm b/ui/views/controls/menu/menu_runner_impl_cocoa.mm
|
| index f04c2eb2137fe934a57d7680a1c38a9fc721d607..f4ac01b23dfaca81057923800d8aca9e8efcae6e 100644
|
| --- a/ui/views/controls/menu/menu_runner_impl_cocoa.mm
|
| +++ b/ui/views/controls/menu/menu_runner_impl_cocoa.mm
|
| @@ -84,19 +84,23 @@ base::scoped_nsobject<NSView> CreateMenuAnchorView(
|
| // static
|
| MenuRunnerImplInterface* MenuRunnerImplInterface::Create(
|
| ui::MenuModel* menu_model,
|
| - int32_t run_types) {
|
| + int32_t run_types,
|
| + const base::Closure& on_menu_closed_callback) {
|
| if ((run_types & kNativeRunTypes) != 0 &&
|
| (run_types & MenuRunner::IS_NESTED) == 0) {
|
| - return new MenuRunnerImplCocoa(menu_model);
|
| + return new MenuRunnerImplCocoa(menu_model, on_menu_closed_callback);
|
| }
|
|
|
| - return new MenuRunnerImplAdapter(menu_model);
|
| + return new MenuRunnerImplAdapter(menu_model, on_menu_closed_callback);
|
| }
|
|
|
| -MenuRunnerImplCocoa::MenuRunnerImplCocoa(ui::MenuModel* menu)
|
| +MenuRunnerImplCocoa::MenuRunnerImplCocoa(
|
| + ui::MenuModel* menu,
|
| + const base::Closure& on_menu_closed_callback)
|
| : running_(false),
|
| delete_after_run_(false),
|
| - closing_event_time_(base::TimeTicks()) {
|
| + closing_event_time_(base::TimeTicks()),
|
| + on_menu_closed_callback_(on_menu_closed_callback) {
|
| menu_controller_.reset(
|
| [[MenuController alloc] initWithModel:menu useWithPopUpButtonCell:NO]);
|
| }
|
| @@ -154,6 +158,11 @@ MenuRunner::RunResult MenuRunnerImplCocoa::RunMenuAt(Widget* parent,
|
| return MenuRunner::MENU_DELETED;
|
| }
|
|
|
| + // Don't invoke the callback if Release() was called, since that usually means
|
| + // the owning instance is being destroyed.
|
| + if (!on_menu_closed_callback_.is_null())
|
| + on_menu_closed_callback_.Run();
|
| +
|
| return MenuRunner::NORMAL_EXIT;
|
| }
|
|
|
|
|