File indexing completed on 2024-05-12 05:33:53

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