summaryrefslogtreecommitdiffhomepage
path: root/facetracknoir/ui.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'facetracknoir/ui.cpp')
-rw-r--r--facetracknoir/ui.cpp22
1 files changed, 20 insertions, 2 deletions
diff --git a/facetracknoir/ui.cpp b/facetracknoir/ui.cpp
index edd3a818..44eff98e 100644
--- a/facetracknoir/ui.cpp
+++ b/facetracknoir/ui.cpp
@@ -81,11 +81,13 @@ MainWindow::MainWindow() :
ensure_tray();
if (s.tray_enabled)
- hide();
+ setWindowState(Qt::WindowMinimized);
}
MainWindow::~MainWindow()
{
+ if (tray)
+ tray->hide();
stopTracker();
save();
_exit(0);
@@ -413,12 +415,28 @@ void MainWindow::shortcutToggled()
void MainWindow::ensure_tray()
{
+ if (tray)
+ tray->hide();
tray = nullptr;
if (s.tray_enabled)
{
tray = std::make_shared<QSystemTrayIcon>(this);
tray->setIcon(QIcon(":/images/facetracknoir.png"));
tray->show();
- connect(tray.get(), SIGNAL(activated()), this, SLOT(show()));
+ connect(tray.get(), SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
+ this, SLOT(restore_from_tray(QSystemTrayIcon::ActivationReason)));
}
}
+
+void MainWindow::restore_from_tray(QSystemTrayIcon::ActivationReason)
+{
+ show();
+ setWindowState(Qt::WindowNoState);
+}
+
+void MainWindow::changeEvent(QEvent* e)
+{
+ if (e->type() == QEvent::WindowStateChange && (windowState() & Qt::WindowMinimized))
+ hide();
+ QMainWindow::changeEvent(e);
+}