Chromium Code Reviews| Index: content/browser/renderer_host/popup_menu_helper_mac.mm |
| diff --git a/content/browser/renderer_host/popup_menu_helper_mac.mm b/content/browser/renderer_host/popup_menu_helper_mac.mm |
| index d5b9ed876d50cf0dac69e62da53afe7d1b9c2208..69d782742dcfebf2006a9e6f415b847555f099ee 100644 |
| --- a/content/browser/renderer_host/popup_menu_helper_mac.mm |
| +++ b/content/browser/renderer_host/popup_menu_helper_mac.mm |
| @@ -25,7 +25,8 @@ bool g_allow_showing_popup_menus = true; |
| } // namespace |
| PopupMenuHelper::PopupMenuHelper(RenderViewHost* render_view_host) |
| - : render_view_host_(static_cast<RenderViewHostImpl*>(render_view_host)) { |
| + : render_view_host_(static_cast<RenderViewHostImpl*>(render_view_host)), |
|
Robert Sesek
2014/03/20 15:06:04
menu_runner_ is uninitialized here.
tkent
2014/03/21 13:55:26
Done.
|
| + popup_was_hidden_(false) { |
| notification_registrar_.Add( |
| this, NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED, |
| Source<RenderWidgetHost>(render_view_host)); |
| @@ -55,10 +56,9 @@ void PopupMenuHelper::ShowPopupMenu( |
| [rwhvm->cocoa_view() retain]); |
| // Display the menu. |
| - base::scoped_nsobject<WebMenuRunner> menu_runner; |
| - menu_runner.reset([[WebMenuRunner alloc] initWithItems:items |
| - fontSize:item_font_size |
| - rightAligned:right_aligned]); |
| + menu_runner_ = [[WebMenuRunner alloc] initWithItems:items |
| + fontSize:item_font_size |
| + rightAligned:right_aligned]; |
| { |
| // Make sure events can be pumped while the menu is up. |
| @@ -73,23 +73,35 @@ void PopupMenuHelper::ShowPopupMenu( |
| base::mac::ScopedSendingEvent sending_event_scoper; |
| // Now run a SYNCHRONOUS NESTED EVENT LOOP until the pop-up is finished. |
| - [menu_runner runMenuInView:cocoa_view |
| - withBounds:[cocoa_view flipRectToNSRect:bounds] |
| - initialIndex:selected_item]; |
| + [menu_runner_ runMenuInView:cocoa_view |
| + withBounds:[cocoa_view flipRectToNSRect:bounds] |
| + initialIndex:selected_item]; |
| } |
| if (!render_view_host_) { |
| // Bad news, the RenderViewHost got deleted while we were off running the |
| // menu. Nothing to do. |
| + [menu_runner_ release]; |
| + menu_runner_ = NULL; |
|
Robert Sesek
2014/03/20 15:06:04
nil instead of NULL for ObjC objects, and on line
tkent
2014/03/21 13:55:26
Done.
|
| return; |
| } |
| - if ([menu_runner menuItemWasChosen]) { |
| - render_view_host_->DidSelectPopupMenuItem( |
| - [menu_runner indexOfSelectedItem]); |
| - } else { |
| - render_view_host_->DidCancelPopupMenu(); |
| + if (!popup_was_hidden_) { |
| + if ([menu_runner_ menuItemWasChosen]) { |
| + render_view_host_->DidSelectPopupMenuItem( |
| + [menu_runner_ indexOfSelectedItem]); |
| + } else { |
| + render_view_host_->DidCancelPopupMenu(); |
| + } |
| } |
| + [menu_runner_ release]; |
| + menu_runner_ = NULL; |
| +} |
| + |
| +void PopupMenuHelper::Hide() { |
| + if (menu_runner_) |
| + [menu_runner_ hide]; |
| + popup_was_hidden_ = true; |
| } |
| // static |