[WIN32K]
authorRafal Harabien <rafalh@reactos.org>
Sun, 27 Mar 2011 01:12:25 +0000 (01:12 +0000)
committerRafal Harabien <rafalh@reactos.org>
Sun, 27 Mar 2011 01:12:25 +0000 (01:12 +0000)
Rename IntResetMonitorSize to IntUpdateMonitorSize
Use IntUpdateMonitorSize instead of setting monitor size manually when attaching monitor
Change display device name from VIDEOx to DISPLAYx as it is in Windows (fixes user32:monitor winetest)

[USER32]
Return FALSE in EnumDisplayMonitors if EnumProc returned FALSE (fixes user32:monitor winetest)

svn path=/trunk/; revision=51169

reactos/dll/win32/user32/misc/display.c
reactos/subsystems/win32/win32k/eng/device.c
reactos/subsystems/win32/win32k/include/monitor.h
reactos/subsystems/win32/win32k/ntuser/display.c
reactos/subsystems/win32/win32k/ntuser/monitor.c

index 196ff76..af430b3 100644 (file)
@@ -116,6 +116,7 @@ EnumDisplayMonitors(
     HMONITOR *hMonitorList;
     LPRECT pRectList;
     HANDLE hHeap;
+    BOOL ret = FALSE;
 
     /* get list of monitors/rects */
     iCount = NtUserEnumDisplayMonitors(hdc, lprcClip, NULL, NULL, 0);
@@ -139,18 +140,15 @@ EnumDisplayMonitors(
     pRectList = HeapAlloc(hHeap, 0, sizeof (RECT) * iCount);
     if (pRectList == NULL)
     {
-        HeapFree(hHeap, 0, hMonitorList);
         SetLastError(ERROR_NOT_ENOUGH_MEMORY);
-        return FALSE;
+        goto cleanup;
     }
 
     iCount = NtUserEnumDisplayMonitors(hdc, lprcClip, hMonitorList, pRectList, iCount);
     if (iCount <= 0)
     {
         /* FIXME: SetLastError() */
-        HeapFree(hHeap, 0, hMonitorList);
-        HeapFree(hHeap, 0, pRectList);
-        return FALSE;
+        goto cleanup;
     }
 
     /* enumerate list */
@@ -167,11 +165,17 @@ EnumDisplayMonitors(
         }
 
         if (!lpfnEnum(hMonitor, hMonitorDC, pMonitorRect, dwData))
-            break;
+            goto cleanup; /* return FALSE */
     }
-    HeapFree(hHeap, 0, hMonitorList);
-    HeapFree(hHeap, 0, pRectList);
-    return TRUE;
+    
+    ret = TRUE;
+    
+cleanup:
+    if(hMonitorList)
+        HeapFree(hHeap, 0, hMonitorList);
+    if(pRectList)
+        HeapFree(hHeap, 0, pRectList);
+    return ret;
 }
 
 
index 802bcf5..b20ad07 100644 (file)
@@ -90,7 +90,7 @@ EngpRegisterGraphicsDevice(
                      pustrDeviceName->Length);
 
     /* Create a win device name (FIXME: virtual devices!) */
-    swprintf(pGraphicsDevice->szWinDeviceName, L"\\\\.\\VIDEO%d", (int)giDevNum);
+    swprintf(pGraphicsDevice->szWinDeviceName, L"\\\\.\\DISPLAY%d", (int)giDevNum);
 
     /* Allocate a buffer for the strings */
     cj = pustrDiplayDrivers->Length + pustrDescription->Length + sizeof(WCHAR);
index 280864f..cc42f0d 100644 (file)
@@ -40,7 +40,7 @@ NTSTATUS CleanupMonitorImpl(VOID);
 
 NTSTATUS IntAttachMonitor(PDEVOBJ *pGdiDevice, ULONG DisplayNumber);
 NTSTATUS IntDetachMonitor(PDEVOBJ *pGdiDevice);
-NTSTATUS IntResetMonitorSize(IN PDEVOBJ *pGdiDevice);
+NTSTATUS IntUpdateMonitorSize(IN PDEVOBJ *pGdiDevice);
 PMONITOR FASTCALL UserGetMonitorObject(IN HMONITOR);
 PMONITOR FASTCALL IntGetPrimaryMonitor(VOID);
 
index 98b93d5..76c0d25 100644 (file)
@@ -766,7 +766,7 @@ UserChangeDisplaySettings(
         //IntvGetDeviceCaps(&PrimarySurface, &GdiHandleTable->DevCaps);
 
         /* Set new size of the monitor */
-        IntResetMonitorSize(ppdev);
+        IntUpdateMonitorSize(ppdev);
 
         /* Remove all cursor clipping */
         UserClipCursor(NULL);
index 935be89..83ea41a 100644 (file)
@@ -157,17 +157,8 @@ IntAttachMonitor(IN PDEVOBJ *pGdiDevice,
     }
 
     Monitor->GdiDevice = pGdiDevice;
-    Monitor->rcMonitor.left  = 0;
-    Monitor->rcMonitor.top   = 0;
-    Monitor->rcMonitor.right  = Monitor->rcMonitor.left + pGdiDevice->gdiinfo.ulHorzRes;
-    Monitor->rcMonitor.bottom = Monitor->rcMonitor.top + pGdiDevice->gdiinfo.ulVertRes;
-    Monitor->rcWork = Monitor->rcMonitor;
     Monitor->cWndStack = 0;
 
-    Monitor->hrgnMonitor = IntSysCreateRectRgnIndirect( &Monitor->rcMonitor );
-
-    IntGdiSetRegionOwner(Monitor->hrgnMonitor, GDI_OBJ_HMGR_PUBLIC);
-
     if (gMonitorList == NULL)
     {
         DPRINT("Primary monitor is beeing attached\n");
@@ -184,6 +175,8 @@ IntAttachMonitor(IN PDEVOBJ *pGdiDevice,
         }
         Monitor->Prev = p;
     }
+    
+    IntUpdateMonitorSize(pGdiDevice);
 
     return STATUS_SUCCESS;
 }
@@ -246,7 +239,7 @@ IntDetachMonitor(IN PDEVOBJ *pGdiDevice)
     return STATUS_SUCCESS;
 }
 
-/* IntResetMonitorSize
+/* IntUpdateMonitorSize
  *
  * Reset size of the monitor using atached device
  *
@@ -259,7 +252,7 @@ IntDetachMonitor(IN PDEVOBJ *pGdiDevice)
  *   Returns a NTSTATUS
  */
 NTSTATUS
-IntResetMonitorSize(IN PDEVOBJ *pGdiDevice)
+IntUpdateMonitorSize(IN PDEVOBJ *pGdiDevice)
 {
        PMONITOR Monitor;
 
@@ -701,13 +694,10 @@ NtUserGetMonitorInfo(
     /* fill device name */
     if (MonitorInfo.cbSize == sizeof (MONITORINFOEXW))
     {
-        WCHAR nul = L'\0';
-        INT len = Monitor->DeviceName.Length;
-        if (len >= CCHDEVICENAME * sizeof (WCHAR))
-            len = (CCHDEVICENAME - 1) * sizeof (WCHAR);
-
-        memcpy(MonitorInfo.szDevice, Monitor->DeviceName.Buffer, len);
-        memcpy(MonitorInfo.szDevice + (len / sizeof (WCHAR)), &nul, sizeof (WCHAR));
+        RtlStringCbCopyNW(MonitorInfo.szDevice,
+                          sizeof(MonitorInfo.szDevice),
+                          Monitor->DeviceName.Buffer,
+                          Monitor->DeviceName.Length);
     }
 
     /* output data */