KWin
Loading...
Searching...
No Matches
colormanager.cpp
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2020 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
7#include "colormanager.h"
8#include "colordevice.h"
9#include "core/output.h"
10#include "core/session.h"
11#include "main.h"
12#include "utils/common.h"
13#include "workspace.h"
14
15namespace KWin
16{
17
19{
20public:
21 QList<ColorDevice *> devices;
22};
23
25 : d(std::make_unique<ColorManagerPrivate>())
26{
27 const QList<Output *> outputs = workspace()->outputs();
28 for (Output *output : outputs) {
29 handleOutputAdded(output);
30 }
31
32 connect(workspace(), &Workspace::outputAdded, this, &ColorManager::handleOutputAdded);
33 connect(workspace(), &Workspace::outputRemoved, this, &ColorManager::handleOutputRemoved);
34 connect(kwinApp()->session(), &Session::activeChanged, this, &ColorManager::handleSessionActiveChanged);
35}
36
38
39QList<ColorDevice *> ColorManager::devices() const
40{
41 return d->devices;
42}
43
45{
46 auto it = std::find_if(d->devices.begin(), d->devices.end(), [&output](ColorDevice *device) {
47 return device->output() == output;
48 });
49 if (it != d->devices.end()) {
50 return *it;
51 }
52 return nullptr;
53}
54
55void ColorManager::handleOutputAdded(Output *output)
56{
57 ColorDevice *device = new ColorDevice(output, this);
58 d->devices.append(device);
59 Q_EMIT deviceAdded(device);
60}
61
62void ColorManager::handleOutputRemoved(Output *output)
63{
64 auto it = std::find_if(d->devices.begin(), d->devices.end(), [&output](ColorDevice *device) {
65 return device->output() == output;
66 });
67 if (it == d->devices.end()) {
68 qCWarning(KWIN_CORE) << "Could not find any color device for output" << output;
69 return;
70 }
71 ColorDevice *device = *it;
72 d->devices.erase(it);
73 Q_EMIT deviceRemoved(device);
74 delete device;
75}
76
77void ColorManager::handleSessionActiveChanged(bool active)
78{
79 if (!active) {
80 return;
81 }
82 for (ColorDevice *device : std::as_const(d->devices)) {
83 device->scheduleUpdate();
84 }
85}
86
87} // namespace KWin
88
89#include "moc_colormanager.cpp"
void deviceRemoved(ColorDevice *device)
~ColorManager() override
ColorDevice * findDevice(Output *output) const
void deviceAdded(ColorDevice *device)
QList< ColorDevice * > devices() const
QList< ColorDevice * > devices
void activeChanged(bool active)
void outputAdded(KWin::Output *)
QList< Output * > outputs() const
Definition workspace.h:762
void outputRemoved(KWin::Output *)
Workspace * workspace()
Definition workspace.h:830