Sync with trunk head (r49139)
[reactos.git] / subsystems / win32 / win32k / ntuser / monitor.c
index f39c5fe..2f587bf 100644 (file)
@@ -27,7 +27,7 @@
 
 /* INCLUDES ******************************************************************/
 
-#include <w32k.h>
+#include <win32k.h>
 
 /* FIXME: find include file for these */
 #define MONITORINFOF_PRIMARY      1
@@ -344,10 +344,7 @@ IntGetMonitorsFromRect(OPTIONAL IN LPCRECTL pRect,
       RECTL MonitorRect, IntersectionRect;
 
       ExEnterCriticalRegionAndAcquireFastMutexUnsafe(&Monitor->Lock);
-      MonitorRect.left = 0; /* FIXME: get origin */
-      MonitorRect.top = 0; /* FIXME: get origin */
-      MonitorRect.right = MonitorRect.left + Monitor->GdiDevice->gdiinfo.ulHorzRes;
-      MonitorRect.bottom = MonitorRect.top + Monitor->GdiDevice->gdiinfo.ulVertRes;
+      MonitorRect = Monitor->rcMonitor;
       ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(&Monitor->Lock);
 
       DPRINT("MonitorRect: left = %d, top = %d, right = %d, bottom = %d\n",
@@ -495,7 +492,6 @@ NtUserEnumDisplayMonitors(
    if (hDC != NULL)
    {
       PDC dc;
-      HRGN dcVisRgn;
       INT regionType;
 
       /* get visible region bounding rect */
@@ -506,10 +502,9 @@ NtUserEnumDisplayMonitors(
          /* FIXME: setlasterror? */
          return -1;
       }
-      dcVisRgn = ((PROSRGNDATA)dc->prgnVis)->BaseObject.hHmgr;
+      regionType = REGION_GetRgnBox(dc->prgnVis, &dcRect);
       DC_UnlockDc(dc);
 
-      regionType = NtGdiGetRgnBox(dcVisRgn, &dcRect);
       if (regionType == 0)
       {
          DPRINT("NtGdiGetRgnBox() failed!\n");
@@ -554,7 +549,7 @@ NtUserEnumDisplayMonitors(
 
    if (hMonitorList != NULL && listSize != 0)
    {
-      safeHMonitorList = ExAllocatePool(PagedPool, sizeof (HMONITOR) * listSize);
+      safeHMonitorList = ExAllocatePoolWithTag(PagedPool, sizeof (HMONITOR) * listSize, USERTAG_MONITORRECTS);
       if (safeHMonitorList == NULL)
       {
          /* FIXME: SetLastWin32Error? */
@@ -563,10 +558,10 @@ NtUserEnumDisplayMonitors(
    }
    if (monitorRectList != NULL && listSize != 0)
    {
-      safeRectList = ExAllocatePool(PagedPool, sizeof (RECT) * listSize);
+      safeRectList = ExAllocatePoolWithTag(PagedPool, sizeof (RECT) * listSize, USERTAG_MONITORRECTS);
       if (safeRectList == NULL)
       {
-         ExFreePool(safeHMonitorList);
+         ExFreePoolWithTag(safeHMonitorList, USERTAG_MONITORRECTS);
          /* FIXME: SetLastWin32Error? */
          return -1;
       }
@@ -592,7 +587,7 @@ NtUserEnumDisplayMonitors(
       ExFreePool(safeHMonitorList);
       if (!NT_SUCCESS(status))
       {
-         ExFreePool(safeRectList);
+         ExFreePoolWithTag(safeRectList, USERTAG_MONITORRECTS);
          SetLastNtError(status);
          return -1;
       }
@@ -600,7 +595,7 @@ NtUserEnumDisplayMonitors(
    if (monitorRectList != NULL && listSize != 0)
    {
       status = MmCopyToCaller(monitorRectList, safeRectList, sizeof (RECT) * listSize);
-      ExFreePool(safeRectList);
+      ExFreePoolWithTag(safeRectList, USERTAG_MONITORRECTS);
       if (!NT_SUCCESS(status))
       {
          SetLastNtError(status);
@@ -677,11 +672,8 @@ NtUserGetMonitorInfo(
    }
 
    /* fill monitor info */
-   MonitorInfo.rcMonitor.left = 0; /* FIXME: get origin */
-   MonitorInfo.rcMonitor.top = 0; /* FIXME: get origin */
-   MonitorInfo.rcMonitor.right = MonitorInfo.rcMonitor.left + Monitor->GdiDevice->gdiinfo.ulHorzRes;
-   MonitorInfo.rcMonitor.bottom = MonitorInfo.rcMonitor.top + Monitor->GdiDevice->gdiinfo.ulVertRes;
-   MonitorInfo.rcWork = MonitorInfo.rcMonitor; /* FIXME: use DEVMODE panning to calculate work area? */
+   MonitorInfo.rcMonitor = Monitor->rcMonitor;
+   MonitorInfo.rcWork = Monitor->rcWork;
    MonitorInfo.dwFlags = 0;
 
    if (Monitor->IsPrimary)
@@ -845,16 +837,16 @@ NtUserMonitorFromRect(
       return (HMONITOR)NULL;
    }
 
-   hMonitorList = ExAllocatePool(PagedPool, sizeof (HMONITOR) * numMonitors);
+   hMonitorList = ExAllocatePoolWithTag(PagedPool, sizeof (HMONITOR) * numMonitors, USERTAG_MONITORRECTS);
    if (hMonitorList == NULL)
    {
       /* FIXME: SetLastWin32Error? */
       return (HMONITOR)NULL;
    }
-   rectList = ExAllocatePool(PagedPool, sizeof (RECT) * numMonitors);
+   rectList = ExAllocatePoolWithTag(PagedPool, sizeof (RECT) * numMonitors, USERTAG_MONITORRECTS);
    if (rectList == NULL)
    {
-      ExFreePool(hMonitorList);
+      ExFreePoolWithTag(hMonitorList, USERTAG_MONITORRECTS);
       /* FIXME: SetLastWin32Error? */
       return (HMONITOR)NULL;
    }
@@ -864,8 +856,8 @@ NtUserMonitorFromRect(
                                         numMonitors, 0);
    if (numMonitors <= 0)
    {
-      ExFreePool(hMonitorList);
-      ExFreePool(rectList);
+      ExFreePoolWithTag(hMonitorList, USERTAG_MONITORRECTS);
+      ExFreePoolWithTag(rectList, USERTAG_MONITORRECTS);
       return (HMONITOR)NULL;
    }
 
@@ -880,8 +872,8 @@ NtUserMonitorFromRect(
       }
    }
 
-   ExFreePool(hMonitorList);
-   ExFreePool(rectList);
+   ExFreePoolWithTag(hMonitorList, USERTAG_MONITORRECTS);
+   ExFreePoolWithTag(rectList, USERTAG_MONITORRECTS);
 
    return hMonitor;
 }
@@ -893,7 +885,7 @@ NtUserMonitorFromWindow(
    IN HWND hWnd,
    IN DWORD dwFlags)
 {
-   PWINDOW_OBJECT Window;
+   PWND Window;
    HMONITOR hMonitor = NULL;
    RECTL Rect;
    DECLARE_RETURN(HMONITOR);
@@ -911,11 +903,8 @@ NtUserMonitorFromWindow(
       RETURN(hMonitor);
    }
 
-   if (!Window->Wnd)
-      RETURN(hMonitor);
-
-   Rect.left = Rect.right = Window->Wnd->rcWindow.left;
-   Rect.top = Rect.bottom = Window->Wnd->rcWindow.bottom;
+   Rect.left = Rect.right = Window->rcWindow.left;
+   Rect.top = Rect.bottom = Window->rcWindow.bottom;
 
    IntGetMonitorsFromRect(&Rect, &hMonitor, NULL, 1, dwFlags);