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

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 #include "xrandrscreen.h"
0008 
0009 #include "xrandr.h"
0010 #include "xrandrconfig.h"
0011 
0012 #include "../xcbwrapper.h"
0013 
0014 #include "screen.h"
0015 
0016 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
0017 #include <private/qtx11extras_p.h>
0018 #else
0019 #include <QX11Info>
0020 #endif
0021 
0022 XRandRScreen::XRandRScreen(XRandRConfig *config)
0023     : QObject(config)
0024 {
0025     XCB::ScreenSize size(XRandR::rootWindow());
0026     m_maxSize = QSize(size->max_width, size->max_height);
0027     m_minSize = QSize(size->min_width, size->min_height);
0028     update();
0029 }
0030 
0031 XRandRScreen::~XRandRScreen()
0032 {
0033 }
0034 
0035 void XRandRScreen::update()
0036 {
0037     const int appScreen = QX11Info::appScreen();
0038     m_id = appScreen;
0039     xcb_screen_t *screen = XCB::screenOfDisplay(XCB::connection(), appScreen);
0040     m_currentSize = QSize(screen->width_in_pixels, screen->height_in_pixels);
0041 }
0042 
0043 void XRandRScreen::update(const QSize &size)
0044 {
0045     m_currentSize = size;
0046 }
0047 
0048 QSize XRandRScreen::currentSize()
0049 {
0050     return m_currentSize;
0051 }
0052 
0053 KScreen::ScreenPtr XRandRScreen::toKScreenScreen() const
0054 {
0055     KScreen::ScreenPtr kscreenScreen(new KScreen::Screen);
0056     kscreenScreen->setId(m_id);
0057     kscreenScreen->setMaxSize(m_maxSize);
0058     kscreenScreen->setMinSize(m_minSize);
0059     kscreenScreen->setCurrentSize(m_currentSize);
0060 
0061     XCB::ScopedPointer<xcb_randr_get_screen_resources_reply_t> screenResources(XRandR::screenResources());
0062     kscreenScreen->setMaxActiveOutputsCount(screenResources->num_crtcs);
0063 
0064     return kscreenScreen;
0065 }
0066 
0067 void XRandRScreen::updateKScreenScreen(KScreen::ScreenPtr &screen) const
0068 {
0069     screen->setCurrentSize(m_currentSize);
0070 }