mirror of https://github.com/encounter/SDL.git
wayland: Add a hint to disable video mode emulation under Wayland
Add the hint "SDL_VIDEO_WAYLAND_MODE_EMULATION", which can be used to disable mode emulation under Wayland. When disabled, only the desktop and/or native display resolution is exposed.
This commit is contained in:
parent
e9d3dcea73
commit
e1c8350439
|
@ -1508,6 +1508,21 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
#define SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR "SDL_VIDEO_WAYLAND_PREFER_LIBDECOR"
|
#define SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR "SDL_VIDEO_WAYLAND_PREFER_LIBDECOR"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief A variable controlling whether video mode emulation is enabled under Wayland.
|
||||||
|
*
|
||||||
|
* When this hint is set, a standard set of emulated CVT video modes will be exposed for use by the application.
|
||||||
|
* If it is disabled, the only modes exposed will be the logical desktop size and, in the case of a scaled
|
||||||
|
* desktop, the native display resolution.
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "0" - Video mode emulation is disabled.
|
||||||
|
* "1" - Video mode emulation is enabled.
|
||||||
|
*
|
||||||
|
* By default video mode emulation is enabled.
|
||||||
|
*/
|
||||||
|
#define SDL_HINT_VIDEO_WAYLAND_MODE_EMULATION "SDL_VIDEO_WAYLAND_MODE_EMULATION"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief A variable that is the address of another SDL_Window* (as a hex string formatted with "%p").
|
* \brief A variable that is the address of another SDL_Window* (as a hex string formatted with "%p").
|
||||||
*
|
*
|
||||||
|
|
|
@ -545,6 +545,7 @@ display_handle_done(void *data,
|
||||||
SDL_VideoData* video = driverdata->videodata;
|
SDL_VideoData* video = driverdata->videodata;
|
||||||
SDL_DisplayMode native_mode, desktop_mode;
|
SDL_DisplayMode native_mode, desktop_mode;
|
||||||
SDL_VideoDisplay *dpy;
|
SDL_VideoDisplay *dpy;
|
||||||
|
const SDL_bool mode_emulation_enabled = SDL_GetHintBoolean(SDL_HINT_VIDEO_WAYLAND_MODE_EMULATION, SDL_TRUE);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When using xdg-output, two wl-output.done events will be emitted:
|
* When using xdg-output, two wl-output.done events will be emitted:
|
||||||
|
@ -597,8 +598,8 @@ display_handle_done(void *data,
|
||||||
desktop_mode.driverdata = driverdata->output;
|
desktop_mode.driverdata = driverdata->output;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The native display mode is only exposed separately from the desktop size if:
|
* The native display mode is only exposed separately from the desktop size if the
|
||||||
* the desktop is scaled and the wp_viewporter protocol is supported.
|
* desktop is scaled and the wp_viewporter protocol is supported.
|
||||||
*/
|
*/
|
||||||
if (driverdata->scale_factor > 1.0f && video->viewporter != NULL) {
|
if (driverdata->scale_factor > 1.0f && video->viewporter != NULL) {
|
||||||
if (driverdata->index > -1) {
|
if (driverdata->index > -1) {
|
||||||
|
@ -643,8 +644,8 @@ display_handle_done(void *data,
|
||||||
SDL_SetCurrentDisplayMode(dpy, &desktop_mode);
|
SDL_SetCurrentDisplayMode(dpy, &desktop_mode);
|
||||||
SDL_SetDesktopDisplayMode(dpy, &desktop_mode);
|
SDL_SetDesktopDisplayMode(dpy, &desktop_mode);
|
||||||
|
|
||||||
/* Add emulated modes if wp_viewporter is supported. */
|
/* Add emulated modes if wp_viewporter is supported and mode emulation is enabled. */
|
||||||
if (video->viewporter) {
|
if (video->viewporter && mode_emulation_enabled) {
|
||||||
AddEmulatedModes(dpy, (driverdata->transform & WL_OUTPUT_TRANSFORM_90) != 0);
|
AddEmulatedModes(dpy, (driverdata->transform & WL_OUTPUT_TRANSFORM_90) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue