From f1fce23e23d0a61ce588c5c089792a1e71dc0500 Mon Sep 17 00:00:00 2001 From: Ken Moore Date: Thu, 6 Sep 2018 17:59:57 -0400 Subject: Fix up the launching of the desktop session 1. Clear out the lockfiles for a session before launching it 2. Provide some mechanisms for returning lockfile paths without creating a new single-instance session. 3. A couple other random commits I still had staged on my laptop (settings menu tweak) --- src-qt5/core/libLumina/LuminaSingleApplication.cpp | 29 ++++++++++++++++------ src-qt5/core/libLumina/LuminaSingleApplication.h | 3 +++ src-qt5/core/lumina-desktop/SettingsMenu.cpp | 9 ++++--- src-qt5/core/lumina-session/lumina-session.pro | 1 + src-qt5/core/lumina-session/session.cpp | 7 ++++-- src-qt5/src-cpp/framework-OSInterface_private.cpp | 1 + 6 files changed, 37 insertions(+), 13 deletions(-) (limited to 'src-qt5') 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; isetObjectName("SettingsMenu"); connect(this, SIGNAL(triggered(QAction*)), this, SLOT(runApp(QAction*)) ); connect(QApplication::instance(), SIGNAL(LocaleChanged()), this, SLOT(UpdateMenu()) ); - connect(QApplication::instance(), SIGNAL(IconThemeChanged()), this, SLOT(UpdateMenu()) ); + connect(QApplication::instance(), SIGNAL(IconThemeChanged()), this, SLOT(UpdateMenu()) ); QTimer::singleShot(100, this, SLOT(UpdateMenu()) ); } SettingsMenu::~SettingsMenu(){ - + } void SettingsMenu::UpdateMenu(){ @@ -36,6 +36,9 @@ void SettingsMenu::UpdateMenu(){ act = new QAction( LXDG::findIcon("preferences-other",""), tr("Display"), this); act->setWhatsThis("lumina-xconfig"); this->addAction(act); + act = new QAction( LXDG::findIcon("preferences-desktop-theme",""), tr("Theme"), this); + act->setWhatsThis("lthemeengine"); + this->addAction(act); act = new QAction( LXDG::findIcon("preferences-desktop",""), tr("All Desktop Settings"), this); act->setWhatsThis("lumina-config"); this->addAction(act); @@ -58,7 +61,7 @@ void SettingsMenu::UpdateMenu(){ } act = new QAction( LXDG::findIcon("lumina",""), tr("About Lumina"), this); act->setWhatsThis("lumina-info"); - this->addAction(act); + this->addAction(act); } diff --git a/src-qt5/core/lumina-session/lumina-session.pro b/src-qt5/core/lumina-session/lumina-session.pro index 9d8e8f87..dee736cf 100644 --- a/src-qt5/core/lumina-session/lumina-session.pro +++ b/src-qt5/core/lumina-session/lumina-session.pro @@ -9,6 +9,7 @@ target.path = $${L_BINDIR} include(../libLumina/LDesktopUtils.pri) include(../libLumina/LuminaXDG.pri) include(../libLumina/LuminaThemes.pri) +include(../libLumina/LuminaSingleApplication.pri) SOURCES += main.cpp \ session.cpp diff --git a/src-qt5/core/lumina-session/session.cpp b/src-qt5/core/lumina-session/session.cpp index 0988e7ea..c4337c8e 100644 --- a/src-qt5/core/lumina-session/session.cpp +++ b/src-qt5/core/lumina-session/session.cpp @@ -16,6 +16,7 @@ #include #include #include +#include void LSession::stopall(){ stopping = true; @@ -193,13 +194,15 @@ void LSession::start(bool unified){ startProcess("wm", WM); } //Desktop Next - startProcess("runtime","lumina-desktop -new-instance"); + LSingleApplication::removeLocks("lumina-desktop"); + startProcess("runtime","lumina-desktop"); //ScreenSaver if(LUtils::isValidBinary("xscreensaver")){ startProcess("screensaver","xscreensaver -no-splash"); } }else{ //unified process setupCompositor(true); //required for Lumina 2 - startProcess("runtime","lumina-desktop-unified -new-instance"); + LSingleApplication::removeLocks("lumina-desktop-unified"); + startProcess("runtime","lumina-desktop-unified"); } } diff --git a/src-qt5/src-cpp/framework-OSInterface_private.cpp b/src-qt5/src-cpp/framework-OSInterface_private.cpp index b0a22b1d..a15626e9 100644 --- a/src-qt5/src-cpp/framework-OSInterface_private.cpp +++ b/src-qt5/src-cpp/framework-OSInterface_private.cpp @@ -305,6 +305,7 @@ void OSInterface::syncNetworkInfo(OSInterface *os, QHash *has bool ok = false; for(int j=0; j