[PATCH] winex11.drv: Cache the current mode for detached outputs.
Zhiyi Zhang
zzhang at codeweavers.com
Mon Jun 21 04:09:18 CDT 2021
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
---
dlls/winex11.drv/xrandr.c | 23 ++++++++++-------------
1 file changed, 10 insertions(+), 13 deletions(-)
diff --git a/dlls/winex11.drv/xrandr.c b/dlls/winex11.drv/xrandr.c
index c3af35d8ec3..e3fa7a6e1d6 100644
--- a/dlls/winex11.drv/xrandr.c
+++ b/dlls/winex11.drv/xrandr.c
@@ -1390,6 +1390,7 @@ static void xrandr14_free_modes( DEVMODEW *modes )
static BOOL xrandr14_get_current_mode( ULONG_PTR id, DEVMODEW *mode )
{
+ struct current_mode *mode_ptr = NULL;
XRRScreenResources *screen_resources;
XRROutputInfo *output_info = NULL;
RROutput output = (RROutput)id;
@@ -1406,13 +1407,15 @@ static BOOL xrandr14_get_current_mode( ULONG_PTR id, DEVMODEW *mode )
continue;
if (!current_modes[mode_idx].loaded)
+ {
+ mode_ptr = ¤t_modes[mode_idx];
break;
+ }
memcpy( mode, ¤t_modes[mode_idx].mode, sizeof(*mode) );
LeaveCriticalSection( ¤t_modes_section );
return TRUE;
}
- LeaveCriticalSection( ¤t_modes_section );
screen_resources = xrandr_get_screen_resources();
if (!screen_resources)
@@ -1473,21 +1476,15 @@ static BOOL xrandr14_get_current_mode( ULONG_PTR id, DEVMODEW *mode )
mode->u1.s2.dmPosition.y = crtc_info->y - primary.top;
ret = TRUE;
- EnterCriticalSection( ¤t_modes_section );
- for (mode_idx = 0; mode_idx < current_mode_count; ++mode_idx)
+done:
+ if (ret && mode_ptr)
{
- if (current_modes[mode_idx].id != id)
- continue;
-
- memcpy( ¤t_modes[mode_idx].mode, mode, sizeof(*mode) );
- current_modes[mode_idx].mode.dmSize = sizeof(*mode);
- current_modes[mode_idx].mode.dmDriverExtra = 0;
- current_modes[mode_idx].loaded = TRUE;
- break;
+ memcpy( &mode_ptr->mode, mode, sizeof(*mode) );
+ mode_ptr->mode.dmSize = sizeof(*mode);
+ mode_ptr->mode.dmDriverExtra = 0;
+ mode_ptr->loaded = TRUE;
}
LeaveCriticalSection( ¤t_modes_section );
-
-done:
if (crtc_info)
pXRRFreeCrtcInfo( crtc_info );
if (output_info)
--
2.30.2
More information about the wine-devel
mailing list