wfreerdp-server: modified and documented the driver settings update function
authorC-o-r-E <can.of.tuna@gmail.com>
Tue, 14 Aug 2012 18:49:53 +0000 (14:49 -0400)
committerC-o-r-E <can.of.tuna@gmail.com>
Tue, 14 Aug 2012 18:49:53 +0000 (14:49 -0400)
It should programatically detect and use the screen resolution now.

server/Windows/wf_mirage.c
server/Windows/wf_mirage.h

index fd04cf3..107fafe 100644 (file)
@@ -136,14 +136,35 @@ BOOL wf_disp_device_set_attatch(wfPeerContext* context, DWORD val)
        return true;\r
 }\r
 \r
-int wf_mirage_step3(wfPeerContext* context)\r
+/*\r
+This function will attempt to apply the currently configured display settings \r
+in the registry to the display driver. It will return true if successful \r
+otherwise it returns false.\r
+*/\r
+BOOL wf_update_mirror_drv(wfPeerContext* context)\r
 {\r
+       int currentScreenPixH, currentScreenPixW, currentScreenBPP;\r
+       HDC dc;\r
        LONG status;\r
        DWORD* extHdr;\r
        WORD drvExtraSaved;\r
        DEVMODE* deviceMode;\r
        DWORD dmf_devmodewext_magic_sig = 0xDF20C0DE;\r
-\r
+       _tchar rMsg[64];\r
+       BOOL rturn;\r
+       \r
+       /*\r
+       Will have to come back to this for supporting non primary displays and \r
+       multimonitor setups\r
+       */\r
+       dc = GetDC(NULL);\r
+       currentScreenPixH = GetDeviceCaps(dc, HORZRES);\r
+       currentScreenPixW = GetDeviceCaps(dc, VERTRES);\r
+       currentScreenBPP = GetDeviceCaps(dc, BITSPIXEL);\r
+       ReleaseDC(NULL, dc);\r
+       \r
+       _tprintf(_T("Detected current screen settings: %dx%dx%d\n"), currentScreenPixH, currentScreenPixW, currentScreenBPP);\r
+       \r
        deviceMode = (DEVMODE*) malloc(sizeof(DEVMODE) + EXT_DEVMODE_SIZE_MAX);\r
        deviceMode->dmDriverExtra = 2 * sizeof(DWORD);\r
 \r
@@ -156,9 +177,9 @@ int wf_mirage_step3(wfPeerContext* context)
        deviceMode->dmSize = sizeof(DEVMODE);\r
        deviceMode->dmDriverExtra = drvExtraSaved;\r
 \r
-       deviceMode->dmPelsWidth = 640;\r
-       deviceMode->dmPelsHeight = 480;\r
-       deviceMode->dmBitsPerPel = 32;\r
+       deviceMode->dmPelsWidth = currentScreenPixW;\r
+       deviceMode->dmPelsHeight = currentScreenPixH;\r
+       deviceMode->dmBitsPerPel = currentScreenBPP;\r
        deviceMode->dmPosition.x = 0;\r
        deviceMode->dmPosition.y = 0;\r
 \r
@@ -168,49 +189,47 @@ int wf_mirage_step3(wfPeerContext* context)
 \r
        status = ChangeDisplaySettingsEx(context->deviceName, deviceMode, NULL, CDS_UPDATEREGISTRY, NULL);\r
 \r
+       rturn = false;\r
        switch (status)\r
        {\r
                case DISP_CHANGE_SUCCESSFUL:\r
-                       printf("ChangeDisplaySettingsEx() was successfull\n");\r
+                       _tprintf(_T("ChangeDisplaySettingsEx() was successfull\n"));\r
+                       rturn = true;\r
                        break;\r
 \r
                case DISP_CHANGE_BADDUALVIEW:\r
-                       printf("ChangeDisplaySettingsEx() failed with  DISP_CHANGE_BADDUALVIEW, code %d\n", status);\r
-                       return -1;\r
+                       rMsg = _T("DISP_CHANGE_BADDUALVIEW");\r
                        break;\r
 \r
                case DISP_CHANGE_BADFLAGS:\r
-                       printf("ChangeDisplaySettingsEx() failed with  DISP_CHANGE_BADFLAGS, code %d\n", status);\r
-                       return -1;\r
+                       rMsg = _T("DISP_CHANGE_BADFLAGS");\r
                        break;\r
 \r
                case DISP_CHANGE_BADMODE:\r
-                       printf("ChangeDisplaySettingsEx() failed with  DISP_CHANGE_BADMODE, code %d\n", status);\r
-                       return -1;\r
+                       rMsg = _T("DISP_CHANGE_BADMODE");\r
                        break;\r
 \r
                case DISP_CHANGE_BADPARAM:\r
-                       printf("ChangeDisplaySettingsEx() failed with  DISP_CHANGE_BADPARAM, code %d\n", status);\r
-                       return -1;\r
+                       rMsg = _T("DISP_CHANGE_BADPARAM");\r
                        break;\r
 \r
                case DISP_CHANGE_FAILED:\r
-                       printf("ChangeDisplaySettingsEx() failed with  DISP_CHANGE_FAILED, code %d\n", status);\r
-                       return -1;\r
+                       rMsg = _T("DISP_CHANGE_FAILED");\r
                        break;\r
 \r
                case DISP_CHANGE_NOTUPDATED:\r
-                       printf("ChangeDisplaySettingsEx() failed with  DISP_CHANGE_NOTUPDATED, code %d\n", status);\r
-                       return -1;\r
+                       rMsg = _T("DISP_CHANGE_NOTUPDATED");\r
                        break;\r
 \r
                case DISP_CHANGE_RESTART:\r
-                       printf("ChangeDisplaySettingsEx() failed with  DISP_CHANGE_RESTART, code %d\n", status);\r
-                       return -1;\r
+                       rMsg = _T("DISP_CHANGE_RESTART");\r
                        break;\r
        }\r
 \r
-       return 0;\r
+       if(!rturn)\r
+               _tprintf(_T("ChangeDisplaySettingsEx() failed with %s, code %d\n"), rMsg, status);\r
+               \r
+       return rturn;\r
 }\r
 \r
 int wf_mirage_step4(wfPeerContext* context)\r
index 5774f92..151dafe 100644 (file)
@@ -202,7 +202,7 @@ typedef struct
 \r
 BOOL wf_check_disp_devices(wfPeerContext* context);\r
 BOOL wf_disp_device_set_attatch(wfPeerContext* context, DWORD val);\r
-int wf_mirage_step3(wfPeerContext* context);\r
+BOOL wf_update_mirror_drv(wfPeerContext* context)\r
 int wf_mirage_step4(wfPeerContext* context);\r
 \r
 #endif /* WF_MIRAGE_H */\r