Add an opt-out for the single-process behavior

This would have been useful for testing multiple times and now even came up
in a forum discussion.
This commit is contained in:
Martchus 2020-10-19 19:03:42 +02:00
parent 7ada03b00b
commit 6122b54210
3 changed files with 9 additions and 3 deletions

View File

@ -159,6 +159,7 @@ int runApplication(int argc, const char *const *argv)
connectionArg.setRequiredValueCount(Argument::varValueCount);
ConfigValueArgument configPathArg("config-dir-path", '\0', "specifies the path to the configuration directory", { "path" });
configPathArg.setEnvironmentVariable(PROJECT_VARNAME_UPPER "_CONFIG_DIR");
ConfigValueArgument newInstanceArg("new-instance", '\0', "disable the usual single-process behavior");
Argument &widgetsGuiArg = qtConfigArgs.qtWidgetsGuiArg();
widgetsGuiArg.addSubArgument(&windowedArg);
widgetsGuiArg.addSubArgument(&showWebUiArg);
@ -166,6 +167,7 @@ int runApplication(int argc, const char *const *argv)
widgetsGuiArg.addSubArgument(&waitForTrayArg);
widgetsGuiArg.addSubArgument(&connectionArg);
widgetsGuiArg.addSubArgument(&configPathArg);
widgetsGuiArg.addSubArgument(&newInstanceArg);
parser.setMainArguments({ &qtConfigArgs.qtWidgetsGuiArg(), &parser.noColorArg(), &parser.helpArg() });
parser.parseArgs(argc, argv);
@ -187,7 +189,7 @@ int runApplication(int argc, const char *const *argv)
SET_QT_APPLICATION_INFO;
QApplication application(argc, const_cast<char **>(argv));
QGuiApplication::setQuitOnLastWindowClosed(false);
SingleInstance singleInstance(argc, argv);
SingleInstance singleInstance(argc, argv, newInstanceArg.isPresent());
networkAccessManager().setParent(&singleInstance);
QObject::connect(&singleInstance, &SingleInstance::newInstance, &runApplication);
Settings::restore();

View File

@ -17,10 +17,14 @@ using namespace CppUtilities::EscapeCodes;
namespace QtGui {
SingleInstance::SingleInstance(int argc, const char *const *argv, QObject *parent)
SingleInstance::SingleInstance(int argc, const char *const *argv, bool newInstance, QObject *parent)
: QObject(parent)
, m_server(nullptr)
{
if (newInstance) {
return;
}
const QString appId(QCoreApplication::applicationName() % QStringLiteral(" by ") % QCoreApplication::organizationName());
// check for previous instance

View File

@ -14,7 +14,7 @@ namespace QtGui {
class SingleInstance : public QObject {
Q_OBJECT
public:
SingleInstance(int argc, const char *const *argv, QObject *parent = nullptr);
SingleInstance(int argc, const char *const *argv, bool newInstance = false, QObject *parent = nullptr);
Q_SIGNALS:
void newInstance(int argc, const char *const *argv);