chore: baseline usable version

This commit is contained in:
dela
2026-06-10 11:17:51 +08:00
commit a2f82a86b6
932 changed files with 172551 additions and 0 deletions
+88
View File
@@ -0,0 +1,88 @@
#include "traymanager.h"
#include <QApplication>
#include <QIcon>
#include "config/configstore.h"
#include "config/config_keys.h"
TrayManager::TrayManager(QObject *parent)
: QObject(parent),
m_trayIcon(new QSystemTrayIcon(this)),
m_trayMenu(new QMenu())
{
m_trayIcon->setIcon(QIcon(":/svg/qemby_logo.svg"));
m_trayIcon->setToolTip(qApp->applicationName());
setupMenu();
m_trayIcon->setContextMenu(m_trayMenu);
connect(m_trayIcon, &QSystemTrayIcon::activated, this, &TrayManager::onTrayActivated);
connect(ConfigStore::instance(), &ConfigStore::valueChanged, this, &TrayManager::onConfigChanged);
connect(ThemeManager::instance(), &ThemeManager::themeChanged, this, &TrayManager::onThemeChanged);
bool isTrayEnabled = ConfigStore::instance()->get<bool>(ConfigKeys::CloseToTray, false);
if (QSystemTrayIcon::isSystemTrayAvailable()) {
m_trayIcon->setVisible(isTrayEnabled);
QApplication::setQuitOnLastWindowClosed(!isTrayEnabled);
}
updateIcons();
}
TrayManager::~TrayManager() {
if (m_trayMenu) {
m_trayMenu->deleteLater();
}
}
void TrayManager::setupMenu() {
m_trayMenu->setObjectName("modern-tray-menu");
m_trayMenu->setWindowFlags(m_trayMenu->windowFlags() | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint);
m_trayMenu->setAttribute(Qt::WA_TranslucentBackground);
m_showAction = new QAction(tr("Show qEmby"), this);
connect(m_showAction, &QAction::triggered, this, &TrayManager::showMainRequested);
m_quitAction = new QAction(tr("Quit"), this);
connect(m_quitAction, &QAction::triggered, this, &TrayManager::quitRequested);
m_trayMenu->addAction(m_showAction);
m_trayMenu->addSeparator();
m_trayMenu->addAction(m_quitAction);
}
void TrayManager::updateIcons() {
m_showAction->setIcon(ThemeManager::getAdaptiveIcon(":/svg/dark/window-pop.svg"));
m_quitAction->setIcon(ThemeManager::getAdaptiveIcon(":/svg/dark/logout.svg"));
}
void TrayManager::onThemeChanged(ThemeManager::Theme theme) {
Q_UNUSED(theme);
updateIcons();
}
void TrayManager::onTrayActivated(QSystemTrayIcon::ActivationReason reason) {
if (reason == QSystemTrayIcon::Trigger || reason == QSystemTrayIcon::DoubleClick) {
emit showMainRequested();
}
}
void TrayManager::onConfigChanged(const QString &key, const QVariant &value) {
if (key == ConfigKeys::CloseToTray) {
bool enabled = value.toBool();
if (QSystemTrayIcon::isSystemTrayAvailable()) {
m_trayIcon->setVisible(enabled);
QApplication::setQuitOnLastWindowClosed(!enabled);
}
}
}