Compare commits

..

No commits in common. "f424f7632f9df3dd55a4a9f7a57ed88a6b6120e5" and "883b71e8a821efa921c26daf1b8285a52199bc3a" have entirely different histories.

3 changed files with 21 additions and 41 deletions

View File

@ -31,7 +31,6 @@ int main(int argc, char *argv[])
QApplication app(argc, argv); QApplication app(argc, argv);
QString configDirectoryPath; QString configDirectoryPath;
QDir dir; QDir dir;
bool newInstanceRequested = false;
if(argc >= 2) if(argc >= 2)
{ {
QCommandLineParser parser; QCommandLineParser parser;
@ -43,19 +42,16 @@ int main(int argc, char *argv[])
parser.addHelpOption(); parser.addHelpOption();
parser.process(app.arguments()); parser.process(app.arguments());
configDirectoryPath = parser.value("config"); configDirectoryPath = parser.value("config");
newInstanceRequested = parser.isSet("new-instance"); if(!dir.exists(configDirectoryPath))
if(!configDirectoryPath.isEmpty() && !dir.exists(configDirectoryPath))
{ {
QMessageBox::warning(nullptr, "Directory not found", configDirectoryPath + " was not found"); QMessageBox::warning(nullptr, "Directory not found", configDirectoryPath + " was not found");
return 1; return 1;
} }
} }
if(configDirectoryPath.isEmpty()) else
{ {
configDirectoryPath = QDir::homePath() + "/.config/qsrun/"; configDirectoryPath = QDir::homePath() + "/.config/qsrun/";
} }
qRegisterMetaType<QVector<QString>>("QVector<QString>"); qRegisterMetaType<QVector<QString>>("QVector<QString>");
if(!dir.exists(configDirectoryPath)) if(!dir.exists(configDirectoryPath))
@ -72,36 +68,27 @@ int main(int argc, char *argv[])
SettingsProvider settingsProvider{settings}; SettingsProvider settingsProvider{settings};
EntryProvider entryProvider(settingsProvider.userEntriesPaths(), settingsProvider.systemApplicationsEntriesPaths()); EntryProvider entryProvider(settingsProvider.userEntriesPaths(), settingsProvider.systemApplicationsEntriesPaths());
// TODO if setting single instance mode
SingleInstanceServer *server = nullptr; QLocalSocket localSocket;
localSocket.connectToServer("/tmp/qsrun.socket");
bool singleInstanceMode = !newInstanceRequested && settingsProvider.singleInstanceMode(); SingleInstanceServer server;
if(singleInstanceMode) if(localSocket.isOpen() && localSocket.isWritable())
{ {
QLocalSocket localSocket; QDataStream stream(&localSocket);
localSocket.connectToServer(settingsProvider.socketPath()); stream << (int)0x01; // maximize
if(localSocket.isOpen() && localSocket.isWritable()) localSocket.flush();
{ localSocket.waitForBytesWritten();
QDataStream stream(&localSocket); localSocket.disconnectFromServer();
stream << (int)0x01; // maximize return 0;
localSocket.flush(); }
localSocket.waitForBytesWritten(); else
localSocket.disconnectFromServer(); {
return 0; if(!server.listen("/tmp/qsrun.socket"))
}
server = new SingleInstanceServer();
if(!server->listen(settingsProvider.socketPath()))
{ {
qDebug() << "Failed to listen on socket!"; qDebug() << "Failed to listen on socket!";
return 1;
} }
} Window *w = new Window{entryProvider, settingsProvider};
QObject::connect(&server, &SingleInstanceServer::receivedMaximizationRequest, [&w] {
Window *w = new Window{entryProvider, settingsProvider};
if(singleInstanceMode && server != nullptr)
{
QObject::connect(server, &SingleInstanceServer::receivedMaximizationRequest, [&w] {
if(w != nullptr) if(w != nullptr)
{ {
qInfo() << "maximizing as requested by other instance"; qInfo() << "maximizing as requested by other instance";
@ -111,10 +98,9 @@ int main(int argc, char *argv[])
w->focusInput(); w->focusInput();
} }
}); });
w->showMaximized();
w->focusInput();
} }
w->showMaximized();
w->focusInput();
return app.exec(); return app.exec();
} }

View File

@ -33,8 +33,3 @@ QString SettingsProvider::getTerminalCommand() const
{ {
return settings->value("terminal", "/usr/bin/x-terminal-emulator -e %c").toString(); return settings->value("terminal", "/usr/bin/x-terminal-emulator -e %c").toString();
} }
QString SettingsProvider::socketPath() const
{
return settings->value("singleInstanceSocket", "/tmp/qsrun").toString();
}

View File

@ -16,7 +16,6 @@ class SettingsProvider
virtual int getMaxCols() const; virtual int getMaxCols() const;
virtual bool singleInstanceMode() const; virtual bool singleInstanceMode() const;
QString getTerminalCommand() const; QString getTerminalCommand() const;
QString socketPath() const;
}; };
#endif // SETTINGSPROVIDER_H #endif // SETTINGSPROVIDER_H