[Scummvm-git-logs] scummvm master -> d099ee55fbee5b472b8b5a3b116b9d274a5cb884

eriktorbjorn noreply at scummvm.org
Mon Sep 21 20:19:15 UTC 2026


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

Summary:
d099ee55fb SCUMM: MACGUI: Fix quit confirmation dialog on QUIT events


Commit: d099ee55fbee5b472b8b5a3b116b9d274a5cb884
    https://github.com/scummvm/scummvm/commit/d099ee55fbee5b472b8b5a3b116b9d274a5cb884
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2026-09-21T22:17:06+02:00

Commit Message:
SCUMM: MACGUI: Fix quit confirmation dialog on QUIT events

When you quit, there may be multiple QUIT events. This caused the
Macintosh quit confirmation dialog to close immediately. We need to
flush the extra events before running the dialog. Moved this into the
MacGui code to slightly unclutter the common input code.

Changed paths:
    engines/scumm/input.cpp
    engines/scumm/macgui/macgui.cpp
    engines/scumm/macgui/macgui.h
    engines/scumm/macgui/macgui_impl.cpp
    engines/scumm/macgui/macgui_impl.h


diff --git a/engines/scumm/input.cpp b/engines/scumm/input.cpp
index ecef09cf406..3525910f1fe 100644
--- a/engines/scumm/input.cpp
+++ b/engines/scumm/input.cpp
@@ -304,17 +304,7 @@ void ScummEngine::parseEvent(Common::Event event) {
 				getEventManager()->resetReturnToLauncher();
 				if (!_messageBannerActive) {
 					if (_macGui) {
-						if (!(ConfMan.hasKey("confirm_exit") && ConfMan.getBool("confirm_exit")) ||
-							_macGui->runQuitDialog()) {
-							_quitByGUIPrompt = true;
-							if (exitType) {
-								Common::Event fakeEvent;
-								fakeEvent.type = Common::EVENT_RETURN_TO_LAUNCHER;
-								getEventManager()->pushEvent(fakeEvent);
-							} else {
-								quitGame();
-							}
-						}
+						_macGui->queryQuit(exitType);
 					} else {
 						queryQuit(exitType);
 					}
diff --git a/engines/scumm/macgui/macgui.cpp b/engines/scumm/macgui/macgui.cpp
index dd8776e08f5..102e24a20d9 100644
--- a/engines/scumm/macgui/macgui.cpp
+++ b/engines/scumm/macgui/macgui.cpp
@@ -123,6 +123,10 @@ Graphics::Surface *MacGui::textArea() const {
 	return _impl->textArea();
 }
 
+void MacGui::queryQuit(bool returnToLauncher) {
+	return _impl->queryQuit(returnToLauncher);
+}
+
 bool MacGui::runQuitDialog() {
 	return _impl->runQuitDialog();
 }
diff --git a/engines/scumm/macgui/macgui.h b/engines/scumm/macgui/macgui.h
index 726ea2a9a92..7b121f9b21d 100644
--- a/engines/scumm/macgui/macgui.h
+++ b/engines/scumm/macgui/macgui.h
@@ -65,6 +65,8 @@ public:
 	void drawBanner(char *message);
 	void undrawBanner();
 
+	void queryQuit(bool returnToLauncher);
+
 	bool runQuitDialog();
 	bool runRestartDialog();
 
diff --git a/engines/scumm/macgui/macgui_impl.cpp b/engines/scumm/macgui/macgui_impl.cpp
index 8886346b1ea..a78f0b49e70 100644
--- a/engines/scumm/macgui/macgui_impl.cpp
+++ b/engines/scumm/macgui/macgui_impl.cpp
@@ -1292,6 +1292,29 @@ void MacGuiImpl::drawFakeDriveLabel(MacDialogWindow *window, Common::Rect r, con
 	drawBitmap(window->innerSurface(), iconRect, hardDriveIcon, black);
 }
 
+void MacGuiImpl::queryQuit(bool returnToLauncher) {
+	Common::EventManager *eventMan = _system->getEventManager();
+	Common::Event event;
+
+	// Flush any remaining QUIT events
+	while (eventMan->pollEvent(event))
+		;
+
+	eventMan->resetQuit();
+	eventMan->resetReturnToLauncher();
+
+	if (!(ConfMan.hasKey("confirm_exit") && ConfMan.getBool("confirm_exit")) || runQuitDialog()) {
+		_vm->_quitByGUIPrompt = true;
+		if (returnToLauncher) {
+			Common::Event fakeEvent;
+			event.type = Common::EVENT_RETURN_TO_LAUNCHER;
+			eventMan->pushEvent(event);
+		} else {
+			_vm->quitGame();
+		}
+	}
+}
+
 bool MacGuiImpl::runQuitDialog() {
 	return runOkCancelDialog(_strsStrings[kMSIAreYouSureYouWantToQuit].c_str());
 }
diff --git a/engines/scumm/macgui/macgui_impl.h b/engines/scumm/macgui/macgui_impl.h
index f743e5315bc..46dfd5d4a12 100644
--- a/engines/scumm/macgui/macgui_impl.h
+++ b/engines/scumm/macgui/macgui_impl.h
@@ -822,6 +822,8 @@ public:
 	virtual void resetAfterLoad() = 0;
 	virtual void update(int delta) = 0;
 
+	void queryQuit(bool returnToLauncher);
+
 	virtual bool runQuitDialog();
 	virtual bool runRestartDialog();
 




More information about the Scummvm-git-logs mailing list