Chromium Code Reviews| 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 { |