[PATCH 6/6] winex11.drv: Remove XRandR 1.2 display settings handler.
Zhiyi Zhang
zzhang at codeweavers.com
Fri Jul 24 04:23:32 CDT 2020
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
---
configure.ac | 4 -
dlls/winex11.drv/xrandr.c | 255 ++------------------------------------
2 files changed, 7 insertions(+), 252 deletions(-)
diff --git a/configure.ac b/configure.ac
index 928f8ebd1b1..e82ed889545 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1255,10 +1255,6 @@ then
#include <X11/extensions/Xrandr.h>]], [[static typeof(XRRSetScreenConfigAndRate) * func; if (func) return 0;]])],
[WINE_CHECK_SONAME(Xrandr,XRRQueryExtension,
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/Xlib.h>
-#include <X11/extensions/Xrandr.h>]], [[static typeof(XRRGetScreenResources) *f; if (f) return 0;]])],
- [AC_DEFINE(HAVE_XRRGETSCREENRESOURCES, 1,
- [Define if Xrandr has the XRRGetScreenResources function])])
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <X11/Xlib.h>
#include <X11/extensions/Xrandr.h>]], [[static typeof(XRRGetProviderResources) *f; if (f) return 0;]])],
[AC_DEFINE(HAVE_XRRGETPROVIDERRESOURCES, 1,
[Define if Xrandr has the XRRGetProviderResources function])],
diff --git a/dlls/winex11.drv/xrandr.c b/dlls/winex11.drv/xrandr.c
index 5ad70ea95ac..d111b960fa6 100644
--- a/dlls/winex11.drv/xrandr.c
+++ b/dlls/winex11.drv/xrandr.c
@@ -29,7 +29,7 @@
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(xrandr);
-#ifdef HAVE_XRRGETSCREENRESOURCES
+#ifdef HAVE_XRRGETPROVIDERRESOURCES
WINE_DECLARE_DEBUG_CHANNEL(winediag);
#endif
@@ -62,22 +62,17 @@ MAKE_FUNCPTR(XRRSetScreenConfig)
MAKE_FUNCPTR(XRRSetScreenConfigAndRate)
MAKE_FUNCPTR(XRRSizes)
-#ifdef HAVE_XRRGETSCREENRESOURCES
+#ifdef HAVE_XRRGETPROVIDERRESOURCES
MAKE_FUNCPTR(XRRFreeCrtcInfo)
MAKE_FUNCPTR(XRRFreeOutputInfo)
MAKE_FUNCPTR(XRRFreeScreenResources)
MAKE_FUNCPTR(XRRGetCrtcInfo)
MAKE_FUNCPTR(XRRGetOutputInfo)
MAKE_FUNCPTR(XRRGetScreenResources)
+MAKE_FUNCPTR(XRRGetScreenResourcesCurrent)
MAKE_FUNCPTR(XRRGetScreenSizeRange)
MAKE_FUNCPTR(XRRSetCrtcConfig)
MAKE_FUNCPTR(XRRSetScreenSize)
-static typeof(XRRGetScreenResources) *pXRRGetScreenResourcesCurrent;
-static RRMode *xrandr12_modes;
-static int primary_crtc;
-#endif
-
-#ifdef HAVE_XRRGETPROVIDERRESOURCES
MAKE_FUNCPTR(XRRSelectInput)
MAKE_FUNCPTR(XRRGetOutputPrimary)
MAKE_FUNCPTR(XRRGetProviderResources)
@@ -116,20 +111,17 @@ static int load_xrandr(void)
LOAD_FUNCPTR(XRRSizes);
r = 1;
-#ifdef HAVE_XRRGETSCREENRESOURCES
+#ifdef HAVE_XRRGETPROVIDERRESOURCES
LOAD_FUNCPTR(XRRFreeCrtcInfo);
LOAD_FUNCPTR(XRRFreeOutputInfo);
LOAD_FUNCPTR(XRRFreeScreenResources);
LOAD_FUNCPTR(XRRGetCrtcInfo);
LOAD_FUNCPTR(XRRGetOutputInfo);
LOAD_FUNCPTR(XRRGetScreenResources);
+ LOAD_FUNCPTR(XRRGetScreenResourcesCurrent);
LOAD_FUNCPTR(XRRGetScreenSizeRange);
LOAD_FUNCPTR(XRRSetCrtcConfig);
LOAD_FUNCPTR(XRRSetScreenSize);
- r = 2;
-#endif
-
-#ifdef HAVE_XRRGETPROVIDERRESOURCES
LOAD_FUNCPTR(XRRSelectInput);
LOAD_FUNCPTR(XRRGetOutputPrimary);
LOAD_FUNCPTR(XRRGetProviderResources);
@@ -305,7 +297,7 @@ static void xrandr10_init_modes(void)
TRACE("Enabling XRandR\n");
}
-#ifdef HAVE_XRRGETSCREENRESOURCES
+#ifdef HAVE_XRRGETPROVIDERRESOURCES
static XRRScreenResources *xrandr_get_screen_resources(void)
{
@@ -398,54 +390,6 @@ static BOOL is_broken_driver(void)
return FALSE;
}
-static int xrandr12_get_current_mode(void)
-{
- XRRScreenResources *resources;
- XRRCrtcInfo *crtc_info;
- int i, ret = -1;
-
- if (xrandr_current_mode != -1)
- return xrandr_current_mode;
-
- if (!(resources = pXRRGetScreenResourcesCurrent( gdi_display, root_window )))
- {
- ERR("Failed to get screen resources.\n");
- return 0;
- }
-
- if (resources->ncrtc <= primary_crtc ||
- !(crtc_info = pXRRGetCrtcInfo( gdi_display, resources, resources->crtcs[primary_crtc] )))
- {
- pXRRFreeScreenResources( resources );
- ERR("Failed to get CRTC info.\n");
- return 0;
- }
-
- TRACE("CRTC %d: mode %#lx, %ux%u+%d+%d.\n", primary_crtc, crtc_info->mode,
- crtc_info->width, crtc_info->height, crtc_info->x, crtc_info->y);
-
- for (i = 0; i < xrandr_mode_count; ++i)
- {
- if (xrandr12_modes[i] == crtc_info->mode)
- {
- ret = i;
- break;
- }
- }
-
- pXRRFreeCrtcInfo( crtc_info );
- pXRRFreeScreenResources( resources );
-
- if (ret == -1)
- {
- ERR("Unknown mode, returning default.\n");
- return 0;
- }
-
- xrandr_current_mode = ret;
- return ret;
-}
-
static void get_screen_size( XRRScreenResources *resources, unsigned int *width, unsigned int *height )
{
int min_width = 0, min_height = 0, max_width, max_height;
@@ -481,99 +425,6 @@ static void set_screen_size( int width, int height )
pXRRSetScreenSize( gdi_display, root_window, width, height, mm_width, mm_height );
}
-static LONG xrandr12_set_current_mode( int mode )
-{
- unsigned int screen_width, screen_height;
- Status status = RRSetConfigFailed;
- XRRScreenResources *resources;
- XRRCrtcInfo *crtc_info;
-
- mode = mode % xrandr_mode_count;
-
- if (!(resources = pXRRGetScreenResourcesCurrent( gdi_display, root_window )))
- {
- ERR("Failed to get screen resources.\n");
- return DISP_CHANGE_FAILED;
- }
-
- if (resources->ncrtc <= primary_crtc ||
- !(crtc_info = pXRRGetCrtcInfo( gdi_display, resources, resources->crtcs[primary_crtc] )))
- {
- pXRRFreeScreenResources( resources );
- ERR("Failed to get CRTC info.\n");
- return DISP_CHANGE_FAILED;
- }
-
- TRACE("CRTC %d: mode %#lx, %ux%u+%d+%d.\n", primary_crtc, crtc_info->mode,
- crtc_info->width, crtc_info->height, crtc_info->x, crtc_info->y);
-
- /* According to the RandR spec, the entire CRTC must fit inside the screen.
- * Since we use the union of all enabled CRTCs to determine the necessary
- * screen size, this might involve shrinking the screen, so we must disable
- * the CRTC in question first. */
-
- XGrabServer( gdi_display );
-
- status = pXRRSetCrtcConfig( gdi_display, resources, resources->crtcs[primary_crtc],
- CurrentTime, crtc_info->x, crtc_info->y, None,
- crtc_info->rotation, NULL, 0 );
- if (status != RRSetConfigSuccess)
- {
- XUngrabServer( gdi_display );
- XFlush( gdi_display );
- ERR("Failed to disable CRTC.\n");
- pXRRFreeCrtcInfo( crtc_info );
- pXRRFreeScreenResources( resources );
- return DISP_CHANGE_FAILED;
- }
-
- get_screen_size( resources, &screen_width, &screen_height );
- screen_width = max( screen_width, crtc_info->x + dd_modes[mode].width );
- screen_height = max( screen_height, crtc_info->y + dd_modes[mode].height );
- set_screen_size( screen_width, screen_height );
-
- status = pXRRSetCrtcConfig( gdi_display, resources, resources->crtcs[primary_crtc],
- CurrentTime, crtc_info->x, crtc_info->y, xrandr12_modes[mode],
- crtc_info->rotation, crtc_info->outputs, crtc_info->noutput );
-
- XUngrabServer( gdi_display );
- XFlush( gdi_display );
-
- pXRRFreeCrtcInfo( crtc_info );
- pXRRFreeScreenResources( resources );
-
- if (status != RRSetConfigSuccess)
- {
- ERR("Resolution change not successful -- perhaps display has changed?\n");
- return DISP_CHANGE_FAILED;
- }
-
- xrandr_current_mode = mode;
- X11DRV_DisplayDevices_Update( TRUE );
- return DISP_CHANGE_SUCCESSFUL;
-}
-
-static XRRCrtcInfo *xrandr12_get_primary_crtc_info( XRRScreenResources *resources, int *crtc_idx )
-{
- XRRCrtcInfo *crtc_info;
- int i;
-
- for (i = 0; i < resources->ncrtc; ++i)
- {
- crtc_info = pXRRGetCrtcInfo( gdi_display, resources, resources->crtcs[i] );
- if (!crtc_info || crtc_info->mode == None)
- {
- pXRRFreeCrtcInfo( crtc_info );
- continue;
- }
-
- *crtc_idx = i;
- return crtc_info;
- }
-
- return NULL;
-}
-
static unsigned int get_frequency( const XRRModeInfo *mode )
{
unsigned int dots = mode->hTotal * mode->vTotal;
@@ -589,87 +440,6 @@ static unsigned int get_frequency( const XRRModeInfo *mode )
return (mode->dotClock + dots / 2) / dots;
}
-static int xrandr12_init_modes(void)
-{
- XRRScreenResources *resources;
- XRROutputInfo *output_info;
- XRRCrtcInfo *crtc_info;
- int ret = -1;
- int i, j;
-
- if (!(resources = xrandr_get_screen_resources()))
- return ret;
-
- if (!(crtc_info = xrandr12_get_primary_crtc_info( resources, &primary_crtc )))
- {
- pXRRFreeScreenResources( resources );
- ERR("Failed to get primary CRTC info.\n");
- return ret;
- }
-
- TRACE("CRTC %d: mode %#lx, %ux%u+%d+%d.\n", primary_crtc, crtc_info->mode,
- crtc_info->width, crtc_info->height, crtc_info->x, crtc_info->y);
-
- if (!crtc_info->noutput || !(output_info = pXRRGetOutputInfo( gdi_display, resources, crtc_info->outputs[0] )))
- {
- pXRRFreeCrtcInfo( crtc_info );
- pXRRFreeScreenResources( resources );
- ERR("Failed to get output info.\n");
- return ret;
- }
-
- TRACE("OUTPUT 0: name %s.\n", debugstr_a(output_info->name));
-
- if (!output_info->nmode)
- {
- WARN("Output has no modes.\n");
- goto done;
- }
-
- if (!(xrandr12_modes = HeapAlloc( GetProcessHeap(), 0, sizeof(*xrandr12_modes) * output_info->nmode )))
- {
- ERR("Failed to allocate xrandr mode info array.\n");
- goto done;
- }
-
- dd_modes = X11DRV_Settings_SetHandlers( "XRandR 1.2",
- xrandr12_get_current_mode,
- xrandr12_set_current_mode,
- output_info->nmode, 1 );
-
- xrandr_mode_count = 0;
- for (i = 0; i < output_info->nmode; ++i)
- {
- for (j = 0; j < resources->nmode; ++j)
- {
- XRRModeInfo *mode = &resources->modes[j];
-
- if (mode->id == output_info->modes[i])
- {
- unsigned int refresh = get_frequency( mode );
-
- TRACE("Adding mode %#lx: %ux%u@%u.\n", mode->id, mode->width, mode->height, refresh);
- X11DRV_Settings_AddOneMode( mode->width, mode->height, 0, refresh );
- xrandr12_modes[xrandr_mode_count++] = mode->id;
- break;
- }
- }
- }
-
- X11DRV_Settings_AddDepthModes();
- ret = 0;
-
-done:
- pXRRFreeOutputInfo( output_info );
- pXRRFreeCrtcInfo( crtc_info );
- pXRRFreeScreenResources( resources );
- return ret;
-}
-
-#endif /* HAVE_XRRGETSCREENRESOURCES */
-
-#ifdef HAVE_XRRGETPROVIDERRESOURCES
-
static RECT get_primary_rect( XRRScreenResources *resources )
{
XRROutputInfo *output_info = NULL;
@@ -1640,18 +1410,7 @@ void X11DRV_XRandR_Init(void)
TRACE("Found XRandR %d.%d.\n", major, minor);
-#ifdef HAVE_XRRGETSCREENRESOURCES
- if (ret >= 2 && (major > 1 || (major == 1 && minor >= 2)))
- {
- if (major > 1 || (major == 1 && minor >= 3))
- pXRRGetScreenResourcesCurrent = dlsym( xrandr_handle, "XRRGetScreenResourcesCurrent" );
- if (!pXRRGetScreenResourcesCurrent)
- pXRRGetScreenResourcesCurrent = pXRRGetScreenResources;
- }
-
- if (!pXRRGetScreenResourcesCurrent || is_broken_driver() || xrandr12_init_modes() < 0)
-#endif
- xrandr10_init_modes();
+ xrandr10_init_modes();
#ifdef HAVE_XRRGETPROVIDERRESOURCES
if (ret >= 4 && (major > 1 || (major == 1 && minor >= 4)))
--
2.25.1
More information about the wine-devel
mailing list