[gnome-applets] cpufreq: simplify CPUFreqMonitor



commit 70195251c68b8b2bf5458abf408b04c27ca18535
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Tue Dec 6 22:25:09 2016 +0200

    cpufreq: simplify CPUFreqMonitor

 cpufreq/src/Makefile.am                  |    2 -
 cpufreq/src/cpufreq-applet.c             |    4 +-
 cpufreq/src/cpufreq-monitor-libcpufreq.c |  196 ----------
 cpufreq/src/cpufreq-monitor-libcpufreq.h |   55 ---
 cpufreq/src/cpufreq-monitor.c            |  615 +++++++++++++++---------------
 cpufreq/src/cpufreq-monitor.h            |   75 ++---
 6 files changed, 341 insertions(+), 606 deletions(-)
---
diff --git a/cpufreq/src/Makefile.am b/cpufreq/src/Makefile.am
index 69f234a..89d1074 100644
--- a/cpufreq/src/Makefile.am
+++ b/cpufreq/src/Makefile.am
@@ -39,8 +39,6 @@ libcpu_frequency_applet_la_SOURCES = \
        cpufreq-popup.h \
        cpufreq-monitor.c \
        cpufreq-monitor.h \
-       cpufreq-monitor-libcpufreq.c \
-       cpufreq-monitor-libcpufreq.h \
        $(NULL)
 
 libcpu_frequency_applet_la_LDFLAGS = \
diff --git a/cpufreq/src/cpufreq-applet.c b/cpufreq/src/cpufreq-applet.c
index 748b702..f7528de 100644
--- a/cpufreq/src/cpufreq-applet.c
+++ b/cpufreq/src/cpufreq-applet.c
@@ -33,7 +33,6 @@
 #include "cpufreq-prefs.h"
 #include "cpufreq-popup.h"
 #include "cpufreq-monitor.h"
-#include "cpufreq-monitor-libcpufreq.h"
 #include "cpufreq-utils.h"
 
 struct _CPUFreqApplet {
@@ -958,8 +957,7 @@ cpufreq_applet_setup (CPUFreqApplet *applet)
                           (gpointer) applet);
 
         /* Monitor */
