all repos — mgba @ eec4ed3c1e5a033b10594bf64f6d0c1bad23705f

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

eec4ed3c1e5a033b10594bf64f6d0c1bad23705f

parent

9f11bd8a161b5f37bdf7c69dc29f110b4ca87145

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

jump to
M CHANGESCHANGES

@@ -12,6 +12,7 @@ - GB: Fix crash when patching ROMs

- 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: - Qt: Improved HiDPI support - Feature: Support ImageMagick 7
M src/platform/qt/GBAApp.cppsrc/platform/qt/GBAApp.cpp

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

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

@@ -78,10 +77,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);

@@ -112,15 +111,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();

@@ -133,27 +132,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.getQtOption("lastDirectory").toString(), filter); - continueAll(&paused); + continueAll(paused); if (!filename.isEmpty()) { m_configController.setQtOption("lastDirectory", QFileInfo(filename).dir().path()); }

@@ -161,10 +160,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.getQtOption("lastDirectory").toString(), filter); - continueAll(&paused); + continueAll(paused); if (!filename.isEmpty()) { m_configController.setQtOption("lastDirectory", QFileInfo(filename).dir().path()); }

@@ -172,10 +171,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.getQtOption("lastDirectory").toString()); - continueAll(&paused); + continueAll(paused); if (!filename.isEmpty()) { m_configController.setQtOption("lastDirectory", QFileInfo(filename).dir().path()); }

@@ -230,13 +229,13 @@ {

} 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.setQtOption("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

@@ -62,11 +62,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; };