From a39834740c1b2e0af66dda2243fcf25470af7424 Mon Sep 17 00:00:00 2001 From: Jeff Rehbein Date: Thu, 17 Dec 2015 14:00:04 -0600 Subject: [PATCH] DockShow workaround Implemented workaround in DockShow for TransformProcessType bugginess based on discussion at http://stackoverflow.com/questions/7596643/ --- atom/browser/browser_mac.mm | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/atom/browser/browser_mac.mm b/atom/browser/browser_mac.mm index 6a3481cf06..48050d6201 100644 --- a/atom/browser/browser_mac.mm +++ b/atom/browser/browser_mac.mm @@ -70,8 +70,21 @@ void Browser::DockHide() { } void Browser::DockShow() { + BOOL active = [[NSRunningApplication currentApplication] isActive]; ProcessSerialNumber psn = { 0, kCurrentProcess }; - TransformProcessType(&psn, kProcessTransformToForegroundApplication); + if (active) { + // Workaround buggy behavior of TransformProcessType + for (NSRunningApplication * app in [NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.apple.dock"]) { + [app activateWithOptions:NSApplicationActivateIgnoringOtherApps]; + break; + } + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.001 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ + TransformProcessType(&psn, kProcessTransformToForegroundApplication); + [[NSRunningApplication currentApplication] activateWithOptions:NSApplicationActivateIgnoringOtherApps]; + }); + } else { + TransformProcessType(&psn, kProcessTransformToForegroundApplication); + } } void Browser::DockSetMenu(ui::MenuModel* model) {