-        applet->monitor = cpufreq_monitor_libcpufreq_new (
-                cpufreq_prefs_get_cpu (applet->prefs));
+        applet->monitor = cpufreq_monitor_new (cpufreq_prefs_get_cpu (applet->prefs));
         cpufreq_monitor_run (applet->monitor);
         g_signal_connect_swapped (G_OBJECT (applet->monitor), "changed",
                                   G_CALLBACK (cpufreq_applet_update),
diff --git a/cpufreq/src/cpufreq-monitor.c b/cpufreq/src/cpufreq-monitor.c
index 7a633f8..36fbb4e 100644
--- a/cpufreq/src/cpufreq-monitor.c
+++ b/cpufreq/src/cpufreq-monitor.c
@@ -1,193 +1,230 @@
 /*
- * GNOME CPUFreq Applet
- * Copyright (C) 2004 Carlos Garcia Campos <carlosgc gnome org>
+ * Copyright (C) 2004 Carlos García Campos
+ * Copyright (C) 2016 Alberts Muktupāvels
  *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public
- *  License as published by the Free Software Foundation; either
- *  version 2 of the License, or (at your option) any later version.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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
- *  General Public License for more details.
+ * This program 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
  *
- * Authors : Carlos García Campos <carlosgc gnome org>
+ * Authors:
+ *     Alberts Muktupāvels <alberts muktupavels gmail com>
+ *     Carlos García Campos <carlosgc gnome org>
  */
 
-#include "cpufreq-monitor.h"
+#include "config.h"
+
+#include <cpufreq.h>
+#include <stdlib.h>
 
-#define CPUFREQ_MONITOR_GET_PRIVATE(obj) \
-        (G_TYPE_INSTANCE_GET_PRIVATE((obj), CPUFREQ_TYPE_MONITOR, CPUFreqMonitorPrivate))
+#include "cpufreq-monitor.h"
 
 #define CPUFREQ_MONITOR_INTERVAL 1
 
-/* Properties */
-enum {
-        PROP_0,
-        PROP_CPU,
-        PROP_ONLINE,
-        PROP_FREQUENCY,
-        PROP_MAX_FREQUENCY,
-        PROP_GOVERNOR
+typedef struct cpufreq_policy                CPUFreqPolicy;
+typedef struct cpufreq_available_frequencies CPUFreqFrequencyList;
+typedef struct cpufreq_available_governors   CPUFreqGovernorList;
+
+struct _CPUFreqMonitor
+{
+  GObject   parent;
+
+  guint     cpu;
+  gboolean  online;
+  gint      cur_freq;
+  gint      max_freq;
+  gchar    *governor;
+  GList    *available_freqs;
+  GList    *available_govs;
+  guint     timeout_handler;
+
+  gboolean  changed;
 };
 
-/* Signals */
-enum {
-        SIGNAL_CHANGED,
-        N_SIGNALS
+enum
+{
+  PROP_0,
+  PROP_CPU,
 };
 
-struct _CPUFreqMonitorPrivate {
-        guint    cpu;
-        gboolean online;
-        gint     cur_freq;
-        gint     max_freq;
-        gchar   *governor;
-        GList   *available_freqs;
-        GList   *available_govs;
-        guint    timeout_handler;
-
-        gboolean changed;
+enum
+{
+  SIGNAL_CHANGED,
+  N_SIGNALS
 };
 
-static void   cpufreq_monitor_finalize     (GObject             *object);
+static guint signals[N_SIGNALS];
 
-static void   cpufreq_monitor_set_property (GObject             *object,
-                                            guint                prop_id,
-                                            const GValue        *value,
-                                            GParamSpec          *spec);
-static void   cpufreq_monitor_get_property (GObject             *object,
-                                            guint                prop_id,
-                                            GValue              *value,
-                                            GParamSpec          *spec);
+G_DEFINE_TYPE (CPUFreqMonitor, cpufreq_monitor, G_TYPE_OBJECT)
 
-static guint signals[N_SIGNALS];
+static gboolean
+monitor_run (CPUFreqMonitor *monitor)
+{
+  CPUFreqPolicy *policy;
+  gint freq;
+
+  policy = cpufreq_get_policy (monitor->cpu);
+
+  if (!policy)
+    {
+      /* Check whether it failed because cpu is not online. */
+      if (!cpufreq_cpu_exists (monitor->cpu))
+        {
+          monitor->online = FALSE;
+          return TRUE;
+        }
 
-G_DEFINE_ABSTRACT_TYPE (CPUFreqMonitor, cpufreq_monitor, G_TYPE_OBJECT)
+      return FALSE;
+    }
 
-static void
-cpufreq_monitor_init (CPUFreqMonitor *monitor)
+  monitor->online = TRUE;
+
+  freq = cpufreq_get_freq_kernel (monitor->cpu);
+  if (freq != monitor->cur_freq)
+    {
+      monitor->cur_freq = freq;
+      monitor->changed = TRUE;
+    }
+
+  if (monitor->governor)
+    {
+      if (g_ascii_strcasecmp (monitor->governor, policy->governor) != 0)
+        {
+          g_free (monitor->governor);
+
+          monitor->governor = g_strdup (policy->governor);
+          monitor->changed = TRUE;
+        }
+    }
+  else
+    {
+      monitor->governor = g_strdup (policy->governor);
+      monitor->changed = TRUE;
+    }
+
+  return TRUE;
+}
+
+static gboolean
+cpufreq_monitor_run_cb (gpointer user_data)
 {
-        monitor->priv = CPUFREQ_MONITOR_GET_PRIVATE (monitor);
+  CPUFreqMonitor *monitor;
+  gboolean retval;
 
-        monitor->priv->governor = NULL;
-        monitor->priv->available_freqs = NULL;
-        monitor->priv->available_govs = NULL;
-        monitor->priv->timeout_handler = 0;
+  monitor = CPUFREQ_MONITOR (user_data);
+  retval = monitor_run (monitor);
 
-        monitor->priv->changed = FALSE;
+  if (monitor->changed)
+    {
+      g_signal_emit (monitor, signals[SIGNAL_CHANGED], 0);
+      monitor->changed = FALSE;
+    }
+
+  return retval;
+}
+
+static gint
+compare (gconstpointer a,
+         gconstpointer b)
+{
+  gint aa;
+  gint bb;
+
+  aa = atoi ((gchar *) a);
+  bb = atoi ((gchar *) b);
+
+  if (aa == bb)
+    return 0;
+  else if (aa > bb)
+    return -1;
+  else
+    return 1;
 }
 
 static void
-cpufreq_monitor_class_init (CPUFreqMonitorClass *klass)
+cpufreq_monitor_constructed (GObject *object)
 {
-        GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-        object_class->set_property = cpufreq_monitor_set_property;
-        object_class->get_property = cpufreq_monitor_get_property;
-
-        /* Public virtual methods */
-        klass->run = NULL;
-        klass->get_available_frequencies = NULL;
-        klass->get_available_governors = NULL;
-
-        g_type_class_add_private (klass, sizeof (CPUFreqMonitorPrivate));
-        
-        /* Porperties */
-        g_object_class_install_property (object_class,
-                                         PROP_CPU,
-                                         g_param_spec_uint ("cpu",
-                                                            "CPU",
-                                                            "The cpu to monitor",
-                                                            0, 
-                                                            G_MAXUINT,
-                                                            0, 
-                                                            G_PARAM_CONSTRUCT |
-                                                            G_PARAM_READWRITE));
-        g_object_class_install_property (object_class,
-                                         PROP_ONLINE,
-                                         g_param_spec_boolean ("online",
-                                                               "Online",
-                                                               "Whether cpu is online",
-                                                               TRUE,
-                                                               G_PARAM_READWRITE));
-        g_object_class_install_property (object_class,
-                                         PROP_FREQUENCY,
-                                         g_param_spec_int ("frequency",
-                                                           "Frequency",
-                                                           "The current cpu frequency",
-                                                           0, 
-                                                           G_MAXINT,
-                                                           0,
-                                                           G_PARAM_READWRITE));
-        g_object_class_install_property (object_class,
-                                         PROP_MAX_FREQUENCY,
-                                         g_param_spec_int ("max-frequency",
-                                                           "MaxFrequency",
-                                                           "The max cpu frequency",
-                                                           0,
-                                                           G_MAXINT,
-                                                           0,
-                                                           G_PARAM_READWRITE));
-        g_object_class_install_property (object_class,
-                                         PROP_GOVERNOR,
-                                         g_param_spec_string ("governor",
-                                                              "Governor",
-                                                              "The current cpufreq governor",
-                                                              NULL,
-                                                              G_PARAM_READWRITE));
-
-        /* Signals */
-        signals[SIGNAL_CHANGED] =
-                g_signal_new ("changed",
-                              G_TYPE_FROM_CLASS (klass),
-                              G_SIGNAL_RUN_LAST,
-                              G_STRUCT_OFFSET (CPUFreqMonitorClass, changed),
-                              NULL, NULL,
-                              g_cclosure_marshal_VOID__VOID,
-                              G_TYPE_NONE, 0);
-           
-        object_class->finalize = cpufreq_monitor_finalize;
+  CPUFreqMonitor *monitor;
+  gulong max_freq;
+  gulong min_freq;
+
+  monitor = CPUFREQ_MONITOR (object);
+
+  G_OBJECT_CLASS (cpufreq_monitor_parent_class)->constructed (object);
+
+  if (cpufreq_get_hardware_limits (monitor->cpu, &min_freq, &max_freq) != 0)
+    {
+      g_warning ("Error getting CPUINFO_MAX");
+      max_freq = -1;
+    }
+
+  monitor->max_freq = max_freq;
 }
 
 static void
 cpufreq_monitor_finalize (GObject *object)
 {
-        CPUFreqMonitor *monitor = CPUFREQ_MONITOR (object);
-
-        monitor->priv->online = FALSE;
-        
-        if (monitor->priv->timeout_handler > 0) {
-                g_source_remove (monitor->priv->timeout_handler);
-                monitor->priv->timeout_handler = 0;
-        }
+  CPUFreqMonitor *monitor;
+
+  monitor = CPUFREQ_MONITOR (object);
+
+  if (monitor->timeout_handler > 0)
+    {
+      g_source_remove (monitor->timeout_handler);
+      monitor->timeout_handler = 0;
+    }
+
+  if (monitor->governor)
+    {
+      g_free (monitor->governor);
+      monitor->governor = NULL;
+    }
+
+  if (monitor->available_freqs)
+    {
+      g_list_foreach (monitor->available_freqs, (GFunc) g_free, NULL);
+      g_list_free (monitor->available_freqs);
+      monitor->available_freqs = NULL;
+    }
+
+  if (monitor->available_govs)
+    {
+      g_list_foreach (monitor->available_govs, (GFunc) g_free, NULL);
+      g_list_free (monitor->available_govs);
+      monitor->available_govs = NULL;
+    }
+
+  G_OBJECT_CLASS (cpufreq_monitor_parent_class)->finalize (object);
+}
 
-        if (monitor->priv->governor) {
-                g_free (monitor->priv->governor);
-                monitor->priv->governor = NULL;
-        }
+static void
+cpufreq_monitor_get_property (GObject    *object,
+                              guint       prop_id,
+                              GValue     *value,
+                              GParamSpec *spec)
+{
+  CPUFreqMonitor *monitor;
 
-        if (monitor->priv->available_freqs) {
-                g_list_foreach (monitor->priv->available_freqs,
-                                (GFunc) g_free,
-                                NULL);
-                g_list_free (monitor->priv->available_freqs);
-                monitor->priv->available_freqs = NULL;
-        }
+  monitor = CPUFREQ_MONITOR (object);
 
-        if (monitor->priv->available_govs) {
-                g_list_foreach (monitor->priv->available_govs,
-                                (GFunc) g_free,
-                                NULL);
-                g_list_free (monitor->priv->available_govs);
-                monitor->priv->available_govs = NULL;
-        }
+  switch (prop_id)
+    {
+      case PROP_CPU:
+        g_value_set_uint (value, monitor->cpu);
+        break;
 
-        G_OBJECT_CLASS (cpufreq_monitor_parent_class)->finalize (object);
+      default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, spec);
+        break;
+    }
 }
 
 static void
@@ -196,213 +233,183 @@ cpufreq_monitor_set_property (GObject      *object,
                               const GValue *value,
                               GParamSpec   *spec)
 {
-        CPUFreqMonitor *monitor;
+  CPUFreqMonitor *monitor;
 
-        monitor = CPUFREQ_MONITOR (object);
+  monitor = CPUFREQ_MONITOR (object);
 
-        switch (prop_id) {
-        case PROP_CPU: {
-                guint cpu = g_value_get_uint (value);
+  switch (prop_id)
+    {
+      case PROP_CPU:
+        cpufreq_monitor_set_cpu (monitor, g_value_get_uint (value));
+        break;
 
-                if (cpu != monitor->priv->cpu) {
-                        monitor->priv->cpu = cpu;
-                        monitor->priv->changed = TRUE;
-                }
-        }
-                break;
-        case PROP_ONLINE:
-                monitor->priv->online = g_value_get_boolean (value);
-
-                break;
-        case PROP_FREQUENCY: {
-                gint freq = g_value_get_int (value);
-
-                if (freq != monitor->priv->cur_freq) {
-                        monitor->priv->cur_freq = freq;
-                        monitor->priv->changed = TRUE;
-                }
-        }
-                break;
-        case PROP_MAX_FREQUENCY: {
-                gint freq = g_value_get_int (value);
-
-                if (freq != monitor->priv->max_freq) {
-                        monitor->priv->max_freq = freq;
-                        monitor->priv->changed = TRUE;
-                }
-        }
-                break;
-        case PROP_GOVERNOR: {
-                const gchar *gov = g_value_get_string (value);
-
-                if (monitor->priv->governor) {
-                        if (g_ascii_strcasecmp (gov, monitor->priv->governor) != 0) {
-                                g_free (monitor->priv->governor);
-                                monitor->priv->governor = gov ? g_strdup (gov) : NULL;
-                                monitor->priv->changed = TRUE;
-                        }
-                } else {
-                        monitor->priv->governor = gov ? g_strdup (gov) : NULL;
-                        monitor->priv->changed = TRUE;
-                }
-        }
-                break;
-        default:
-                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, spec);
-                break;
-        }
+      default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, spec);
+        break;
+    }
 }
 
 static void
-cpufreq_monitor_get_property (GObject    *object,
-                              guint       prop_id,
-                              GValue     *value,
-                              GParamSpec *spec)
+cpufreq_monitor_class_init (CPUFreqMonitorClass *monitor_class)
 {
-        CPUFreqMonitor *monitor;
-
-        monitor = CPUFREQ_MONITOR (object);
-
-        switch (prop_id) {
-        case PROP_CPU:
-                g_value_set_uint (value, monitor->priv->cpu);
-                break;
-        case PROP_ONLINE:
-                g_value_set_boolean (value, monitor->priv->online);
-                break;
-        case PROP_FREQUENCY:
-                g_value_set_int (value, monitor->priv->cur_freq);
-                break;
-        case PROP_MAX_FREQUENCY:
-                g_value_set_int (value, monitor->priv->max_freq);
-                break;
-        case PROP_GOVERNOR:
-                g_value_set_string (value, monitor->priv->governor);
-                break;
-        default:
-                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, spec);
-                break;
-        }
-}
+  GObjectClass *object_class;
 
