File indexing completed on 2024-04-28 16:49:42

0001 /*
0002  *  SPDX-FileCopyrightText: 2012, 2013 Daniel Vrátil <dvratil@redhat.com>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.1-or-later
0005  */
0006 #pragma once
0007 
0008 #include <QObject>
0009 #include <cstdint>
0010 
0011 #include "xrandrcrtc.h"
0012 #include "xrandroutput.h"
0013 
0014 class XRandRScreen;
0015 namespace KScreen
0016 {
0017 class Config;
0018 }
0019 
0020 class XRandRConfig : public QObject
0021 {
0022     Q_OBJECT
0023 
0024 public:
0025     XRandRConfig();
0026     ~XRandRConfig() override;
0027 
0028     XRandROutput::Map outputs() const;
0029     XRandROutput *output(xcb_randr_output_t output) const;
0030 
0031     XRandRCrtc::Map crtcs() const;
0032     XRandRCrtc *crtc(xcb_randr_crtc_t crtc) const;
0033 
0034     XRandRScreen *screen() const;
0035 
0036     void addNewOutput(xcb_randr_output_t id);
0037     void addNewCrtc(xcb_randr_crtc_t crtc);
0038     void removeOutput(xcb_randr_output_t id);
0039 
0040     KScreen::ConfigPtr toKScreenConfig() const;
0041     void applyKScreenConfig(const KScreen::ConfigPtr &config);
0042 
0043 private:
0044     QSize screenSize(const KScreen::ConfigPtr &config) const;
0045     bool setScreenSize(const QSize &size) const;
0046 
0047     void setOutputPriority(xcb_randr_output_t outputId, uint32_t priority) const;
0048 
0049     bool disableOutput(const KScreen::OutputPtr &output) const;
0050     bool enableOutput(const KScreen::OutputPtr &output) const;
0051     bool changeOutput(const KScreen::OutputPtr &output) const;
0052 
0053     bool sendConfig(const KScreen::OutputPtr &kscreenOutput, XRandRCrtc *crtc) const;
0054 
0055     /**
0056      * We need to print stuff to discover the damn bug
0057      * where currentMode is null
0058      */
0059     void printConfig(const KScreen::ConfigPtr &config) const;
0060     void printInternalCond() const;
0061 
0062     XRandROutput::Map m_outputs;
0063     XRandRCrtc::Map m_crtcs;
0064     XRandRScreen *m_screen;
0065 };