Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
June 2022
- 68 participants
- 3274 messages
[PATCH 3/5] winex11.drv: Use nameless structs and unions in settings.c.
by Rémi Bernon
From: Rémi Bernon <rbernon(a)codeweavers.com>
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
dlls/winex11.drv/settings.c | 69 ++++++++++++++++++-------------------
1 file changed, 33 insertions(+), 36 deletions(-)
diff --git a/dlls/winex11.drv/settings.c b/dlls/winex11.drv/settings.c
index 0f9c4c876de..06cf0df4482 100644
--- a/dlls/winex11.drv/settings.c
+++ b/dlls/winex11.drv/settings.c
@@ -26,9 +26,6 @@
#include "config.h"
#include <stdlib.h>
-#define NONAMELESSUNION
-#define NONAMELESSSTRUCT
-
#include "x11drv.h"
#include "windef.h"
@@ -114,11 +111,11 @@ static BOOL nores_get_modes(ULONG_PTR id, DWORD flags, DEVMODEW **new_modes, UIN
modes[0].dmDriverExtra = 0;
modes[0].dmFields = DM_DISPLAYORIENTATION | DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT |
DM_DISPLAYFLAGS | DM_DISPLAYFREQUENCY;
- modes[0].u1.s2.dmDisplayOrientation = DMDO_DEFAULT;
+ modes[0].dmDisplayOrientation = DMDO_DEFAULT;
modes[0].dmBitsPerPel = screen_bpp;
modes[0].dmPelsWidth = primary.right;
modes[0].dmPelsHeight = primary.bottom;
- modes[0].u2.dmDisplayFlags = 0;
+ modes[0].dmDisplayFlags = 0;
modes[0].dmDisplayFrequency = 60;
*new_modes = modes;
@@ -137,10 +134,10 @@ static BOOL nores_get_current_mode(ULONG_PTR id, DEVMODEW *mode)
mode->dmFields = DM_DISPLAYORIENTATION | DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT |
DM_DISPLAYFLAGS | DM_DISPLAYFREQUENCY | DM_POSITION;
- mode->u1.s2.dmDisplayOrientation = DMDO_DEFAULT;
- mode->u2.dmDisplayFlags = 0;
- mode->u1.s2.dmPosition.x = 0;
- mode->u1.s2.dmPosition.y = 0;
+ mode->dmDisplayOrientation = DMDO_DEFAULT;
+ mode->dmDisplayFlags = 0;
+ mode->dmPosition.x = 0;
+ mode->dmPosition.y = 0;
if (id != 1)
{
@@ -207,7 +204,7 @@ void init_registry_display_settings(void)
TRACE("Device %s current display mode %ux%u %ubits %uHz at %d,%d.\n",
wine_dbgstr_w(dd.DeviceName), dm.dmPelsWidth, dm.dmPelsHeight, dm.dmBitsPerPel,
- dm.dmDisplayFrequency, dm.u1.s2.dmPosition.x, dm.u1.s2.dmPosition.y);
+ dm.dmDisplayFrequency, dm.dmPosition.x, dm.dmPosition.y);
ret = NtUserChangeDisplaySettings( &device_name, &dm, NULL,
CDS_GLOBAL | CDS_NORESET | CDS_UPDATEREGISTRY, NULL );
@@ -303,14 +300,14 @@ static BOOL read_registry_settings(const WCHAR *device_name, DEVMODEW *dm)
dm->dmFields |= DM_PELSHEIGHT;
ret &= query_display_setting( hkey, "DefaultSettings.VRefresh", &dm->dmDisplayFrequency );
dm->dmFields |= DM_DISPLAYFREQUENCY;
- ret &= query_display_setting( hkey, "DefaultSettings.Flags", &dm->u2.dmDisplayFlags );
+ ret &= query_display_setting( hkey, "DefaultSettings.Flags", &dm->dmDisplayFlags );
dm->dmFields |= DM_DISPLAYFLAGS;
- ret &= query_display_setting( hkey, "DefaultSettings.XPanning", (DWORD *)&dm->u1.s2.dmPosition.x );
- ret &= query_display_setting( hkey, "DefaultSettings.YPanning", (DWORD *)&dm->u1.s2.dmPosition.y );
+ ret &= query_display_setting( hkey, "DefaultSettings.XPanning", (DWORD *)&dm->dmPosition.x );
+ ret &= query_display_setting( hkey, "DefaultSettings.YPanning", (DWORD *)&dm->dmPosition.y );
dm->dmFields |= DM_POSITION;
- ret &= query_display_setting( hkey, "DefaultSettings.Orientation", &dm->u1.s2.dmDisplayOrientation );
+ ret &= query_display_setting( hkey, "DefaultSettings.Orientation", &dm->dmDisplayOrientation );
dm->dmFields |= DM_DISPLAYORIENTATION;
- ret &= query_display_setting( hkey, "DefaultSettings.FixedOutput", &dm->u1.s2.dmDisplayFixedOutput );
+ ret &= query_display_setting( hkey, "DefaultSettings.FixedOutput", &dm->dmDisplayFixedOutput );
NtClose( hkey );
release_display_device_init_mutex(mutex);
@@ -341,11 +338,11 @@ static BOOL write_registry_settings(const WCHAR *device_name, const DEVMODEW *dm
ret &= set_setting_value( hkey, "DefaultSettings.XResolution", dm->dmPelsWidth );
ret &= set_setting_value( hkey, "DefaultSettings.YResolution", dm->dmPelsHeight );
ret &= set_setting_value( hkey, "DefaultSettings.VRefresh", dm->dmDisplayFrequency );
- ret &= set_setting_value( hkey, "DefaultSettings.Flags", dm->u2.dmDisplayFlags );
- ret &= set_setting_value( hkey, "DefaultSettings.XPanning", dm->u1.s2.dmPosition.x );
- ret &= set_setting_value( hkey, "DefaultSettings.YPanning", dm->u1.s2.dmPosition.y );
- ret &= set_setting_value( hkey, "DefaultSettings.Orientation", dm->u1.s2.dmDisplayOrientation );
- ret &= set_setting_value( hkey, "DefaultSettings.FixedOutput", dm->u1.s2.dmDisplayFixedOutput );
+ ret &= set_setting_value( hkey, "DefaultSettings.Flags", dm->dmDisplayFlags );
+ ret &= set_setting_value( hkey, "DefaultSettings.XPanning", dm->dmPosition.x );
+ ret &= set_setting_value( hkey, "DefaultSettings.YPanning", dm->dmPosition.y );
+ ret &= set_setting_value( hkey, "DefaultSettings.Orientation", dm->dmDisplayOrientation );
+ ret &= set_setting_value( hkey, "DefaultSettings.FixedOutput", dm->dmDisplayFixedOutput );
NtClose( hkey );
release_display_device_init_mutex(mutex);
@@ -376,7 +373,7 @@ static int mode_compare(const void *p1, const void *p2)
const DEVMODEW *a = p1, *b = p2;
/* Use the width and height in landscape mode for comparison */
- if (a->u1.s2.dmDisplayOrientation == DMDO_DEFAULT || a->u1.s2.dmDisplayOrientation == DMDO_180)
+ if (a->dmDisplayOrientation == DMDO_DEFAULT || a->dmDisplayOrientation == DMDO_180)
{
a_width = a->dmPelsWidth;
a_height = a->dmPelsHeight;
@@ -387,7 +384,7 @@ static int mode_compare(const void *p1, const void *p2)
a_height = a->dmPelsWidth;
}
- if (b->u1.s2.dmDisplayOrientation == DMDO_DEFAULT || b->u1.s2.dmDisplayOrientation == DMDO_180)
+ if (b->dmDisplayOrientation == DMDO_DEFAULT || b->dmDisplayOrientation == DMDO_180)
{
b_width = b->dmPelsWidth;
b_height = b->dmPelsHeight;
@@ -415,7 +412,7 @@ static int mode_compare(const void *p1, const void *p2)
return b->dmDisplayFrequency - a->dmDisplayFrequency;
/* Orientation in ascending order */
- return a->u1.s2.dmDisplayOrientation - b->u1.s2.dmDisplayOrientation;
+ return a->dmDisplayOrientation - b->dmDisplayOrientation;
}
static void set_display_depth(ULONG_PTR display_id, DWORD depth)
@@ -585,7 +582,7 @@ static DEVMODEW *get_full_mode(ULONG_PTR id, DEVMODEW *dev_mode)
dev_mode->dmDisplayFrequency != found_mode->dmDisplayFrequency)
continue;
if (dev_mode->dmFields & DM_DISPLAYORIENTATION &&
- found_mode->u1.s2.dmDisplayOrientation != dev_mode->u1.s2.dmDisplayOrientation)
+ found_mode->dmDisplayOrientation != dev_mode->dmDisplayOrientation)
continue;
break;
@@ -607,7 +604,7 @@ static DEVMODEW *get_full_mode(ULONG_PTR id, DEVMODEW *dev_mode)
settings_handler.free_modes(modes);
full_mode->dmFields |= DM_POSITION;
- full_mode->u1.s2.dmPosition = dev_mode->u1.s2.dmPosition;
+ full_mode->dmPosition = dev_mode->dmPosition;
return full_mode;
}
@@ -668,7 +665,7 @@ static LONG get_display_settings(struct x11drv_display_setting **new_displays,
goto done;
displays[display_idx].desired_mode.dmFields |= DM_POSITION;
- displays[display_idx].desired_mode.u1.s2.dmPosition = current_mode.u1.s2.dmPosition;
+ displays[display_idx].desired_mode.dmPosition = current_mode.dmPosition;
}
}
else
@@ -682,10 +679,10 @@ static LONG get_display_settings(struct x11drv_display_setting **new_displays,
}
SetRect(&displays[display_idx].desired_rect,
- displays[display_idx].desired_mode.u1.s2.dmPosition.x,
- displays[display_idx].desired_mode.u1.s2.dmPosition.y,
- displays[display_idx].desired_mode.u1.s2.dmPosition.x + displays[display_idx].desired_mode.dmPelsWidth,
- displays[display_idx].desired_mode.u1.s2.dmPosition.y + displays[display_idx].desired_mode.dmPelsHeight);
+ displays[display_idx].desired_mode.dmPosition.x,
+ displays[display_idx].desired_mode.dmPosition.y,
+ displays[display_idx].desired_mode.dmPosition.x + displays[display_idx].desired_mode.dmPelsWidth,
+ displays[display_idx].desired_mode.dmPosition.y + displays[display_idx].desired_mode.dmPelsHeight);
lstrcpyW(displays[display_idx].desired_mode.dmDeviceName, display_device.DeviceName);
}
@@ -871,8 +868,8 @@ static void place_all_displays(struct x11drv_display_setting *displays, INT disp
for (display_idx = 0; display_idx < display_count; ++display_idx)
{
- displays[display_idx].desired_mode.u1.s2.dmPosition.x = displays[display_idx].new_rect.left;
- displays[display_idx].desired_mode.u1.s2.dmPosition.y = displays[display_idx].new_rect.top;
+ displays[display_idx].desired_mode.dmPosition.x = displays[display_idx].new_rect.left;
+ displays[display_idx].desired_mode.dmPosition.y = displays[display_idx].new_rect.top;
left_most = min(left_most, displays[display_idx].new_rect.left);
top_most = min(top_most, displays[display_idx].new_rect.top);
}
@@ -880,8 +877,8 @@ static void place_all_displays(struct x11drv_display_setting *displays, INT disp
/* Convert virtual screen coordinates to root coordinates */
for (display_idx = 0; display_idx < display_count; ++display_idx)
{
- displays[display_idx].desired_mode.u1.s2.dmPosition.x -= left_most;
- displays[display_idx].desired_mode.u1.s2.dmPosition.y -= top_most;
+ displays[display_idx].desired_mode.dmPosition.x -= left_most;
+ displays[display_idx].desired_mode.dmPosition.y -= top_most;
}
}
@@ -905,9 +902,9 @@ static LONG apply_display_settings(struct x11drv_display_setting *displays, INT
TRACE("handler:%s changing %s to position:(%d,%d) resolution:%ux%u frequency:%uHz "
"depth:%ubits orientation:%#x.\n", settings_handler.name,
wine_dbgstr_w(displays[display_idx].desired_mode.dmDeviceName),
- full_mode->u1.s2.dmPosition.x, full_mode->u1.s2.dmPosition.y, full_mode->dmPelsWidth,
+ full_mode->dmPosition.x, full_mode->dmPosition.y, full_mode->dmPelsWidth,
full_mode->dmPelsHeight, full_mode->dmDisplayFrequency, full_mode->dmBitsPerPel,
- full_mode->u1.s2.dmDisplayOrientation);
+ full_mode->dmDisplayOrientation);
ret = settings_handler.set_current_mode(displays[display_idx].id, full_mode);
if (attached_mode && ret == DISP_CHANGE_SUCCESSFUL)
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/322
June 27, 2022
[PATCH 2/5] winex11.drv: Rename display settings handlers to settings_handler.
by Rémi Bernon
From: Rémi Bernon <rbernon(a)codeweavers.com>
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
dlls/winex11.drv/settings.c | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/dlls/winex11.drv/settings.c b/dlls/winex11.drv/settings.c
index e7e353b33ad..0f9c4c876de 100644
--- a/dlls/winex11.drv/settings.c
+++ b/dlls/winex11.drv/settings.c
@@ -38,6 +38,8 @@
WINE_DEFAULT_DEBUG_CHANNEL(x11settings);
+static struct x11drv_settings_handler settings_handler;
+
struct x11drv_display_setting
{
ULONG_PTR id;
@@ -64,8 +66,6 @@ static const unsigned int depths_24[] = {8, 16, 24};
static const unsigned int depths_32[] = {8, 16, 32};
const unsigned int *depths;
-static struct x11drv_settings_handler handler;
-
/* Cached display modes for a device, protected by modes_section */
static WCHAR cached_device_name[CCHDEVICENAME];
static DWORD cached_flags;
@@ -76,10 +76,10 @@ static pthread_mutex_t settings_mutex = PTHREAD_MUTEX_INITIALIZER;
void X11DRV_Settings_SetHandler(const struct x11drv_settings_handler *new_handler)
{
- if (new_handler->priority > handler.priority)
+ if (new_handler->priority > settings_handler.priority)
{
- handler = *new_handler;
- TRACE("Display settings are now handled by: %s.\n", handler.name);
+ settings_handler = *new_handler;
+ TRACE("Display settings are now handled by: %s.\n", settings_handler.name);
}
}
@@ -490,7 +490,7 @@ BOOL X11DRV_EnumDisplaySettingsEx( LPCWSTR name, DWORD n, LPDEVMODEW devmode, DW
if (n == ENUM_CURRENT_SETTINGS)
{
- if (!handler.get_id(name, &id) || !handler.get_current_mode(id, devmode))
+ if (!settings_handler.get_id(name, &id) || !settings_handler.get_current_mode(id, devmode))
{
ERR("Failed to get %s current display settings.\n", wine_dbgstr_w(name));
return FALSE;
@@ -505,7 +505,7 @@ BOOL X11DRV_EnumDisplaySettingsEx( LPCWSTR name, DWORD n, LPDEVMODEW devmode, DW
pthread_mutex_lock( &settings_mutex );
if (n == 0 || wcsicmp(cached_device_name, name) || cached_flags != flags)
{
- if (!handler.get_id(name, &id) || !handler.get_modes(id, flags, &modes, &mode_count))
+ if (!settings_handler.get_id(name, &id) || !settings_handler.get_modes(id, flags, &modes, &mode_count))
{
ERR("Failed to get %s supported display modes.\n", wine_dbgstr_w(name));
pthread_mutex_unlock( &settings_mutex );
@@ -515,7 +515,7 @@ BOOL X11DRV_EnumDisplaySettingsEx( LPCWSTR name, DWORD n, LPDEVMODEW devmode, DW
qsort(modes, mode_count, sizeof(*modes) + modes[0].dmDriverExtra, mode_compare);
if (cached_modes)
- handler.free_modes(cached_modes);
+ settings_handler.free_modes(cached_modes);
lstrcpyW(cached_device_name, name);
cached_flags = flags;
cached_modes = modes;
@@ -525,7 +525,7 @@ BOOL X11DRV_EnumDisplaySettingsEx( LPCWSTR name, DWORD n, LPDEVMODEW devmode, DW
if (n >= cached_mode_count)
{
pthread_mutex_unlock( &settings_mutex );
- WARN("handler:%s device:%s mode index:%#x not found.\n", handler.name, wine_dbgstr_w(name), n);
+ WARN("handler:%s device:%s mode index:%#x not found.\n", settings_handler.name, wine_dbgstr_w(name), n);
SetLastError(ERROR_NO_MORE_FILES);
return FALSE;
}
@@ -562,7 +562,7 @@ static DEVMODEW *get_full_mode(ULONG_PTR id, DEVMODEW *dev_mode)
if (is_detached_mode(dev_mode))
return dev_mode;
- if (!handler.get_modes(id, EDS_ROTATEDMODE, &modes, &mode_count))
+ if (!settings_handler.get_modes(id, EDS_ROTATEDMODE, &modes, &mode_count))
return NULL;
qsort(modes, mode_count, sizeof(*modes) + modes[0].dmDriverExtra, mode_compare);
@@ -593,18 +593,18 @@ static DEVMODEW *get_full_mode(ULONG_PTR id, DEVMODEW *dev_mode)
if (!found_mode || mode_idx == mode_count)
{
- handler.free_modes(modes);
+ settings_handler.free_modes(modes);
return NULL;
}
if (!(full_mode = malloc(sizeof(*found_mode) + found_mode->dmDriverExtra)))
{
- handler.free_modes(modes);
+ settings_handler.free_modes(modes);
return NULL;
}
memcpy(full_mode, found_mode, sizeof(*found_mode) + found_mode->dmDriverExtra);
- handler.free_modes(modes);
+ settings_handler.free_modes(modes);
full_mode->dmFields |= DM_POSITION;
full_mode->u1.s2.dmPosition = dev_mode->u1.s2.dmPosition;
@@ -640,7 +640,7 @@ static LONG get_display_settings(struct x11drv_display_setting **new_displays,
if (NtUserEnumDisplayDevices( NULL, display_idx, &display_device, 0 ))
goto done;
- if (!handler.get_id(display_device.DeviceName, &displays[display_idx].id))
+ if (!settings_handler.get_id(display_device.DeviceName, &displays[display_idx].id))
{
ret = DISP_CHANGE_BADPARAM;
goto done;
@@ -903,13 +903,13 @@ static LONG apply_display_settings(struct x11drv_display_setting *displays, INT
return DISP_CHANGE_BADMODE;
TRACE("handler:%s changing %s to position:(%d,%d) resolution:%ux%u frequency:%uHz "
- "depth:%ubits orientation:%#x.\n", handler.name,
+ "depth:%ubits orientation:%#x.\n", settings_handler.name,
wine_dbgstr_w(displays[display_idx].desired_mode.dmDeviceName),
full_mode->u1.s2.dmPosition.x, full_mode->u1.s2.dmPosition.y, full_mode->dmPelsWidth,
full_mode->dmPelsHeight, full_mode->dmDisplayFrequency, full_mode->dmBitsPerPel,
full_mode->u1.s2.dmDisplayOrientation);
- ret = handler.set_current_mode(displays[display_idx].id, full_mode);
+ ret = settings_handler.set_current_mode(displays[display_idx].id, full_mode);
if (attached_mode && ret == DISP_CHANGE_SUCCESSFUL)
set_display_depth(displays[display_idx].id, full_mode->dmBitsPerPel);
free_full_mode(full_mode);
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/322
June 27, 2022
[PATCH 1/5] winex11.drv: Set desktop settings handler before updating display devices.
by Rémi Bernon
From: Rémi Bernon <rbernon(a)codeweavers.com>
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
dlls/winex11.drv/desktop.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/dlls/winex11.drv/desktop.c b/dlls/winex11.drv/desktop.c
index bc2ba60397b..d89f1b39983 100644
--- a/dlls/winex11.drv/desktop.c
+++ b/dlls/winex11.drv/desktop.c
@@ -301,6 +301,16 @@ void X11DRV_init_desktop( Window win, unsigned int width, unsigned int height )
max_width = primary_rect.right;
max_height = primary_rect.bottom;
+ /* Initialize virtual desktop display settings handler */
+ settings_handler.name = "Virtual Desktop";
+ settings_handler.priority = 1000;
+ settings_handler.get_id = X11DRV_desktop_get_id;
+ settings_handler.get_modes = X11DRV_desktop_get_modes;
+ settings_handler.free_modes = X11DRV_desktop_free_modes;
+ settings_handler.get_current_mode = X11DRV_desktop_get_current_mode;
+ settings_handler.set_current_mode = X11DRV_desktop_set_current_mode;
+ X11DRV_Settings_SetHandler( &settings_handler );
+
/* Initialize virtual desktop mode display device handler */
desktop_handler.name = "Virtual Desktop";
desktop_handler.get_gpus = X11DRV_desktop_get_gpus;
@@ -312,16 +322,6 @@ void X11DRV_init_desktop( Window win, unsigned int width, unsigned int height )
desktop_handler.register_event_handlers = NULL;
TRACE("Display device functions are now handled by: Virtual Desktop\n");
X11DRV_DisplayDevices_Init( TRUE );
-
- /* Initialize virtual desktop display settings handler */
- settings_handler.name = "Virtual Desktop";
- settings_handler.priority = 1000;
- settings_handler.get_id = X11DRV_desktop_get_id;
- settings_handler.get_modes = X11DRV_desktop_get_modes;
- settings_handler.free_modes = X11DRV_desktop_free_modes;
- settings_handler.get_current_mode = X11DRV_desktop_get_current_mode;
- settings_handler.set_current_mode = X11DRV_desktop_set_current_mode;
- X11DRV_Settings_SetHandler( &settings_handler );
}
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/322
June 27, 2022
[PATCH 0/5] MR322: winex11.drv: Preparation for nulldrv display modes.
by Rémi Bernon
The idea is to have a `add_mode` manager callback and enumerate adapter modes when updating display devices. Then the modes would be read from the registry and cached with the adapters and monitors, allowing us to move more things to win32u.
This MR is a preparation towards that, moving the `winex11` settings handler to display.c, and making sure we do not enumerate display modes before they have been initialized or while the list is being built.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/322
June 27, 2022
Re: [PATCH v2 5/5] user32: Remove no longer needed helpers.
by Marvin
Hi,
It looks like your patch introduced the new failures shown below.
Please investigate and fix them before resubmitting your patch.
If they are not new, fixing them anyway would help a lot. Otherwise
please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how
to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=117682
Your paranoid android.
=== debian11 (64 bit WoW report) ===
user32:
winstation.c:971: Test failed: unexpected foreground window 0000000000010020
June 27, 2022
Re: [PATCH v3 2/4] mf: Avoid leaking nodes in IMFTopoLoader_Load.
by Marvin
Hi,
It looks like your patch introduced the new failures shown below.
Please investigate and fix them before resubmitting your patch.
If they are not new, fixing them anyway would help a lot. Otherwise
please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how
to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=117684
Your paranoid android.
=== debian11 (32 bit report) ===
Report validation errors:
mf:mf prints too much data (39958 bytes)
=== debian11 (32 bit WoW report) ===
Report validation errors:
mf:mf prints too much data (40045 bytes)
June 27, 2022
Re: [PATCH v3 1/4] mf/tests: Add some missing IMFActivate_Shutdown calls.
by Marvin
Hi,
It looks like your patch introduced the new failures shown below.
Please investigate and fix them before resubmitting your patch.
If they are not new, fixing them anyway would help a lot. Otherwise
please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how
to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=117683
Your paranoid android.
=== debian11 (32 bit report) ===
Report validation errors:
mf:mf prints too much data (40346 bytes)
=== debian11 (32 bit WoW report) ===
Report validation errors:
mf:mf prints too much data (40361 bytes)
June 27, 2022
[PATCH v3 4/4] mf: Uninitialize renderer before creating mixer and presenter.
by Rémi Bernon
From: Rémi Bernon <rbernon(a)codeweavers.com>
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
dlls/mf/evr.c | 36 ++++++++++++++++++++++--------------
1 file changed, 22 insertions(+), 14 deletions(-)
diff --git a/dlls/mf/evr.c b/dlls/mf/evr.c
index 90702ff3d95..c9506af9143 100644
--- a/dlls/mf/evr.c
+++ b/dlls/mf/evr.c
@@ -1702,11 +1702,8 @@ static HRESULT video_renderer_configure_presenter(struct video_renderer *rendere
return hr;
}
-static HRESULT video_renderer_initialize(struct video_renderer *renderer, IMFTransform *mixer,
- IMFVideoPresenter *presenter)
+static void video_renderer_uninitialize(struct video_renderer *renderer)
{
- HRESULT hr;
-
video_renderer_release_services(renderer);
if (renderer->mixer)
@@ -1726,6 +1723,12 @@ static HRESULT video_renderer_initialize(struct video_renderer *renderer, IMFTra
IUnknown_Release(renderer->device_manager);
renderer->device_manager = NULL;
}
+}
+
+static HRESULT video_renderer_initialize(struct video_renderer *renderer, IMFTransform *mixer,
+ IMFVideoPresenter *presenter)
+{
+ HRESULT hr;
renderer->mixer = mixer;
IMFTransform_AddRef(renderer->mixer);
@@ -1747,11 +1750,22 @@ static HRESULT WINAPI video_renderer_InitializeRenderer(IMFVideoRenderer *iface,
TRACE("%p, %p, %p.\n", iface, mixer, presenter);
+ EnterCriticalSection(&renderer->cs);
+
+ if (renderer->flags & EVR_SHUT_DOWN)
+ {
+ LeaveCriticalSection(&renderer->cs);
+ return MF_E_SHUTDOWN;
+ }
+
+ video_renderer_uninitialize(renderer);
+
if (mixer)
IMFTransform_AddRef(mixer);
else if (FAILED(hr = video_renderer_create_mixer(NULL, &mixer)))
{
WARN("Failed to create default mixer object, hr %#lx.\n", hr);
+ LeaveCriticalSection(&renderer->cs);
return hr;
}
@@ -1760,21 +1774,15 @@ static HRESULT WINAPI video_renderer_InitializeRenderer(IMFVideoRenderer *iface,
else if (FAILED(hr = video_renderer_create_presenter(renderer, NULL, &presenter)))
{
WARN("Failed to create default presenter, hr %#lx.\n", hr);
+ LeaveCriticalSection(&renderer->cs);
IMFTransform_Release(mixer);
return hr;
}
- EnterCriticalSection(&renderer->cs);
-
- if (renderer->flags & EVR_SHUT_DOWN)
- hr = MF_E_SHUTDOWN;
- else
- {
- /* FIXME: check clock state */
- /* FIXME: check that streams are not initialized */
+ /* FIXME: check clock state */
+ /* FIXME: check that streams are not initialized */
- hr = video_renderer_initialize(renderer, mixer, presenter);
- }
+ hr = video_renderer_initialize(renderer, mixer, presenter);
LeaveCriticalSection(&renderer->cs);
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/310
June 27, 2022
[PATCH v3 3/4] mf: Release video renderer services before re-initializing.
by Rémi Bernon
From: Rémi Bernon <rbernon(a)codeweavers.com>
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
dlls/mf/evr.c | 2 ++
dlls/mf/tests/mf.c | 1 -
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/dlls/mf/evr.c b/dlls/mf/evr.c
index b035b8b601b..90702ff3d95 100644
--- a/dlls/mf/evr.c
+++ b/dlls/mf/evr.c
@@ -1707,6 +1707,8 @@ static HRESULT video_renderer_initialize(struct video_renderer *renderer, IMFTra
{
HRESULT hr;
+ video_renderer_release_services(renderer);
+
if (renderer->mixer)
{
IMFTransform_Release(renderer->mixer);
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c
index ab380d1c475..adc6f7134d5 100644
--- a/dlls/mf/tests/mf.c
+++ b/dlls/mf/tests/mf.c
@@ -4765,7 +4765,6 @@ static void test_evr(void)
IMFMediaSink_Release(sink);
ref = IMFVideoRenderer_Release(video_renderer);
- todo_wine
ok(ref == 0, "Release returned %ld\n", ref);
hr = MFCreateVideoRendererActivate(NULL, NULL);
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/310
June 27, 2022
[PATCH v3 2/4] mf: Avoid leaking nodes in IMFTopoLoader_Load.
by Rémi Bernon
From: Rémi Bernon <rbernon(a)codeweavers.com>
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
dlls/mf/tests/mf.c | 13 ++-----------
dlls/mf/topology.c | 28 +++++++++++++++++++++-------
2 files changed, 23 insertions(+), 18 deletions(-)
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c
index 260dcd494b0..ab380d1c475 100644
--- a/dlls/mf/tests/mf.c
+++ b/dlls/mf/tests/mf.c
@@ -2174,9 +2174,8 @@ static void test_topology_loader(void)
/* Source node only. */
hr = IMFTopoLoader_Load(loader, topology, &full_topology, NULL);
- todo_wine_if(hr == S_OK)
+ todo_wine_if(hr == E_INVALIDARG)
ok(hr == MF_E_TOPO_UNSUPPORTED, "Unexpected hr %#lx.\n", hr);
- if (hr == S_OK) IMFTopology_Release(full_topology);
hr = MFCreateTopologyNode(MF_TOPOLOGY_OUTPUT_NODE, &sink_node);
ok(hr == S_OK, "Failed to create output node, hr %#lx.\n", hr);
@@ -2387,28 +2386,23 @@ todo_wine {
ref = IMFTopoLoader_Release(loader);
ok(ref == 0, "Release returned %ld\n", ref);
ref = IMFTopologyNode_Release(src_node);
- todo_wine
ok(ref == 0, "Release returned %ld\n", ref);
ref = IMFTopologyNode_Release(sink_node);
- todo_wine
ok(ref == 0, "Release returned %ld\n", ref);
ref = IMFMediaSource_Release(source);
- todo_wine
ok(ref == 0, "Release returned %ld\n", ref);
ref = IMFPresentationDescriptor_Release(pd);
- todo_wine
ok(ref == 0, "Release returned %ld\n", ref);
ref = IMFStreamDescriptor_Release(sd);
- todo_wine
ok(ref == 0, "Release returned %ld\n", ref);
ref = IMFMediaType_Release(input_type);
- todo_wine
ok(ref == 0, "Release returned %ld\n", ref);
/* FIXME: is native really leaking refs here, or are we? */
ref = IMFMediaType_Release(output_type);
+ todo_wine
ok(ref != 0, "Release returned %ld\n", ref);
hr = MFShutdown();
@@ -2541,10 +2535,8 @@ static void test_topology_loader_evr(void)
ref = IMFTopology_Release(topology);
ok(ref == 0, "Release returned %ld\n", ref);
ref = IMFTopologyNode_Release(source_node);
- todo_wine
ok(ref == 0, "Release returned %ld\n", ref);
ref = IMFTopologyNode_Release(evr_node);
- todo_wine
ok(ref == 0, "Release returned %ld\n", ref);
hr = IMFActivate_ShutdownObject(activate);
@@ -2555,7 +2547,6 @@ static void test_topology_loader_evr(void)
ok(ref == 0, "Release returned %ld\n", ref);
ref = IMFMediaType_Release(media_type);
- todo_wine
ok(ref == 0, "Release returned %ld\n", ref);
DestroyWindow(window);
diff --git a/dlls/mf/topology.c b/dlls/mf/topology.c
index ff90bc2c8af..8d64c10b5c7 100644
--- a/dlls/mf/topology.c
+++ b/dlls/mf/topology.c
@@ -2359,6 +2359,7 @@ static HRESULT topology_loader_resolve_branch(struct topoloader_context *context
};
MF_TOPOLOGY_TYPE u_type, d_type;
IMFTopologyNode *node;
+ HRESULT hr;
TOPOID id;
/* Downstream node might have already been cloned. */
@@ -2372,10 +2373,13 @@ static HRESULT topology_loader_resolve_branch(struct topoloader_context *context
if (!connectors[u_type][d_type])
{
WARN("Unsupported branch kind %d -> %d.\n", u_type, d_type);
+ IMFTopologyNode_Release(node);
return E_FAIL;
}
- return connectors[u_type][d_type](context, upstream_node, output_index, node, input_index);
+ hr = connectors[u_type][d_type](context, upstream_node, output_index, node, input_index);
+ IMFTopologyNode_Release(node);
+ return hr;
}
static HRESULT topology_loader_resolve_nodes(struct topoloader_context *context, unsigned int *layer_size)
@@ -2391,19 +2395,25 @@ static HRESULT topology_loader_resolve_nodes(struct topoloader_context *context,
{
++size;
- IMFTopology_GetNodeByID(context->input_topology, id, &orig_node);
-
IMFTopologyNode_GetNodeType(node, &node_type);
switch (node_type)
{
case MF_TOPOLOGY_SOURCESTREAM_NODE:
- if (FAILED(IMFTopologyNode_GetOutput(orig_node, 0, &downstream_node, &input_index)))
+ if (SUCCEEDED(hr = IMFTopology_GetNodeByID(context->input_topology, id, &orig_node)))
+ {
+ hr = IMFTopologyNode_GetOutput(orig_node, 0, &downstream_node, &input_index);
+ IMFTopologyNode_Release(orig_node);
+ }
+
+ if (FAILED(hr))
{
IMFTopology_RemoveNode(context->output_topology, node);
+ IMFTopologyNode_Release(node);
continue;
}
hr = topology_loader_resolve_branch(context, node, 0, downstream_node, input_index);
+ IMFTopologyNode_Release(downstream_node);
break;
case MF_TOPOLOGY_TRANSFORM_NODE:
case MF_TOPOLOGY_TEE_NODE:
@@ -2414,6 +2424,7 @@ static HRESULT topology_loader_resolve_nodes(struct topoloader_context *context,
}
IMFTopologyNode_DeleteItem(node, &context->key);
+ IMFTopologyNode_Release(node);
if (FAILED(hr))
break;
@@ -2661,10 +2672,13 @@ static HRESULT WINAPI topology_loader_Load(IMFTopoLoader *iface, IMFTopology *in
break;
}
- if (SUCCEEDED(hr))
+ if (FAILED(hr))
+ IMFTopology_Release(output_topology);
+ else
+ {
topology_loader_resolve_complete(&context);
-
- *ret_topology = output_topology;
+ *ret_topology = output_topology;
+ }
return hr;
}
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/310
June 27, 2022