-static gboolean
-cpufreq_monitor_run_cb (CPUFreqMonitor *monitor)
-{
-        CPUFreqMonitorClass *class;
-        gboolean             retval = FALSE;
+  object_class = G_OBJECT_CLASS (monitor_class);
 
-        class = CPUFREQ_MONITOR_GET_CLASS (monitor);
-        
-        if (class->run)
-                retval = class->run (monitor);
+  object_class->constructed = cpufreq_monitor_constructed;
+  object_class->finalize = cpufreq_monitor_finalize;
+  object_class->get_property = cpufreq_monitor_get_property;
+  object_class->set_property = cpufreq_monitor_set_property;
 
-        if (monitor->priv->changed) {
-                g_signal_emit (monitor, signals[SIGNAL_CHANGED], 0);
-                monitor->priv->changed = FALSE;
-        }
+  signals[SIGNAL_CHANGED] =
+    g_signal_new ("changed", G_TYPE_FROM_CLASS (monitor_class),
+                  G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0);
 
-        return retval;
+  g_object_class_install_property (object_class, PROP_CPU,
+                                   g_param_spec_uint ("cpu", "", "",
+                                                      0, G_MAXUINT, 0,
+                                                      G_PARAM_CONSTRUCT |
+                                                      G_PARAM_READWRITE));
+}
+
+static void
+cpufreq_monitor_init (CPUFreqMonitor *monitor)
+{
+}
+
+CPUFreqMonitor *
+cpufreq_monitor_new (guint cpu)
+{
+  return g_object_new (CPUFREQ_TYPE_MONITOR, "cpu", cpu, NULL);
 }
 
 void
 cpufreq_monitor_run (CPUFreqMonitor *monitor)
 {
-        g_return_if_fail (CPUFREQ_IS_MONITOR (monitor));
+  g_return_if_fail (CPUFREQ_IS_MONITOR (monitor));
 
-        if (monitor->priv->timeout_handler > 0)
-                return;
+  if (monitor->timeout_handler > 0)
+    return;
 
-        monitor->priv->timeout_handler =
-                g_timeout_add_seconds (CPUFREQ_MONITOR_INTERVAL,
-                               (GSourceFunc) cpufreq_monitor_run_cb,
-                               (gpointer) monitor);
+  monitor->timeout_handler = g_timeout_add_seconds (CPUFREQ_MONITOR_INTERVAL,
+                                                    cpufreq_monitor_run_cb,
+                                                    monitor);
 }
 
 GList *
 cpufreq_monitor_get_available_frequencies (CPUFreqMonitor *monitor)
 {
-        CPUFreqMonitorClass *class;
-        
-        g_return_val_if_fail (CPUFREQ_IS_MONITOR (monitor), NULL);
-
-        if (!monitor->priv->online)
-                return NULL;
-        
-        if (monitor->priv->available_freqs)
-                return monitor->priv->available_freqs;
-
-        class = CPUFREQ_MONITOR_GET_CLASS (monitor);
-        
-        if (class->get_available_frequencies) {
-                monitor->priv->available_freqs = class->get_available_frequencies (monitor);
+  CPUFreqFrequencyList *freqs;
+  CPUFreqFrequencyList *freq;
+
+  g_return_val_if_fail (CPUFREQ_IS_MONITOR (monitor), NULL);
+
+  if (!monitor->online)
+    return NULL;
+
+  if (monitor->available_freqs)
+    return monitor->available_freqs;
+
+  freqs = cpufreq_get_available_frequencies (monitor->cpu);
+
+  if (!freqs)
+    return NULL;
+
+  for (freq = freqs; freq; freq = freq->next)
+    {
+      gchar *frequency;
+
+      frequency = g_strdup_printf ("%lu", freq->frequency);
+
+      if (!g_list_find_custom (monitor->available_freqs, frequency, compare))
+        {
+          monitor->available_freqs = g_list_prepend (monitor->available_freqs,
+                                                     g_strdup (frequency));
         }
 
-        return monitor->priv->available_freqs;
+      g_free (frequency);
+    }
+
+  monitor->available_freqs = g_list_sort (monitor->available_freqs, compare);
+  cpufreq_put_available_frequencies (freqs);
+
+  return monitor->available_freqs;
 }
 
 GList *
 cpufreq_monitor_get_available_governors (CPUFreqMonitor *monitor)
 {
-        CPUFreqMonitorClass *class;
-        
-        g_return_val_if_fail (CPUFREQ_IS_MONITOR (monitor), NULL);
-
-        if (!monitor->priv->online)
-                return NULL;
-        
-        if (monitor->priv->available_govs)
-                return monitor->priv->available_govs;
-
-        class = CPUFREQ_MONITOR_GET_CLASS (monitor);
-        
-        if (class->get_available_governors) {
-                monitor->priv->available_govs = class->get_available_governors (monitor);
-        }
+  CPUFreqGovernorList *govs;
+  CPUFreqGovernorList *gov;
+
+  g_return_val_if_fail (CPUFREQ_IS_MONITOR (monitor), NULL);
+
+  if (!monitor->online)
+    return NULL;
+
+  if (monitor->available_govs)
+    return monitor->available_govs;
+
+  govs = cpufreq_get_available_governors (monitor->cpu);
+
+  if (!govs)
+    return NULL;
 
-        return monitor->priv->available_govs;
+  for (gov = govs; gov; gov = gov->next)
+    {
+      monitor->available_govs = g_list_prepend (monitor->available_govs,
+                                                g_strdup (gov->governor));
+    }
+
+  cpufreq_put_available_governors (govs);
+
+  return monitor->available_govs;
 }
 
 guint
 cpufreq_monitor_get_cpu (CPUFreqMonitor *monitor)
 {
-        g_return_val_if_fail (CPUFREQ_IS_MONITOR (monitor), 0);
+  g_return_val_if_fail (CPUFREQ_IS_MONITOR (monitor), 0);
 
-        return monitor->priv->cpu;
+  return monitor->cpu;
 }
 
 void
-cpufreq_monitor_set_cpu (CPUFreqMonitor *monitor, guint cpu)
+cpufreq_monitor_set_cpu (CPUFreqMonitor *monitor,
+                         guint           cpu)
 {
-        g_return_if_fail (CPUFREQ_IS_MONITOR (monitor));
+  g_return_if_fail (CPUFREQ_IS_MONITOR (monitor));
 
-        g_object_set (G_OBJECT (monitor),
-                      "cpu", cpu, NULL);
+  if (cpu != monitor->cpu)
+    {
+      monitor->cpu = cpu;
+      monitor->changed = TRUE;
+    }
 }
 
-gint
-cpufreq_monitor_get_frequency (CPUFreqMonitor *monitor)
+const gchar *
+cpufreq_monitor_get_governor (CPUFreqMonitor *monitor)
 {
-        g_return_val_if_fail (CPUFREQ_IS_MONITOR (monitor), -1);
+  g_return_val_if_fail (CPUFREQ_IS_MONITOR (monitor), NULL);
 
-        return monitor->priv->cur_freq;
+  return monitor->governor;
 }
 
-const gchar *
-cpufreq_monitor_get_governor (CPUFreqMonitor *monitor)
+gint
+cpufreq_monitor_get_frequency (CPUFreqMonitor *monitor)
 {
-        g_return_val_if_fail (CPUFREQ_IS_MONITOR (monitor), NULL);
+  g_return_val_if_fail (CPUFREQ_IS_MONITOR (monitor), -1);
 
-        return monitor->priv->governor;
+  return monitor->cur_freq;
 }
 
 gint
 cpufreq_monitor_get_percentage (CPUFreqMonitor *monitor)
 {
-        g_return_val_if_fail (CPUFREQ_IS_MONITOR (monitor), -1);
+  g_return_val_if_fail (CPUFREQ_IS_MONITOR (monitor), -1);
 
-        if (monitor->priv->max_freq > 0) {
-                return ((monitor->priv->cur_freq * 100) / monitor->priv->max_freq);
-        }
+  if (monitor->max_freq > 0)
+    return ((monitor->cur_freq * 100) / monitor->max_freq);
 
-        return -1;
+  return -1;
 }
diff --git a/cpufreq/src/cpufreq-monitor.h b/cpufreq/src/cpufreq-monitor.h
index 19fd48f..1a3f60a 100644
--- a/cpufreq/src/cpufreq-monitor.h
+++ b/cpufreq/src/cpufreq-monitor.h
@@ -1,71 +1,54 @@
 /*
- * GNOME CPUFreq Applet
- * Copyright (C) 2004 Carlos Garcia Campos <carlosgc gnome org>
+ * Copyright (C) 2004 Carlos García Campos
+ * Copyright (C) 2016 Alberts Muktupāvels
  *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public
- *  License as published by the Free Software Foundation; either
- *  version 2 of the License, or (at your option) any later version.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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
- *  General Public License for more details.
+ * This program 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 General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
  *
- * Authors : Carlos García Campos <carlosgc gnome org>
+ * Authors:
+ *     Alberts Muktupāvels <alberts muktupavels gmail com>
+ *     Carlos García Campos <carlosgc gnome org>
  */
 
-#ifndef __CPUFREQ_MONITOR_H__
-#define __CPUFREQ_MONITOR_H__
+#ifndef CPUFREQ_MONITOR_H
+#define CPUFREQ_MONITOR_H
 
 #include <glib-object.h>
 
 G_BEGIN_DECLS
 
-#define CPUFREQ_TYPE_MONITOR            (cpufreq_monitor_get_type ())
-#define CPUFREQ_MONITOR(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), CPUFREQ_TYPE_MONITOR, 
CPUFreqMonitor))
-#define CPUFREQ_MONITOR_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), CPUFREQ_TYPE_MONITOR, 
CPUFreqMonitorClass))
-#define CPUFREQ_IS_MONITOR(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CPUFREQ_TYPE_MONITOR))
-#define CPUFREQ_IS_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CPUFREQ_TYPE_MONITOR))
-#define CPUFREQ_MONITOR_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), CPUFREQ_TYPE_MONITOR, 
CPUFreqMonitorClass))
+#define CPUFREQ_TYPE_MONITOR cpufreq_monitor_get_type ()
+G_DECLARE_FINAL_TYPE (CPUFreqMonitor, cpufreq_monitor, CPUFREQ, MONITOR, GObject)
 
