From f0b71f989ea798495ad80d1f059ae0a28514f9a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Thu, 3 Nov 2016 01:10:16 +0100 Subject: NOISSUE use LoggedProcess to work around issues with QProcess on macOS --- application/pages/WorldListPage.cpp | 50 ++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 9 deletions(-) (limited to 'application/pages/WorldListPage.cpp') diff --git a/application/pages/WorldListPage.cpp b/application/pages/WorldListPage.cpp index a4f17744..365da4a4 100644 --- a/application/pages/WorldListPage.cpp +++ b/application/pages/WorldListPage.cpp @@ -29,6 +29,7 @@ #include "MultiMC.h" #include #include +#include WorldListPage::WorldListPage(BaseInstance *inst, std::shared_ptr worlds, QString id, QString iconName, QString displayName, QString helpPage, @@ -149,7 +150,11 @@ void WorldListPage::on_copySeedBtn_clicked() void WorldListPage::on_mcEditBtn_clicked() { + if(m_mceditStarting) + return; + auto mcedit = MMC->mcedit(); + const QString mceditPath = mcedit->path(); QModelIndex index = getSelectedWorld(); @@ -167,15 +172,11 @@ void WorldListPage::on_mcEditBtn_clicked() auto program = mcedit->getProgramPath(); if(program.size()) { - qint64 pid; - if(!QProcess::startDetached(program, QStringList() << fullPath, mceditPath, &pid)) - { - QMessageBox::warning( - this->parentWidget(), - tr("MCEdit failed to start!"), - tr("MCEdit failed to start.\nIt may be necessary to reinstall it.") - ); - } + m_mceditProcess.reset(new LoggedProcess()); + m_mceditProcess->setDetachable(true); + connect(m_mceditProcess.get(), &LoggedProcess::stateChanged, this, &WorldListPage::mceditState); + m_mceditProcess->start(program, {fullPath}); + m_mceditStarting = true; } else { @@ -187,6 +188,37 @@ void WorldListPage::on_mcEditBtn_clicked() } } +void WorldListPage::mceditState(LoggedProcess::State state) +{ + bool failed = false; + switch(state) + { + case LoggedProcess::NotRunning: + case LoggedProcess::Starting: + return; + case LoggedProcess::FailedToStart: + case LoggedProcess::Crashed: + case LoggedProcess::Aborted: + { + failed = true; + } + case LoggedProcess::Running: + case LoggedProcess::Finished: + { + m_mceditStarting = false; + break; + } + } + if(failed) + { + QMessageBox::warning( + this->parentWidget(), + tr("MCEdit failed to start!"), + tr("MCEdit failed to start.\nIt may be necessary to reinstall it.") + ); + } +} + void WorldListPage::worldChanged(const QModelIndex ¤t, const QModelIndex &previous) { QModelIndex index = getSelectedWorld(); -- cgit v1.2.3