File indexing completed on 2024-04-28 16:49:41
0001 /* 0002 * SPDX-FileCopyrightText: 2012 Alejandro Fiestas Olivares <afiestas@kde.org> 0003 * SPDX-FileCopyrightText: 2012, 2013 Daniel Vrátil <dvratil@redhat.com> 0004 * 0005 * SPDX-License-Identifier: LGPL-2.1-or-later 0006 */ 0007 #pragma once 0008 0009 #include "abstractbackend.h" 0010 0011 #include <QLoggingCategory> 0012 #include <QSize> 0013 0014 #include <xcb/randr.h> 0015 #include <xcb/xcb.h> 0016 0017 class QRect; 0018 class QTimer; 0019 0020 class XCBEventListener; 0021 class XRandRConfig; 0022 0023 class XRandR : public KScreen::AbstractBackend 0024 { 0025 Q_OBJECT 0026 Q_PLUGIN_METADATA(IID "org.kf5.kscreen.backends.xrandr") 0027 0028 public: 0029 explicit XRandR(); 0030 ~XRandR() override; 0031 0032 QString name() const override; 0033 QString serviceName() const override; 0034 KScreen::ConfigPtr config() const override; 0035 void setConfig(const KScreen::ConfigPtr &config) override; 0036 bool isValid() const override; 0037 QByteArray edid(int outputId) const override; 0038 0039 static QByteArray outputEdid(xcb_randr_output_t outputId); 0040 static xcb_randr_get_screen_resources_reply_t *screenResources(); 0041 static xcb_screen_t *screen(); 0042 static xcb_window_t rootWindow(); 0043 0044 static bool hasProperty(xcb_randr_output_t outputId, const QByteArray &name); 0045 0046 private: 0047 void outputChanged(xcb_randr_output_t output, xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_connection_t connection); 0048 void crtcChanged(xcb_randr_crtc_t crtc, xcb_randr_mode_t mode, xcb_randr_rotation_t rotation, const QRect &geom, xcb_timestamp_t timestamp); 0049 void screenChanged(xcb_randr_rotation_t rotation, const QSize &sizePx, const QSize &sizeMm); 0050 0051 static quint8 *getXProperty(xcb_randr_output_t output, xcb_atom_t atom, size_t &len); 0052 0053 static xcb_screen_t *s_screen; 0054 static xcb_window_t s_rootWindow; 0055 static XRandRConfig *s_internalConfig; 0056 0057 static int s_randrBase; 0058 static int s_randrError; 0059 static bool s_monitorInitialized; 0060 static bool s_has_1_3; 0061 static bool s_xorgCacheInitialized; 0062 0063 XCBEventListener *m_x11Helper; 0064 bool m_isValid; 0065 0066 QTimer *m_configChangeCompressor; 0067 }; 0068 0069 Q_DECLARE_LOGGING_CATEGORY(KSCREEN_XRANDR)