all repos — mgba @ be3e884ba51609b058b0da46c7e8bded3d2a7376

mGBA Game Boy Advance Emulator

Qt: Fix linking after some windows have been closed
Vicki Pfau vi@endrift.com
Tue, 07 Feb 2017 15:42:39 -0800
commit

be3e884ba51609b058b0da46c7e8bded3d2a7376

parent

f026c900892409d92b588f5789108f9079732af2

3 files changed, 27 insertions(+), 28 deletions(-)

jump to
M CHANGESCHANGES

@@ -26,6 +26,7 @@ - Util: Fix overflow when loading invalid UPS patches

- Tools: Fix recurring multiple times over the same library - GBA I/O: Handle audio registers specially when deserializing - Util: Fix highest-fd socket not being returned by SocketAccept + - Qt: Fix linking after some windows have been closed Misc: - SDL: Remove scancode key input - GBA Video: Clean up unused timers
M src/platform/qt/GBAApp.cppsrc/platform/qt/GBAApp.cpp

@@ -33,7 +33,6 @@ mLOG_DEFINE_CATEGORY(QT, "Qt");

GBAApp::GBAApp(int& argc, char* argv[]) : QApplication(argc, argv) - , m_windows{} , m_db(nullptr) { g_app = this;

@@ -80,10 +79,10 @@ if (!m_configController.getQtOption("audioDriver").isNull()) {

AudioProcessor::setDriver(static_cast<AudioProcessor::Driver>(m_configController.getQtOption("audioDriver").toInt())); } Window* w = new Window(&m_configController); - connect(w, &Window::destroyed, [this]() { - m_windows[0] = nullptr; + connect(w, &Window::destroyed, [this, w]() { + m_windows.removeAll(w); }); - m_windows[0] = w; + m_windows.append(w); if (loaded) { w->argumentsPassed(&args);

@@ -121,15 +120,15 @@ return QApplication::event(event);

} Window* GBAApp::newWindow() { - if (m_multiplayer.attached() >= MAX_GBAS) { + if (m_windows.count() >= MAX_GBAS) { return nullptr; } Window* w = new Window(&m_configController, m_multiplayer.attached()); int windowId = m_multiplayer.attached(); - connect(w, &Window::destroyed, [this, windowId]() { - m_windows[windowId] = nullptr; + connect(w, &Window::destroyed, [this, w]() { + m_windows.removeAll(w); }); - m_windows[windowId] = w; + m_windows.append(w); w->setAttribute(Qt::WA_DeleteOnClose); w->loadConfig(); w->show();

@@ -142,27 +141,27 @@ GBAApp* GBAApp::app() {

return g_app; } -void GBAApp::pauseAll(QList<int>* paused) { - for (int i = 0; i < MAX_GBAS; ++i) { - if (!m_windows[i] || !m_windows[i]->controller()->isLoaded() || m_windows[i]->controller()->isPaused()) { +void GBAApp::pauseAll(QList<Window*>* paused) { + for (auto& window : m_windows) { + if (!window->controller()->isLoaded() || window->controller()->isPaused()) { continue; } - m_windows[i]->controller()->setPaused(true); - paused->append(i); + window->controller()->setPaused(true); + paused->append(window); } } -void GBAApp::continueAll(const QList<int>* paused) { - for (int i : *paused) { - m_windows[i]->controller()->setPaused(false); +void GBAApp::continueAll(const QList<Window*>& paused) { + for (auto& window : paused) { + window->controller()->setPaused(false); } } QString GBAApp::getOpenFileName(QWidget* owner, const QString& title, const QString& filter) { - QList<int> paused; + QList<Window*> paused; pauseAll(&paused); QString filename = QFileDialog::getOpenFileName(owner, title, m_configController.getOption("lastDirectory"), filter); - continueAll(&paused); + continueAll(paused); if (!filename.isEmpty()) { m_configController.setOption("lastDirectory", QFileInfo(filename).dir().path()); }

@@ -170,10 +169,10 @@ return filename;

} QString GBAApp::getSaveFileName(QWidget* owner, const QString& title, const QString& filter) { - QList<int> paused; + QList<Window*> paused; pauseAll(&paused); QString filename = QFileDialog::getSaveFileName(owner, title, m_configController.getOption("lastDirectory"), filter); - continueAll(&paused); + continueAll(paused); if (!filename.isEmpty()) { m_configController.setOption("lastDirectory", QFileInfo(filename).dir().path()); }

@@ -181,10 +180,10 @@ return filename;

} QString GBAApp::getOpenDirectoryName(QWidget* owner, const QString& title) { - QList<int> paused; + QList<Window*> paused; pauseAll(&paused); QString filename = QFileDialog::getExistingDirectory(owner, title, m_configController.getOption("lastDirectory")); - continueAll(&paused); + continueAll(paused); if (!filename.isEmpty()) { m_configController.setOption("lastDirectory", QFileInfo(filename).dir().path()); }

@@ -249,14 +248,14 @@ {

} int GBAApp::FileDialog::exec() { - QList<int> paused; + QList<Window*> paused; m_app->pauseAll(&paused); bool didAccept = QFileDialog::exec() == QDialog::Accepted; QStringList filenames = selectedFiles(); if (!filenames.isEmpty()) { m_app->m_configController.setOption("lastDirectory", QFileInfo(filenames[0]).dir().path()); } - m_app->continueAll(&paused); + m_app->continueAll(paused); return didAccept; }
M src/platform/qt/GBAApp.hsrc/platform/qt/GBAApp.h

@@ -39,7 +39,6 @@ NoIntroDB* m_db;

}; #endif - class GBAApp : public QApplication { Q_OBJECT

@@ -78,11 +77,11 @@ };

Window* newWindowInternal(); - void pauseAll(QList<int>* paused); - void continueAll(const QList<int>* paused); + void pauseAll(QList<Window*>* paused); + void continueAll(const QList<Window*>& paused); ConfigController m_configController; - Window* m_windows[MAX_GBAS]; + QList<Window*> m_windows; MultiplayerController m_multiplayer; NoIntroDB* m_db;