mirror of
				https://github.com/libsdl-org/SDL.git
				synced 2025-10-26 12:27:44 +00:00 
			
		
		
		
	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:
		 Frank Praznik
					Frank Praznik
				
			
				
					committed by
					
						 Sam Lantinga
						Sam Lantinga
					
				
			
			
				
	
			
			
			 Sam Lantinga
						Sam Lantinga
					
				
			
						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); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user