1 /* 2 * SPDX-FileCopyrightText: 2012 Alejandro Fiestas Olivares <afiestas@kde.org> 3 * SPDX-FileCopyrightText: 2012, 2013 Daniel Vrátil <dvratil@redhat.com> 4 * 5 * SPDX-License-Identifier: LGPL-2.1-or-later 6 */ 7 #pragma once 8 9 #include "abstractbackend.h" 10 11 #include <QLoggingCategory> 12 #include <QSize> 13 14 #include "../xcbwrapper.h" 15 16 class QRect; 17 class QTimer; 18 19 class XCBEventListener; 20 class XRandRConfig; 21 22 class XRandR : public KScreen::AbstractBackend 23 { 24 Q_OBJECT 25 Q_PLUGIN_METADATA(IID "org.kf5.kscreen.backends.xrandr") 26 27 public: 28 explicit XRandR(); 29 ~XRandR() override; 30 31 QString name() const override; 32 QString serviceName() const override; 33 KScreen::ConfigPtr config() const override; 34 void setConfig(const KScreen::ConfigPtr &config) override; 35 bool isValid() const override; 36 QByteArray edid(int outputId) const override; 37 38 static QByteArray outputEdid(xcb_randr_output_t outputId); 39 static xcb_randr_get_screen_resources_reply_t *screenResources(); 40 static xcb_screen_t *screen(); 41 static xcb_window_t rootWindow(); 42 43 static bool hasProperty(xcb_randr_output_t outputId, const QByteArray &name); 44 45 private: 46 void outputChanged(xcb_randr_output_t output, xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_connection_t connection); 47 void crtcChanged(xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_rotation_t rotation, const QRect &geom); 48 void screenChanged(xcb_randr_rotation_t rotation, const QSize &sizePx, const QSize &sizeMm); 49 50 static quint8 *getXProperty(xcb_randr_output_t output, xcb_atom_t atom, size_t &len); 51 52 static xcb_screen_t *s_screen; 53 static xcb_window_t s_rootWindow; 54 static XRandRConfig *s_internalConfig; 55 56 static int s_randrBase; 57 static int s_randrError; 58 static bool s_monitorInitialized; 59 static bool s_has_1_3; 60 static bool s_xorgCacheInitialized; 61 62 XCBEventListener *m_x11Helper; 63 bool m_isValid; 64 65 QTimer *m_configChangeCompressor; 66 }; 67 68 Q_DECLARE_LOGGING_CATEGORY(KSCREEN_XRANDR) 69