diff options
Diffstat (limited to 'src-qt5/desktop-utils/lumina-terminal/TrayIcon.cpp')
-rw-r--r-- | src-qt5/desktop-utils/lumina-terminal/TrayIcon.cpp | 173 |
1 files changed, 0 insertions, 173 deletions
diff --git a/src-qt5/desktop-utils/lumina-terminal/TrayIcon.cpp b/src-qt5/desktop-utils/lumina-terminal/TrayIcon.cpp deleted file mode 100644 index 5198146e..00000000 --- a/src-qt5/desktop-utils/lumina-terminal/TrayIcon.cpp +++ /dev/null @@ -1,173 +0,0 @@ -//=========================================== -// Lumina-DE source code -// Copyright (c) 2015, Ken Moore -// Available under the 3-clause BSD license -// See the LICENSE file for full details -//=========================================== -#include "TrayIcon.h" - -#include <QDir> -#include <QDesktopWidget> - -#include <LUtils.h> - -TrayIcon::TrayIcon() : QSystemTrayIcon(){ - //Create the child widgets here - settings = new QSettings("lumina-desktop","lumina-terminal"); - this->setContextMenu(new QMenu()); - ScreenMenu = new QMenu(); - connect(ScreenMenu, SIGNAL(triggered(QAction*)), this, SLOT(ChangeScreen(QAction*)) ); - TERM = new TermWindow(settings); - //Load the current settings - TERM->setTopOfScreen(settings->value("TopOfScreen",true).toBool()); - TERM->setCurrentScreen(settings->value("OnScreen",0).toInt()); - connect(TERM, SIGNAL(TerminalHidden()), this, SLOT(TermHidden())); - connect(TERM, SIGNAL(TerminalVisible()), this, SLOT(TermVisible())); - connect(TERM, SIGNAL(TerminalClosed()), this, SLOT(startCleanup())); - connect(TERM, SIGNAL(TerminalFinished()), this, SLOT(stopApplication())); - connect(this, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(TrayActivated(QSystemTrayIcon::ActivationReason)) ); -} - -TrayIcon::~TrayIcon(){ - delete TERM; - delete ScreenMenu; -} - -// ============= -// PUBLIC -// ============= -void TrayIcon::parseInputs(QStringList inputs){ - //Note that this is only run on the primary process - otherwise inputs are sent to the slotSingleInstance() below - termVisible = !inputs.contains("-toggle"); //will automatically show the terminal on first run, even if "-toggle" is set - - setupContextMenu(); - updateIcons(); - inputs = adjustInputs(inputs); //will adjust termVisible as necessary - if(inputs.isEmpty()){ inputs << QDir::homePath(); } //always start up with one terminal minimum - TERM->OpenDirs(inputs); - if(termVisible){ QTimer::singleShot(0, TERM, SLOT(ShowWindow())); } -} - -// ================= -// PUBLIC SLOTS -// ================= -void TrayIcon::slotSingleInstance(QStringList inputs){ - //Note that this is only run for a secondary process forwarding its inputs - //qDebug() << "Single Instance Event:" << inputs << termVisible; - bool visible = termVisible; - inputs = adjustInputs(inputs); //will adjust termVisible as necessary - if(!inputs.isEmpty()){ TERM->OpenDirs(inputs); } - //Only adjust the window if there was a change in the visibility status - //qDebug() << "Set Visible:" << termVisible; - if(!visible && termVisible){ QTimer::singleShot(0, TERM, SLOT(ShowWindow())); } - else if(visible && !termVisible){ QTimer::singleShot(0, TERM, SLOT(HideWindow())); } -} - -void TrayIcon::updateIcons(){ - this->setIcon(LXDG::findIcon("utilities-terminal","")); -} - -// ================ -// PRIVATE -// ================ -QStringList TrayIcon::adjustInputs(QStringList inputs){ - bool hasHide = false; - //Look for the special CLI flags just for the tray icon and trim them out - for(int i=0; i<inputs.length(); i++){ - if(inputs[i]=="-toggle"){ hasHide = termVisible; inputs.removeAt(i); i--; } //toggle the visibility - else if(inputs[i]=="-show"){ hasHide = false; inputs.removeAt(i); i--; } //change the visibility - else if(inputs[i]=="-hide"){ hasHide = true; inputs.removeAt(i); i--; } //change the visibility - else{ - //Must be a directory - convert to an absolute path and check for existance - inputs[i] = LUtils::PathToAbsolute(inputs[i]); - QFileInfo info(inputs[i]); - if(!info.exists()){ - qDebug() << "Directory does not exist: " << inputs[i]; - inputs.removeAt(i); - i--; - }else if(!info.isDir()){ - //Must be some kind of file, open the parent directory - inputs[i] = inputs[i].section("/",0,-2); - } - } - } - termVisible = !hasHide; - return inputs; -} - -// ================ -// PRIVATE SLOTS -// ================ -void TrayIcon::startCleanup(){ - TERM->cleanup(); -} - -void TrayIcon::stopApplication(){ - QApplication::exit(0); -} - -void TrayIcon::ChangeTopBottom(bool ontop){ - TERM->setTopOfScreen(ontop); - settings->setValue("TopOfScreen",ontop); //save for later -} - -void TrayIcon::ChangeScreen(QAction *act){ - int screen = act->whatsThis().toInt(); - TERM->setCurrentScreen(screen); - settings->setValue("OnScreen",screen); - updateScreenMenu(); -} - -void TrayIcon::setupContextMenu(){ - this->contextMenu()->clear(); - this->contextMenu()->addAction(LXDG::findIcon("edit-select",""), tr("Trigger Terminal"), this, SLOT(ToggleVisibility()) ); - this->contextMenu()->addSeparator(); - QAction * act = this->contextMenu()->addAction(tr("Top of Screen"), this, SLOT(ChangeTopBottom(bool)) ); - act->setCheckable(true); - act->setChecked(settings->value("TopOfScreen",true).toBool() ); - this->contextMenu()->addMenu(ScreenMenu); - this->contextMenu()->addSeparator(); - this->contextMenu()->addAction(LXDG::findIcon("application-exit",""), tr("Close Terminal"), this, SLOT(stopApplication()) ); - updateScreenMenu(); -} - -void TrayIcon::updateScreenMenu(){ - ScreenMenu->clear(); - QDesktopWidget *desk = QApplication::desktop(); - int cscreen = settings->value("OnScreen",0).toInt(); - if(cscreen>=desk->screenCount()){ cscreen = desk->primaryScreen(); } - ScreenMenu->setTitle(tr("Move To Monitor")); - for(int i=0; i<desk->screenCount(); i++){ - if(i!=cscreen){ - QAction *act = new QAction( QString(tr("Monitor %1")).arg(QString::number(i+1)),ScreenMenu); - act->setWhatsThis(QString::number(i)); - ScreenMenu->addAction(act); - } - } - ScreenMenu->setVisible(!ScreenMenu->isEmpty()); - ScreenMenu->setEnabled(!ScreenMenu->isEmpty()); -} - -void TrayIcon::TrayActivated(QSystemTrayIcon::ActivationReason reason){ - switch(reason){ - case QSystemTrayIcon::Context: - this->contextMenu()->popup(this->geometry().center()); - break; - default: - ToggleVisibility(); - } -} - -//Slots for the window visibility -void TrayIcon::ToggleVisibility(){ - if(termVisible){ QTimer::singleShot(0, TERM, SLOT(HideWindow())); } - else{ QTimer::singleShot(0, TERM, SLOT(ShowWindow())); } -} - -void TrayIcon::TermHidden(){ - termVisible = false; -} - -void TrayIcon::TermVisible(){ - termVisible = true; -} |