From 9e5e5ae969a96ab8ef6de7c28a0ebc1deae08b86 Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Mon, 9 Aug 2021 16:41:29 +0200 Subject: [PATCH 1/3] data: add PowerProfileMonitor interface definition --- data/Makefile.am.inc | 1 + ...freedesktop.portal.PowerProfileMonitor.xml | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 data/org.freedesktop.portal.PowerProfileMonitor.xml diff --git a/data/Makefile.am.inc b/data/Makefile.am.inc index aacba2a..3aabe16 100644 --- a/data/Makefile.am.inc +++ b/data/Makefile.am.inc @@ -15,6 +15,7 @@ dist_introspection_DATA = \ data/org.freedesktop.portal.NetworkMonitor.xml \ data/org.freedesktop.portal.Notification.xml \ data/org.freedesktop.portal.OpenURI.xml \ + data/org.freedesktop.portal.PowerProfileMonitor.xml \ data/org.freedesktop.portal.Print.xml \ data/org.freedesktop.portal.ProxyResolver.xml \ data/org.freedesktop.portal.RemoteDesktop.xml \ diff --git a/data/org.freedesktop.portal.PowerProfileMonitor.xml b/data/org.freedesktop.portal.PowerProfileMonitor.xml new file mode 100644 index 0000000..daf487a --- /dev/null +++ b/data/org.freedesktop.portal.PowerProfileMonitor.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + -- 2.31.1 From 9a5ab798e345063eecaf6ef049cfab1ee3d52925 Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Mon, 9 Aug 2021 17:11:25 +0200 Subject: [PATCH 2/3] power-profile-monitor: Add portal implementation for GPowerProfileMonitor See glib references: https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2194 --- src/Makefile.am.inc | 3 + src/power-profile-monitor.c | 113 ++++++++++++++++++++++++++++++++++++ src/power-profile-monitor.h | 25 ++++++++ src/xdg-desktop-portal.c | 2 + 4 files changed, 143 insertions(+) create mode 100644 src/power-profile-monitor.c create mode 100644 src/power-profile-monitor.h diff --git a/src/Makefile.am.inc b/src/Makefile.am.inc index 961a722..7e803dd 100644 --- a/src/Makefile.am.inc +++ b/src/Makefile.am.inc @@ -41,6 +41,7 @@ PORTAL_IFACE_FILES =\ data/org.freedesktop.portal.Camera.xml \ data/org.freedesktop.portal.Secret.xml \ data/org.freedesktop.portal.Wallpaper.xml \ + data/org.freedesktop.portal.PowerProfileMonitor.xml \ $(NULL) PORTAL_IMPL_IFACE_FILES =\ @@ -126,6 +127,8 @@ xdg_desktop_portal_SOURCES = \ src/memory-monitor.h \ src/network-monitor.c \ src/network-monitor.h \ + src/power-profile-monitor.c \ + src/power-profile-monitor.h \ src/proxy-resolver.c \ src/proxy-resolver.h \ src/screenshot.c \ diff --git a/src/power-profile-monitor.c b/src/power-profile-monitor.c new file mode 100644 index 0000000..9ffa87a --- /dev/null +++ b/src/power-profile-monitor.c @@ -0,0 +1,113 @@ +/* + * Copyright © 2021 Red Hat, Inc + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + * + * Authors: + * Bastien Nocera + */ + +#include "config.h" + +#include +#include + +#include "power-profile-monitor.h" +#include "request.h" +#include "xdp-dbus.h" +#include "xdp-utils.h" + +#if GLIB_CHECK_VERSION(2, 69, 1) +#define HAS_POWER_PROFILE_MONITOR 1 +#endif + +typedef struct _PowerProfileMonitor PowerProfileMonitor; +typedef struct _PowerProfileMonitorClass PowerProfileMonitorClass; + +struct _PowerProfileMonitor +{ + XdpPowerProfileMonitorSkeleton parent_instance; + +#ifdef HAS_POWER_PROFILE_MONITOR + GPowerProfileMonitor *monitor; +#endif /* HAS_POWER_PROFILE_MONITOR */ +}; + +struct _PowerProfileMonitorClass +{ + XdpPowerProfileMonitorSkeletonClass parent_class; +}; + +static PowerProfileMonitor *power_profile_monitor; + +GType power_profile_monitor_get_type (void) G_GNUC_CONST; +static void power_profile_monitor_iface_init (XdpPowerProfileMonitorIface *iface); + +G_DEFINE_TYPE_WITH_CODE (PowerProfileMonitor, power_profile_monitor, XDP_TYPE_POWER_PROFILE_MONITOR_SKELETON, + G_IMPLEMENT_INTERFACE (XDP_TYPE_POWER_PROFILE_MONITOR, power_profile_monitor_iface_init)); + +static void +power_profile_monitor_iface_init (XdpPowerProfileMonitorIface *iface) +{ +} + +#ifdef HAS_POWER_PROFILE_MONITOR +static void +power_saver_enabled_changed_cb (GObject *gobject, + GParamSpec *pspec, + PowerProfileMonitor *ppm) +{ + xdp_power_profile_monitor_set_power_saver_enabled (XDP_POWER_PROFILE_MONITOR (ppm), + g_power_profile_monitor_get_power_saver_enabled (ppm->monitor)); +} +#endif /* HAS_POWER_PROFILE_MONITOR */ + +static void +power_profile_monitor_init (PowerProfileMonitor *ppm) +{ +#ifdef HAS_POWER_PROFILE_MONITOR + ppm->monitor = g_power_profile_monitor_dup_default (); + g_signal_connect (ppm->monitor, "notify::power-saver-enabled", G_CALLBACK (power_saver_enabled_changed_cb), ppm); +#endif /* HAS_POWER_PROFILE_MONITOR */ + + xdp_power_profile_monitor_set_version (XDP_POWER_PROFILE_MONITOR (ppm), 1); +} + +static void +power_profile_monitor_finalize (GObject *object) +{ +#ifdef HAS_POWER_PROFILE_MONITOR + PowerProfileMonitor *ppm = (PowerProfileMonitor *) object; + + g_clear_object (&ppm->monitor); +#endif /* HAS_POWER_PROFILE_MONITOR */ + + G_OBJECT_CLASS (power_profile_monitor_parent_class)->finalize (object); +} + +static void +power_profile_monitor_class_init (PowerProfileMonitorClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->finalize = power_profile_monitor_finalize; +} + +GDBusInterfaceSkeleton * +power_profile_monitor_create (GDBusConnection *connection) +{ + power_profile_monitor = g_object_new (power_profile_monitor_get_type (), NULL); + + return G_DBUS_INTERFACE_SKELETON (power_profile_monitor); +} diff --git a/src/power-profile-monitor.h b/src/power-profile-monitor.h new file mode 100644 index 0000000..b23ea8b --- /dev/null +++ b/src/power-profile-monitor.h @@ -0,0 +1,25 @@ +/* + * Copyright © 2021 Red Hat, Inc + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + * + * Authors: + * Bastien Nocera + */ + +#pragma once + +#include + +GDBusInterfaceSkeleton * power_profile_monitor_create (GDBusConnection *connection); diff --git a/src/xdg-desktop-portal.c b/src/xdg-desktop-portal.c index 88a6c5e..e5f3002 100644 --- a/src/xdg-desktop-portal.c +++ b/src/xdg-desktop-portal.c @@ -40,6 +40,7 @@ #include "print.h" #include "memory-monitor.h" #include "network-monitor.h" +#include "power-profile-monitor.h" #include "proxy-resolver.h" #include "screenshot.h" #include "notification.h" @@ -227,6 +228,7 @@ on_bus_acquired (GDBusConnection *connection, lockdown = xdp_impl_lockdown_skeleton_new (); export_portal_implementation (connection, memory_monitor_create (connection)); + export_portal_implementation (connection, power_profile_monitor_create (connection)); export_portal_implementation (connection, network_monitor_create (connection)); export_portal_implementation (connection, proxy_resolver_create (connection)); export_portal_implementation (connection, trash_create (connection)); -- 2.31.1 From ba7413f52dfd2c933a261509e511ce724dd5042a Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Tue, 24 Aug 2021 16:38:18 +0200 Subject: [PATCH 3/3] Force power-profiles-daemon support in --- src/power-profile-monitor.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/power-profile-monitor.c b/src/power-profile-monitor.c index 9ffa87a..d033fed 100644 --- a/src/power-profile-monitor.c +++ b/src/power-profile-monitor.c @@ -28,9 +28,7 @@ #include "xdp-dbus.h" #include "xdp-utils.h" -#if GLIB_CHECK_VERSION(2, 69, 1) #define HAS_POWER_PROFILE_MONITOR 1 -#endif typedef struct _PowerProfileMonitor PowerProfileMonitor; typedef struct _PowerProfileMonitorClass PowerProfileMonitorClass; -- 2.31.1