void X11DRV_XRandR_Init(void) { int event_base, error_base, minor, ret; static int major; Bool ok; if (major) return; /* already initialized? */ if (!usexrandr) return; /* disabled in config */ if (root_window != DefaultRootWindow( gdi_display )) return; if (!(ret = load_xrandr())) return; /* can't load the Xrandr library */ /* see if Xrandr is available */ if (!pXRRQueryExtension( gdi_display, &event_base, &error_base )) return; X11DRV_expect_error( gdi_display, XRandRErrorHandler, NULL ); ok = pXRRQueryVersion( gdi_display, &major, &minor ); if (X11DRV_check_error() || !ok) return; 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 = wine_dlsym( xrandr_handle, "XRRGetScreenResourcesCurrent", NULL, 0 ); if (!pXRRGetScreenResourcesCurrent) pXRRGetScreenResourcesCurrent = pXRRGetScreenResources; } if (!pXRRGetScreenResourcesCurrent || xrandr12_init_modes() < 0) #endif xrandr10_init_modes(); }
void X11DRV_XF86VM_Init(void) { Bool ok; int nmodes; unsigned int i; if (xf86vm_major) return; /* already initialized? */ /* see if XVidMode is available */ wine_tsx11_lock(); ok = XF86VidModeQueryExtension(gdi_display, &xf86vm_event, &xf86vm_error); if (ok) { X11DRV_expect_error(gdi_display, XVidModeErrorHandler, NULL); ok = XF86VidModeQueryVersion(gdi_display, &xf86vm_major, &xf86vm_minor); if (X11DRV_check_error()) ok = FALSE; } if (ok) { #ifdef X_XF86VidModeSetGammaRamp if (xf86vm_major > 2 || (xf86vm_major == 2 && xf86vm_minor >= 1)) { XF86VidModeGetGammaRampSize(gdi_display, DefaultScreen(gdi_display), &xf86vm_gammaramp_size); if (xf86vm_gammaramp_size == 256) xf86vm_use_gammaramp = TRUE; } #endif /* X_XF86VidModeSetGammaRamp */ /* retrieve modes */ if (usexvidmode && root_window == DefaultRootWindow( gdi_display )) ok = XF86VidModeGetAllModeLines(gdi_display, DefaultScreen(gdi_display), &nmodes, &real_xf86vm_modes); else ok = FALSE; /* In desktop mode, do not switch resolution... But still use the Gamma ramp stuff */ } wine_tsx11_unlock(); if (!ok) return; TRACE("XVidMode modes: count=%d\n", nmodes); real_xf86vm_mode_count = nmodes; dd_modes = X11DRV_Settings_SetHandlers("XF86VidMode", X11DRV_XF86VM_GetCurrentMode, X11DRV_XF86VM_SetCurrentMode, nmodes, 1); /* convert modes to DDHALMODEINFO format */ for (i=0; i<real_xf86vm_mode_count; i++) { convert_modeinfo(real_xf86vm_modes[i]); } /* add modes for different color depths */ X11DRV_Settings_AddDepthModes(); dd_mode_count = X11DRV_Settings_GetModeCount(); TRACE("Available DD modes: count=%d\n", dd_mode_count); TRACE("Enabling XVidMode\n"); }
void X11DRV_XF86VM_Init(void) { void *xvidmode_handle; Bool ok; int nmodes; unsigned int i; if (xf86vm_major) return; /* already initialized? */ xvidmode_handle = wine_dlopen(SONAME_LIBXXF86VM, RTLD_NOW, NULL, 0); if (!xvidmode_handle) { TRACE("Unable to open %s, XVidMode disabled\n", SONAME_LIBXXF86VM); usexvidmode = 0; return; } #define LOAD_FUNCPTR(f) \ if((p##f = wine_dlsym(xvidmode_handle, #f, NULL, 0)) == NULL) \ goto sym_not_found; LOAD_FUNCPTR(XF86VidModeGetAllModeLines) LOAD_FUNCPTR(XF86VidModeGetModeLine) LOAD_FUNCPTR(XF86VidModeLockModeSwitch) LOAD_FUNCPTR(XF86VidModeQueryExtension) LOAD_FUNCPTR(XF86VidModeQueryVersion) LOAD_FUNCPTR(XF86VidModeSetViewPort) LOAD_FUNCPTR(XF86VidModeSwitchToMode) #ifdef X_XF86VidModeSetGamma LOAD_FUNCPTR(XF86VidModeGetGamma) LOAD_FUNCPTR(XF86VidModeSetGamma) #endif #ifdef X_XF86VidModeSetGammaRamp LOAD_FUNCPTR(XF86VidModeGetGammaRamp) LOAD_FUNCPTR(XF86VidModeGetGammaRampSize) LOAD_FUNCPTR(XF86VidModeSetGammaRamp) #endif #undef LOAD_FUNCPTR /* see if XVidMode is available */ wine_tsx11_lock(); ok = pXF86VidModeQueryExtension(gdi_display, &xf86vm_event, &xf86vm_error); wine_tsx11_unlock(); if (!ok) return; X11DRV_expect_error(gdi_display, XVidModeErrorHandler, NULL); ok = pXF86VidModeQueryVersion(gdi_display, &xf86vm_major, &xf86vm_minor); if (X11DRV_check_error() || !ok) return; #ifdef X_XF86VidModeSetGammaRamp if (xf86vm_major > 2 || (xf86vm_major == 2 && xf86vm_minor >= 1)) { X11DRV_expect_error(gdi_display, XVidModeErrorHandler, NULL); pXF86VidModeGetGammaRampSize(gdi_display, DefaultScreen(gdi_display), &xf86vm_gammaramp_size); if (X11DRV_check_error()) xf86vm_gammaramp_size = 0; if (xf86vm_gammaramp_size == 256) xf86vm_use_gammaramp = TRUE; } #endif /* X_XF86VidModeSetGammaRamp */ /* retrieve modes */ if (usexvidmode && root_window == DefaultRootWindow( gdi_display )) { X11DRV_expect_error(gdi_display, XVidModeErrorHandler, NULL); ok = pXF86VidModeGetAllModeLines(gdi_display, DefaultScreen(gdi_display), &nmodes, &real_xf86vm_modes); if (X11DRV_check_error() || !ok) return; } else return; /* In desktop mode, do not switch resolution... But still use the Gamma ramp stuff */ TRACE("XVidMode modes: count=%d\n", nmodes); real_xf86vm_mode_count = nmodes; dd_modes = X11DRV_Settings_SetHandlers("XF86VidMode", X11DRV_XF86VM_GetCurrentMode, X11DRV_XF86VM_SetCurrentMode, nmodes, 1); /* convert modes to x11drv_mode_info format */ for (i=0; i<real_xf86vm_mode_count; i++) { convert_modeinfo(real_xf86vm_modes[i]); } /* add modes for different color depths */ X11DRV_Settings_AddDepthModes(); dd_mode_count = X11DRV_Settings_GetModeCount(); TRACE("Available DD modes: count=%d\n", dd_mode_count); TRACE("Enabling XVidMode\n"); return; sym_not_found: TRACE("Unable to load function pointers from %s, XVidMode disabled\n", SONAME_LIBXXF86VM); wine_dlclose(xvidmode_handle, NULL, 0); xvidmode_handle = NULL; usexvidmode = 0; }
void X11DRV_XRandR_Init(void) { Bool ok; int i, nmodes = 0; if (xrandr_major) return; /* already initialized? */ if (!usexrandr) return; /* disabled in config */ if (root_window != DefaultRootWindow( gdi_display )) return; if (!load_xrandr()) return; /* can't load the Xrandr library */ /* see if Xrandr is available */ wine_tsx11_lock(); ok = pXRRQueryExtension(gdi_display, &xrandr_event, &xrandr_error); if (ok) { X11DRV_expect_error(gdi_display, XRandRErrorHandler, NULL); ok = pXRRQueryVersion(gdi_display, &xrandr_major, &xrandr_minor); if (X11DRV_check_error()) ok = FALSE; } if (ok) { TRACE("Found XRandR - major: %d, minor: %d\n", xrandr_major, xrandr_minor); /* retrieve modes */ real_xrandr_sizes = pXRRSizes(gdi_display, DefaultScreen(gdi_display), &real_xrandr_sizes_count); ok = (real_xrandr_sizes_count>0); } if (ok) { TRACE("XRandR: found %u resolutions sizes\n", real_xrandr_sizes_count); real_xrandr_rates = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(short *) * real_xrandr_sizes_count); real_xrandr_rates_count = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(int) * real_xrandr_sizes_count); for (i=0; i < real_xrandr_sizes_count; i++) { real_xrandr_rates[i] = pXRRRates (gdi_display, DefaultScreen(gdi_display), i, &(real_xrandr_rates_count[i])); TRACE("- at %d: %dx%d (%d rates):", i, real_xrandr_sizes[i].width, real_xrandr_sizes[i].height, real_xrandr_rates_count[i]); if (real_xrandr_rates_count[i]) { int j; nmodes += real_xrandr_rates_count[i]; for (j = 0; j < real_xrandr_rates_count[i]; ++j) { if (j > 0) TRACE(","); TRACE(" %d", real_xrandr_rates[i][j]); } } else { nmodes++; TRACE(" <default>"); } TRACE(" Hz\n"); } } wine_tsx11_unlock(); if (!ok) return; real_xrandr_modes_count = nmodes; TRACE("XRandR modes: count=%d\n", nmodes); dd_modes = X11DRV_Settings_SetHandlers("XRandR", X11DRV_XRandR_GetCurrentMode, X11DRV_XRandR_SetCurrentMode, nmodes, 1); make_modes(); X11DRV_Settings_AddDepthModes(); dd_mode_count = X11DRV_Settings_GetModeCount(); TRACE("Available DD modes: count=%d\n", dd_mode_count); TRACE("Enabling XRandR\n"); }