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..abcead010ce5c0fe2df68b3786f8eed8029f9416 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)), |
+ 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,7 +73,7 @@ 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 |
+ [menu_runner_ runMenuInView:cocoa_view |
withBounds:[cocoa_view flipRectToNSRect:bounds] |
initialIndex:selected_item]; |
Avi (use Gerrit)
2014/03/19 14:36:19
Adjust the indent to keep the : alignment.
tkent
2014/03/20 05:21:14
Done.
|
} |
@@ -81,15 +81,27 @@ void PopupMenuHelper::ShowPopupMenu( |
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; |
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 |