Warning, file /plasma/drkonqi/src/statusnotifier_activationclosetimer.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 SPDX-License-Identifier: GPL-2.0-or-later 0003 SPDX-FileCopyrightText: 2016 Kai Uwe Broulik <kde@privat.broulik.de> 0004 SPDX-FileCopyrightText: 2021 Harald Sitter <sitter@kde.org> 0005 */ 0006 0007 #pragma once 0008 0009 #include <chrono> 0010 0011 #include <QDBusServiceWatcher> 0012 #include <QTimer> 0013 0014 using namespace std::chrono_literals; 0015 0016 class DBusServiceWatcher : public QObject 0017 { 0018 Q_OBJECT 0019 public: 0020 using QObject::QObject; 0021 0022 virtual void start(); 0023 QVector<QString> serviceNames() const; 0024 0025 Q_SIGNALS: 0026 void serviceUnregistered(); 0027 void serviceRegistered(); 0028 0029 private: 0030 // org.kde.StatusNotifierWatcher (kded5): SNI won't be registered 0031 // org.freedesktop.Notifications (plasmashell): SNI won't be visualized 0032 const QVector<QString> m_serviceNames{QStringLiteral("org.kde.StatusNotifierWatcher"), QStringLiteral("org.freedesktop.Notifications")}; 0033 QDBusServiceWatcher *m_watcher = nullptr; 0034 }; 0035 0036 class IdleWatcher : public QObject 0037 { 0038 Q_OBJECT 0039 public: 0040 using QObject::QObject; 0041 0042 virtual void start(); 0043 0044 Q_SIGNALS: 0045 void idle(); 0046 void notIdle(); 0047 }; 0048 0049 // Somewhat horrible container to track automatic activation and close conditions. 0050 // This tracks the availability of dbus interfaces that are required for visualization 0051 // of the an SNI, if they are missing then drkonqi may auto activate the window. 0052 // This also tracks system idleness as we want to prevent auto closing of the SNI 0053 // when the user isn't at the system. 0054 // If neither is applicable the SNI gets auto closed after a while. 0055 class ActivationCloseTimer : public QObject 0056 { 0057 Q_OBJECT 0058 public: 0059 using QObject::QObject; 0060 0061 void start(DBusServiceWatcher *dbusWatcher, IdleWatcher *idleWatcher); 0062 0063 void setActivationTimeout(std::chrono::milliseconds timeout); 0064 void setCloseTimeout(std::chrono::milliseconds timeout); 0065 0066 Q_SIGNALS: 0067 void autoClose(); 0068 void autoActivate(); 0069 0070 private Q_SLOTS: 0071 void watchDBus(DBusServiceWatcher *watcher); 0072 void watchIdle(IdleWatcher *idleWatcher); 0073 0074 void refresh(); 0075 0076 private: 0077 int m_pendingActivations = 0; 0078 QTimer m_closeTimer; 0079 bool m_idle = false; 0080 std::chrono::milliseconds m_activationTimeout = 10s; 0081 std::chrono::milliseconds m_closeTimeout = 1min; 0082 };