From f878820bbee1e7e4659ca601872674082334fa63 Mon Sep 17 00:00:00 2001 From: Christopher Page Date: Tue, 24 Jun 2008 21:15:30 +0000 Subject: Created Global Main Menu Dialog. Made a uniform _quit flag for engines. So far agi, agos, and cine are now using the new _quit flag. svn-id: r32770 --- backends/events/default/default-events.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'backends/events/default/default-events.cpp') diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp index 0caba25792..6343f1f9c5 100644 --- a/backends/events/default/default-events.cpp +++ b/backends/events/default/default-events.cpp @@ -375,7 +375,6 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { switch (event.type) { case Common::EVENT_KEYDOWN: _modifierState = event.kbd.flags; - // init continuous event stream // not done on PalmOS because keyboard is emulated and keyup is not generated #if !defined(PALMOS_MODE) @@ -384,7 +383,14 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { _currentKeyDown.flags = event.kbd.flags; _keyRepeatTime = time + kKeyRepeatInitialDelay; #endif + + // Global Main Menu + if (event.kbd.keycode == Common::KEYCODE_F11) + if (g_engine && !g_engine->isPaused()) + g_engine->mainMenuDialog(); + break; + case Common::EVENT_KEYUP: _modifierState = event.kbd.flags; if (event.kbd.keycode == _currentKeyDown.keycode) { @@ -401,6 +407,7 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { _mousePos = event.mouse; _buttonState |= LBUTTON; break; + case Common::EVENT_LBUTTONUP: _mousePos = event.mouse; _buttonState &= ~LBUTTON; @@ -410,11 +417,17 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { _mousePos = event.mouse; _buttonState |= RBUTTON; break; + case Common::EVENT_RBUTTONUP: _mousePos = event.mouse; _buttonState &= ~RBUTTON; break; + case Common::EVENT_MAINMENU: + if (g_engine && !g_engine->isPaused()) + g_engine->mainMenuDialog(); + break; + case Common::EVENT_QUIT: if (ConfMan.getBool("confirm_exit")) { if (g_engine) -- cgit v1.2.3 From d0dcc1ad7943a528f0f4f016a64ee45251adb6a8 Mon Sep 17 00:00:00 2001 From: Christopher Page Date: Thu, 26 Jun 2008 22:03:49 +0000 Subject: Quit or RTL from the main menu now triggers an EVENT_QUIT in DefaultEventManager::pollEvent() svn-id: r32813 --- backends/events/default/default-events.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'backends/events/default/default-events.cpp') diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp index 6343f1f9c5..2c4785da2d 100644 --- a/backends/events/default/default-events.cpp +++ b/backends/events/default/default-events.cpp @@ -388,8 +388,11 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { if (event.kbd.keycode == Common::KEYCODE_F11) if (g_engine && !g_engine->isPaused()) g_engine->mainMenuDialog(); - - break; + + if (!g_engine->_quit) + break; + else + event.type = Common::EVENT_QUIT; case Common::EVENT_KEYUP: _modifierState = event.kbd.flags; -- cgit v1.2.3 From a14a0d16c1d3038b320a21246443e6d855fc2787 Mon Sep 17 00:00:00 2001 From: Christopher Page Date: Wed, 2 Jul 2008 00:30:49 +0000 Subject: Changes to implementation of the GMM svn-id: r32872 --- backends/events/default/default-events.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'backends/events/default/default-events.cpp') diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp index 2c4785da2d..7e9157edd9 100644 --- a/backends/events/default/default-events.cpp +++ b/backends/events/default/default-events.cpp @@ -93,7 +93,8 @@ DefaultEventManager::DefaultEventManager(OSystem *boss) : _boss(boss), _buttonState(0), _modifierState(0), - _shouldQuit(false) { + _shouldQuit(false), + _shouldRTL(false) { assert(_boss); @@ -383,16 +384,15 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { _currentKeyDown.flags = event.kbd.flags; _keyRepeatTime = time + kKeyRepeatInitialDelay; #endif - // Global Main Menu if (event.kbd.keycode == Common::KEYCODE_F11) if (g_engine && !g_engine->isPaused()) g_engine->mainMenuDialog(); - - if (!g_engine->_quit) - break; - else + + if (g_engine->_quit) event.type = Common::EVENT_QUIT; + else + break; case Common::EVENT_KEYUP: _modifierState = event.kbd.flags; @@ -429,7 +429,11 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { case Common::EVENT_MAINMENU: if (g_engine && !g_engine->isPaused()) g_engine->mainMenuDialog(); - break; + + if (g_engine->_quit) + event.type = Common::EVENT_QUIT; + else + break; case Common::EVENT_QUIT: if (ConfMan.getBool("confirm_exit")) { @@ -441,6 +445,8 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { g_engine->pauseEngine(false); } else _shouldQuit = true; + + g_engine->_quit = true; break; default: -- cgit v1.2.3 From a4f56de13ac2a7daaf5654c75f07ad6331f375e6 Mon Sep 17 00:00:00 2001 From: Christopher Page Date: Mon, 7 Jul 2008 22:34:45 +0000 Subject: Implemented Common::EventManager::pushEvent() to insert fake events into the event queue. Quit and RTL events have been added, and are now tracked by the DefaultEventManager using shouldQuit() and shouldRTL(). AGOS is working with this new implementation, other engines to follow. svn-id: r32952 --- backends/events/default/default-events.cpp | 31 ++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) (limited to 'backends/events/default/default-events.cpp') diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp index 7e9157edd9..71e19329bf 100644 --- a/backends/events/default/default-events.cpp +++ b/backends/events/default/default-events.cpp @@ -201,6 +201,9 @@ DefaultEventManager::~DefaultEventManager() { _boss->unlockMutex(_timeMutex); _boss->unlockMutex(_recorderMutex); + if (!artificialEventQueue.empty()) + artificialEventQueue.clear(); + if (_playbackFile != NULL) { delete _playbackFile; } @@ -350,7 +353,11 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { uint32 time = _boss->getMillis(); bool result; - result = _boss->pollEvent(event); + if (!artificialEventQueue.empty()) { + event.type = artificialEventQueue.pop(); + result = true; + } else + result = _boss->pollEvent(event); if (_recordMode != kPassthrough) { @@ -387,12 +394,8 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { // Global Main Menu if (event.kbd.keycode == Common::KEYCODE_F11) if (g_engine && !g_engine->isPaused()) - g_engine->mainMenuDialog(); - - if (g_engine->_quit) - event.type = Common::EVENT_QUIT; - else - break; + pushEvent(Common::EVENT_MAINMENU); + break; case Common::EVENT_KEYUP: _modifierState = event.kbd.flags; @@ -429,11 +432,12 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { case Common::EVENT_MAINMENU: if (g_engine && !g_engine->isPaused()) g_engine->mainMenuDialog(); + break; - if (g_engine->_quit) - event.type = Common::EVENT_QUIT; - else - break; + case Common::EVENT_RTL: + _shouldRTL = true; + _shouldQuit = true; + break; case Common::EVENT_QUIT: if (ConfMan.getBool("confirm_exit")) { @@ -446,7 +450,6 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { } else _shouldQuit = true; - g_engine->_quit = true; break; default: @@ -469,4 +472,8 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { return result; } +void DefaultEventManager::pushEvent(Common::EventType eventType) { + artificialEventQueue.push(eventType); +} + #endif // !defined(DISABLE_DEFAULT_EVENTMANAGER) -- cgit v1.2.3 From e808cdf7a08d641389ecc81063b3b1016c7bc8cf Mon Sep 17 00:00:00 2001 From: Christopher Page Date: Wed, 9 Jul 2008 02:27:05 +0000 Subject: Reimplemented pushEvent() and artificialEventQueue to work with Events instead of EventTypes. Reimplemented Queue as a List instead of Array. Updated AGOS, AGI, CINE, GOB, and KYRA to work with the current implementation of the GMM svn-id: r32971 --- backends/events/default/default-events.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'backends/events/default/default-events.cpp') diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp index 71e19329bf..c56ceb0204 100644 --- a/backends/events/default/default-events.cpp +++ b/backends/events/default/default-events.cpp @@ -354,7 +354,7 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { bool result; if (!artificialEventQueue.empty()) { - event.type = artificialEventQueue.pop(); + event = artificialEventQueue.pop(); result = true; } else result = _boss->pollEvent(event); @@ -393,8 +393,11 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { #endif // Global Main Menu if (event.kbd.keycode == Common::KEYCODE_F11) - if (g_engine && !g_engine->isPaused()) - pushEvent(Common::EVENT_MAINMENU); + if (g_engine && !g_engine->isPaused()) { + Common::Event menuEvent; + menuEvent.type = Common::EVENT_MAINMENU; + pushEvent(menuEvent); + } break; case Common::EVENT_KEYUP: @@ -472,8 +475,8 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { return result; } -void DefaultEventManager::pushEvent(Common::EventType eventType) { - artificialEventQueue.push(eventType); +void DefaultEventManager::pushEvent(Common::Event event) { + artificialEventQueue.push(event); } #endif // !defined(DISABLE_DEFAULT_EVENTMANAGER) -- cgit v1.2.3 From 67c8c39fdf4ae01c0d4a1c6ce97afd720eb4be4e Mon Sep 17 00:00:00 2001 From: Christopher Page Date: Fri, 11 Jul 2008 00:49:01 +0000 Subject: Queen works with the new GMM implementation, and made a correction to a change in parallaction svn-id: r32999 --- backends/events/default/default-events.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'backends/events/default/default-events.cpp') diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp index c56ceb0204..24750d038c 100644 --- a/backends/events/default/default-events.cpp +++ b/backends/events/default/default-events.cpp @@ -435,6 +435,8 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { case Common::EVENT_MAINMENU: if (g_engine && !g_engine->isPaused()) g_engine->mainMenuDialog(); + if (_shouldQuit) + event.type = Common::EVENT_QUIT; break; case Common::EVENT_RTL: -- cgit v1.2.3 From a6e1d6bd3dcdc1fae7832ffe26b4d774ec1fe6a3 Mon Sep 17 00:00:00 2001 From: Christopher Page Date: Sun, 13 Jul 2008 20:41:39 +0000 Subject: SKY works with the new GMM implementation, also updated gui/newgui.cpp and prevented pushEvent from pushing more than one EVENT_QUIT into the artificialEventQueue svn-id: r33041 --- backends/events/default/default-events.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'backends/events/default/default-events.cpp') diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp index 24750d038c..b91643c6fb 100644 --- a/backends/events/default/default-events.cpp +++ b/backends/events/default/default-events.cpp @@ -478,7 +478,13 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { } void DefaultEventManager::pushEvent(Common::Event event) { - artificialEventQueue.push(event); + + // If already received an EVENT_QUIT, don't add another one + if (event.type == Common::EVENT_QUIT) { + if (!_shouldQuit) + artificialEventQueue.push(event); + } else + artificialEventQueue.push(event); } #endif // !defined(DISABLE_DEFAULT_EVENTMANAGER) -- cgit v1.2.3 From 7ecd54a9da6b9a14b4f16c3e53f87475d43bc2da Mon Sep 17 00:00:00 2001 From: Christopher Page Date: Tue, 15 Jul 2008 22:54:39 +0000 Subject: Reverted some incorrect changes and fixed sound settings issues for LURE. Fixed issues with quitting and calling GMM during intro sequences in LURE. Added a KEYCODE_MAINMENU in common/keyboard.h for the GMM. svn-id: r33081 --- backends/events/default/default-events.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'backends/events/default/default-events.cpp') diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp index b91643c6fb..8648c5909e 100644 --- a/backends/events/default/default-events.cpp +++ b/backends/events/default/default-events.cpp @@ -392,7 +392,7 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { _keyRepeatTime = time + kKeyRepeatInitialDelay; #endif // Global Main Menu - if (event.kbd.keycode == Common::KEYCODE_F11) + if (event.kbd.keycode == Common::KEYCODE_MAINMENU) if (g_engine && !g_engine->isPaused()) { Common::Event menuEvent; menuEvent.type = Common::EVENT_MAINMENU; -- cgit v1.2.3 From 7f480ac571f978802a3ecd5cf6169d0271d1f561 Mon Sep 17 00:00:00 2001 From: Christopher Page Date: Wed, 16 Jul 2008 04:22:56 +0000 Subject: Quit and RTL code is more modular now. EVENT_RTL no longer sets _shouldQuit, shouldQuit is only set if there's an EVENT_QUIT. EVENT_RTL and EVENT_QUIT are completely separate from each other. Engine::quit() method now checks both _shouldQuit and _shouldRTL to determine if the engine should exit. There is no longer a need for resetQuit(), so it's removed svn-id: r33082 --- backends/events/default/default-events.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'backends/events/default/default-events.cpp') diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp index 8648c5909e..b070fb89ef 100644 --- a/backends/events/default/default-events.cpp +++ b/backends/events/default/default-events.cpp @@ -435,13 +435,15 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { case Common::EVENT_MAINMENU: if (g_engine && !g_engine->isPaused()) g_engine->mainMenuDialog(); + if (_shouldQuit) event.type = Common::EVENT_QUIT; + else if (_shouldRTL) + event.type = Common::EVENT_RTL; break; case Common::EVENT_RTL: _shouldRTL = true; - _shouldQuit = true; break; case Common::EVENT_QUIT: -- cgit v1.2.3 From 34d43e3319ad814e2890098a1e676d2936cae2b7 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Tue, 2 Sep 2008 13:27:26 +0000 Subject: Applied my patch from -devel, which reenables GMM opening via F6. svn-id: r34281 --- backends/events/default/default-events.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'backends/events/default/default-events.cpp') diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp index 65b375605b..c503e6a536 100644 --- a/backends/events/default/default-events.cpp +++ b/backends/events/default/default-events.cpp @@ -393,7 +393,7 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { #endif // Global Main Menu // FIXME: F6 is not the best trigger, it conflicts with some games!!! - if (event.kbd.keycode == Common::KEYCODE_F6) + if (event.kbd.keycode == Common::KEYCODE_F6) { if (g_engine && !g_engine->isPaused()) { Common::Event menuEvent; menuEvent.type = Common::EVENT_MAINMENU; @@ -409,7 +409,21 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { //pushEvent(menuEvent); event = menuEvent; + + // FIXME: Since now we do not push another MAINMENU event onto + // our event stack, the GMM would never open, so we have to do + // that here. Of course when the engine would handle MAINMENU + // as an event now and open up the GMM itself it would open the + // menu twice. + if (g_engine && !g_engine->isPaused()) + g_engine->mainMenuDialog(); + + if (_shouldQuit) + event.type = Common::EVENT_QUIT; + else if (_shouldRTL) + event.type = Common::EVENT_RTL; } + } break; case Common::EVENT_KEYUP: -- cgit v1.2.3