ShowOwnedPopups and WM_SHOWWINDOW should handle non-WS_POPUP style
windows as well.

diff --git a/dlls/user/defwnd.c b/dlls/user/defwnd.c
index c0a1f24..a2f282e 100644
--- a/dlls/user/defwnd.c
+++ b/dlls/user/defwnd.c
@@ -580,11 +580,24 @@
     case WM_SHOWWINDOW:
         {
             LONG style = GetWindowLongW( hwnd, GWL_STYLE );
+            WND *pWnd;
             if (!lParam) return 0; /* sent from ShowWindow */
-            if (!(style & WS_POPUP)) return 0;
             if ((style & WS_VISIBLE) && wParam) return 0;
             if (!(style & WS_VISIBLE) && !wParam) return 0;
             if (!GetWindow( hwnd, GW_OWNER )) return 0;
+            if (!(pWnd = WIN_GetPtr( hwnd ))) return 0;
+            if (pWnd == WND_OTHER_PROCESS) return 0;
+            if (wParam)
+            {
+                if (!(pWnd->flags & WIN_NEEDS_SHOW_OWNEDPOPUP))
+                {
+                    WIN_ReleasePtr( pWnd );
+                    return 0;
+                }
+                pWnd->flags &= ~WIN_NEEDS_SHOW_OWNEDPOPUP;
+            }
+            else pWnd->flags |= WIN_NEEDS_SHOW_OWNEDPOPUP;
+            WIN_ReleasePtr( pWnd );
             ShowWindow( hwnd, wParam ? SW_SHOWNOACTIVATE : SW_HIDE );
             break;
         }
diff --git a/dlls/user/win.c b/dlls/user/win.c
index 050b72f..4e3f6c1 100644
--- a/dlls/user/win.c
+++ b/dlls/user/win.c
@@ -2686,36 +2686,30 @@
         if (GetWindow( win_array[count], GW_OWNER ) != owner) continue;
         if (!(pWnd = WIN_GetPtr( win_array[count] ))) continue;
         if (pWnd == WND_OTHER_PROCESS) continue;
-
-        if (pWnd->dwStyle & WS_POPUP)
+        if (fShow)
         {
-            if (fShow)
+            if (pWnd->flags & WIN_NEEDS_SHOW_OWNEDPOPUP)
             {
-                if (pWnd->flags & WIN_NEEDS_SHOW_OWNEDPOPUP)
-                {
-                    pWnd->flags &= ~WIN_NEEDS_SHOW_OWNEDPOPUP;
-                    WIN_ReleasePtr( pWnd );
-                    /* In Windows, ShowOwnedPopups(TRUE) generates
-                     * WM_SHOWWINDOW messages with SW_PARENTOPENING,
-                     * regardless of the state of the owner
-                     */
-                    SendMessageW(win_array[count], WM_SHOWWINDOW, SW_SHOW, SW_PARENTOPENING);
-                    continue;
-                }
+                WIN_ReleasePtr( pWnd );
+                /* In Windows, ShowOwnedPopups(TRUE) generates
+                 * WM_SHOWWINDOW messages with SW_PARENTOPENING,
+                 * regardless of the state of the owner
+                 */
+                SendMessageW(win_array[count], WM_SHOWWINDOW, SW_SHOWNORMAL, SW_PARENTOPENING);
+                continue;
             }
-            else
+        }
+        else
+        {
+            if (pWnd->dwStyle & WS_VISIBLE)
             {
-                if (pWnd->dwStyle & WS_VISIBLE)
-                {
-                    pWnd->flags |= WIN_NEEDS_SHOW_OWNEDPOPUP;
-                    WIN_ReleasePtr( pWnd );
-                    /* In Windows, ShowOwnedPopups(FALSE) generates
-                     * WM_SHOWWINDOW messages with SW_PARENTCLOSING,
-                     * regardless of the state of the owner
-                     */
-                    SendMessageW(win_array[count], WM_SHOWWINDOW, SW_HIDE, SW_PARENTCLOSING);
-                    continue;
-                }
+                WIN_ReleasePtr( pWnd );
+                /* In Windows, ShowOwnedPopups(FALSE) generates
+                 * WM_SHOWWINDOW messages with SW_PARENTCLOSING,
+                 * regardless of the state of the owner
+                 */
+                SendMessageW(win_array[count], WM_SHOWWINDOW, SW_HIDE, SW_PARENTCLOSING);
+                continue;
             }
         }
         WIN_ReleasePtr( pWnd );