aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/core-utils/lumina-config/pages/page_autostart.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src-qt5/core-utils/lumina-config/pages/page_autostart.cpp')
-rw-r--r--src-qt5/core-utils/lumina-config/pages/page_autostart.cpp153
1 files changed, 153 insertions, 0 deletions
diff --git a/src-qt5/core-utils/lumina-config/pages/page_autostart.cpp b/src-qt5/core-utils/lumina-config/pages/page_autostart.cpp
new file mode 100644
index 00000000..b7c52fb7
--- /dev/null
+++ b/src-qt5/core-utils/lumina-config/pages/page_autostart.cpp
@@ -0,0 +1,153 @@
+//===========================================
+// Lumina Desktop Source Code
+// Copyright (c) 2016, Ken Moore
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "page_autostart.h"
+#include "ui_page_autostart.h"
+#include "getPage.h"
+
+#include "../AppDialog.h"
+//==========
+// PUBLIC
+//==========
+page_autostart::page_autostart(QWidget *parent) : PageWidget(parent), ui(new Ui::page_autostart()){
+ ui->setupUi(this);
+ ui->list_session_start->setMouseTracking(true);
+ updateIcons();
+ connect(ui->tool_session_addapp, SIGNAL(clicked()), this, SLOT(addsessionstartapp()) );
+ connect(ui->tool_session_addbin, SIGNAL(clicked()), this, SLOT(addsessionstartbin()) );
+ connect(ui->tool_session_addfile, SIGNAL(clicked()), this, SLOT(addsessionstartfile()) );
+ connect(ui->list_session_start, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(settingChanged()) );
+}
+
+page_autostart::~page_autostart(){
+
+}
+
+
+
+//================
+// PUBLIC SLOTS
+//================
+void page_autostart::SaveSettings(){
+ QList<XDGDesktop> STARTAPPS = LXDG::findAutoStartFiles(true); //also want invalid/disabled items
+ //bool newstartapps = false;
+ for(int i=0; i<ui->list_session_start->count(); i++){
+ QString file = ui->list_session_start->item(i)->whatsThis();
+ bool enabled = ui->list_session_start->item(i)->checkState()==Qt::Checked;
+ bool found = false;
+ for(int i=0; i<STARTAPPS.length(); i++){
+ if(STARTAPPS[i].filePath==file){
+ found = true;
+ if(enabled != !STARTAPPS[i].isHidden){
+ //value is different
+ qDebug() << "Setting Autostart:" << enabled << STARTAPPS[i].filePath;
+ LXDG::setAutoStarted(enabled, STARTAPPS[i]);
+ }
+ break;
+ }
+ }
+ if(!found && enabled){
+ //New file/binary/app
+ qDebug() << "Adding new AutoStart File:" << file;
+ LXDG::setAutoStarted(enabled, file);
+ //newstartapps = true;
+ }
+ }
+}
+
+void page_autostart::LoadSettings(int){
+ emit HasPendingChanges(false);
+ emit ChangePageTitle( tr("Startup Services") );
+ QList<XDGDesktop> STARTAPPS = LXDG::findAutoStartFiles(true); //also want invalid/disabled items
+ //qDebug() << "StartApps:";
+ ui->list_session_start->clear();
+ for(int i=0; i<STARTAPPS.length(); i++){
+ //qDebug() << STARTAPPS[i].filePath +" -> " +STARTAPPS[i].name << STARTAPPS[i].isHidden;
+ if( !LXDG::checkValidity(STARTAPPS[i],false) || !QFile::exists(STARTAPPS[i].filePath) ){ continue; }
+ QListWidgetItem *it = new QListWidgetItem( LXDG::findIcon(STARTAPPS[i].icon,"application-x-executable"), STARTAPPS[i].name );
+ it->setWhatsThis(STARTAPPS[i].filePath); //keep the file location
+ it->setToolTip(STARTAPPS[i].comment);
+ if(STARTAPPS[i].isHidden){ it->setCheckState( Qt::Unchecked); }
+ else{it->setCheckState( Qt::Checked); }
+ ui->list_session_start->addItem(it);
+ }
+}
+
+void page_autostart::updateIcons(){
+ ui->tool_session_addapp->setIcon( LXDG::findIcon("system-run","") );
+ ui->tool_session_addbin->setIcon( LXDG::findIcon("system-search","") );
+ ui->tool_session_addfile->setIcon( LXDG::findIcon("run-build-file","") );
+}
+
+//=================
+// PRIVATE
+//=================
+XDGDesktop page_autostart::getSysApp(bool allowreset){
+ AppDialog dlg(this, LXDG::sortDesktopNames( LXDG::systemDesktopFiles() ) );
+ dlg.allowReset(allowreset);
+ dlg.exec();
+ XDGDesktop desk;
+ if(dlg.appreset && allowreset){
+ desk.filePath = "reset"; //special internal flag
+ }else{
+ desk = dlg.appselected;
+ }
+ return desk;
+}
+
+//=================
+// PRIVATE SLOTS
+//=================
+void page_autostart::rmsessionstartitem(){
+ if(ui->list_session_start->currentRow() < 0){ return; } //no item selected
+ delete ui->list_session_start->takeItem(ui->list_session_start->currentRow());
+ settingChanged();
+}
+
+void page_autostart::addsessionstartapp(){
+ //Prompt for the application to start
+ XDGDesktop desk = getSysApp(false); //no reset
+ if(desk.filePath.isEmpty()){ return; } //cancelled
+ QListWidgetItem *it = new QListWidgetItem( LXDG::findIcon(desk.icon,""), desk.name );
+ it->setWhatsThis(desk.filePath);
+ it->setToolTip(desk.comment);
+ it->setCheckState(Qt::Checked);
+
+ ui->list_session_start->addItem(it);
+ ui->list_session_start->setCurrentItem(it);
+ settingChanged();
+}
+
+void page_autostart::addsessionstartbin(){
+ QString chkpath = LOS::AppPrefix() + "bin";
+ if(!QFile::exists(chkpath)){ chkpath = QDir::homePath(); }
+ QString bin = QFileDialog::getOpenFileName(this, tr("Select Binary"), chkpath, tr("Application Binaries (*)") );
+ if( bin.isEmpty() || !QFile::exists(bin) ){ return; } //cancelled
+ if( !QFileInfo(bin).isExecutable() ){
+ QMessageBox::warning(this, tr("Invalid Binary"), tr("The selected file is not executable!"));
+ return;
+ }
+ QListWidgetItem *it = new QListWidgetItem( LXDG::findIcon("application-x-executable",""), bin.section("/",-1) );
+ it->setWhatsThis(bin); //command to be saved/run
+ it->setToolTip(bin);
+ it->setCheckState(Qt::Checked);
+ ui->list_session_start->addItem(it);
+ ui->list_session_start->setCurrentItem(it);
+ settingChanged();
+}
+
+void page_autostart::addsessionstartfile(){
+ QString chkpath = QDir::homePath();
+ QString bin = QFileDialog::getOpenFileName(this, tr("Select File"), chkpath, tr("All Files (*)") );
+ if( bin.isEmpty() || !QFile::exists(bin) ){ return; } //cancelled
+ QListWidgetItem *it = new QListWidgetItem( LXDG::findMimeIcon(bin), bin.section("/",-1) );
+ it->setWhatsThis(bin); //file to be saved/run
+ it->setToolTip(bin);
+ it->setCheckState(Qt::Checked);
+ ui->list_session_start->addItem(it);
+ ui->list_session_start->setCurrentItem(it);
+ settingChanged();
+}
bgstack15