diff --git a/include/mainwindow.h b/include/mainwindow.h index 20e504d..c3f5e74 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -271,6 +271,7 @@ private slots: void installAndroidPackFinished(QString result); void mainMenuDialogTriggered(bool checked); void sendContextMenuEvent(); + void applicationStateChanged(Qt::ApplicationState state); private: Ui::MainWindow *ui; ParserWorker * parserWorker; @@ -321,7 +322,9 @@ private: EditorTabs * editorTabsSplit; bool isSplitActive; QHash filesHistory; + bool suspended; signals: + void initWorker(); void disableWorker(); void parseLint(int tabIndex, QString path); void execPHP(int tabIndex, QString path); diff --git a/include/parserworker.h b/include/parserworker.h index e2a794b..b737b13 100644 --- a/include/parserworker.h +++ b/include/parserworker.h @@ -84,6 +84,7 @@ signals: void updateProgressInfo(QString text); void installAndroidPackFinished(QString result); public slots: + void init(); void disable(); void lint(int tabIndex, QString path); void execPHP(int tabIndex, QString path); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index e101140..428c7e9 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -333,6 +333,7 @@ MainWindow::MainWindow(QWidget *parent) : parserWorker = new ParserWorker(); parserWorker->moveToThread(&parserThread); connect(&parserThread, &QThread::finished, parserWorker, &QObject::deleteLater); + connect(this, SIGNAL(initWorker()), parserWorker, SLOT(init())); connect(this, SIGNAL(disableWorker()), parserWorker, SLOT(disable())); connect(this, SIGNAL(parseLint(int,QString)), parserWorker, SLOT(lint(int,QString))); connect(this, SIGNAL(execPHP(int,QString)), parserWorker, SLOT(execPHP(int,QString))); @@ -661,6 +662,7 @@ MainWindow::MainWindow(QWidget *parent) : QTimer::singleShot(CHECK_SCALE_FACTOR_DELAY, this, SLOT(checkScaleFactor())); } + suspended = false; // make sure that window is maximized in Android #if defined(Q_OS_ANDROID) setWindowState( windowState() | Qt::WindowMaximized); @@ -670,6 +672,8 @@ MainWindow::MainWindow(QWidget *parent) : mainMenuAction->setIcon(Icon::get("actionMenu", QIcon(":/icons/separator-double.png"))); connect(mainMenuAction, SIGNAL(triggered(bool)), this, SLOT(mainMenuDialogTriggered(bool))); ui->mainToolBar->insertAction(ui->mainToolBar->actions().at(0), mainMenuAction); + + connect(qApp, SIGNAL(applicationStateChanged(Qt::ApplicationState)), this, SLOT(applicationStateChanged(Qt::ApplicationState))); #endif bool autoShowVirtualKeyboard = false; @@ -3058,3 +3062,19 @@ void MainWindow::inputMethodVisibleChanged() updateTabsListButton(); } } + +void MainWindow::applicationStateChanged(Qt::ApplicationState state) +{ + if (state == Qt::ApplicationActive) { + if (suspended) { + emit initWorker(); + } + suspended = false; + } else if (state == Qt::ApplicationSuspended) { + if (progressInfo->isVisible()) { + emit progressInfo->cancelTriggered(); + } + Settings::save(); + suspended = true; + } +} diff --git a/src/parserworker.cpp b/src/parserworker.cpp index e9ceffb..2f72101 100644 --- a/src/parserworker.cpp +++ b/src/parserworker.cpp @@ -26,13 +26,7 @@ const QString PHP_WEBSERVER_URI = "127.0.0.1:8000"; const QString ZIRA_DEV_PACK_PATH = "/data/data/com.github.ziracms.devpack/files/bin"; -ParserWorker::ParserWorker(QObject *parent) : QObject(parent) -{ - phpPath = ""; - gitPath = ""; - bashPath = ""; - sasscPath = ""; - phpcsPath = ""; +ParserWorker::ParserWorker(QObject *parent) : QObject(parent){ phpcsStandard = QString::fromStdString(Settings::get("parser_phpcs_standard")); if (phpcsStandard.size() == 0) phpcsStandard = "PEAR"; phpcsErrorSeverity = std::stoi(Settings::get("parser_phpcs_error_severity")); @@ -49,6 +43,16 @@ ParserWorker::ParserWorker(QObject *parent) : QObject(parent) quickBreaked = false; wantStop = false; phpWebServerPid = 0; + init(); +} + +void ParserWorker::init() +{ + phpPath = ""; + gitPath = ""; + bashPath = ""; + sasscPath = ""; + phpcsPath = ""; // android pack androidHomePath=""; @@ -60,6 +64,7 @@ ParserWorker::ParserWorker(QObject *parent) : QObject(parent) if (stddirs.size()>0) androidHomePath = stddirs.at(0); #endif + #if !defined(Q_OS_ANDROID) // php path QString phpPathStr = QString::fromStdString(Settings::get("parser_php_path")); if (phpPathStr.size() == 0) { @@ -129,6 +134,7 @@ ParserWorker::ParserWorker(QObject *parent) : QObject(parent) if (phpcsPathStr.size() > 0 && Helper::fileOrFolderExists(phpcsPathStr)) { phpcsPath = phpcsPathStr; } + #endif #if defined(Q_OS_ANDROID) setAndroidBinPaths(); // use installed binaries if exists