/* INCLUDES ******************************************************************/
-#include <w32k.h>
+#include <win32k.h>
/* FIXME: find include file for these */
#define MONITORINFOF_PRIMARY 1
HANDLE Handle;
PMONITOR Monitor;
- Monitor = UserCreateObject(gHandleTable, &Handle, otMonitor, sizeof (MONITOR));
+ Monitor = UserCreateObject(gHandleTable, NULL, &Handle, otMonitor, sizeof (MONITOR));
if (Monitor == NULL)
{
return NULL;
}
- Monitor->head.h = Handle;
ExInitializeFastMutex(&Monitor->Lock);
return Monitor;
return NULL;
}
- ASSERT(USER_BODY_TO_HEADER(Monitor)->RefCount >= 0);
+ ASSERT(Monitor->head.cLockObj >= 0);
return Monitor;
}
{
DPRINT("Couldn't duplicate monitor name!\n");
UserDereferenceObject(Monitor);
- UserDeleteObject(Monitor->head.h, otMonitor);
+ UserDeleteObject(UserHMGetHandle(Monitor), otMonitor);
return STATUS_INSUFFICIENT_RESOURCES;
}
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");
Monitor->Next->Prev = Monitor->Prev;
}
+ if (Monitor->hrgnMonitor)
+ REGION_FreeRgnByHandle(Monitor->hrgnMonitor);
+
IntDestroyMonitorObject(Monitor);
return STATUS_SUCCESS;
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",
if (iCount < listSize)
{
if (hMonitorList != NULL)
- hMonitorList[iCount] = Monitor->head.h;
+ hMonitorList[iCount] = UserHMGetHandle(Monitor);
if (monitorRectList != NULL)
monitorRectList[iCount] = IntersectionRect;
}
if (iCount < listSize)
{
if (hMonitorList != NULL)
- hMonitorList[iCount] = NearestMonitor->head.h;
+ hMonitorList[iCount] = UserHMGetHandle(NearestMonitor);
}
iCount++;
}
if (iCount < listSize)
{
if (hMonitorList != NULL)
- hMonitorList[iCount] = PrimaryMonitor->head.h;
+ hMonitorList[iCount] = UserHMGetHandle(PrimaryMonitor);
}
iCount++;
}
}
if (monitorRectList != NULL && listSize != 0)
{
- safeRectList = ExAllocatePool(PagedPool, sizeof (RECT) * listSize);
+ safeRectList = ExAllocatePoolWithTag(PagedPool, sizeof (RECT) * listSize, USERTAG_MONITORRECTS);
if (safeRectList == NULL)
{
ExFreePool(safeHMonitorList);
}
/* 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)
{
PMONITOR MonitorObj = IntGetPrimaryMonitor();
if (MonitorObj)
- hMonitor = MonitorObj->head.h;
+ hMonitor = UserHMGetHandle(MonitorObj);
}
else if (dwFlags == MONITOR_DEFAULTTONEAREST)
{
{
PMONITOR monitorObj = IntGetPrimaryMonitor();
if (monitorObj)
- return monitorObj->head.h;
+ return UserHMGetHandle(monitorObj);
}
else if (dwFlags == MONITOR_DEFAULTTONEAREST)
{
/* FIXME: SetLastWin32Error? */
return (HMONITOR)NULL;
}
- rectList = ExAllocatePool(PagedPool, sizeof (RECT) * numMonitors);
+ rectList = ExAllocatePoolWithTag(PagedPool, sizeof (RECT) * numMonitors, USERTAG_MONITORRECTS);
if (rectList == NULL)
{
ExFreePool(hMonitorList);