2
Copyright 2010 Will Stephenson <wstephenson@kde.org>
4
This program is free software; you can redistribute it and/or
5
modify it under the terms of the GNU General Public License as
6
published by the Free Software Foundation; either version 2 of
7
the License or (at your option) version 3 or any later version
8
accepted by the membership of KDE e.V. (or its successor approved
9
by the membership of KDE e.V.), which shall act as a proxy
10
defined in Section 14 of version 3 of the license.
12
This program is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
GNU General Public License for more details.
17
You should have received a copy of the GNU General Public License
18
along with this program. If not, see <http://www.gnu.org/licenses/>.
21
#include "desktopwidgetscreens.h"
23
#include <QDesktopWidget>
24
#include <QApplication>
28
#include "simplescreen.h"
30
Kephal::DesktopWidgetScreens::DesktopWidgetScreens(QObject * parent)
33
QDesktopWidget * desktop = QApplication::desktop();
34
connect(desktop, SIGNAL(screenCountChanged(int)), this, SLOT(handleScreenCountChanged(int)));
35
connect(desktop, SIGNAL(resized(int)), this, SLOT(handleScreenResized(int)));
37
for (int i = 0; i < desktop->numScreens(); i++) {
38
QRect geometry = desktop->screenGeometry(i);
39
Kephal::SimpleScreen * screen =
40
new Kephal::SimpleScreen(i, geometry.size(), geometry.topLeft(), false, this);
41
m_screens.append(screen);
45
Kephal::DesktopWidgetScreens::~DesktopWidgetScreens()
47
foreach (Kephal::SimpleScreen * screen, m_screens) {
48
int id = screen->id();
50
emit screenRemoved(id);
54
QList<Kephal::Screen*> Kephal::DesktopWidgetScreens::screens()
56
QList<Kephal::Screen*> list;
57
foreach (Kephal::SimpleScreen * screen, m_screens) {
63
void Kephal::DesktopWidgetScreens::handleScreenResized(int id)
65
Kephal::SimpleScreen * screen = m_screens.value(id);
66
QSize oldSize = screen->size();
67
QPoint oldPosition = screen->position();
68
//FIXME: find a better way to restrict changing Screen to Screens - friend modifier class?
69
screen->_setGeom(QApplication::desktop()->screenGeometry(id));
70
if (oldSize != screen->size()) {
71
emit screenResized(screen, oldSize, screen->size());
73
if (oldPosition != screen->position()) {
74
emit screenMoved(screen, oldPosition, screen->position());
78
void Kephal::DesktopWidgetScreens::handleScreenCountChanged(int newCount)
81
for (int i = m_screens.count(); i < newCount; i++) {
82
QRect geometry = QApplication::desktop()->screenGeometry(i);
83
Kephal::SimpleScreen * screen =
84
new Kephal::SimpleScreen(i, geometry.size(), geometry.topLeft(), false, this);
85
m_screens.append(screen);
86
emit screenAdded(screen);
89
// remove no longer existing Screens
90
while (m_screens.count() > newCount) {
91
Kephal::SimpleScreen * screen = m_screens.takeLast();
93
int id = screen->id();
95
emit screenRemoved(id);
100
// vim: sw=4 sts=4 et tw=100