From 5a4eaf4f6948401a7affa2aa63ed9038a9d5e1f6 Mon Sep 17 00:00:00 2001 From: rbuj Date: Mon, 18 May 2020 10:43:17 +0200 Subject: cpufreq: Port client of selector service to GDBus https://gitlab.gnome.org/GNOME/gnome-applets/-/commit/ed5418eed57cb00976603923d2ccf2b1b8acddf4 --- cpufreq/src/Makefile.am | 8 --- cpufreq/src/cpufreq-selector.c | 127 ++++++++++++++++++++++++----------------- cpufreq/src/cpufreq-utils.c | 46 ++++++++++----- 3 files changed, 109 insertions(+), 72 deletions(-) (limited to 'cpufreq/src') diff --git a/cpufreq/src/Makefile.am b/cpufreq/src/Makefile.am index af5982f9..83ed7faa 100644 --- a/cpufreq/src/Makefile.am +++ b/cpufreq/src/Makefile.am @@ -8,10 +8,6 @@ AM_CPPFLAGS = \ -DCPUFREQ_MENU_UI_DIR=\""$(datadir)/mate/ui"\" \ $(MATE_APPLETS4_CFLAGS) -if HAVE_DBUS -AM_CPPFLAGS += $(DBUS_CFLAGS) -endif - libexec_PROGRAMS = mate-cpufreq-applet if HAVE_LIBCPUFREQ @@ -38,8 +34,4 @@ mate_cpufreq_applet_LDADD = \ $(MATE_APPLETS4_LIBS) \ $(LIBCPUFREQ_LIBS) -if HAVE_DBUS -mate_cpufreq_applet_LDADD += $(DBUS_LIBS) -endif - -include $(top_srcdir)/git.mk diff --git a/cpufreq/src/cpufreq-selector.c b/cpufreq/src/cpufreq-selector.c index 59b3dabb..4bdac4df 100644 --- a/cpufreq/src/cpufreq-selector.c +++ b/cpufreq/src/cpufreq-selector.c @@ -21,7 +21,7 @@ #include #ifdef HAVE_POLKIT -#include +#include #endif /* HAVE_POLKIT */ #include "cpufreq-selector.h" @@ -30,7 +30,8 @@ struct _CPUFreqSelector { GObject parent; #ifdef HAVE_POLKIT - DBusGConnection *system_bus; + GDBusConnection *system_bus; + GDBusProxy *proxy; #endif /* HAVE_POLKIT */ }; @@ -46,7 +47,8 @@ cpufreq_selector_finalize (GObject *object) CPUFreqSelector *selector = CPUFREQ_SELECTOR (object); #ifdef HAVE_POLKIT - selector->system_bus = NULL; + g_clear_object (&selector->proxy); + g_clear_object (&selector->system_bus); #endif /* HAVE_POLKIT */ G_OBJECT_CLASS (cpufreq_selector_parent_class)->finalize (object); @@ -84,7 +86,7 @@ typedef enum { typedef struct { CPUFreqSelector *selector; - + CPUFreqSelectorCall call; guint cpu; @@ -94,9 +96,6 @@ typedef struct { guint32 parent_xid; } SelectorAsyncData; -static void selector_set_frequency_async (SelectorAsyncData *data); -static void selector_set_governor_async (SelectorAsyncData *data); - static void selector_async_data_free (SelectorAsyncData *data) { @@ -114,36 +113,52 @@ cpufreq_selector_connect_to_system_bus (CPUFreqSelector *selector, if (selector->system_bus) return TRUE; - selector->system_bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, error); + selector->system_bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, error); return (selector->system_bus != NULL); } + +static gboolean +cpufreq_selector_create_proxy (CPUFreqSelector *selector, + GError **error) +{ + if (selector->proxy) + return TRUE; + + selector->proxy = g_dbus_proxy_new_sync (selector->system_bus, + G_DBUS_PROXY_FLAGS_NONE, + NULL, + "org.mate.CPUFreqSelector", + "/org/mate/cpufreq_selector/selector", + "org.mate.CPUFreqSelector", + NULL, + error); + + return (selector->proxy != NULL); +} + static void -dbus_set_call_notify_cb (DBusGProxy *proxy, - DBusGProxyCall *call, - gpointer user_data) +selector_setter_cb (GObject *source, + GAsyncResult *result, + gpointer user_data) { - SelectorAsyncData *data; - GError *error = NULL; + GDBusProxy *proxy = G_DBUS_PROXY (source); + SelectorAsyncData *data = (SelectorAsyncData *)user_data; + GError *error = NULL; - data = (SelectorAsyncData *)user_data; - - if (dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID)) { - selector_async_data_free (data); - return; + g_dbus_proxy_call_finish (proxy, result, &error); + if (error != NULL) { + g_warning ("%s", error->message); + g_clear_error (&error); } - selector_async_data_free (data); - g_warning ("%s", error->message); - g_error_free (error); } static void selector_set_frequency_async (SelectorAsyncData *data) { - DBusGProxy *proxy; - GError *error = NULL; + GError *error = NULL; if (!cpufreq_selector_connect_to_system_bus (data->selector, &error)) { g_warning ("%s", error->message); @@ -154,19 +169,24 @@ selector_set_frequency_async (SelectorAsyncData *data) return; } - proxy = dbus_g_proxy_new_for_name (data->selector->system_bus, - "org.mate.CPUFreqSelector", - "/org/mate/cpufreq_selector/selector", - "org.mate.CPUFreqSelector"); - - dbus_g_proxy_begin_call_with_timeout (proxy, "SetFrequency", - dbus_set_call_notify_cb, - data, NULL, - INT_MAX, - G_TYPE_UINT, data->cpu, - G_TYPE_UINT, data->frequency, - G_TYPE_INVALID, - G_TYPE_INVALID); + if (!cpufreq_selector_create_proxy (data->selector, &error)) { + g_warning ("%s", error->message); + g_error_free (error); + + selector_async_data_free (data); + return; + } + + g_dbus_proxy_call (data->selector->proxy, + "SetFrequency", + g_variant_new ("(uu)", + data->cpu, + data->frequency), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + selector_setter_cb, + data); } void @@ -193,8 +213,7 @@ cpufreq_selector_set_frequency_async (CPUFreqSelector *selector, static void selector_set_governor_async (SelectorAsyncData *data) { - DBusGProxy *proxy; - GError *error = NULL; + GError *error = NULL; if (!cpufreq_selector_connect_to_system_bus (data->selector, &error)) { g_warning ("%s", error->message); @@ -205,19 +224,25 @@ selector_set_governor_async (SelectorAsyncData *data) return; } - proxy = dbus_g_proxy_new_for_name (data->selector->system_bus, - "org.mate.CPUFreqSelector", - "/org/mate/cpufreq_selector/selector", - "org.mate.CPUFreqSelector"); - - dbus_g_proxy_begin_call_with_timeout (proxy, "SetGovernor", - dbus_set_call_notify_cb, - data, NULL, - INT_MAX, - G_TYPE_UINT, data->cpu, - G_TYPE_STRING, data->governor, - G_TYPE_INVALID, - G_TYPE_INVALID); + if (!cpufreq_selector_create_proxy (data->selector, &error)) { + g_warning ("%s", error->message); + g_error_free (error); + + selector_async_data_free (data); + + return; + } + + g_dbus_proxy_call (data->selector->proxy, + "SetGovernor", + g_variant_new ("(us)", + data->cpu, + data->governor), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + selector_setter_cb, + data); } void diff --git a/cpufreq/src/cpufreq-utils.c b/cpufreq/src/cpufreq-utils.c index 3e3325ca..7dd358fa 100644 --- a/cpufreq/src/cpufreq-utils.c +++ b/cpufreq/src/cpufreq-utils.c @@ -33,7 +33,7 @@ #include "cpufreq-utils.h" #ifdef HAVE_POLKIT -#include +#include #endif /* HAVE_POLKIT */ guint @@ -45,7 +45,7 @@ cpufreq_utils_get_n_cpus (void) if (n_cpus > 0) return n_cpus; - + do { if (file) g_free (file); @@ -111,13 +111,14 @@ cpufreq_utils_display_error (const gchar *message, static gboolean selector_is_available (void) { - DBusGProxy *proxy; - static DBusGConnection *system_bus = NULL; + GDBusProxy *proxy; + static GDBusConnection *system_bus = NULL; GError *error = NULL; + GVariant *reply; gboolean result; if (!system_bus) { - system_bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); + system_bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error); if (!system_bus) { g_warning ("%s", error->message); g_error_free (error); @@ -126,18 +127,37 @@ selector_is_available (void) } } - proxy = dbus_g_proxy_new_for_name (system_bus, - "org.mate.CPUFreqSelector", - "/org/mate/cpufreq_selector/selector", - "org.mate.CPUFreqSelector"); + proxy = g_dbus_proxy_new_sync (system_bus, + G_DBUS_PROXY_FLAGS_NONE, + NULL, + "org.mate.CPUFreqSelector", + "/org/mate/cpufreq_selector/selector", + "org.mate.CPUFreqSelector", + NULL, + &error); + + if (!proxy) { + g_warning ("%s", error->message); + g_error_free (error); + + return FALSE; + } + + reply = g_dbus_proxy_call_sync (proxy, + "CanSet", + NULL, + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + &error); - if (!dbus_g_proxy_call (proxy, "CanSet", &error, - G_TYPE_INVALID, - G_TYPE_BOOLEAN, &result, - G_TYPE_INVALID)) { + if (!reply) { g_warning ("Error calling org.mate.CPUFreqSelector.CanSet: %s", error->message); g_error_free (error); result = FALSE; + } else { + g_variant_get (reply, "(b)", &result); + g_variant_unref (reply); } g_object_unref (proxy); -- cgit v1.2.1