Index: chrome/browser/cocoa/wrench_menu_controller.mm |
diff --git a/chrome/browser/cocoa/wrench_menu_controller.mm b/chrome/browser/cocoa/wrench_menu_controller.mm |
index 80ceed9df73c6e6447e88ea167945ce68fe49ddc..d408e1fa7dc6a8bae1e0dd7a707de72af9db63c6 100644 |
--- a/chrome/browser/cocoa/wrench_menu_controller.mm |
+++ b/chrome/browser/cocoa/wrench_menu_controller.mm |
@@ -15,6 +15,7 @@ |
@interface WrenchMenuController (Private) |
- (WrenchMenuModel*)wrenchMenuModel; |
- (void)adjustPositioning; |
+- (void)dispatchCommandInternal:(NSNumber*)tag; |
@end |
@implementation WrenchMenuController |
@@ -97,7 +98,17 @@ |
// TODO(rsesek): It'd be great if the zoom buttons didn't have to close the |
// menu. See http://crbug.com/48679 for more info. |
[menu_ cancelTracking]; |
- [self wrenchMenuModel]->ExecuteCommand(tag); |
+ // Executing certain commands from the nested run loop of the menu can lead |
+ // to wonky behavior. To avoid this, schedule the dispatch on the outermost |
Nico
2010/07/21 15:15:56
s/ior/ior (e.g. http://crbug.com/$BUG)/
|
+ // run loop. |
+ [self performSelector:@selector(dispatchCommandInternal:) |
+ withObject:[NSNumber numberWithInt:tag] |
+ afterDelay:0.0]; |
+} |
+ |
+// Used to perform the actual dispatch on the outermost runloop. |
+- (void)dispatchCommandInternal:(NSNumber*)tag { |
+ [self wrenchMenuModel]->ExecuteCommand([tag intValue]); |
} |
- (WrenchMenuModel*)wrenchMenuModel { |