NOISSUE use LoggedProcess to work around issues with QProcess on macOS
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
#include <QtGui/QColor>
|
||||
#include <rainbow.h>
|
||||
#include <launch/MessageLevel.h>
|
||||
#include <MessageLevel.h>
|
||||
#include <QMap>
|
||||
|
||||
class ColorCache
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include "MultiMC.h"
|
||||
#include <GuiUtil.h>
|
||||
#include <QProcess>
|
||||
#include <FileSystem.h>
|
||||
|
||||
WorldListPage::WorldListPage(BaseInstance *inst, std::shared_ptr<WorldList> 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();
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include "minecraft/onesix/OneSixInstance.h"
|
||||
#include "BasePage.h"
|
||||
#include <MultiMC.h>
|
||||
#include <LoggedProcess.h>
|
||||
|
||||
class WorldList;
|
||||
namespace Ui
|
||||
@ -73,6 +74,8 @@ private:
|
||||
private:
|
||||
Ui::WorldListPage *ui;
|
||||
std::shared_ptr<WorldList> m_worlds;
|
||||
unique_qobject_ptr<LoggedProcess> m_mceditProcess;
|
||||
bool m_mceditStarting = false;
|
||||
QString m_iconName;
|
||||
QString m_id;
|
||||
QString m_displayName;
|
||||
@ -88,4 +91,5 @@ private slots:
|
||||
void on_refreshBtn_clicked();
|
||||
void on_viewFolderBtn_clicked();
|
||||
void worldChanged(const QModelIndex ¤t, const QModelIndex &previous);
|
||||
void mceditState(LoggedProcess::State state);
|
||||
};
|
||||
|
Reference in New Issue
Block a user