From 8388f675238211ae607b864c8549b584c5fee22c Mon Sep 17 00:00:00 2001
From: Marcus Meissner <marcus@jet.franken.de>
Date: Sun, 19 Sep 1999 12:09:23 +0000
Subject: [PATCH] Added stub implementation for EnumDisplayDevices*.

---
 include/wingdi.h    | 24 ++++++++++++++++++++++++
 include/winuser.h   |  3 +++
 relay32/user32.spec |  4 ++--
 windows/user.c      | 36 ++++++++++++++++++++++++++++++++++++
 4 files changed, 65 insertions(+), 2 deletions(-)

diff --git a/include/wingdi.h b/include/wingdi.h
index a2a7da71aa9..aacf915f949 100644
--- a/include/wingdi.h
+++ b/include/wingdi.h
@@ -2993,6 +2993,30 @@ typedef struct _RGNDATA {
 
 typedef BOOL (CALLBACK* ABORTPROC)(HDC, INT);
 
+typedef struct {
+    DWORD	cb;
+    BYTE	DeviceName[32];
+    BYTE	DeviceString[128];
+    DWORD	StateFlags;
+} DISPLAY_DEVICEA,*PDISPLAY_DEVICEA,*LPDISPLAY_DEVICEA;      
+
+typedef struct {
+    DWORD	cb;
+    WCHAR	DeviceName[32];
+    WCHAR	DeviceString[128];
+    DWORD	StateFlags;
+} DISPLAY_DEVICEW,*PDISPLAY_DEVICEW,*LPDISPLAY_DEVICEW;      
+DECL_WINELIB_TYPE_AW(DISPLAY_DEVICE);
+DECL_WINELIB_TYPE_AW(PDISPLAY_DEVICE);
+DECL_WINELIB_TYPE_AW(LPDISPLAY_DEVICE);
+
+/* DISPLAY_DEVICE.StateFlags (?)*/
+#define	DISPLAY_DEVICE_ATTACHED_TO_DESKTOP	0x00000001
+#define	DISPLAY_DEVICE_MULTI_DRIVER		0x00000002
+#define	DISPLAY_DEVICE_PRIMARY_DEVICE		0x00000004
+#define	DISPLAY_DEVICE_MIRRORING_DRIVER		0x00000008
+#define	DISPLAY_DEVICE_VGA_COMPATIBLE		0x00000010
+
 #include "poppack.h"
 
 INT       WINAPI AbortDoc(HDC);
diff --git a/include/winuser.h b/include/winuser.h
index 47a5d986435..7a5eb3a7628 100644
--- a/include/winuser.h
+++ b/include/winuser.h
@@ -2898,6 +2898,9 @@ HACCEL      WINAPI CreateAcceleratorTableW(LPACCEL,INT);
 HICON     WINAPI CreateIconIndirect(LPICONINFO);
 BOOL      WINAPI DestroyAcceleratorTable(HACCEL);
 BOOL      WINAPI EnumDisplayMonitors(HDC,LPRECT,MONITORENUMPROC,LPARAM);
+BOOL        WINAPI EnumDisplayDevicesA(LPVOID,DWORD,LPDISPLAY_DEVICEA,DWORD);
+BOOL        WINAPI EnumDisplayDevicesW(LPVOID,DWORD,LPDISPLAY_DEVICEW,DWORD);
+#define     EnumDisplayDevices WINELIB_NAME_AW(EnumDisplayDevices)
 INT       WINAPI EnumPropsExA(HWND,PROPENUMPROCEXA,LPARAM);
 INT       WINAPI EnumPropsExW(HWND,PROPENUMPROCEXW,LPARAM);
 #define     EnumPropsEx WINELIB_NAME_AW(EnumPropsEx)
diff --git a/relay32/user32.spec b/relay32/user32.spec
index 5c032adef1f..c6f9c06e0e6 100644
--- a/relay32/user32.spec
+++ b/relay32/user32.spec
@@ -185,8 +185,8 @@ init	MAIN_UserInit
 181 stub EnumDesktopsW
 182 stub EnumDisplayDeviceModesA
 183 stub EnumDisplayDeviceModesW
-184 stub EnumDisplayDevicesA
-185 stub EnumDisplayDevicesW
+184 stdcall EnumDisplayDevicesA(ptr long ptr long) EnumDisplayDevicesA
+185 stdcall EnumDisplayDevicesW(ptr long ptr long) EnumDisplayDevicesW
 186 stdcall EnumPropsA(long ptr) EnumPropsA
 187 stdcall EnumPropsExA(long ptr long) EnumPropsExA
 188 stdcall EnumPropsExW(long ptr long) EnumPropsExW
diff --git a/windows/user.c b/windows/user.c
index 9297ee75972..f5372d3811b 100644
--- a/windows/user.c
+++ b/windows/user.c
@@ -409,6 +409,42 @@ BOOL WINAPI EnumDisplaySettingsW(LPCWSTR name,DWORD n,LPDEVMODEW devmode) {
 	return ret;
 }
 
+/***********************************************************************
+ *           EnumDisplayDevicesA   (USER32.184)
+ */
+BOOL WINAPI EnumDisplayDevicesA(
+	LPVOID unused,DWORD i,LPDISPLAY_DEVICEA lpDisplayDevice,DWORD dwFlags
+) {
+	if (i)
+		return FALSE;
+	FIXME_(system)("(%p,%ld,%p,0x%08lx), stub!\n",unused,i,lpDisplayDevice,dwFlags);
+	strcpy(lpDisplayDevice->DeviceName,"X11");
+	strcpy(lpDisplayDevice->DeviceString,"X 11 Windowing System");
+	lpDisplayDevice->StateFlags =
+			DISPLAY_DEVICE_ATTACHED_TO_DESKTOP	|
+			DISPLAY_DEVICE_PRIMARY_DEVICE		|
+			DISPLAY_DEVICE_VGA_COMPATIBLE;
+	return TRUE;
+}
+
+/***********************************************************************
+ *           EnumDisplayDevicesW   (USER32.185)
+ */
+BOOL WINAPI EnumDisplayDevicesW(
+	LPVOID unused,DWORD i,LPDISPLAY_DEVICEW lpDisplayDevice,DWORD dwFlags
+) {
+	if (i)
+		return FALSE;
+	FIXME_(system)("(%p,%ld,%p,0x%08lx), stub!\n",unused,i,lpDisplayDevice,dwFlags);
+	lstrcpyAtoW(lpDisplayDevice->DeviceName,"X11");
+	lstrcpyAtoW(lpDisplayDevice->DeviceString,"X 11 Windowing System");
+	lpDisplayDevice->StateFlags =
+			DISPLAY_DEVICE_ATTACHED_TO_DESKTOP	|
+			DISPLAY_DEVICE_PRIMARY_DEVICE		|
+			DISPLAY_DEVICE_VGA_COMPATIBLE;
+	return TRUE;
+}
+
 /***********************************************************************
  *           SetEventHook   (USER.321)
  *
-- 
GitLab