File indexing completed on 2024-04-28 03:54:38
0001 /* This file is part of the KDE libraries 0002 * SPDX-FileCopyrightText: 2009 Dario Freddi <drf at kde.org> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.1-or-later 0005 */ 0006 0007 #ifndef XSYNCBASEDPOLLER_H 0008 #define XSYNCBASEDPOLLER_H 0009 0010 #include "kabstractidletimepoller_p.h" 0011 #include <QHash> 0012 0013 #include <config-kidletime.h> 0014 0015 #include <X11/Xlib.h> 0016 #include <X11/extensions/sync.h> 0017 #include <xcb/xcb.h> 0018 0019 #include "fixx11h.h" 0020 0021 class XSyncBasedPoller : public KAbstractIdleTimePoller 0022 { 0023 Q_OBJECT 0024 Q_PLUGIN_METADATA(IID KAbstractIdleTimePoller_iid FILE "xcb.json") 0025 Q_INTERFACES(KAbstractIdleTimePoller) 0026 0027 public: 0028 static XSyncBasedPoller *instance(); 0029 0030 explicit XSyncBasedPoller(QObject *parent = nullptr); 0031 ~XSyncBasedPoller() override; 0032 0033 bool isAvailable() override; 0034 bool setUpPoller() override; 0035 void unloadPoller() override; 0036 0037 bool xcbEvent(xcb_generic_event_t *event); 0038 0039 QList<int> timeouts() const override; 0040 0041 public Q_SLOTS: 0042 void addTimeout(int nextTimeout) override; 0043 void removeTimeout(int nextTimeout) override; 0044 0045 int forcePollRequest() override; 0046 void catchIdleEvent() override; 0047 void stopCatchingIdleEvents() override; 0048 void simulateUserActivity() override; 0049 0050 private Q_SLOTS: 0051 int poll(); 0052 void reloadAlarms(); 0053 0054 private: 0055 void setAlarm(Display *dpy, XSyncAlarm *alarm, XSyncCounter counter, XSyncTestType test, XSyncValue value); 0056 0057 private: 0058 Display *m_display; 0059 xcb_connection_t *m_xcb_connection; 0060 0061 int m_sync_event; 0062 XSyncCounter m_idleCounter; 0063 QHash<int, XSyncAlarm> m_timeoutAlarm; 0064 XSyncAlarm m_resetAlarm; 0065 bool m_available; 0066 }; 0067 0068 #endif /* XSYNCBASEDPOLLER_H */