From 1186c36c89c74066d127ca52512c1196b1802ec9 Mon Sep 17 00:00:00 2001
From: Ken Thomases <ken@codeweavers.com>
Date: Fri, 4 Oct 2013 00:17:24 -0500
Subject: [PATCH] winemac: Make clicking on the app's dock icon unminimize a
 window if there are only minimized windows.

Cocoa would automatically do this for a normal app.  However, the Mac driver
makes all of its windows inherit from NSPanel and Cocoa ignores panels for
this feature.
---
 dlls/winemac.drv/cocoa_app.m | 36 +++++++++++++++++++++++++-----------
 1 file changed, 25 insertions(+), 11 deletions(-)

diff --git a/dlls/winemac.drv/cocoa_app.m b/dlls/winemac.drv/cocoa_app.m
index 632a1bbf63c..9d33e7f414a 100644
--- a/dlls/winemac.drv/cocoa_app.m
+++ b/dlls/winemac.drv/cocoa_app.m
@@ -1915,6 +1915,21 @@ - (void) releaseMouseCapture
         }
     }
 
+    - (void) unminimizeWindowIfNoneVisible
+    {
+        if (![self frontWineWindow])
+        {
+            for (WineWindow* window in [NSApp windows])
+            {
+                if ([window isKindOfClass:[WineWindow class]] && [window isMiniaturized])
+                {
+                    [window deminiaturize:self];
+                    break;
+                }
+            }
+        }
+    }
+
 
     /*
      * ---------- NSApplicationDelegate methods ----------
@@ -1935,17 +1950,8 @@ - (void)applicationDidBecomeActive:(NSNotification *)notification
         [self updateFullscreenWindows];
         [self adjustWindowLevels:YES];
 
-        if (beenActive && ![self frontWineWindow])
-        {
-            for (WineWindow* window in [NSApp windows])
-            {
-                if ([window isKindOfClass:[WineWindow class]] && [window isMiniaturized])
-                {
-                    [window deminiaturize:self];
-                    break;
-                }
-            }
-        }
+        if (beenActive)
+            [self unminimizeWindowIfNoneVisible];
         beenActive = TRUE;
 
         // If a Wine process terminates abruptly while it has the display captured
@@ -1997,6 +2003,14 @@ - (void)applicationDidResignActive:(NSNotification *)notification
         [self releaseMouseCapture];
     }
 
+    - (BOOL) applicationShouldHandleReopen:(NSApplication*)theApplication hasVisibleWindows:(BOOL)flag
+    {
+        // Note that "flag" is often wrong.  WineWindows are NSPanels and NSPanels
+        // don't count as "visible windows" for this purpose.
+        [self unminimizeWindowIfNoneVisible];
+        return YES;
+    }
+
     - (NSApplicationTerminateReply) applicationShouldTerminate:(NSApplication *)sender
     {
         NSApplicationTerminateReply ret = NSTerminateNow;
-- 
GitLab