[WIN32SS][NTUSER] Refactor PR #1226 (#1266)
authorKatayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
Sat, 19 Jan 2019 14:56:33 +0000 (23:56 +0900)
committerGitHub <noreply@github.com>
Sat, 19 Jan 2019 14:56:33 +0000 (23:56 +0900)
Refactoring of #1226. CORE-12845

win32ss/user/ntuser/defwnd.c

index d00d9aa..67215d1 100644 (file)
@@ -783,85 +783,84 @@ IntDefWindowProc(
          }
          if (IS_KEY_DOWN(gafAsyncKeyState, VK_LWIN) || IS_KEY_DOWN(gafAsyncKeyState, VK_RWIN))
          {
-            PWND topWnd = UserGetWindowObject(UserGetForegroundWindow());
-            
+            HWND hwndTop = UserGetForegroundWindow();
+            PWND topWnd = UserGetWindowObject(hwndTop);
             if (topWnd)
             {
                if (wParam == VK_DOWN)
                {
-                  co_IntSendMessage(UserHMGetHandle(topWnd), WM_SYSCOMMAND, (topWnd->style & WS_MAXIMIZE) ? SC_RESTORE : SC_MINIMIZE, lParam);
-               }    
-               else
-               if (wParam == VK_UP)
+                   if (topWnd->style & WS_MAXIMIZE)
+                       co_IntSendMessage(hwndTop, WM_SYSCOMMAND, SC_RESTORE, lParam);
+                   else
+                       co_IntSendMessage(hwndTop, WM_SYSCOMMAND, SC_MINIMIZE, lParam);
+               }
+               else if (wParam == VK_UP)
                {
-                  RECT currentRect = (topWnd->InternalPos.NormalRect.right == topWnd->InternalPos.NormalRect.left) || 
-                                     (topWnd->InternalPos.NormalRect.top == topWnd->InternalPos.NormalRect.bottom)
-                                       ? topWnd->rcWindow 
-                                       : topWnd->InternalPos.NormalRect;
-                  co_IntSendMessage(UserHMGetHandle(topWnd), WM_SYSCOMMAND, SC_MAXIMIZE, 0);
-                  
+                  RECT currentRect;
+                  if ((topWnd->InternalPos.NormalRect.right == topWnd->InternalPos.NormalRect.left) || 
+                      (topWnd->InternalPos.NormalRect.top == topWnd->InternalPos.NormalRect.bottom))
+                  {
+                      currentRect = topWnd->rcWindow;
+                  }
+                  else
+                  {
+                      currentRect = topWnd->InternalPos.NormalRect;
+                  }
+                  co_IntSendMessage(hwndTop, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
+
                   // save normal rect if maximazing snapped window
                   topWnd->InternalPos.NormalRect = currentRect;
                }
-               else
-               if (wParam == VK_LEFT || wParam == VK_RIGHT)
+               else if (wParam == VK_LEFT || wParam == VK_RIGHT)
                {
-                  RECT snapRect;
-                  RECT normalRect;
-                  RECT windowRect;
-                  BOOL snapped = FALSE;
+                  RECT snapRect, normalRect, windowRect;
+                  BOOL snapped;
                   normalRect = topWnd->InternalPos.NormalRect;
-                  snapped = (normalRect.left != 0 
-                          && normalRect.right != 0
-                          && normalRect.top != 0
-                          && normalRect.bottom != 0);
+                  snapped = (normalRect.left != 0 && normalRect.right != 0 &&
+                             normalRect.top != 0 && normalRect.bottom != 0);
 
                   if (topWnd->style & WS_MAXIMIZE)
                   {
-                     co_IntSendMessage(UserHMGetHandle(topWnd), WM_SYSCOMMAND, SC_RESTORE, lParam);
+                     co_IntSendMessage(hwndTop, WM_SYSCOMMAND, SC_RESTORE, lParam);
                      snapped = FALSE;
                   }
-                  
                   windowRect = topWnd->rcWindow;
 
                   UserSystemParametersInfo(SPI_GETWORKAREA, 0, &snapRect, 0);
                   if (wParam == VK_LEFT)
                   {
-                     snapRect.right = (snapRect.right - snapRect.left) / 2 + snapRect.left;
+                     snapRect.right = (snapRect.left + snapRect.right) / 2;
                   }
                   else // VK_RIGHT
                   {
-                     snapRect.left = (snapRect.right - snapRect.left) / 2 + snapRect.left;
+                     snapRect.left = (snapRect.left + snapRect.right) / 2;
                   }
 
                   if (snapped)
                   {
                      // if window was snapped but moved to other location - restore normal size
-                     if (snapRect.left != windowRect.left ||
-                         snapRect.right != windowRect.right ||
-                         snapRect.top != windowRect.top ||
-                         snapRect.bottom != windowRect.bottom)
+                     if (!IntEqualRect(&snapRect, &windowRect))
                      {
                         RECT empty = {0, 0, 0, 0};
                         co_WinPosSetWindowPos(topWnd,
-                                        0,
-                                        normalRect.left,
-                                        normalRect.top,
-                                        normalRect.right - normalRect.left,
-                                        normalRect.bottom - normalRect.top,
-                                        0);
+                                              0,
+                                              normalRect.left,
+                                              normalRect.top,
+                                              normalRect.right - normalRect.left,
+                                              normalRect.bottom - normalRect.top,
+                                              0);
                         topWnd->InternalPos.NormalRect = empty;
                      }
                   }
                   else
                   {
                      co_WinPosSetWindowPos(topWnd,
-                                        0,
-                                        snapRect.left,
-                                        snapRect.top,
-                                        snapRect.right - snapRect.left,
-                                        snapRect.bottom - snapRect.top,
-                                        0);
+                                           0,
+                                           snapRect.left,
+                                           snapRect.top,
+                                           snapRect.right - snapRect.left,
+                                           snapRect.bottom - snapRect.top,
+                                           0);
                      topWnd->InternalPos.NormalRect = windowRect;
                   }
                }