diff options
author | shess@chromium.org <shess@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-16 22:56:33 +0000 |
---|---|---|
committer | shess@chromium.org <shess@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-16 22:56:33 +0000 |
commit | 18d6a8f3322db4c50ae4a1ebd9e95796f43ea013 (patch) | |
tree | 3226e6a9beee4c3106b5425fa24c798c0e3d24c5 /chrome/browser | |
parent | 2c3ac1f83b329f1175a0295f8d8e806dba592b2a (diff) | |
download | chromium_src-18d6a8f3322db4c50ae4a1ebd9e95796f43ea013.zip chromium_src-18d6a8f3322db4c50ae4a1ebd9e95796f43ea013.tar.gz chromium_src-18d6a8f3322db4c50ae4a1ebd9e95796f43ea013.tar.bz2 |
[Mac] Pump nestable tasks while web popups are visible.
BUG=30147
TEST=Go to site with select control and flash animation, popping up control shouldn't pause the flash. See the bug for an example.
Review URL: http://codereview.chromium.org/486042
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@34772 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
3 files changed, 17 insertions, 15 deletions
diff --git a/chrome/browser/renderer_host/render_widget_host_view_mac.mm b/chrome/browser/renderer_host/render_widget_host_view_mac.mm index 17f4a66..78d2736 100644 --- a/chrome/browser/renderer_host/render_widget_host_view_mac.mm +++ b/chrome/browser/renderer_host/render_widget_host_view_mac.mm @@ -399,9 +399,13 @@ void RenderWidgetHostViewMac::ShowPopupWithItems( scoped_nsobject<WebMenuRunner> menu_runner; menu_runner.reset([[WebMenuRunner alloc] initWithItems:items]); - [menu_runner runMenuInView:parent_view_ - withBounds:position - initialIndex:selected_item]; + { + // Make sure events can be pumped while the menu is up. + MessageLoop::ScopedNestableTaskAllower allow(MessageLoop::current()); + [menu_runner runMenuInView:parent_view_ + withBounds:position + initialIndex:selected_item]; + } int window_num = [[parent_view_ window] windowNumber]; NSEvent* event = diff --git a/chrome/browser/tab_contents/render_view_context_menu_mac.mm b/chrome/browser/tab_contents/render_view_context_menu_mac.mm index ef25b7e..8e7c01e 100644 --- a/chrome/browser/tab_contents/render_view_context_menu_mac.mm +++ b/chrome/browser/tab_contents/render_view_context_menu_mac.mm @@ -75,15 +75,15 @@ void RenderViewContextMenuMac::DoInit() { clickCount:1 pressure:1.0]; - bool old_state = MessageLoop::current()->NestableTasksAllowed(); - MessageLoop::current()->SetNestableTasksAllowed(true); - - // Show the menu. - [NSMenu popUpContextMenu:menu_ - withEvent:clickEvent - forView:parent_view_]; - - MessageLoop::current()->SetNestableTasksAllowed(old_state); + { + // Make sure events can be pumped while the menu is up. + MessageLoop::ScopedNestableTaskAllower allow(MessageLoop::current()); + + // Show the menu. + [NSMenu popUpContextMenu:menu_ + withEvent:clickEvent + forView:parent_view_]; + } } // Do things like remove the windows accelerators. diff --git a/chrome/browser/tab_contents/tab_contents_view_mac.mm b/chrome/browser/tab_contents/tab_contents_view_mac.mm index 8c1f3d6..c313493 100644 --- a/chrome/browser/tab_contents/tab_contents_view_mac.mm +++ b/chrome/browser/tab_contents/tab_contents_view_mac.mm @@ -137,12 +137,10 @@ void TabContentsViewMac::StartDragging(const WebDropData& drop_data, // The drag invokes a nested event loop, arrange to continue // processing events. - bool old_state = MessageLoop::current()->NestableTasksAllowed(); - MessageLoop::current()->SetNestableTasksAllowed(true); + MessageLoop::ScopedNestableTaskAllower allow(MessageLoop::current()); NSDragOperation mask = static_cast<NSDragOperation>(allowed_operations); [cocoa_view_ startDragWithDropData:drop_data dragOperationMask:mask]; - MessageLoop::current()->SetNestableTasksAllowed(old_state); } void TabContentsViewMac::RenderViewCreated(RenderViewHost* host) { |