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 }