-typedef struct _CPUFreqMonitor        CPUFreqMonitor;
-typedef struct _CPUFreqMonitorClass   CPUFreqMonitorClass;
-typedef struct _CPUFreqMonitorPrivate CPUFreqMonitorPrivate;
+CPUFreqMonitor *cpufreq_monitor_new                       (guint           cpu);
 
-struct _CPUFreqMonitor {
-        GObject parent;
+void            cpufreq_monitor_run                       (CPUFreqMonitor *monitor);
 
-        CPUFreqMonitorPrivate *priv;
-};
+GList          *cpufreq_monitor_get_available_frequencies (CPUFreqMonitor *monitor);
 
-struct _CPUFreqMonitorClass {
-        GObjectClass parent_class;
+GList          *cpufreq_monitor_get_available_governors   (CPUFreqMonitor *monitor);
 
-        gboolean  (* run)                       (CPUFreqMonitor *monitor);
-        GList    *(* get_available_frequencies) (CPUFreqMonitor *monitor);
-        GList    *(* get_available_governors)   (CPUFreqMonitor *monitor);
+guint           cpufreq_monitor_get_cpu                   (CPUFreqMonitor *monitor);
 
-        /*< signals >*/
-        void      (* changed)                   (CPUFreqMonitor *monitor);
-};
+void            cpufreq_monitor_set_cpu                   (CPUFreqMonitor *monitor,
+                                                           guint           cpu);
 
-GType        cpufreq_monitor_get_type                  (void) G_GNUC_CONST;
+const gchar    *cpufreq_monitor_get_governor              (CPUFreqMonitor *monitor);
 
-void         cpufreq_monitor_run                       (CPUFreqMonitor *monitor);
-GList       *cpufreq_monitor_get_available_frequencies (CPUFreqMonitor *monitor);
-GList       *cpufreq_monitor_get_available_governors   (CPUFreqMonitor *monitor);
+gint            cpufreq_monitor_get_frequency             (CPUFreqMonitor *monitor);
 
-guint        cpufreq_monitor_get_cpu                   (CPUFreqMonitor *monitor);
-void         cpufreq_monitor_set_cpu                   (CPUFreqMonitor *monitor,
-                                                       guint           cpu);
-const gchar *cpufreq_monitor_get_governor              (CPUFreqMonitor *monitor);
-gint         cpufreq_monitor_get_frequency             (CPUFreqMonitor *monitor);
-gint         cpufreq_monitor_get_percentage            (CPUFreqMonitor *monitor);
+gint            cpufreq_monitor_get_percentage            (CPUFreqMonitor *monitor);
 
 G_END_DECLS
 
-#endif /* __CPUFREQ_MONITOR_H__ */
+#endif


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]