[Scummvm-git-logs] scummvm master -> 1b4ce9096f83d6b95ec618856505623f54412271

sev- sev at scummvm.org
Sun May 10 21:39:50 UTC 2020


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

Summary:
ea7db12ee0 ENGINES: Base PauseToken support
59702fae9b PEGASUS: Use PauseToken
ce4cfdf5d2 BACKENDS: Use PauseToken
802c0ece7f SCUMM: PauseToken for saving
95f4144190 SCUMM: Use baseclass runDialog & always pause _splayer
c15f268e9b ENGINES: Allow clearing a PauseToken
c5bdd7a1f2 GUI: Use PauseToken in Debugger
feb6019182 QUEEN: Debugger, call base for preEnter and postEnter
f87a73b4f7 ACCESS: Debugger, call base postEnter
faa8bea5cb PARALLACTION: Debugger, call base preEnter & postEnter
d26655dc4d SCI: Debugger, call base preEnter & postEnter
736702332e SHERLOCK: Debugger, call base postEnter
fa4518fbab SCI: Use PauseToken in kernelMessageBox
fb92ccbade MOHAWK: Use debugPauseToken in Console::Cmd_QuickTest
acf81a79c1 AGOS: Use PauseToken in pause function
c1c90afbde MOHAWK: Use PauseToken in menu stack
c970106234 PEGASUS: Use PauseToken
2b3d7ea12d AGI: Use existing runDialog function
7ea98181e2 AGI: Use PauseToken
4a6a8f0c36 SWORD2: Use PauseToken
866800ffb0 CRUISE: Use PauseToken
d315fc8add MACGUI: Use real Engine and PauseToken classes
3edcc22c78 PINK: Use new MACGUI interface
8079dc8d72 MACGUI, PINK: Rename setEnginePauseCallback to setEngine
f5ac623cca ENGINES: Disallow assignment to a busy pause token.
830a239b04 ENGINES: Move semantics for PauseToken
1b4ce9096f ENGINES: Disallow clearing an already clear pause token.


Commit: ea7db12ee04394d62485f2efa51fe5c16c8962d8
    https://github.com/scummvm/scummvm/commit/ea7db12ee04394d62485f2efa51fe5c16c8962d8
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
ENGINES: Base PauseToken support

Changed paths:
    engines/engine.cpp
    engines/engine.h


diff --git a/engines/engine.cpp b/engines/engine.cpp
index 54da3cc610..093a411140 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -529,18 +529,25 @@ void Engine::errorString(const char *buf1, char *buf2, int size) {
 	Common::strlcpy(buf2, buf1, size);
 }
 
