diff options
Diffstat (limited to 'src-qt5/core/libLumina')
-rw-r--r-- | src-qt5/core/libLumina/LuminaSingleApplication.cpp | 29 | ||||
-rw-r--r-- | src-qt5/core/libLumina/LuminaSingleApplication.h | 3 |
2 files changed, 24 insertions, 8 deletions
diff --git a/src-qt5/core/libLumina/LuminaSingleApplication.cpp b/src-qt5/core/libLumina/LuminaSingleApplication.cpp index 379ac02d..0c04229c 100644 --- a/src-qt5/core/libLumina/LuminaSingleApplication.cpp +++ b/src-qt5/core/libLumina/LuminaSingleApplication.cpp @@ -18,14 +18,7 @@ LSingleApplication::LSingleApplication(int &argc, char **argv, QString appname) this->setAttribute(Qt::AA_UseHighDpiPixmaps); if(appname!="lumina-desktop"){ cTrans = LUtils::LoadTranslation(this, appname); }//save the translator for later //Initialize a couple convenience internal variables - cfile = QDir::tempPath()+"/.LSingleApp-%1-%2-%3"; - QString username = QString::number(getuid()); - //For locking the process use the official process name - not the user input (no masking) - appname = this->applicationName(); - QString display = QString(getenv("DISPLAY")); - if(display.startsWith(":")){ display.remove(0,1); } - display = display.section(".",0,0); - cfile = cfile.arg( username, appname, display ); + cfile = getLockfileName(this->applicationName()); //do not allow masking the utility name lockfile = new QLockFile(cfile+"-lock"); lockfile->setStaleLockTime(0); //long-lived processes for(int i=1; i<argc; i++){ @@ -59,6 +52,26 @@ LSingleApplication::~LSingleApplication(){ } } +QString LSingleApplication::getLockfileName(QString appname){ + QString path = QDir::tempPath()+"/.LSingleApp-%1-%2-%3"; + QString username = QString::number(getuid()); + QString display = QString(getenv("DISPLAY")); + if(display.startsWith(":")){ display.remove(0,1); } + display = display.section(".",0,0); + path = path.arg( username, appname, display ); + return path; +} + +void LSingleApplication::removeLocks(QString appname){ + QString path = getLockfileName(appname); + if(QFile::exists(path+"-lock")){ + QFile::remove(path+"-lock"); + } + if(QFile::exists(path)){ + QFile::remove(path); + } +} + bool LSingleApplication::isPrimaryProcess(){ return (isActive || isBypass); } diff --git a/src-qt5/core/libLumina/LuminaSingleApplication.h b/src-qt5/core/libLumina/LuminaSingleApplication.h index bacf5640..f8302c0d 100644 --- a/src-qt5/core/libLumina/LuminaSingleApplication.h +++ b/src-qt5/core/libLumina/LuminaSingleApplication.h @@ -35,6 +35,9 @@ public: LSingleApplication(int &argc, char **argv, QString appname); ~LSingleApplication(); + static QString getLockfileName(QString appname); + static void removeLocks(QString appname); + bool isPrimaryProcess(); QStringList inputlist; //in case the app wants access to modified inputs (relative path fixes and such) |