File indexing completed on 2024-05-19 16:35:19

0001 /*
0002     SPDX-FileCopyrightText: 2015 Martin Gräßlin <mgraesslin@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 #include "display.h"
0007 #include "idle_interface_p.h"
0008 #include "seat_interface.h"
0009 
0010 #include "idledetector.h"
0011 #include "input.h"
0012 
0013 using namespace KWin;
0014 
0015 namespace KWaylandServer
0016 {
0017 
0018 static const quint32 s_version = 1;
0019 
0020 IdleInterfacePrivate::IdleInterfacePrivate(Display *display)
0021     : QtWaylandServer::org_kde_kwin_idle(*display, s_version)
0022 {
0023 }
0024 
0025 void IdleInterfacePrivate::org_kde_kwin_idle_get_idle_timeout(Resource *resource, uint32_t id, wl_resource *seat, uint32_t timeout)
0026 {
0027     SeatInterface *s = SeatInterface::get(seat);
0028     Q_ASSERT(s);
0029 
0030     wl_resource *idleTimoutResource = wl_resource_create(resource->client(), &org_kde_kwin_idle_timeout_interface, resource->version(), id);
0031     if (!idleTimoutResource) {
0032         wl_client_post_no_memory(resource->client());
0033         return;
0034     }
0035 
0036     new IdleTimeoutInterface(std::chrono::milliseconds(timeout), idleTimoutResource);
0037 }
0038 
0039 IdleInterface::IdleInterface(Display *display, QObject *parent)
0040     : QObject(parent)
0041     , d(new IdleInterfacePrivate(display))
0042 {
0043 }
0044 
0045 IdleInterface::~IdleInterface() = default;
0046 
0047 IdleTimeoutInterface::IdleTimeoutInterface(std::chrono::milliseconds timeout, wl_resource *resource)
0048     : QtWaylandServer::org_kde_kwin_idle_timeout(resource)
0049 {
0050     auto detector = new IdleDetector(timeout, this);
0051     connect(detector, &IdleDetector::idle, this, [this]() {
0052         send_idle();
0053     });
0054     connect(detector, &IdleDetector::resumed, this, [this]() {
0055         send_resumed();
0056     });
0057 }
0058 
0059 void IdleTimeoutInterface::org_kde_kwin_idle_timeout_release(Resource *resource)
0060 {
0061     wl_resource_destroy(resource->handle);
0062 }
0063 
0064 void IdleTimeoutInterface::org_kde_kwin_idle_timeout_destroy_resource(Resource *resource)
0065 {
0066     delete this;
0067 }
0068 
0069 void IdleTimeoutInterface::org_kde_kwin_idle_timeout_simulate_user_activity(Resource *resource)
0070 {
0071     input()->simulateUserActivity();
0072 }
0073 
0074 }