-void Engine::pauseEngine(bool pause) {
-	assert((pause && _pauseLevel >= 0) || (!pause && _pauseLevel));
+PauseToken Engine::pauseEngine() {
+	assert(_pauseLevel >= 0);
 
-	if (pause)
-		_pauseLevel++;
-	else
-		_pauseLevel--;
+	_pauseLevel++;
 
-	if (_pauseLevel == 1 && pause) {
+	if (_pauseLevel == 1) {
 		_pauseStartTime = _system->getMillis();
 		pauseEngineIntern(true);
-	} else if (_pauseLevel == 0) {
+	}
+
+	return PauseToken(this);
+}
+
+void Engine::resumeEngine() {
+	assert(_pauseLevel > 0);
+
+	_pauseLevel--;
+
+	if (_pauseLevel == 0) {
 		pauseEngineIntern(false);
 		_engineStartTime += _system->getMillis() - _pauseStartTime;
 		_pauseStartTime = 0;
@@ -617,9 +624,8 @@ void Engine::setTotalPlayTime(uint32 time) {
 }
 
 int Engine::runDialog(GUI::Dialog &dialog) {
-	pauseEngine(true);
+	PauseToken pt = pauseEngine();
 	int result = dialog.runModal();
-	pauseEngine(false);
 
 	return result;
 }
@@ -737,9 +743,13 @@ bool Engine::loadGameDialog() {
 	}
 
 	GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load"), false);
-	pauseEngine(true);
-	int slotNum = dialog->runModalWithCurrentTarget();
-	pauseEngine(false);
+
+	int slotNum;
+	{
+		PauseToken pt = pauseEngine();
+		slotNum = dialog->runModalWithCurrentTarget();
+	}
+
 	delete dialog;
 
 	if (slotNum < 0)
@@ -762,9 +772,11 @@ bool Engine::saveGameDialog() {
 	}
 
 	GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true);
-	pauseEngine(true);
-	int slotNum = dialog->runModalWithCurrentTarget();
-	pauseEngine(false);
+	int slotNum;
+	{
+		PauseToken pt = pauseEngine();
+		slotNum = dialog->runModalWithCurrentTarget();
+	}
 
 	Common::String desc = dialog->getResultString();
 	if (desc.empty())
@@ -818,3 +830,33 @@ MetaEngine &Engine::getMetaEngine() {
 	assert(plugin);
 	return plugin->get<MetaEngine>();
 }
+
+PauseToken::PauseToken() : _engine(nullptr) {}
+
+PauseToken::PauseToken(Engine *engine) : _engine(engine) {}
+
+void PauseToken::operator=(const PauseToken &t2) {
+	if (t2._engine == _engine) {
+		return;
+	}
+
+	if (_engine) {
+		_engine->resumeEngine();
+	}
+	_engine = t2._engine;
+	if (_engine) {
+		_engine->_pauseLevel++;
+	}
+}
+
+PauseToken::PauseToken(const PauseToken &t2) : _engine(t2._engine) {
+	if (_engine) {
+		_engine->_pauseLevel++;
+	}
+}
+
+PauseToken::~PauseToken() {
+	if (_engine) {
+		_engine->resumeEngine();
+	}
+}
diff --git a/engines/engine.h b/engines/engine.h
index 63432583ce..7b33741e8e 100644
--- a/engines/engine.h
+++ b/engines/engine.h
@@ -56,6 +56,22 @@ class Dialog;
 void GUIErrorMessage(const Common::String &msg);
 void GUIErrorMessageFormat(const char *fmt, ...) GCC_PRINTF(1, 2);
 
+class Engine;
+
+class PauseToken {
+public:
+	PauseToken();
+	PauseToken(const PauseToken &);
+	~PauseToken();
+
+	void operator=(const PauseToken &);
+private:
+	PauseToken(Engine *);
+
+	Engine *_engine;
+
+	friend class Engine;
+};
 
 class Engine {
 public:
@@ -343,13 +359,16 @@ public:
 	 * and other stuff. Called right before the system runs a global dialog
 	 * (like a global pause, main menu, options or 'confirm exit' dialog).
 	 *
-	 * This is a convenience tracker which automatically keeps track on how
-	 * often the engine has been paused, ensuring that after pausing an engine
-	 * e.g. twice, it has to be unpaused twice before actuallying resuming.
-	 *
-	 * @param pause		true to pause the engine, false to resume it
+	 * Returns a PauseToken. Multiple pause tokens may exist. The engine will
+	 * be resumed when all associated pause tokens reach the end of their lives.
 	 */
-	void pauseEngine(bool pause);
+	PauseToken pauseEngine();
+	private:
+		void resumeEngine();
+
+		friend class PauseToken;
+
+	public:
 
 	/**
 	 * Return whether the engine is currently paused or not.


Commit: 59702fae9b1448c26a337da2ea5f0089ab0f3fbd
    https://github.com/scummvm/scummvm/commit/59702fae9b1448c26a337da2ea5f0089ab0f3fbd
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
PEGASUS: Use PauseToken

Changed paths:
    engines/pegasus/pegasus.cpp


diff --git a/engines/pegasus/pegasus.cpp b/engines/pegasus/pegasus.cpp
index 02b0413551..4fdf3a235e 100644
--- a/engines/pegasus/pegasus.cpp
+++ b/engines/pegasus/pegasus.cpp
@@ -1018,14 +1018,12 @@ void PegasusEngine::handleInput(const Input &input, const Hotspot *cursorSpot) {
 
 		// Can only save during a game and not in the demo
 		if (g_neighborhood && !isDemo()) {
-			pauseEngine(true);
+			PauseToken pt = pauseEngine();
 
 			Common::Error result = showSaveDialog();
 
 			if (result.getCode() != Common::kNoError && result.getCode() != Common::kUserCanceled)
 				showSaveFailedDialog(result);
-
-			pauseEngine(false);
 		}
 	}
 
@@ -1040,7 +1038,7 @@ void PegasusEngine::handleInput(const Input &input, const Hotspot *cursorSpot) {
 		// Just use the pause menu's restore button since it's there for that
 		// for you to load anyway.
 		if (!isDemo() && !(_gameMenu && _gameMenu->getObjectID() == kPauseMenuID)) {
-			pauseEngine(true);
+			PauseToken pt = pauseEngine();
 
 			if (g_neighborhood) {
 				makeContinuePoint();
@@ -1062,8 +1060,6 @@ void PegasusEngine::handleInput(const Input &input, const Hotspot *cursorSpot) {
 					resetIntroTimer();
 				}
 			}
-
-			pauseEngine(false);
 		}
 	}
 }


Commit: ce4cfdf5d240262d26b3127ad11d8f23e986ffb0
    https://github.com/scummvm/scummvm/commit/ce4cfdf5d240262d26b3127ad11d8f23e986ffb0
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
BACKENDS: Use PauseToken

Changed paths:
    backends/events/default/default-events.cpp


diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp
index e7ccbde3f3..8f0e621073 100644
--- a/backends/events/default/default-events.cpp
+++ b/backends/events/default/default-events.cpp
@@ -171,12 +171,11 @@ bool DefaultEventManager::pollEvent(Common::Event &event) {
 #endif
 	case Common::EVENT_RTL:
 		if (ConfMan.getBool("confirm_exit")) {
+			PauseToken pt;
 			if (g_engine)
-				g_engine->pauseEngine(true);
+				pt = g_engine->pauseEngine();
 			GUI::MessageDialog alert(_("Do you really want to return to the Launcher?"), _("Launcher"), _("Cancel"));
 			forwardEvent = _shouldRTL = (alert.runModal() == GUI::kMessageOK);
-			if (g_engine)
-				g_engine->pauseEngine(false);
 		} else
 			_shouldRTL = true;
 		break;
@@ -193,12 +192,14 @@ bool DefaultEventManager::pollEvent(Common::Event &event) {
 				break;
 			}
 			_confirmExitDialogActive = true;
-			if (g_engine)
-				g_engine->pauseEngine(true);
-			GUI::MessageDialog alert(_("Do you really want to quit?"), _("Quit"), _("Cancel"));
-			forwardEvent = _shouldQuit = (alert.runModal() == GUI::kMessageOK);
-			if (g_engine)
-				g_engine->pauseEngine(false);
+
+			{
+				PauseToken pt;
+				if (g_engine)
+					pt = g_engine->pauseEngine();
+				GUI::MessageDialog alert(_("Do you really want to quit?"), _("Quit"), _("Cancel"));
+				forwardEvent = _shouldQuit = (alert.runModal() == GUI::kMessageOK);
+			}
 			_confirmExitDialogActive = false;
 		} else {
 			_shouldQuit = true;


Commit: 802c0ece7f5b94595df0f831183a1c6b2650eda4
    https://github.com/scummvm/scummvm/commit/802c0ece7f5b94595df0f831183a1c6b2650eda4
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
SCUMM: PauseToken for saving

Changed paths:
    engines/scumm/saveload.cpp


diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp
index 7f419c1365..0572707816 100644
--- a/engines/scumm/saveload.cpp
+++ b/engines/scumm/saveload.cpp
@@ -195,7 +195,7 @@ bool ScummEngine::saveState(Common::WriteStream *out, bool writeHeader) {
 bool ScummEngine::saveState(int slot, bool compat, Common::String &filename) {
 	bool saveFailed = false;
 
-	pauseEngine(true);
+	PauseToken pt = pauseEngine();
 
 	Common::WriteStream *out = openSaveFileForWriting(slot, compat, filename);
 	if (!out) {
@@ -215,8 +215,6 @@ bool ScummEngine::saveState(int slot, bool compat, Common::String &filename) {
 	else
 		debug(1, "State saved as '%s'", filename.c_str());
 
-	pauseEngine(false);
-
 	return !saveFailed;
 }
 


Commit: 95f4144190b31913a7b399fcd953569f89e801df
    https://github.com/scummvm/scummvm/commit/95f4144190b31913a7b399fcd953569f89e801df
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
SCUMM: Use baseclass runDialog & always pause _splayer

Part of the PauseToken refactoring. Needs checking that pausing _splayer is the correct action for all types of pauses.

Changed paths:
    engines/scumm/scumm.cpp
    engines/scumm/scumm.h
    engines/scumm/scumm_v7.h


diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index 6ffada45c6..6d205d5571 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -2790,26 +2790,15 @@ void ScummEngine::pauseEngineIntern(bool pause) {
 	}
 }
 
-int ScummEngine::runDialog(Dialog &dialog) {
-	// Pause engine
-	pauseEngine(true);
-
-	// Open & run the dialog
-	int result = dialog.runModal();
-
-	// Resume engine
-	pauseEngine(false);
-
-	// Return the result
-	return result;
-}
-
 #ifdef ENABLE_SCUMM_7_8
-int ScummEngine_v7::runDialog(Dialog &dialog) {
-	_splayer->pause();
-	int result = ScummEngine::runDialog(dialog);
-	_splayer->unpause();
-	return result;
+void ScummEngine_v7::pauseEngineIntern(bool pause) {
+	if (pause) {
+		_splayer->pause();
+	} else {
+		_splayer->unpause();
+	}
+
+	ScummEngine::pauseEngineIntern(pause);
 }
 #endif
 
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index ccaf2fc749..52c88af1f2 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -497,7 +497,6 @@ protected:
 	Dialog *_messageDialog;
 	Dialog *_versionDialog;
 
-	int runDialog(Dialog &dialog) override;
 	void confirmExitDialog();
 	void confirmRestartDialog();
 	void pauseDialog();
diff --git a/engines/scumm/scumm_v7.h b/engines/scumm/scumm_v7.h
index 4148fb1958..cf240fb165 100644
--- a/engines/scumm/scumm_v7.h
+++ b/engines/scumm/scumm_v7.h
@@ -98,7 +98,6 @@ public:
 	bool isSmushActive() { return _smushActive; }
 
 protected:
-	int runDialog(Dialog &dialog) override;
 
 	void scummLoop_handleSound() override;
 	void scummLoop_handleDrawing() override;
@@ -132,6 +131,8 @@ protected:
 
 	void drawVerb(int verb, int mode) override;
 
+	void pauseEngineIntern(bool pause) override;
+
 
 	void o6_kernelSetFunctions() override;
 };


Commit: c15f268e9b9b034886632f5f482efd3ea4e1ca85
    https://github.com/scummvm/scummvm/commit/c15f268e9b9b034886632f5f482efd3ea4e1ca85
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
ENGINES: Allow clearing a PauseToken

Changed paths:
    engines/engine.cpp
    engines/engine.h


diff --git a/engines/engine.cpp b/engines/engine.cpp
index 093a411140..e01a2b92fa 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -855,6 +855,13 @@ PauseToken::PauseToken(const PauseToken &t2) : _engine(t2._engine) {
 	}
 }
 
+void PauseToken::clear() {
+	if (_engine) {
+		_engine->resumeEngine();
+	}
+	_engine = nullptr;
+}
+
 PauseToken::~PauseToken() {
 	if (_engine) {
 		_engine->resumeEngine();
diff --git a/engines/engine.h b/engines/engine.h
index 7b33741e8e..3582bf0281 100644
--- a/engines/engine.h
+++ b/engines/engine.h
@@ -65,6 +65,7 @@ public:
 	~PauseToken();
 
 	void operator=(const PauseToken &);
+	void clear();
 private:
 	PauseToken(Engine *);
 


Commit: c5bdd7a1f29b4b97de86db55946369d09688d1fd
    https://github.com/scummvm/scummvm/commit/c5bdd7a1f29b4b97de86db55946369d09688d1fd
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
GUI: Use PauseToken in Debugger

Changed paths:
    gui/debugger.cpp
    gui/debugger.h


diff --git a/gui/debugger.cpp b/gui/debugger.cpp
index ea8a699ac0..895f37336d 100644
--- a/gui/debugger.cpp
+++ b/gui/debugger.cpp
@@ -147,11 +147,11 @@ void Debugger::debugPrintColumns(const Common::StringArray &list) {
 }
 
 void Debugger::preEnter() {
-	g_engine->pauseEngine(true);
+	_debugPauseToken = g_engine->pauseEngine();
 }
 
 void Debugger::postEnter() {
-	g_engine->pauseEngine(false);
+	_debugPauseToken.clear();
 }
 
 void Debugger::attach(const char *entry) {
diff --git a/gui/debugger.h b/gui/debugger.h
index a100aae170..9ffef6bb05 100644
--- a/gui/debugger.h
+++ b/gui/debugger.h
@@ -31,6 +31,8 @@
 #include "common/str.h"
 #include "common/str-array.h"
 
+#include "engine.h"
+
 namespace GUI {
 
 #ifndef USE_TEXT_CONSOLE_FOR_DEBUGGER
@@ -172,6 +174,9 @@ private:
 	 */
 	bool _firstTime;
 
+protected:
+	PauseToken _debugPauseToken;
+
 #ifndef USE_TEXT_CONSOLE_FOR_DEBUGGER
 	GUI::ConsoleDialog *_debuggerDialog;
 #endif


Commit: feb60191823625651fc4a09dc952edaed8cf4358
    https://github.com/scummvm/scummvm/commit/feb60191823625651fc4a09dc952edaed8cf4358
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
QUEEN: Debugger, call base for preEnter and postEnter

Changed paths:
    engines/queen/debug.cpp


diff --git a/engines/queen/debug.cpp b/engines/queen/debug.cpp
index 125ddf30c6..3ed4e566a8 100644
--- a/engines/queen/debug.cpp
+++ b/engines/queen/debug.cpp
@@ -50,11 +50,11 @@ Debugger::Debugger(QueenEngine *vm)
 Debugger::~Debugger() {} // we need this here for __SYMBIAN32__
 
 void Debugger::preEnter() {
-	_vm->pauseEngine(true);
+	GUI::Debugger::preEnter();
 }
 
 void Debugger::postEnter() {
-	_vm->pauseEngine(false);
+	GUI::Debugger::postEnter();
 	_vm->graphics()->setupMouseCursor();
 }
 


Commit: f87a73b4f7ed4308ed98910b67abd90e30bdc3e7
    https://github.com/scummvm/scummvm/commit/f87a73b4f7ed4308ed98910b67abd90e30bdc3e7
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
ACCESS: Debugger, call base postEnter

Changed paths:
    engines/access/debugger.cpp


diff --git a/engines/access/debugger.cpp b/engines/access/debugger.cpp
index 308733ece2..1f563cc4b5 100644
--- a/engines/access/debugger.cpp
+++ b/engines/access/debugger.cpp
@@ -59,7 +59,7 @@ void Debugger::postEnter() {
 		_playMovieFile.clear();
 	}
 
-	_vm->pauseEngine(false);
+	GUI::Debugger::postEnter();
 }
 
 /*------------------------------------------------------------------------*/


Commit: faa8bea5cb7e3afee33922b84a0b23bd8056dfe2
    https://github.com/scummvm/scummvm/commit/faa8bea5cb7e3afee33922b84a0b23bd8056dfe2
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
PARALLACTION: Debugger, call base preEnter & postEnter

Changed paths:
    engines/parallaction/debug.cpp


diff --git a/engines/parallaction/debug.cpp b/engines/parallaction/debug.cpp
index 19022fb0fa..506a6a41ee 100644
--- a/engines/parallaction/debug.cpp
+++ b/engines/parallaction/debug.cpp
@@ -51,12 +51,12 @@ Debugger::Debugger(Parallaction *vm)
 
 void Debugger::preEnter() {
 	_mouseState = _vm->_input->getMouseState();
-	_vm->pauseEngine(true);
+	GUI::Debugger::preEnter();
 }
 
 
 void Debugger::postEnter() {
-	_vm->pauseEngine(false);
+	GUI::Debugger::postEnter();
 	_vm->_input->setMouseState(_mouseState);
 	_vm->_input->setArrowCursor();	// unselects the active item, if any
 }


Commit: d26655dc4d8f81b17056d3e49a40913a4b8356e8
    https://github.com/scummvm/scummvm/commit/d26655dc4d8f81b17056d3e49a40913a4b8356e8
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
SCI: Debugger, call base preEnter & postEnter

Changed paths:
    engines/sci/console.cpp


diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp
index 2ffda09965..30902be791 100644
--- a/engines/sci/console.cpp
+++ b/engines/sci/console.cpp
@@ -271,7 +271,7 @@ void Console::attach(const char *entry) {
 }
 
 void Console::preEnter() {
-	_engine->pauseEngine(true);
+	GUI::Debugger::preEnter();
 }
 
 extern void playVideo(Video::VideoDecoder &videoDecoder);
@@ -299,7 +299,7 @@ void Console::postEnter() {
 		_videoFrameDelay = 0;
 	}
 
-	_engine->pauseEngine(false);
+	GUI::Debugger::postEnter();
 }
 
 bool Console::cmdHelp(int argc, const char **argv) {


Commit: 736702332e87121c50fa8c48d7f9863aa9d01bf3
    https://github.com/scummvm/scummvm/commit/736702332e87121c50fa8c48d7f9863aa9d01bf3
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
SHERLOCK: Debugger, call base postEnter

Changed paths:
    engines/sherlock/debugger.cpp


diff --git a/engines/sherlock/debugger.cpp b/engines/sherlock/debugger.cpp
index 39bc1b90ab..9f6ae6fdc3 100644
--- a/engines/sherlock/debugger.cpp
+++ b/engines/sherlock/debugger.cpp
@@ -57,7 +57,7 @@ void Debugger::postEnter() {
 		_3doPlayMovieFile.clear();
 	}
 
-	_vm->pauseEngine(false);
+	GUI::Debugger::postEnter();
 }
 
 int Debugger::strToInt(const char *s) {


Commit: fa4518fbab96e932c65ed224347e43d0e942efec
    https://github.com/scummvm/scummvm/commit/fa4518fbab96e932c65ed224347e43d0e942efec
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
SCI: Use PauseToken in kernelMessageBox

Changed paths:
    engines/sci/graphics/controls32.cpp


diff --git a/engines/sci/graphics/controls32.cpp b/engines/sci/graphics/controls32.cpp
index 298006cf82..6c349f1ef4 100644
--- a/engines/sci/graphics/controls32.cpp
+++ b/engines/sci/graphics/controls32.cpp
@@ -913,8 +913,9 @@ int16 GfxControls32::showMessageBox(const Common::String &message, const char *c
 }
 
 reg_t GfxControls32::kernelMessageBox(const Common::String &message, const Common::String &title, const uint16 style) {
+	PauseToken pt;
 	if (g_engine) {
-		g_engine->pauseEngine(true);
+		pt = g_engine->pauseEngine();
 	}
 
 	int16 result;
@@ -930,10 +931,6 @@ reg_t GfxControls32::kernelMessageBox(const Common::String &message, const Commo
 		error("Unsupported MessageBox style 0x%x", style & 0xF);
 	}
 
-	if (g_engine) {
-		g_engine->pauseEngine(false);
-	}
-
 	return make_reg(0, result);
 }
 


Commit: fb92ccbade87bdfbcb9b6988dada320d2da94ad8
    https://github.com/scummvm/scummvm/commit/fb92ccbade87bdfbcb9b6988dada320d2da94ad8
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
MOHAWK: Use debugPauseToken in Console::Cmd_QuickTest

Changed paths:
    engines/mohawk/console.cpp


diff --git a/engines/mohawk/console.cpp b/engines/mohawk/console.cpp
index 2bbb525870..f34a43366f 100644
--- a/engines/mohawk/console.cpp
+++ b/engines/mohawk/console.cpp
@@ -328,7 +328,7 @@ bool MystConsole::Cmd_Resources(int argc, const char **argv) {
 }
 
 bool MystConsole::Cmd_QuickTest(int argc, const char **argv) {
-	_vm->pauseEngine(false);
+	_debugPauseToken.clear();
 
 	// Go through all the ages, all the views and click random stuff
 	for (uint i = 0; i < ARRAYSIZE(mystStackNames); i++) {
@@ -366,7 +366,7 @@ bool MystConsole::Cmd_QuickTest(int argc, const char **argv) {
 		}
 	}
 
-	_vm->pauseEngine(true);
+	_debugPauseToken = _vm->pauseEngine();
 	return true;
 }
 
@@ -690,7 +690,7 @@ bool RivenConsole::Cmd_SliderState(int argc, const char **argv) {
 }
 
 bool RivenConsole::Cmd_QuickTest(int argc, const char **argv) {
-	_vm->pauseEngine(false);
+	_debugPauseToken.clear();
 
 	// Go through all the stacks, all the cards and click random stuff
 	for (uint16 stackId = kStackFirst; stackId <= kStackLast; stackId++) {
@@ -744,7 +744,7 @@ bool RivenConsole::Cmd_QuickTest(int argc, const char **argv) {
 		}
 	}
 
-	_vm->pauseEngine(true);
+	_debugPauseToken = _vm->pauseEngine();
 	return true;
 }
 


Commit: acf81a79c10c6bf155d6b1ed8b8fbee45e08e124
    https://github.com/scummvm/scummvm/commit/acf81a79c10c6bf155d6b1ed8b8fbee45e08e124
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
AGOS: Use PauseToken in pause function

Changed paths:
    engines/agos/agos.cpp


diff --git a/engines/agos/agos.cpp b/engines/agos/agos.cpp
index 9a360699b3..8c3dd46513 100644
--- a/engines/agos/agos.cpp
+++ b/engines/agos/agos.cpp
@@ -992,12 +992,12 @@ void AGOSEngine::pauseEngineIntern(bool pauseIt) {
 }
 
 void AGOSEngine::pause() {
-	pauseEngine(true);
+	PauseToken pt = pauseEngine();
 
 	while (_pause && !shouldQuit()) {
 		delay(1);
 		if (_keyPressed.keycode == Common::KEYCODE_PAUSE) {
-			pauseEngine(false);
+			pt.clear();
 			_keyPressed.reset();
 		}
 	}


Commit: c1c90afbde77900cc5b6be8022a2d76c8ba2bc26
    https://github.com/scummvm/scummvm/commit/c1c90afbde77900cc5b6be8022a2d76c8ba2bc26
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
MOHAWK: Use PauseToken in menu stack

Changed paths:
    engines/mohawk/myst_stacks/menu.cpp
    engines/mohawk/myst_stacks/menu.h


diff --git a/engines/mohawk/myst_stacks/menu.cpp b/engines/mohawk/myst_stacks/menu.cpp
index 45c5fdf1c7..3e97104481 100644
--- a/engines/mohawk/myst_stacks/menu.cpp
+++ b/engines/mohawk/myst_stacks/menu.cpp
@@ -108,7 +108,7 @@ uint16 Menu::getVar(uint16 var) {
 }
 
 void Menu::o_menuInit(uint16 var, const ArgumentsArray &args) {
-	_vm->pauseEngine(true);
+	_pauseToken = _vm->pauseEngine();
 
 	if (_inGame) {
 		_wasCursorVisible = CursorMan.isVisible();
@@ -330,7 +330,7 @@ void Menu::o_menuExit(uint16 var, const ArgumentsArray &args) {
 
 	CursorMan.showMouse(_wasCursorVisible);
 
-	_vm->pauseEngine(false);
+	_pauseToken.clear();
 }
 
 void Menu::o_playIntroMovies(uint16 var, const ArgumentsArray &args) {
diff --git a/engines/mohawk/myst_stacks/menu.h b/engines/mohawk/myst_stacks/menu.h
index 449a8bd97b..75140b41f4 100644
--- a/engines/mohawk/myst_stacks/menu.h
+++ b/engines/mohawk/myst_stacks/menu.h
@@ -89,6 +89,8 @@ private:
 	const char **getButtonCaptions() const;
 	void resetButtons();
 
+	PauseToken _pauseToken;
+
 };
 
 } // End of namespace MystStacks


Commit: c970106234f15442e1a8a4e405118d7632568bdf
    https://github.com/scummvm/scummvm/commit/c970106234f15442e1a8a4e405118d7632568bdf
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
PEGASUS: Use PauseToken

Changed paths:
    engines/pegasus/pegasus.cpp
    engines/pegasus/pegasus.h


diff --git a/engines/pegasus/pegasus.cpp b/engines/pegasus/pegasus.cpp
index 4fdf3a235e..4a944b7ad8 100644
--- a/engines/pegasus/pegasus.cpp
+++ b/engines/pegasus/pegasus.cpp
@@ -2121,13 +2121,13 @@ void PegasusEngine::setAmbienceLevel(uint16 ambientLevel) {
 
 void PegasusEngine::pauseMenu(bool menuUp) {
 	if (menuUp) {
-		pauseEngine(true);
+		_menuPauseToken = pauseEngine();
 		_screenDimmer.startDisplaying();
 		_screenDimmer.show();
 		_gfx->updateDisplay();
 		useMenu(new PauseMenu());
 	} else {
-		pauseEngine(false);
+		_menuPauseToken.clear();
 		_screenDimmer.hide();
 		_screenDimmer.stopDisplaying();
 		useMenu(0);
diff --git a/engines/pegasus/pegasus.h b/engines/pegasus/pegasus.h
index 80da6d0e44..24a2387cf0 100644
--- a/engines/pegasus/pegasus.h
+++ b/engines/pegasus/pegasus.h
@@ -278,6 +278,7 @@ private:
 	void doInterfaceOverview();
 	ScreenDimmer _screenDimmer;
 	void pauseMenu(bool menuUp);
+	PauseToken _menuPauseToken;
 
 	// Energy
 	int32 _savedEnergyValue;


Commit: 2b3d7ea12d623ab059f7731867b859856b545694
    https://github.com/scummvm/scummvm/commit/2b3d7ea12d623ab059f7731867b859856b545694
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
AGI: Use existing runDialog function

Changed paths:
    engines/agi/keyboard.cpp


diff --git a/engines/agi/keyboard.cpp b/engines/agi/keyboard.cpp
index a24f1d74c5..c4235c4e29 100644
--- a/engines/agi/keyboard.cpp
+++ b/engines/agi/keyboard.cpp
@@ -549,9 +549,7 @@ bool AgiEngine::handleController(uint16 key) {
 bool AgiEngine::showPredictiveDialog() {
 	GUI::PredictiveDialog predictiveDialog;
 
-	inGameTimerPause();
-	predictiveDialog.runModal();
-	inGameTimerResume();
+	runDialog(predictiveDialog);
 
 	Common::String predictiveResult(predictiveDialog.getResult());
 	uint16 predictiveResultLen = predictiveResult.size();


Commit: 7ea98181e25aa653c22921a4bd69ba01a7cc7c27
    https://github.com/scummvm/scummvm/commit/7ea98181e25aa653c22921a4bd69ba01a7cc7c27
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
AGI: Use PauseToken

Changed paths:
    engines/agi/agi.h
    engines/agi/global.cpp
    engines/agi/op_cmd.cpp


diff --git a/engines/agi/agi.h b/engines/agi/agi.h
index 311e36893f..d869b71873 100644
--- a/engines/agi/agi.h
+++ b/engines/agi/agi.h
@@ -1077,8 +1077,6 @@ public:
 
 	void inGameTimerReset(uint32 newPlayTime = 0);
 	void inGameTimerResetPassedCycles();
-	void inGameTimerPause();
-	void inGameTimerResume();
 	uint32 inGameTimerGet();
 	uint32 inGameTimerGetPassedCycles();
 
diff --git a/engines/agi/global.cpp b/engines/agi/global.cpp
index f35bc23f28..a42ab04fb2 100644
--- a/engines/agi/global.cpp
+++ b/engines/agi/global.cpp
@@ -213,12 +213,6 @@ void AgiEngine::inGameTimerReset(uint32 newPlayTime) {
 void AgiEngine::inGameTimerResetPassedCycles() {
 	_passedPlayTimeCycles = 0;
 }
-void AgiEngine::inGameTimerPause() {
-	pauseEngine(true);
-}
-void AgiEngine::inGameTimerResume() {
-	pauseEngine(false);
-}
 uint32 AgiEngine::inGameTimerGet() {
 	return getTotalPlayTime();
 }
diff --git a/engines/agi/op_cmd.cpp b/engines/agi/op_cmd.cpp
index e3512396dc..23eca70470 100644
--- a/engines/agi/op_cmd.cpp
+++ b/engines/agi/op_cmd.cpp
@@ -750,20 +750,17 @@ void cmdSaveGame(AgiGame *state, AgiEngine *vm, uint8 *parameter) {
 		state->_vm->_sound->stopSound();
 	}
 
-	vm->inGameTimerPause();
+	PauseToken pt = vm->pauseEngine();
 
 	if (state->automaticSave) {
 		if (vm->saveGameAutomatic()) {
 			// automatic save succeded
-			vm->inGameTimerResume();
 			return;
 		}
 		// fall back to regular dialog otherwise
 	}
 
 	vm->saveGameDialog();
-
-	vm->inGameTimerResume();
 }
 
 void cmdLoadGame(AgiGame *state, AgiEngine *vm, uint8 *parameter) {
@@ -772,20 +769,17 @@ void cmdLoadGame(AgiGame *state, AgiEngine *vm, uint8 *parameter) {
 		state->_vm->_sound->stopSound();
 	}
 
-	vm->inGameTimerPause();
+	PauseToken pt = vm->pauseEngine();
 
 	if (state->automaticSave) {
 		if (vm->loadGameAutomatic()) {
 			// automatic restore succeded
-			vm->inGameTimerResume();
 			return;
 		}
 		// fall back to regular dialog otherwise
 	}
 
 	vm->loadGameDialog();
-
-	vm->inGameTimerResume();
 }
 
 void cmdInitDisk(AgiGame *state, AgiEngine *vm, uint8 *parameter) {             // do nothing
@@ -1746,11 +1740,9 @@ void cmdSetGameID(AgiGame *state, AgiEngine *vm, uint8 *parameter) {
 
 void cmdPause(AgiGame *state, AgiEngine *vm, uint8 *parameter) {
 	// Show pause message box
-	vm->inGameTimerPause();
+	PauseToken pt = vm->pauseEngine();
 
 	state->_vm->_systemUI->pauseDialog();
-
-	vm->inGameTimerResume();
 }
 
 void cmdSetMenu(AgiGame *state, AgiEngine *vm, uint8 *parameter) {


Commit: 4a6a8f0c369f129a62f99ff5d51e0373ae8e4574
    https://github.com/scummvm/scummvm/commit/4a6a8f0c369f129a62f99ff5d51e0373ae8e4574
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
SWORD2: Use PauseToken

Changed paths:
    engines/sword2/sword2.cpp
    engines/sword2/sword2.h


diff --git a/engines/sword2/sword2.cpp b/engines/sword2/sword2.cpp
index 95855e4fa2..2fe65edbff 100644
--- a/engines/sword2/sword2.cpp
+++ b/engines/sword2/sword2.cpp
@@ -546,9 +546,9 @@ Common::Error Sword2Engine::run() {
 				case Common::KEYCODE_p:
 					if (isPaused()) {
 						_screen->dimPalette(false);
-						pauseEngine(false);
+						_gamePauseToken.clear();
 					} else {
-						pauseEngine(true);
+						_gamePauseToken = pauseEngine();
 						_screen->dimPalette(true);
 					}
 					break;
diff --git a/engines/sword2/sword2.h b/engines/sword2/sword2.h
index 1a1c774edf..64536ff208 100644
--- a/engines/sword2/sword2.h
+++ b/engines/sword2/sword2.h
@@ -140,6 +140,8 @@ private:
 	// Original game platform (PC/PSX)
 	static Common::Platform _platform;
 
+	PauseToken _gamePauseToken;
+
 protected:
 	// Engine APIs
 	Common::Error run() override;


Commit: 866800ffb0ed64df346f2f0e46577574e117af8f
    https://github.com/scummvm/scummvm/commit/866800ffb0ed64df346f2f0e46577574e117af8f
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
CRUISE: Use PauseToken

Changed paths:
    engines/cruise/cruise.cpp
    engines/cruise/cruise.h


diff --git a/engines/cruise/cruise.cpp b/engines/cruise/cruise.cpp
index 3bc01fdcda..b633acc2e4 100644
--- a/engines/cruise/cruise.cpp
+++ b/engines/cruise/cruise.cpp
@@ -178,9 +178,8 @@ bool CruiseEngine::loadLanguageStrings() {
 }
 
 void CruiseEngine::pauseEngine(bool pause) {
-	Engine::pauseEngine(pause);
-
 	if (pause) {
+		_gamePauseToken = Engine::pauseEngine();
 		// Draw the 'Paused' message
 		drawSolidBox(64, 100, 256, 117, 0);
 		drawString(10, 100, langString(ID_PAUSED), gfxModuleData.pPage00, itemColor, 300);
@@ -189,6 +188,7 @@ void CruiseEngine::pauseEngine(bool pause) {
 		_savedCursor = currentCursor;
 		changeCursor(CURSOR_NOMOUSE);
 	} else {
+		_gamePauseToken.clear();
 		processAnimation();
 		flipScreen();
 		changeCursor(_savedCursor);
diff --git a/engines/cruise/cruise.h b/engines/cruise/cruise.h
index 16244f8faf..16a4324072 100644
--- a/engines/cruise/cruise.h
+++ b/engines/cruise/cruise.h
@@ -62,6 +62,7 @@ private:
 	uint32 _lastTick;
 	int _gameSpeed;
 	bool _speedFlag;
+	PauseToken _gamePauseToken;
 
 	void initialize();
 	void deinitialize();


Commit: d315fc8add37b7774131fbb26cb123687e8dec90
    https://github.com/scummvm/scummvm/commit/d315fc8add37b7774131fbb26cb123687e8dec90
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
MACGUI: Use real Engine and PauseToken classes

Changed paths:
    graphics/macgui/macmenu.cpp
    graphics/macgui/macwindowmanager.cpp
    graphics/macgui/macwindowmanager.h


diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 3367b02e64..dfb37c75bc 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -1087,9 +1087,7 @@ bool MacMenu::mouseMove(int x, int y) {
 	} else if ((_wm->_mode & kWMModeAutohideMenu) && !_bbox.contains(x, y)) {
 		_isVisible = false;
 		if (_wm->_mode & kWMModalMenuMode) {
-			_wm->pauseEngine(false);
-			*_wm->_screen = *_wm->_screenCopy; // restore screen
-			g_system->copyRectToScreen(_wm->_screenCopy->getBasePtr(0, 0), _wm->_screenCopy->pitch, 0, 0, _wm->_screenCopy->w, _wm->_screenCopy->h);
+			_wm->disableScreenCopy();
 		}
 	}
 
@@ -1119,9 +1117,7 @@ bool MacMenu::mouseRelease(int x, int y) {
 			_isVisible = false;
 
 		if (_wm->_mode & kWMModalMenuMode) {
-			_wm->pauseEngine(false);
-			*_wm->_screen = *_wm->_screenCopy; // restore screen
-			g_system->copyRectToScreen(_wm->_screenCopy->getBasePtr(0, 0), _wm->_screenCopy->pitch, 0, 0, _wm->_screenCopy->w, _wm->_screenCopy->h);
+			_wm->disableScreenCopy();
 		}
 
 		if (_activeItem != -1 && _activeSubItem != -1 && _menustack.back()->items[_activeSubItem]->enabled) {
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 0a55d6c6b6..2caecb407b 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -168,7 +168,6 @@ MacWindowManager::MacWindowManager(uint32 mode) {
 
 	_engineP = nullptr;
 	_engineR = nullptr;
-	_pauseEngineCallback = nullptr;
 	_redrawEngineCallback = nullptr;
 
 	_colorBlack = 0;
@@ -266,16 +265,27 @@ void MacWindowManager::activateMenu() {
 		return;
 
 	if (_mode & kWMModalMenuMode) {
-		if (!_screenCopy)
-			_screenCopy = new ManagedSurface(*_screen);	// Create a copy
-		else
-			*_screenCopy = *_screen;
-		pauseEngine(true);
+		activateScreenCopy();
 	}
 
 	_menu->setVisible(true);
 }
 
+void MacWindowManager::activateScreenCopy() {
+	if (!_screenCopy)
+		_screenCopy = new ManagedSurface(*_screen);	// Create a copy
+	else
+		*_screenCopy = *_screen;
+
+	_screenCopyPauseToken = pauseEngine();
+}
+
+void MacWindowManager::disableScreenCopy() {
+	_screenCopyPauseToken.clear();
+	*_screen = *_screenCopy; // restore screen
+	g_system->copyRectToScreen(_screenCopy->getBasePtr(0, 0), _screenCopy->pitch, 0, 0, _screenCopy->w, _screenCopy->h);
+}
+
 bool MacWindowManager::isMenuActive() {
 	if (!_menu)
 		return false;
@@ -621,17 +631,12 @@ uint MacWindowManager::findBestColor(byte cr, byte cg, byte cb) {
 	return bestColor;
 }
 
-void MacWindowManager::pauseEngine(bool pause) {
-	if (_engineP && _pauseEngineCallback) {
-		_pauseEngineCallback(_engineP, pause);
-	} else {
-		warning("MacWindowManager::pauseEngine(): no pauseEngineCallback is set");
-	}
+PauseToken MacWindowManager::pauseEngine() {
+	return _engineP->pauseEngine();
 }
 
-void MacWindowManager::setEnginePauseCallback(void *engine, void (*pauseCallback)(void *, bool)) {
+void MacWindowManager::setEnginePauseCallback(Engine *engine) {
 	_engineP = engine;
-	_pauseEngineCallback = pauseCallback;
 }
 
 void MacWindowManager::setEngineRedrawCallback(void *engine, void (*redrawCallback)(void *)) {
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index e222b21d05..f469121467 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -31,6 +31,8 @@
 #include "graphics/fontman.h"
 #include "graphics/macgui/macwindow.h"
 
+#include "engines/engine.h"
+
 namespace Graphics {
 
 namespace MacGUIConstants {
@@ -152,6 +154,9 @@ public:
 
 	void activateMenu();
 
+	void activateScreenCopy();
+	void disableScreenCopy();
+
 	bool isMenuActive();
 
 	/**
@@ -231,11 +236,11 @@ public:
 	void pushCustomCursor(const Graphics::Cursor *cursor);
 	void popCursor();
 
-	void pauseEngine(bool pause);
+	PauseToken pauseEngine();
 
 	void setMode(uint32 mode);
 
-	void setEnginePauseCallback(void *engine, void (*pauseCallback)(void *engine, bool pause));
+	void setEnginePauseCallback(Engine *engine);
 	void setEngineRedrawCallback(void *engine, void (*redrawCallback)(void *engine));
 
 	void passPalette(const byte *palette, uint size);
@@ -282,14 +287,15 @@ private:
 	MacMenu *_menu;
 	uint32 _menuDelay;
 
-	void *_engineP;
+	Engine *_engineP;
 	void *_engineR;
-	void (*_pauseEngineCallback)(void *engine, bool pause);
 	void (*_redrawEngineCallback)(void *engine);
 
 	bool _cursorIsArrow;
 
 	MacWidget *_activeWidget;
+
+	PauseToken _screenCopyPauseToken;
 };
 
 } // End of namespace Graphics


Commit: 3edcc22c785bda987521b490ec30efe51302314f
    https://github.com/scummvm/scummvm/commit/3edcc22c785bda987521b490ec30efe51302314f
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
PINK: Use new MACGUI interface

Changed paths:
    engines/pink/gui.cpp
    engines/pink/pink.cpp
    engines/pink/pink.h


diff --git a/engines/pink/gui.cpp b/engines/pink/gui.cpp
index addefbe4d6..26bcfaa794 100644
--- a/engines/pink/gui.cpp
+++ b/engines/pink/gui.cpp
@@ -132,7 +132,7 @@ static void menuCommandsCallback(int action, Common::U32String &, void *data) {
 }
 
 void PinkEngine::initMenu() {
-	_director->getWndManager().setEnginePauseCallback(this, &pauseEngine);
+	_director->getWndManager().setEnginePauseCallback(this);
 
 	_menu = Graphics::MacMenu::createMenuFromPEexe(_exeResources, &_director->getWndManager());
 	_menu->calcDimensions();
diff --git a/engines/pink/pink.cpp b/engines/pink/pink.cpp
index e99c68dbde..4f90f31a23 100644
--- a/engines/pink/pink.cpp
+++ b/engines/pink/pink.cpp
@@ -159,17 +159,6 @@ Common::Error Pink::PinkEngine::run() {
 	return Common::kNoError;
 }
 
-void PinkEngine::pauseEngine(void *engine, bool pause) {
-	Engine *vm = (Engine *)engine;
-	if (pause) {
-		vm->pauseEngine(true);
-	} else {
-		while (vm->isPaused()) {
-			vm->pauseEngine(false);
-		}
-	}
-}
-
 void PinkEngine::load(Archive &archive) {
 	archive.skipString();
 	archive.skipString();
diff --git a/engines/pink/pink.h b/engines/pink/pink.h
index 6f5ddba2c7..6294362e11 100644
--- a/engines/pink/pink.h
+++ b/engines/pink/pink.h
@@ -105,8 +105,6 @@ public:
 		return Common::String::format("%s.s%02d", _targetName.c_str(), slot);
 	}
 
-	static void pauseEngine(void *engine, bool pause); // for MacWndMgr
-
 	friend class Console;
 
 protected:


Commit: 8079dc8d721a4a914b0bda5be7c9881c2104a7fe
    https://github.com/scummvm/scummvm/commit/8079dc8d721a4a914b0bda5be7c9881c2104a7fe
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
MACGUI, PINK: Rename setEnginePauseCallback to setEngine

Changed paths:
    engines/pink/gui.cpp
    graphics/macgui/macwindowmanager.cpp
    graphics/macgui/macwindowmanager.h


diff --git a/engines/pink/gui.cpp b/engines/pink/gui.cpp
index 26bcfaa794..d256e92f52 100644
--- a/engines/pink/gui.cpp
+++ b/engines/pink/gui.cpp
@@ -132,7 +132,7 @@ static void menuCommandsCallback(int action, Common::U32String &, void *data) {
 }
 
 void PinkEngine::initMenu() {
-	_director->getWndManager().setEnginePauseCallback(this);
+	_director->getWndManager().setEngine(this);
 
 	_menu = Graphics::MacMenu::createMenuFromPEexe(_exeResources, &_director->getWndManager());
 	_menu->calcDimensions();
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 2caecb407b..1ef7dc0ba0 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -635,7 +635,7 @@ PauseToken MacWindowManager::pauseEngine() {
 	return _engineP->pauseEngine();
 }
 
-void MacWindowManager::setEnginePauseCallback(Engine *engine) {
+void MacWindowManager::setEngine(Engine *engine) {
 	_engineP = engine;
 }
 
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index f469121467..31c4137b73 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -240,7 +240,7 @@ public:
 
 	void setMode(uint32 mode);
 
-	void setEnginePauseCallback(Engine *engine);
+	void setEngine(Engine *engine);
 	void setEngineRedrawCallback(void *engine, void (*redrawCallback)(void *engine));
 
 	void passPalette(const byte *palette, uint size);


Commit: f5ac623cca9b28780ba22243c90b2b566c46d41a
    https://github.com/scummvm/scummvm/commit/f5ac623cca9b28780ba22243c90b2b566c46d41a
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
ENGINES: Disallow assignment to a busy pause token.

Changed paths:
    engines/engine.cpp


diff --git a/engines/engine.cpp b/engines/engine.cpp
index e01a2b92fa..c618db8668 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -836,12 +836,8 @@ PauseToken::PauseToken() : _engine(nullptr) {}
 PauseToken::PauseToken(Engine *engine) : _engine(engine) {}
 
 void PauseToken::operator=(const PauseToken &t2) {
-	if (t2._engine == _engine) {
-		return;
-	}
-
 	if (_engine) {
-		_engine->resumeEngine();
+		error("Tried to assign to an already busy PauseToken");
 	}
 	_engine = t2._engine;
 	if (_engine) {


Commit: 830a239b046fb769f9ebb87beb5dcc1493d50447
    https://github.com/scummvm/scummvm/commit/830a239b046fb769f9ebb87beb5dcc1493d50447
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
ENGINES: Move semantics for PauseToken

Only compilers who understands move semantics see the code.

Changed paths:
    engines/engine.cpp
    engines/engine.h


diff --git a/engines/engine.cpp b/engines/engine.cpp
index c618db8668..5496b4f9ee 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -863,3 +863,17 @@ PauseToken::~PauseToken() {
 		_engine->resumeEngine();
 	}
 }
+
+#if __cplusplus >= 201103L
+PauseToken::PauseToken(PauseToken &&t2) : _engine(t2._engine) {
+	t2._engine = nullptr;
+}
+
+void PauseToken::operator=(PauseToken &&t2) {
+	if (_engine) {
+		error("Tried to assign to an already busy PauseToken");
+	}
+	_engine = t2._engine;
+	t2._engine = nullptr;
+}
+#endif
diff --git a/engines/engine.h b/engines/engine.h
index 3582bf0281..a9e10bc8c8 100644
--- a/engines/engine.h
+++ b/engines/engine.h
@@ -58,13 +58,27 @@ void GUIErrorMessageFormat(const char *fmt, ...) GCC_PRINTF(1, 2);
 
 class Engine;
 
+
+/**
+* Manages pausing by Engine::pauseEngine handing out tokens that
+* each represent one requested level of pause.
+*/
 class PauseToken {
 public:
 	PauseToken();
 	PauseToken(const PauseToken &);
+#if __cplusplus >= 201103L
+	PauseToken(PauseToken &&);
+#endif
 	~PauseToken();
 
 	void operator=(const PauseToken &);
+#if __cplusplus >= 201103L
+	void operator=(PauseToken &&);
+#endif
+	/** Manually releases the PauseToken. Only allowed if the token
+	* currently represents a pause request.
+	*/
 	void clear();
 private:
 	PauseToken(Engine *);
@@ -356,7 +370,7 @@ public:
 	static MetaEngine &getMetaEngine();
 
 	/**
-	 * Pause or resume the engine. This should stop/resume any audio playback
+	 * Pause the engine. This should stop any audio playback
 	 * and other stuff. Called right before the system runs a global dialog
 	 * (like a global pause, main menu, options or 'confirm exit' dialog).
 	 *
@@ -364,12 +378,17 @@ public:
 	 * be resumed when all associated pause tokens reach the end of their lives.
 	 */
 	PauseToken pauseEngine();
-	private:
-		void resumeEngine();
+private:
+	/** Resume the engine. This should resume any audio playback and other stuff.
+	*
+	* Only PauseToken is allowed to call this member function. Use the PauseToken
+	* that you got from pauseEngine to resume the engine.
+	*/
+	void resumeEngine();
 
-		friend class PauseToken;
+	friend class PauseToken;
 
-	public:
+public:
 
 	/**
 	 * Return whether the engine is currently paused or not.


Commit: 1b4ce9096f83d6b95ec618856505623f54412271
    https://github.com/scummvm/scummvm/commit/1b4ce9096f83d6b95ec618856505623f54412271
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00

Commit Message:
ENGINES: Disallow clearing an already clear pause token.

Changed paths:
    engines/engine.cpp


diff --git a/engines/engine.cpp b/engines/engine.cpp
index 5496b4f9ee..0100385586 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -852,9 +852,10 @@ PauseToken::PauseToken(const PauseToken &t2) : _engine(t2._engine) {
 }
 
 void PauseToken::clear() {
-	if (_engine) {
-		_engine->resumeEngine();
+	if (!_engine) {
+		error("Tried to clear an already cleared PauseToken");
 	}
+	_engine->resumeEngine();
 	_engine = nullptr;
 }
 




More information about the Scummvm-git-logs mailing list