diff --git a/cpufreq/data/cpufreq-preferences.ui b/cpufreq/data/cpufreq-preferences.ui
index f155f73ed..ed3430af8 100644
--- a/cpufreq/data/cpufreq-preferences.ui
+++ b/cpufreq/data/cpufreq-preferences.ui
@@ -228,6 +228,47 @@
2
+
+
+
+ False
+ True
+ 3
+
+
Show CPU frequency as _percentage
@@ -242,7 +283,7 @@
False
True
- 3
+ 4
diff --git a/cpufreq/data/org.mate.panel.applet.cpufreq.gschema.xml.in b/cpufreq/data/org.mate.panel.applet.cpufreq.gschema.xml.in
index 694a75f7d..a25ca2259 100644
--- a/cpufreq/data/org.mate.panel.applet.cpufreq.gschema.xml.in
+++ b/cpufreq/data/org.mate.panel.applet.cpufreq.gschema.xml.in
@@ -1,6 +1,6 @@
-
+
0
CPU to Monitor
@@ -16,5 +16,12 @@
The type of text to display (if the text is enabled).
A 0 value means to show CPU frequency, 1 to show frequency and units, and 2 to show percentage instead of frequency.
+
+ 2
+ Decimal places for frequency display
+
+ How many decimal digits to display for the CPU frequency.
+
+
diff --git a/cpufreq/src/cpufreq-applet.c b/cpufreq/src/cpufreq-applet.c
index b1509eaab..d731dab82 100644
--- a/cpufreq/src/cpufreq-applet.c
+++ b/cpufreq/src/cpufreq-applet.c
@@ -630,6 +630,7 @@ cpufreq_applet_update (CPUFreqApplet *applet,
gint freq;
gint perc;
guint cpu;
+ guint decimal_places;
GtkRequisition req;
const gchar *governor;
@@ -637,8 +638,8 @@ cpufreq_applet_update (CPUFreqApplet *applet,
freq = cpufreq_monitor_get_frequency (monitor);
perc = cpufreq_monitor_get_percentage (monitor);
governor = cpufreq_monitor_get_governor (monitor);
-
- freq_label = cpufreq_utils_get_frequency_label (freq);
+ decimal_places = cpufreq_monitor_get_decimal_places (monitor);
+ freq_label = cpufreq_utils_get_frequency_label (freq, decimal_places);
unit_label = cpufreq_utils_get_frequency_unit (freq);
if (applet->show_freq) {
@@ -678,6 +679,7 @@ cpufreq_applet_update (CPUFreqApplet *applet,
gov_text = g_strdup (governor);
gov_text[0] = g_ascii_toupper (gov_text[0]);
+ freq_label = cpufreq_utils_get_frequency_label (freq, MAX_DECIMAL_PLACES); // show max decimals in tooltip
text_mode = g_strdup_printf ("%s\n%s %s (%d%%)",
gov_text, freq_label,
unit_label, perc);
@@ -780,6 +782,15 @@ cpufreq_applet_prefs_show_mode_changed (CPUFreqPrefs *prefs,
cpufreq_applet_update_visibility (applet);
}
+static void
+cpufreq_applet_prefs_decimal_places_changed (CPUFreqPrefs *prefs,
+ GParamSpec *arg1,
+ CPUFreqApplet *applet)
+{
+ cpufreq_monitor_set_decimal_places (applet->monitor,
+ cpufreq_prefs_get_decimal_places (applet->prefs));
+}
+
static void
cpufreq_applet_setup (CPUFreqApplet *applet)
{
@@ -812,10 +823,16 @@ cpufreq_applet_setup (CPUFreqApplet *applet)
G_CALLBACK (cpufreq_applet_prefs_show_mode_changed),
applet);
+ g_signal_connect (applet->prefs, "notify::decimal-places",
+ G_CALLBACK (cpufreq_applet_prefs_decimal_places_changed),
+ applet);
+
/* Monitor */
applet->monitor =
cpufreq_monitor_factory_create_monitor (cpufreq_prefs_get_cpu (applet->prefs));
+ cpufreq_monitor_set_decimal_places (applet->monitor,
+ cpufreq_prefs_get_decimal_places (applet->prefs));
cpufreq_monitor_run (applet->monitor);
g_signal_connect_swapped (applet->monitor, "changed",
diff --git a/cpufreq/src/cpufreq-monitor.c b/cpufreq/src/cpufreq-monitor.c
index a0a2510f7..6f1b91e48 100644
--- a/cpufreq/src/cpufreq-monitor.c
+++ b/cpufreq/src/cpufreq-monitor.c
@@ -19,6 +19,7 @@
* Authors : Carlos GarcĂa Campos
*/
+#include "cpufreq-utils.h"
#include "cpufreq-monitor.h"
#define CPUFREQ_MONITOR_INTERVAL 1
@@ -30,7 +31,8 @@ enum {
PROP_ONLINE,
PROP_FREQUENCY,
PROP_MAX_FREQUENCY,
- PROP_GOVERNOR
+ PROP_GOVERNOR,
+ PROP_DECIMAL_PLACES
};
/* Signals */
@@ -44,6 +46,7 @@ struct _CPUFreqMonitorPrivate {
gboolean online;
gint cur_freq;
gint max_freq;
+ gint decimal_places;
gchar *governor;
GList *available_freqs;
GList *available_govs;
@@ -129,6 +132,16 @@ cpufreq_monitor_class_init (CPUFreqMonitorClass *klass)
G_MAXINT,
0,
G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_DECIMAL_PLACES,
+ g_param_spec_int ("decimal-places",
+ "Decimal Places",
+ "The number of decimal places to show for the cpu frequency",
+ 0,
+ MAX_DECIMAL_PLACES,
+ MAX_DECIMAL_PLACES,
+ G_PARAM_CONSTRUCT |
+ G_PARAM_READWRITE));
g_object_class_install_property (object_class,
PROP_GOVERNOR,
g_param_spec_string ("governor",
@@ -222,6 +235,15 @@ cpufreq_monitor_set_property (GObject *object,
}
break;
}
+ case PROP_DECIMAL_PLACES: {
+ gint decimal_places = g_value_get_int (value);
+
+ if (decimal_places != monitor->priv->decimal_places) {
+ monitor->priv->decimal_places = decimal_places;
+ monitor->priv->changed = TRUE;
+ }
+ break;
+ }
case PROP_GOVERNOR: {
const gchar *gov = g_value_get_string (value);
@@ -265,6 +287,9 @@ cpufreq_monitor_get_property (GObject *object,
case PROP_MAX_FREQUENCY:
g_value_set_int (value, monitor->priv->max_freq);
break;
+ case PROP_DECIMAL_PLACES:
+ g_value_set_int (value, monitor->priv->decimal_places);
+ break;
case PROP_GOVERNOR:
g_value_set_string (value, monitor->priv->governor);
break;
@@ -393,3 +418,20 @@ cpufreq_monitor_get_percentage (CPUFreqMonitor *monitor)
return -1;
}
+
+gint
+cpufreq_monitor_get_decimal_places (CPUFreqMonitor *monitor)
+{
+ g_return_val_if_fail (CPUFREQ_IS_MONITOR (monitor), -1);
+
+ return monitor->priv->decimal_places;
+}
+
+void
+cpufreq_monitor_set_decimal_places (CPUFreqMonitor *monitor, gint decimal_places)
+{
+ g_return_if_fail (CPUFREQ_IS_MONITOR (monitor));
+
+ g_object_set (G_OBJECT (monitor),
+ "decimal-places", decimal_places, NULL);
+}
diff --git a/cpufreq/src/cpufreq-monitor.h b/cpufreq/src/cpufreq-monitor.h
index 9499707fa..0c7f312da 100644
--- a/cpufreq/src/cpufreq-monitor.h
+++ b/cpufreq/src/cpufreq-monitor.h
@@ -66,6 +66,8 @@ void cpufreq_monitor_set_cpu (CPUFreqMonitor *monitor,
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_decimal_places (CPUFreqMonitor *monitor);
+void cpufreq_monitor_set_decimal_places (CPUFreqMonitor *monitor, gint decimal_places);
G_END_DECLS
diff --git a/cpufreq/src/cpufreq-popup.c b/cpufreq/src/cpufreq-popup.c
index 456a60a6b..71b893d01 100644
--- a/cpufreq/src/cpufreq-popup.c
+++ b/cpufreq/src/cpufreq-popup.c
@@ -273,11 +273,14 @@ frequencies_menu_create_actions (CPUFreqPopup *popup)
gchar *label;
gchar *unit;
gint freq;
+ gint decimal_places = 2;
text = (const gchar *) available_freqs->data;
freq = atoi (text);
- freq_text = cpufreq_utils_get_frequency_label (freq);
+ // decimal_places = cpufreq_monitor_get_decimal_places (popup->priv->monitor);
+ // ^^^ if you want the freq selector to also use the same number of decimal places as for display
+ freq_text = cpufreq_utils_get_frequency_label (freq, decimal_places);
unit = cpufreq_utils_get_frequency_unit (freq);
label = g_strdup_printf ("%s %s", freq_text, unit);
diff --git a/cpufreq/src/cpufreq-prefs.c b/cpufreq/src/cpufreq-prefs.c
index c767861ed..0f41b49b1 100644
--- a/cpufreq/src/cpufreq-prefs.c
+++ b/cpufreq/src/cpufreq-prefs.c
@@ -35,6 +35,7 @@ enum {
PROP_CPU,
PROP_SHOW_MODE,
PROP_SHOW_TEXT_MODE,
+ PROP_DECIMAL_PLACES,
};
struct _CPUFreqPrefsPrivate {
@@ -43,6 +44,7 @@ struct _CPUFreqPrefsPrivate {
guint cpu;
CPUFreqShowMode show_mode;
CPUFreqShowTextMode show_text_mode;
+ guint decimal_places;
/* Preferences dialog */
GtkWidget *dialog;
@@ -52,6 +54,8 @@ struct _CPUFreqPrefsPrivate {
GtkWidget *cpu_combo;
GtkWidget *monitor_settings_frame;
GtkWidget *show_mode_combo;
+ GtkWidget *decimal_places_combo;
+ GtkWidget *decimal_places_label;
};
static void cpufreq_prefs_finalize (GObject *object);
@@ -114,6 +118,15 @@ cpufreq_prefs_class_init (CPUFreqPrefsClass *klass)
CPUFREQ_TYPE_SHOW_TEXT_MODE,
CPUFREQ_MODE_TEXT_FREQUENCY_UNIT,
G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ PROP_DECIMAL_PLACES,
+ g_param_spec_uint ("decimal-places",
+ "DecimalPlaces",
+ "The monitored cpu",
+ 0,
+ MAX_DECIMAL_PLACES,
+ MAX_DECIMAL_PLACES,
+ G_PARAM_READWRITE));
g_object_class->finalize = cpufreq_prefs_finalize;
}
@@ -181,6 +194,17 @@ cpufreq_prefs_set_property (GObject *object,
}
break;
}
+ case PROP_DECIMAL_PLACES: {
+ guint decimal_places;
+
+ decimal_places = g_value_get_uint (value);
+ if (prefs->priv->decimal_places != decimal_places) {
+ prefs->priv->decimal_places = decimal_places;
+ g_settings_set_int (prefs->priv->settings,
+ "decimal-places", decimal_places);
+ }
+ break;
+ }
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -207,6 +231,9 @@ cpufreq_prefs_get_property (GObject *object,
case PROP_SHOW_TEXT_MODE:
g_value_set_enum (value, prefs->priv->show_text_mode);
break;
+ case PROP_DECIMAL_PLACES:
+ g_value_set_uint (value, prefs->priv->decimal_places);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -220,6 +247,7 @@ cpufreq_prefs_setup (CPUFreqPrefs *prefs)
prefs->priv->cpu = g_settings_get_int (prefs->priv->settings, "cpu");
prefs->priv->show_mode = g_settings_get_int (prefs->priv->settings, "show-mode");
prefs->priv->show_text_mode = g_settings_get_int (prefs->priv->settings, "show-text-mode");
+ prefs->priv->decimal_places = g_settings_get_int (prefs->priv->settings, "decimal-places");
}
CPUFreqPrefs *
@@ -264,6 +292,14 @@ cpufreq_prefs_get_show_text_mode (CPUFreqPrefs *prefs)
return prefs->priv->show_text_mode;
}
+guint
+cpufreq_prefs_get_decimal_places (CPUFreqPrefs *prefs)
+{
+ g_return_val_if_fail (CPUFREQ_IS_PREFS (prefs), 0);
+
+ return MIN (prefs->priv->decimal_places, MAX_DECIMAL_PLACES);
+}
+
/* Preferences Dialog */
static void
cpufreq_prefs_dialog_show_freq_toggled (GtkWidget *show_freq,
@@ -334,6 +370,21 @@ cpufreq_prefs_dialog_cpu_number_changed (GtkWidget *cpu_combo,
}
}
+static void
+cpufreq_prefs_dialog_decimal_places_changed (GtkWidget *decimal_places_combo,
+ CPUFreqPrefs *prefs)
+{
+ gint decimal_places;
+
+ decimal_places = gtk_combo_box_get_active (GTK_COMBO_BOX (prefs->priv->decimal_places_combo));
+
+ if (decimal_places >= 0) {
+ g_object_set (G_OBJECT (prefs),
+ "decimal-places", decimal_places,
+ NULL);
+ }
+}
+
static void
cpufreq_prefs_dialog_show_mode_changed (GtkWidget *show_mode_combo,
CPUFreqPrefs *prefs)
@@ -396,17 +447,33 @@ cpufreq_prefs_dialog_update_sensitivity (CPUFreqPrefs *prefs)
(TRUE && key_writable));
gtk_widget_set_sensitive (prefs->priv->show_perc,
(TRUE && key_writable));
+ gtk_widget_set_sensitive (prefs->priv->decimal_places_combo,
+ (TRUE && key_writable));
+ gtk_widget_set_sensitive (prefs->priv->decimal_places_label,
+ (TRUE && key_writable));
- if (prefs->priv->show_text_mode == CPUFREQ_MODE_TEXT_PERCENTAGE)
+ if (prefs->priv->show_text_mode == CPUFREQ_MODE_TEXT_PERCENTAGE) {
gtk_widget_set_sensitive (prefs->priv->show_unit,
FALSE);
- else
+ gtk_widget_set_sensitive (prefs->priv->decimal_places_combo,
+ FALSE);
+ gtk_widget_set_sensitive (prefs->priv->decimal_places_label,
+ FALSE);
+ }
+ else {
gtk_widget_set_sensitive (prefs->priv->show_unit,
(TRUE && key_writable));
+ gtk_widget_set_sensitive (prefs->priv->decimal_places_combo,
+ (TRUE && key_writable));
+ gtk_widget_set_sensitive (prefs->priv->decimal_places_label,
+ (TRUE && key_writable));
+ }
} else {
gtk_widget_set_sensitive (prefs->priv->show_freq, FALSE);
gtk_widget_set_sensitive (prefs->priv->show_unit, FALSE);
gtk_widget_set_sensitive (prefs->priv->show_perc, FALSE);
+ gtk_widget_set_sensitive (prefs->priv->decimal_places_combo, FALSE);
+ gtk_widget_set_sensitive (prefs->priv->decimal_places_label, FALSE);
}
}
@@ -428,6 +495,8 @@ cpufreq_prefs_dialog_update (CPUFreqPrefs *prefs)
TRUE);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (prefs->priv->show_unit),
FALSE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (prefs->priv->decimal_places_combo),
+ FALSE);
break;
case CPUFREQ_MODE_TEXT_FREQUENCY_UNIT:
@@ -435,6 +504,8 @@ cpufreq_prefs_dialog_update (CPUFreqPrefs *prefs)
TRUE);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (prefs->priv->show_unit),
TRUE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (prefs->priv->decimal_places_combo),
+ TRUE);
break;
case CPUFREQ_MODE_TEXT_PERCENTAGE:
@@ -487,6 +558,74 @@ cpufreq_prefs_dialog_cpu_combo_setup (CPUFreqPrefs *prefs)
NULL);
}
+static void
+decimal_places_combo_changed_cb (GtkComboBox *combo, CPUFreqPrefs *prefs)
+{
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+
+ if (gtk_combo_box_get_active_iter (combo, &iter)) {
+ gint value;
+ model = gtk_combo_box_get_model (combo);
+ gtk_tree_model_get (model, &iter, 0, &value, -1);
+ g_settings_set_int (prefs->priv->settings, "decimal-places", value);
+ }
+}
+
+static void
+cpufreq_prefs_dialog_decimal_places_combo_setup (CPUFreqPrefs *prefs)
+{
+ GtkListStore *model;
+ GtkTreeIter iter;
+ GtkCellRenderer *renderer;
+ gint i;
+ gint current_decimal_places;
+
+ model = gtk_list_store_new (1, G_TYPE_INT);
+ gtk_combo_box_set_model (GTK_COMBO_BOX (prefs->priv->decimal_places_combo),
+ GTK_TREE_MODEL (model));
+
+ // Populate with 0, 1, 2...
+ for (i = 0; i <= MAX_DECIMAL_PLACES; i++) {
+ gtk_list_store_append (model, &iter);
+ gtk_list_store_set (model, &iter,
+ 0, i,
+ -1);
+ }
+
+ g_object_unref (model);
+
+ // Render numbers
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_clear (GTK_CELL_LAYOUT (prefs->priv->decimal_places_combo));
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (prefs->priv->decimal_places_combo),
+ renderer, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (prefs->priv->decimal_places_combo),
+ renderer,
+ "text", 0,
+ NULL);
+
+ // Load current value from settings
+ current_decimal_places = g_settings_get_int (prefs->priv->settings, "decimal-places");
+
+ // Select the right row
+ GtkTreeModel *tree_model = gtk_combo_box_get_model (GTK_COMBO_BOX (prefs->priv->decimal_places_combo));
+ if (gtk_tree_model_get_iter_first (tree_model, &iter)) {
+ do {
+ gint value;
+ gtk_tree_model_get (tree_model, &iter, 0, &value, -1);
+ if (value == current_decimal_places) {
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (prefs->priv->decimal_places_combo), &iter);
+ break;
+ }
+ } while (gtk_tree_model_iter_next (tree_model, &iter));
+ }
+
+ // Keep settings updated when user changes selection
+ g_signal_connect (prefs->priv->decimal_places_combo, "changed",
+ G_CALLBACK (decimal_places_combo_changed_cb), prefs);
+}
+
static void
cpufreq_prefs_dialog_show_mode_combo_setup (CPUFreqPrefs *prefs)
{
@@ -540,6 +679,8 @@ cpufreq_prefs_dialog_create (CPUFreqPrefs *prefs)
prefs->priv->show_freq = GTK_WIDGET (gtk_builder_get_object (builder, "prefs_show_freq"));
prefs->priv->show_unit = GTK_WIDGET (gtk_builder_get_object (builder, "prefs_show_unit"));
+ prefs->priv->decimal_places_combo = GTK_WIDGET (gtk_builder_get_object (builder, "prefs_decimal_places"));
+ prefs->priv->decimal_places_label = GTK_WIDGET (gtk_builder_get_object (builder, "prefs_decimal_places_label"));
prefs->priv->show_perc = GTK_WIDGET (gtk_builder_get_object (builder, "prefs_show_perc"));
prefs->priv->monitor_settings_frame = GTK_WIDGET (gtk_builder_get_object (builder,
@@ -552,6 +693,8 @@ cpufreq_prefs_dialog_create (CPUFreqPrefs *prefs)
if (cpufreq_utils_get_n_cpus () > 1)
cpufreq_prefs_dialog_cpu_combo_setup (prefs);
+ cpufreq_prefs_dialog_decimal_places_combo_setup (prefs);
+
g_signal_connect_swapped (prefs->priv->dialog, "response",
G_CALLBACK (cpufreq_prefs_dialog_response_cb),
prefs);
@@ -575,6 +718,10 @@ cpufreq_prefs_dialog_create (CPUFreqPrefs *prefs)
g_signal_connect (prefs->priv->show_mode_combo, "changed",
G_CALLBACK (cpufreq_prefs_dialog_show_mode_changed),
prefs);
+
+ g_signal_connect (prefs->priv->decimal_places_combo, "changed",
+ G_CALLBACK (cpufreq_prefs_dialog_decimal_places_changed),
+ prefs);
}
void
diff --git a/cpufreq/src/cpufreq-prefs.h b/cpufreq/src/cpufreq-prefs.h
index 1a938f820..aab017c35 100644
--- a/cpufreq/src/cpufreq-prefs.h
+++ b/cpufreq/src/cpufreq-prefs.h
@@ -57,6 +57,7 @@ CPUFreqPrefs *cpufreq_prefs_new (GSettings *settings);
guint cpufreq_prefs_get_cpu (CPUFreqPrefs *prefs);
CPUFreqShowMode cpufreq_prefs_get_show_mode (CPUFreqPrefs *prefs);
CPUFreqShowTextMode cpufreq_prefs_get_show_text_mode (CPUFreqPrefs *prefs);
+guint cpufreq_prefs_get_decimal_places (CPUFreqPrefs *prefs);
/* Properties dialog */
void cpufreq_preferences_dialog_run (CPUFreqPrefs *prefs,
diff --git a/cpufreq/src/cpufreq-utils.c b/cpufreq/src/cpufreq-utils.c
index 736806e81..7d2394143 100644
--- a/cpufreq/src/cpufreq-utils.c
+++ b/cpufreq/src/cpufreq-utils.c
@@ -215,7 +215,7 @@ cpufreq_utils_selector_is_available (void)
#endif /* HAVE_POLKIT_MATE */
gchar *
-cpufreq_utils_get_frequency_label (guint freq)
+cpufreq_utils_get_frequency_label (guint freq, gint decimal_places)
{
gint divisor;
@@ -226,8 +226,12 @@ cpufreq_utils_get_frequency_label (guint freq)
if (((freq % divisor) == 0) || divisor == 1000) /* integer */
return g_strdup_printf ("%d", freq / divisor);
- else /* float */
- return g_strdup_printf ("%3.2f", ((gfloat)freq / divisor));
+ else { /* float */
+ gchar format[16];
+ g_snprintf (format, sizeof (format), "%%3.%df", decimal_places);
+
+ return g_strdup_printf (format, ((gfloat)freq / divisor));
+ }
}
gchar *
diff --git a/cpufreq/src/cpufreq-utils.h b/cpufreq/src/cpufreq-utils.h
index 7187b7a6f..67f22e1a6 100644
--- a/cpufreq/src/cpufreq-utils.h
+++ b/cpufreq/src/cpufreq-utils.h
@@ -24,6 +24,8 @@
#include
+#define MAX_DECIMAL_PLACES 2
+
G_BEGIN_DECLS
/* Useful global methods */
@@ -31,7 +33,8 @@ guint cpufreq_utils_get_n_cpus (void);
void cpufreq_utils_display_error (const gchar *message,
const gchar *secondary);
gboolean cpufreq_utils_selector_is_available (void);
-gchar *cpufreq_utils_get_frequency_label (guint freq);
+gchar *cpufreq_utils_get_frequency_label (guint freq,
+ gint decimal_places);
gchar *cpufreq_utils_get_frequency_unit (guint freq);
gboolean cpufreq_utils_governor_is_automatic (const gchar *governor);
gboolean cpufreq_file_get_contents (const gchar *filename,