[Scummvm-git-logs] scummvm master -> 3a95213905b9ca1b8339131a66ff97df8e21ad7c

csnover csnover at users.noreply.github.com
Tue Oct 24 05:39:45 CEST 2017


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
3a95213905 SDL: Automatically grab mouse upon entering fullscreen


Commit: 3a95213905b9ca1b8339131a66ff97df8e21ad7c
    https://github.com/scummvm/scummvm/commit/3a95213905b9ca1b8339131a66ff97df8e21ad7c
Author: Colin Snover (github.com at zetafleet.com)
Date: 2017-10-23T22:36:04-05:00

Commit Message:
SDL: Automatically grab mouse upon entering fullscreen

Folks are confused about the new behaviour where the mouse is not
restricted to the game area in fullscreen, which is understandable.

This changes mouseIsGrabbed to use SDL directly in order to avoid
making changes to the user preference in the _inputGrabState.
Otherwise we'd either clobber the user's previous windowed mouse
grab preference, or require maintaining a second variable just to
track the original state, when we can have SDL do that for us.

Changed paths:
    backends/platform/sdl/sdl-window.cpp
    backends/platform/sdl/sdl-window.h


diff --git a/backends/platform/sdl/sdl-window.cpp b/backends/platform/sdl/sdl-window.cpp
index fe27d84..b38a97c 100644
--- a/backends/platform/sdl/sdl-window.cpp
+++ b/backends/platform/sdl/sdl-window.cpp
@@ -129,7 +129,7 @@ void SdlWindow::setWindowCaption(const Common::String &caption) {
 void SdlWindow::toggleMouseGrab() {
 #if SDL_VERSION_ATLEAST(2, 0, 0)
 	if (_window) {
-		_inputGrabState = !(SDL_GetWindowGrab(_window) == SDL_TRUE);
+		_inputGrabState = SDL_GetWindowGrab(_window) == SDL_FALSE;
 		SDL_SetWindowGrab(_window, _inputGrabState ? SDL_TRUE : SDL_FALSE);
 	}
 #else
@@ -279,7 +279,8 @@ bool SdlWindow::createOrUpdateWindow(int width, int height, uint32 flags) {
 		}
 
 		SDL_SetWindowFullscreen(_window, fullscreenFlags);
-		SDL_SetWindowGrab(_window, (flags & SDL_WINDOW_INPUT_GRABBED) ? SDL_TRUE : SDL_FALSE);
+		const bool shouldGrab = (flags & SDL_WINDOW_INPUT_GRABBED) | fullscreenFlags;
+		SDL_SetWindowGrab(_window, shouldGrab ? SDL_TRUE : SDL_FALSE);
 	}
 
 	if (!_window) {
diff --git a/backends/platform/sdl/sdl-window.h b/backends/platform/sdl/sdl-window.h
index e1a3499..05893c4 100644
--- a/backends/platform/sdl/sdl-window.h
+++ b/backends/platform/sdl/sdl-window.h
@@ -76,7 +76,14 @@ public:
 	 */
 	bool getSDLWMInformation(SDL_SysWMinfo *info) const;
 
-	bool mouseIsGrabbed() const { return _inputGrabState; }
+	bool mouseIsGrabbed() const {
+#if SDL_VERSION_ATLEAST(2, 0, 0)
+		if (_window) {
+			return SDL_GetWindowGrab(_window) == SDL_TRUE;
+		}
+#endif
+		return _inputGrabState;
+	}
 
 private:
 	bool _inputGrabState;





More information about the Scummvm-git-logs mailing list