From fbb7e89c4eab794cc9151e119c7ee94c9494dd7d Mon Sep 17 00:00:00 2001 From: Stefano Karapetsas Date: Sun, 16 Dec 2012 23:31:49 +0100 Subject: migrate to GSettings and remove MateConf usage migrate to DBUS and remove MateComponent usage remove libmate usage and use glib instead --- sensors-applet/Makefile.am | 8 +- sensors-applet/about-dialog.c | 3 +- sensors-applet/active-sensor.c | 64 ++-- sensors-applet/main.c | 17 +- sensors-applet/prefs-dialog.c | 71 ++--- sensors-applet/sensor-config-dialog.c | 2 +- sensors-applet/sensors-applet-mateconf.c | 491 ------------------------------- sensors-applet/sensors-applet-mateconf.h | 91 ------ sensors-applet/sensors-applet-settings.c | 142 +++++++++ sensors-applet/sensors-applet-settings.h | 56 ++++ sensors-applet/sensors-applet.c | 233 +++++++-------- sensors-applet/sensors-applet.h | 10 +- 12 files changed, 382 insertions(+), 806 deletions(-) delete mode 100644 sensors-applet/sensors-applet-mateconf.c delete mode 100644 sensors-applet/sensors-applet-mateconf.h create mode 100644 sensors-applet/sensors-applet-settings.c create mode 100644 sensors-applet/sensors-applet-settings.h (limited to 'sensors-applet') diff --git a/sensors-applet/Makefile.am b/sensors-applet/Makefile.am index ce3cb01..7ea2099 100644 --- a/sensors-applet/Makefile.am +++ b/sensors-applet/Makefile.am @@ -1,9 +1,13 @@ ## Process this file with automake to produce Makefile.in + +uidir = $(datadir)/mate-sensors-applet/ui + INCLUDES = -DMATELOCALEDIR=\""$(datadir)/locale/"\" \ -DG_LOG_DOMAIN=\""Sensors Applet"\" \ -DPIXMAPS_DIR=\""$(datadir)/pixmaps/$(PACKAGE)/"\" \ -DDATADIR=\""$(datadir)"\" \ -DLIBDIR=\""$(libdir)"\" \ + -DUIDIR=\""$(pkgdatadir)/ui"\" \ -DSENSORS_APPLET_PLUGIN_DIR=\""$(libdir)/$(PACKAGE)/plugins/"\" \ -DSYSCONFDIR=\""$(sysconfdir)"\" \ -DPREFIX=\""$(prefix)"\" \ @@ -35,8 +39,8 @@ mate_sensors_applet_SOURCES = main.c \ sensors-applet-sensor.h \ sensors-applet-plugins.c \ sensors-applet-plugins.h \ - sensors-applet-mateconf.c \ - sensors-applet-mateconf.h \ + sensors-applet-settings.c \ + sensors-applet-settings.h \ $(libmatenotify_SRC) # install headers for plugins to use diff --git a/sensors-applet/about-dialog.c b/sensors-applet/about-dialog.c index cdb9d23..39603b2 100644 --- a/sensors-applet/about-dialog.c +++ b/sensors-applet/about-dialog.c @@ -20,7 +20,8 @@ #include "config.h" #endif /* HAVE_CONFIG_H */ -#include +#include +#include #include "about-dialog.h" void about_dialog_open(SensorsApplet *sensors_applet) { diff --git a/sensors-applet/active-sensor.c b/sensors-applet/active-sensor.c index f7cb83c..94cc707 100644 --- a/sensors-applet/active-sensor.c +++ b/sensors-applet/active-sensor.c @@ -24,12 +24,14 @@ #include #endif /* HAVE_STRING_H */ -#include -#include +#include +#include +#include +#include #include "active-sensor.h" #include "sensors-applet-plugins.h" -#include "sensors-applet-mateconf.h" +#include "sensors-applet-settings.h" typedef enum { VERY_LOW_SENSOR_VALUE = 0, @@ -73,18 +75,21 @@ static SensorValueRange sensor_value_range(gdouble sensor_value, static gboolean active_sensor_execute_alarm(ActiveSensor *active_sensor, NotifType notif_type) { - int pid; + gboolean ret; + GError *error = NULL; sensors_applet_notify_active_sensor(active_sensor, notif_type); g_debug("EXECUTING %s ALARM: %s", (notif_type == LOW_ALARM ? "LOW" : "HIGH"), active_sensor->alarm_command[notif_type]); - pid = mate_execute_shell(NULL, - active_sensor->alarm_command[notif_type]); - g_debug("Command executed in shell with pid %d", pid); + ret = g_spawn_command_line_async (active_sensor->alarm_command[notif_type], &error); + g_debug("Command executed in shell"); + + if (error) + g_error_free (error); - return (pid != -1); + return ret; } static gboolean active_sensor_execute_low_alarm(ActiveSensor *active_sensor) { @@ -460,8 +465,7 @@ ActiveSensor *active_sensor_new(SensorsApplet *sensors_applet, /* need to set size according to orientation */ orient = mate_panel_applet_get_orient(active_sensor->sensors_applet->applet); - graph_size = mate_panel_applet_mateconf_get_int(active_sensor->sensors_applet->applet, - GRAPH_SIZE, NULL); + graph_size = g_settings_get_int(active_sensor->sensors_applet->settings, GRAPH_SIZE); horizontal = ((orient == MATE_PANEL_APPLET_ORIENT_UP) || (orient == MATE_PANEL_APPLET_ORIENT_DOWN)); @@ -527,8 +531,7 @@ void active_sensor_update(ActiveSensor *active_sensor, gchar *tooltip = NULL; gchar *value_tooltip = NULL; - /* hidden mateconf options */ - MateConfClient *client; + /* hidden gsettings options */ gint font_size = 0; gboolean hide_units = FALSE; @@ -584,29 +587,16 @@ void active_sensor_update(ActiveSensor *active_sensor, * note this is not unique */ sensor_value = -1; } else { - /* use hidden mateconf key for hide_units */ - - if ((client = mateconf_client_get_default()) != NULL) { - hide_units = mateconf_client_get_bool(client, - "/apps/sensors-applet/" HIDE_UNITS, - &error); - if (error) { - g_debug("Could not get hide units from MateConf - assuming false"); - hide_units = FALSE; - g_error_free(error); - error = NULL; - } - - g_object_unref(client); - } + /* use hidden gsettings key for hide_units */ + hide_units = g_settings_get_boolean(sensors_applet->settings, HIDE_UNITS); /* scale value and set text using this * value */ switch (sensor_type) { case TEMP_SENSOR: - scale = (TemperatureScale)mate_panel_applet_mateconf_get_int(sensors_applet->applet, TEMPERATURE_SCALE, NULL); + scale = (TemperatureScale) g_settings_get_int(sensors_applet->settings, TEMPERATURE_SCALE); /* scale value */ sensor_value = sensors_applet_convert_temperature(sensor_value, CELSIUS, @@ -661,24 +651,10 @@ void active_sensor_update(ActiveSensor *active_sensor, g_free(value_tooltip); /* only do icons and labels / graphs if needed */ - display_mode = mate_panel_applet_mateconf_get_int(sensors_applet->applet, - DISPLAY_MODE, - NULL); + display_mode = g_settings_get_int (sensors_applet->settings, DISPLAY_MODE); /* most users wont have a font size set */ - if ((client = mateconf_client_get_default()) != NULL) { - font_size = mateconf_client_get_int(client, - "/apps/sensors-applet/" FONT_SIZE, - &error); - if (error) { - g_debug("Could not get font size from MateConf - assuming default size"); - font_size = 0; - g_error_free(error); - error = NULL; - } - - g_object_unref(client); - } + font_size = g_settings_get_int (sensors_applet->settings, FONT_SIZE); /* do icon if needed */ diff --git a/sensors-applet/main.c b/sensors-applet/main.c index c3f7784..dc3a2ed 100644 --- a/sensors-applet/main.c +++ b/sensors-applet/main.c @@ -24,12 +24,12 @@ #include #include "sensors-applet.h" -static gboolean sensors_applet_fill(MatePanelApplet *applet, - const gchar *iid, +static gboolean sensors_applet_fill(MatePanelApplet *applet, + const gchar *iid, gpointer data) { SensorsApplet *sensors_applet; gboolean retval = FALSE; - if (strcmp(iid, "OAFIID:SensorsApplet") == 0) { + if (strcmp(iid, "SensorsApplet") == 0) { sensors_applet = g_new0(SensorsApplet, 1); sensors_applet->applet = applet; sensors_applet_init(sensors_applet); @@ -38,9 +38,8 @@ static gboolean sensors_applet_fill(MatePanelApplet *applet, return retval; } -MATE_PANEL_APPLET_MATECOMPONENT_FACTORY ("OAFIID:SensorsApplet_Factory", - PANEL_TYPE_APPLET, - PACKAGE, - PACKAGE_VERSION, - sensors_applet_fill, - NULL); +MATE_PANEL_APPLET_OUT_PROCESS_FACTORY ("SensorsAppletFactory", + PANEL_TYPE_APPLET, + "SensorsApplet", + sensors_applet_fill, + NULL); diff --git a/sensors-applet/prefs-dialog.c b/sensors-applet/prefs-dialog.c index 7789996..386af34 100644 --- a/sensors-applet/prefs-dialog.c +++ b/sensors-applet/prefs-dialog.c @@ -20,8 +20,9 @@ #include "config.h" #endif /* HAVE_CONFIG_H */ -#include -#include "sensors-applet-mateconf.h" +#include +#include +#include "sensors-applet-settings.h" #include "prefs-dialog.h" #include "sensor-config-dialog.h" @@ -29,13 +30,11 @@ #define NEW_TEMP_SCALE 1 /* when a user closes the prefs-dialog we assume that applet is now - setup, so store all values in mateconf */ + setup, so store all values in gsettings */ void prefs_dialog_close(SensorsApplet *sensors_applet) { if (sensors_applet->sensors != NULL) { - if (sensors_applet_mateconf_save_sensors(sensors_applet)) - mate_panel_applet_mateconf_set_bool(sensors_applet->applet, - IS_SETUP, TRUE, NULL); + sensors_applet_settings_save_sensors(sensors_applet); } if (sensors_applet->prefs_dialog) { gtk_widget_destroy(GTK_WIDGET(sensors_applet->prefs_dialog->dialog)); @@ -44,7 +43,7 @@ void prefs_dialog_close(SensorsApplet *sensors_applet) { } if (sensors_applet->timeout_id == 0) { - sensors_applet->timeout_id = g_timeout_add_seconds(mate_panel_applet_mateconf_get_int(sensors_applet->applet, TIMEOUT, NULL) / 1000, (GSourceFunc)sensors_applet_update_active_sensors, sensors_applet); + sensors_applet->timeout_id = g_timeout_add_seconds(g_settings_get_int (sensors_applet->settings, TIMEOUT) / 1000, (GSourceFunc)sensors_applet_update_active_sensors, sensors_applet); } @@ -125,7 +124,7 @@ static void prefs_dialog_timeout_changed(GtkSpinButton *button, PrefsDialog *prefs_dialog) { gint value; value = (gint)(gtk_spin_button_get_value(button) * 1000); - mate_panel_applet_mateconf_set_int(prefs_dialog->sensors_applet->applet, TIMEOUT, value, NULL); + g_settings_set_int (prefs_dialog->sensors_applet->settings, TIMEOUT, value); } static void prefs_dialog_display_mode_changed(GtkComboBox *display_mode_combo_box, @@ -149,10 +148,9 @@ static void prefs_dialog_display_mode_changed(GtkComboBox *display_mode_combo_bo gtk_widget_set_sensitive(GTK_WIDGET(prefs_dialog->graph_size_spinbutton), (display_mode == DISPLAY_GRAPH)); - mate_panel_applet_mateconf_set_int(prefs_dialog->sensors_applet->applet, - DISPLAY_MODE, - gtk_combo_box_get_active(display_mode_combo_box), - NULL); + g_settings_set_int (prefs_dialog->sensors_applet->settings, + DISPLAY_MODE, + gtk_combo_box_get_active(display_mode_combo_box)); sensors_applet_display_layout_changed(prefs_dialog->sensors_applet); } @@ -160,10 +158,9 @@ static void prefs_dialog_display_mode_changed(GtkComboBox *display_mode_combo_bo static void prefs_dialog_layout_mode_changed(GtkComboBox *layout_mode_combo_box, PrefsDialog *prefs_dialog) { - mate_panel_applet_mateconf_set_int(prefs_dialog->sensors_applet->applet, - LAYOUT_MODE, - gtk_combo_box_get_active(layout_mode_combo_box), - NULL); + g_settings_set_int (prefs_dialog->sensors_applet->settings, + LAYOUT_MODE, + gtk_combo_box_get_active(layout_mode_combo_box)); sensors_applet_display_layout_changed(prefs_dialog->sensors_applet); } @@ -175,16 +172,14 @@ static void prefs_dialog_temperature_scale_changed(GtkComboBox *temperature_scal TemperatureScale scales[2]; GtkTreeModel *model; - scales[OLD_TEMP_SCALE] = (TemperatureScale)mate_panel_applet_mateconf_get_int(prefs_dialog->sensors_applet->applet, - TEMPERATURE_SCALE, - NULL); + scales[OLD_TEMP_SCALE] = (TemperatureScale) g_settings_get_int (prefs_dialog->sensors_applet->settings, + TEMPERATURE_SCALE); scales[NEW_TEMP_SCALE] = (TemperatureScale)gtk_combo_box_get_active(temperature_scale_combo_box); - mate_panel_applet_mateconf_set_int(prefs_dialog->sensors_applet->applet, - TEMPERATURE_SCALE, - scales[NEW_TEMP_SCALE], - NULL); + g_settings_set_int (prefs_dialog->sensors_applet->settings, + TEMPERATURE_SCALE, + scales[NEW_TEMP_SCALE]); /* now go thru and convert all low and high sensor values in * the tree to either celcius or Fahrenheit */ @@ -205,10 +200,9 @@ static void prefs_dialog_display_notifications_toggled(GtkCheckButton *display_n gboolean notify; notify = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(display_notifications)); - mate_panel_applet_mateconf_set_bool(prefs_dialog->sensors_applet->applet, - DISPLAY_NOTIFICATIONS, - notify, - NULL); + g_settings_set_boolean(prefs_dialog->sensors_applet->settings, + DISPLAY_NOTIFICATIONS, + notify); if (notify) { sensors_applet_update_active_sensors(prefs_dialog->sensors_applet); @@ -222,7 +216,7 @@ static void prefs_dialog_graph_size_changed(GtkSpinButton *button, PrefsDialog *prefs_dialog) { gint value; value = (gint)(gtk_spin_button_get_value(button)); - mate_panel_applet_mateconf_set_int(prefs_dialog->sensors_applet->applet, GRAPH_SIZE, value, NULL); + g_settings_set_int(prefs_dialog->sensors_applet->settings, GRAPH_SIZE, value); /* notify change of number of samples */ sensors_applet_graph_size_changed(prefs_dialog->sensors_applet); @@ -472,7 +466,7 @@ void prefs_dialog_open(SensorsApplet *sensors_applet) { gtk_combo_box_append_text(prefs_dialog->display_mode_combo_box, _("graph only")); - display_mode = mate_panel_applet_mateconf_get_int(sensors_applet->applet, DISPLAY_MODE, NULL); + display_mode = g_settings_get_int(sensors_applet->settings, DISPLAY_MODE); gtk_combo_box_set_active(prefs_dialog->display_mode_combo_box, display_mode); g_signal_connect(prefs_dialog->display_mode_combo_box, @@ -503,7 +497,7 @@ void prefs_dialog_open(SensorsApplet *sensors_applet) { gtk_combo_box_append_text(prefs_dialog->layout_mode_combo_box, _("beside labels / icons")); gtk_combo_box_append_text(prefs_dialog->layout_mode_combo_box, _("below labels / icons")); - gtk_combo_box_set_active(prefs_dialog->layout_mode_combo_box, mate_panel_applet_mateconf_get_int(sensors_applet->applet, LAYOUT_MODE, NULL)); + gtk_combo_box_set_active(prefs_dialog->layout_mode_combo_box, g_settings_get_int(sensors_applet->settings, LAYOUT_MODE)); g_signal_connect(prefs_dialog->layout_mode_combo_box, "changed", @@ -528,7 +522,7 @@ void prefs_dialog_open(SensorsApplet *sensors_applet) { gtk_combo_box_append_text(prefs_dialog->temperature_scale_combo_box, _("Celsius")); gtk_combo_box_append_text(prefs_dialog->temperature_scale_combo_box, _("Fahrenheit")); - gtk_combo_box_set_active(prefs_dialog->temperature_scale_combo_box, mate_panel_applet_mateconf_get_int(sensors_applet->applet, TEMPERATURE_SCALE, NULL)); + gtk_combo_box_set_active(prefs_dialog->temperature_scale_combo_box, g_settings_get_int(sensors_applet->settings, TEMPERATURE_SCALE)); g_signal_connect(prefs_dialog->temperature_scale_combo_box, "changed", @@ -543,9 +537,7 @@ void prefs_dialog_open(SensorsApplet *sensors_applet) { NULL); prefs_dialog->graph_size_adjust = g_object_new(GTK_TYPE_ADJUSTMENT, - "value", (gdouble)mate_panel_applet_mateconf_get_int(sensors_applet->applet, - GRAPH_SIZE, - NULL), + "value", (gdouble)g_settings_get_int(sensors_applet->settings, GRAPH_SIZE), "lower", 1.0, "upper", 100.0, "step-increment", 1.0, @@ -557,9 +549,7 @@ void prefs_dialog_open(SensorsApplet *sensors_applet) { "adjustment", prefs_dialog->graph_size_adjust, "climb-rate", 1.0, "digits", 0, - "value", (gdouble)mate_panel_applet_mateconf_get_int(sensors_applet->applet, - GRAPH_SIZE, - NULL), + "value", (gdouble)g_settings_get_int(sensors_applet->settings, GRAPH_SIZE), "width-chars", 4, NULL); @@ -604,7 +594,7 @@ void prefs_dialog_open(SensorsApplet *sensors_applet) { "adjustment", prefs_dialog->timeout_adjust, "climb-rate", 0.5, "digits", 1, - "value", (gdouble) mate_panel_applet_mateconf_get_int(sensors_applet->applet, TIMEOUT, NULL) / 1000.0, + "value", (gdouble) g_settings_get_int(sensors_applet->settings, TIMEOUT) / 1000.0, "width-chars", 4, NULL); @@ -635,9 +625,8 @@ void prefs_dialog_open(SensorsApplet *sensors_applet) { "label", _("Display _notifications"), NULL); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(prefs_dialog->display_notifications), - mate_panel_applet_mateconf_get_bool(sensors_applet->applet, - DISPLAY_NOTIFICATIONS, - NULL)); + g_settings_get_boolean(sensors_applet->settings, + DISPLAY_NOTIFICATIONS)); g_signal_connect(prefs_dialog->display_notifications, "toggled", G_CALLBACK(prefs_dialog_display_notifications_toggled), diff --git a/sensors-applet/sensor-config-dialog.c b/sensors-applet/sensor-config-dialog.c index c053c19..dd9f3c7 100644 --- a/sensors-applet/sensor-config-dialog.c +++ b/sensors-applet/sensor-config-dialog.c @@ -20,7 +20,7 @@ #include "config.h" #endif /* HAVE_CONFIG_H */ -#include +#include #include "sensor-config-dialog.h" #include "sensors-applet.h" diff --git a/sensors-applet/sensors-applet-mateconf.c b/sensors-applet/sensors-applet-mateconf.c deleted file mode 100644 index 5039a95..0000000 --- a/sensors-applet/sensors-applet-mateconf.c +++ /dev/null @@ -1,491 +0,0 @@ -/* - * Copyright (C) 2005-2009 Alex Murray - * - * 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 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, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif /* HAVE_CONFIG_H */ - -#include "sensors-applet.h" -#include "sensors-applet-mateconf.h" - -#define DEFAULT_TIMEOUT 2000 -#define DEFAULT_GRAPH_SIZE 42 - -static const gchar * const compatible_versions[] = { - PACKAGE_VERSION, /* always list current version */ - "1.1.1", - "1.1.0", - "1.0.7", - "1.1.0", -}; - -#define NUM_COMPATIBLE_VERSIONS G_N_ELEMENTS(compatible_versions) - -typedef enum { - SENSORS_APPLET_MATECONF_ERROR = 0, - SENSORS_APPLET_VERSION_ERROR, -} SensorsAppletMateConfError; - -static const gchar * const error_titles[] = { - N_("An error occurred loading the stored sensors data"), - N_("Incompatible sensors configuration found") -}; - -static const gchar * const error_messages[] = { - N_("An error has occurred when loading the stored sensors data. " - "The default values will be used to recover from this error."), - - N_("Unfortunately the previous configuration for MATE Sensors Applet " - "is not compatible with this version. The existing sensors data " - "will be overwritten with the default values for this new version.") -}; - -/* function to be called if an error occurs - when loading values from mateconf */ -static void sensors_applet_mateconf_error_occurred(SensorsAppletMateConfError error) { - GtkWidget *dialog; - gchar *markup; - - g_debug("Error occurred: %s", error_titles[error]); - markup = g_markup_printf_escaped("%s\n\n%s", _(error_titles[error]), _(error_messages[error])); - - dialog = gtk_message_dialog_new_with_markup(NULL, /* no parent window */ - GTK_DIALOG_MODAL, - GTK_MESSAGE_WARNING, - GTK_BUTTONS_OK, - "%s", markup); - - g_free(markup); - - /* runs dialog as modal and doesn't return until user clicks - * button */ - gtk_dialog_run(GTK_DIALOG(dialog)); - gtk_widget_destroy(GTK_WIDGET(dialog)); -} - - -static void sensors_applet_mateconf_set_defaults(SensorsApplet *sensors_applet) { - mate_panel_applet_mateconf_set_int(sensors_applet->applet, DISPLAY_MODE, DISPLAY_ICON_WITH_VALUE, NULL); - mate_panel_applet_mateconf_set_int(sensors_applet->applet, LAYOUT_MODE, VALUE_BESIDE_LABEL, NULL); - mate_panel_applet_mateconf_set_int(sensors_applet->applet, TEMPERATURE_SCALE, CELSIUS, NULL); - mate_panel_applet_mateconf_set_int(sensors_applet->applet, TIMEOUT, DEFAULT_TIMEOUT, NULL); - mate_panel_applet_mateconf_set_int(sensors_applet->applet, GRAPH_SIZE, DEFAULT_GRAPH_SIZE, NULL); -#ifdef HAVE_LIBMATENOTIFY - mate_panel_applet_mateconf_set_bool(sensors_applet->applet, DISPLAY_NOTIFICATIONS, TRUE, NULL); -#endif - mate_panel_applet_mateconf_set_bool(sensors_applet->applet, IS_SETUP, FALSE, NULL); - -} - -/** - * Returns TRUE is old_version is one of the compatible versions - */ -static gboolean sensors_applet_mateconf_is_compatible(const gchar *old_version) { - guint i; - for (i = 0; i < NUM_COMPATIBLE_VERSIONS; i++) { - if (g_ascii_strcasecmp(old_version, compatible_versions[i]) == 0) { - return TRUE; - } - } - return FALSE; -} - - -void sensors_applet_mateconf_setup(SensorsApplet *sensors_applet) { - gboolean setup = FALSE; - gchar *old_version; - GError *error = NULL; - - /* need to convert old num_samples value to new GRAPH_SIZE - * parameter */ - gint num_samples; - if ((num_samples = mate_panel_applet_mateconf_get_int(sensors_applet->applet, - "num_samples", - NULL))) { - g_debug("Convering old num_samples value %d into graph_size", num_samples); - mate_panel_applet_mateconf_set_int(sensors_applet->applet, - GRAPH_SIZE, - (num_samples + GRAPH_FRAME_EXTRA_WIDTH), - NULL); - /* reset num_samples to zero */ - mate_panel_applet_mateconf_set_int(sensors_applet->applet, - "num_samples", - 0, - NULL); - - } - - /* convert old alarm_commands to high and low if exist */ - GSList *alarm_commands; - if ((alarm_commands = mate_panel_applet_mateconf_get_list(sensors_applet->applet, - "alarm_commands", - MATECONF_VALUE_STRING, - NULL))) { - - g_debug("Converting old alarm commands to new high and low commands"); - - mate_panel_applet_mateconf_set_list(sensors_applet->applet, - LOW_ALARM_COMMANDS, - MATECONF_VALUE_STRING, - alarm_commands, - NULL); - mate_panel_applet_mateconf_set_list(sensors_applet->applet, - HIGH_ALARM_COMMANDS, - MATECONF_VALUE_STRING, - alarm_commands, - NULL); - /* reset old list to null */ - mate_panel_applet_mateconf_set_list(sensors_applet->applet, - "alarm_commands", - MATECONF_VALUE_STRING, - NULL, - NULL); - g_slist_foreach(alarm_commands, (GFunc)g_free, NULL); - g_slist_free(alarm_commands); - - } - - setup = mate_panel_applet_mateconf_get_bool(sensors_applet->applet, - IS_SETUP, &error); - if (error) { - g_debug("Previous configuration not found: %s, setting up manually", error->message); - g_error_free(error); - error = NULL; - setup = FALSE; - } - - - if (setup) { - /* see if setup version matches */ - old_version = mate_panel_applet_mateconf_get_string(sensors_applet->applet, - SENSORS_APPLET_VERSION, - &error); - /* if versions don't match or there is no saved - * version string then need to overwrite old config */ - if (error) { - g_debug("Error getting old version string: %s", error->message); - g_error_free(error); - error = NULL; - old_version = NULL; - } - - if (old_version) { - if (sensors_applet_mateconf_is_compatible(old_version)) { - /* previously setup and versions match so use - * old values */ - g_debug("MateConf data is compatible. Trying to set up sensors from mateconf data"); - if (sensors_applet_mateconf_setup_sensors(sensors_applet)) { - g_debug("done setting up from mateconf"); - } else { - g_debug("Setting mateconf defaults only"); - sensors_applet_mateconf_set_defaults(sensors_applet); - } - g_free(old_version); - - return; - - - } - g_free(old_version); - - } - sensors_applet_notify(sensors_applet, MATECONF_READ_ERROR); - - - sensors_applet_mateconf_error_occurred(SENSORS_APPLET_VERSION_ERROR); - } - - /* use defaults */ - g_debug("Setting mateconf defaults only"); - sensors_applet_mateconf_set_defaults(sensors_applet); -} - -enum { - PATHS_INDEX = 0, - IDS_INDEX, - LABELS_INDEX, - INTERFACES_INDEX, - SENSOR_TYPES_INDEX, - ENABLES_INDEX, - LOW_VALUES_INDEX, - HIGH_VALUES_INDEX, - ALARM_ENABLES_INDEX, - LOW_ALARM_COMMANDS_INDEX, - HIGH_ALARM_COMMANDS_INDEX, - ALARM_TIMEOUTS_INDEX, - MULTIPLIERS_INDEX, - OFFSETS_INDEX, - ICON_TYPES_INDEX, - GRAPH_COLORS_INDEX, - NUM_KEYS -}; - -const gchar * const keys[NUM_KEYS] = { - PATHS, - IDS, - LABELS, - INTERFACES, - SENSOR_TYPES, - ENABLES, - LOW_VALUES, - HIGH_VALUES, - ALARM_ENABLES, - LOW_ALARM_COMMANDS, - HIGH_ALARM_COMMANDS, - ALARM_TIMEOUTS, - MULTIPLIERS, - OFFSETS, - ICON_TYPES, - GRAPH_COLORS, -}; - -/* MUST CORRESPOND TO ABOVE KEYS */ -const MateConfValueType key_types[NUM_KEYS] = { - MATECONF_VALUE_STRING, /* PATHS */ - MATECONF_VALUE_STRING, /* IDS, */ - MATECONF_VALUE_STRING, /* LABELS */ - MATECONF_VALUE_STRING, /* INTERFACES, */ - MATECONF_VALUE_INT, /* SENSOR_TYPES, */ - MATECONF_VALUE_BOOL, /* ENABLES, */ - MATECONF_VALUE_INT, /* LOW_VALUES, */ - MATECONF_VALUE_INT, /* HIGH_VALUES, */ - MATECONF_VALUE_BOOL, /* ALARM_ENABLES, */ - MATECONF_VALUE_STRING, /* LOW_ALARM_COMMANDS, */ - MATECONF_VALUE_STRING, /* HIGH_ALARM_COMMANDS, */ - MATECONF_VALUE_INT, /* ALARM_TIMEOUTS, */ - MATECONF_VALUE_INT, /* MULTIPLIERS, */ - MATECONF_VALUE_INT, /* OFFSETS, */ - MATECONF_VALUE_INT, /* ICON_TYPES, */ - MATECONF_VALUE_STRING /* GRAPH_COLORS, */ -}; - -void sensors_applet_mateconf_set_current_to_lists(GSList *current[], - GSList *lists[], - int len) { - for (len--; len >= 0; len--) { - current[len] = lists[len]; - } -} - -int sensors_applet_mateconf_current_not_null(GSList *current[], - int len) { - for (len--; len >= 0; len--) { - if (NULL == current[len]) { - return FALSE; - } - } - return TRUE; -} -void sensors_applet_mateconf_current_get_next(GSList *current[], - int len) { - for (len--; len >= 0; len--) { - current[len] = g_slist_next(current[len]); - } -} - -void sensors_applet_mateconf_free_lists(GSList *lists[], - int len) { - for (len--; len >= 0; len--) { - if (key_types[len] == MATECONF_VALUE_STRING) { - g_slist_foreach(lists[len], (GFunc)g_free, NULL); - } - g_slist_free(lists[len]); - } - -} - -/* gets called if are already setup so we don't have to manually go - through and find sensors etc again */ -gboolean sensors_applet_mateconf_setup_sensors(SensorsApplet *sensors_applet) { - /* everything gets stored except alarm timeout indexes, which - we set to -1, and visible which we set to false for all - parent nodes and true for all child nodes */ - int i; - GSList *lists[NUM_KEYS] = {NULL}; - - GSList *current[NUM_KEYS] = {NULL}; - - GError *error = NULL; - - for (i = 0; i < NUM_KEYS; i++) { - lists[i] = mate_panel_applet_mateconf_get_list(sensors_applet->applet, - keys[i], - key_types[i], - &error); - if (error || NULL == lists[i]) { - sensors_applet_notify(sensors_applet, MATECONF_READ_ERROR); - - sensors_applet_mateconf_error_occurred(SENSORS_APPLET_MATECONF_ERROR); - if (error) { - g_error_free(error); - } - return FALSE; - } - } - - for (sensors_applet_mateconf_set_current_to_lists(current, - lists, - NUM_KEYS); - sensors_applet_mateconf_current_not_null(current, - NUM_KEYS); - sensors_applet_mateconf_current_get_next(current, - NUM_KEYS)) { - - - g_debug("trying to add sensor from mateconf data: %s\n", (gchar *)(current[IDS_INDEX]->data)); - /* need to ensure correct order */ - sensors_applet_add_sensor(sensors_applet, - (gchar *)(current[PATHS_INDEX]->data), - (gchar *)(current[IDS_INDEX]->data), - (gchar *)(current[LABELS_INDEX]->data), - (gchar *)(current[INTERFACES_INDEX]->data), - GPOINTER_TO_UINT(current[SENSOR_TYPES_INDEX]->data), - GPOINTER_TO_INT(current[ENABLES_INDEX]->data), - (gdouble)(GPOINTER_TO_INT(current[LOW_VALUES_INDEX]->data) / 1000.0), - (gdouble)(GPOINTER_TO_INT(current[HIGH_VALUES_INDEX]->data) / 1000.0), - GPOINTER_TO_INT(current[ALARM_ENABLES_INDEX]->data), - (gchar *)(current[LOW_ALARM_COMMANDS_INDEX]->data), - (gchar *)(current[HIGH_ALARM_COMMANDS_INDEX]->data), - GPOINTER_TO_INT(current[ALARM_TIMEOUTS_INDEX]->data), - (gdouble)(GPOINTER_TO_INT(current[MULTIPLIERS_INDEX]->data) / 1000.0), - (gdouble)(GPOINTER_TO_INT(current[OFFSETS_INDEX]->data) / 1000.0), - (SensorType)GPOINTER_TO_UINT(current[ICON_TYPES_INDEX]->data), - (gchar *)(current[GRAPH_COLORS_INDEX]->data) - - ); - - } - sensors_applet_mateconf_free_lists(lists, - NUM_KEYS); - - return TRUE; -} - - -gboolean sensors_applet_mateconf_save_sensors(SensorsApplet *sensors_applet) { - /* write everything to mateconf except VISIBLE and - ALARM_TIMEOUT_INDEX */ - /* for stepping through GtkTreeStore data structure */ - GtkTreeIter interfaces_iter, sensors_iter; - gboolean not_end_of_interfaces = TRUE, not_end_of_sensors = TRUE; - - /* make sure all are initialized to null - since list of - * intializers is horter than number of element, rest get set - * to 0 (ie NULL) */ - GSList *lists[NUM_KEYS] = {NULL}; - int i; - gchar *current_path, *current_id, *current_label, *current_interface, - *current_low_alarm_command, *current_high_alarm_command, - *current_graph_color; - gboolean current_enable, current_alarm_enable; - gdouble current_low_value, current_high_value, current_multiplier, - current_offset; - guint current_alarm_timeout, current_sensor_type, - current_icon_type; - - GError *error = NULL; - - /* now step through the GtkTreeStore sensors to - find which sensors are enabled */ - for (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(sensors_applet->sensors), &interfaces_iter); not_end_of_interfaces; not_end_of_interfaces = gtk_tree_model_iter_next(GTK_TREE_MODEL(sensors_applet->sensors), &interfaces_iter)) { - // store a mateconf key for this interface - gtk_tree_model_get(GTK_TREE_MODEL(sensors_applet->sensors), - &interfaces_iter, - ID_COLUMN, ¤t_id, - -1); - - mate_panel_applet_mateconf_set_bool(sensors_applet->applet, current_id, TRUE, NULL); - g_free(current_id); - - /* reset sensors sentinel */ - not_end_of_sensors = TRUE; - - for (gtk_tree_model_iter_children(GTK_TREE_MODEL(sensors_applet->sensors), &sensors_iter, &interfaces_iter); not_end_of_sensors; not_end_of_sensors = gtk_tree_model_iter_next(GTK_TREE_MODEL(sensors_applet->sensors), &sensors_iter)) { - gtk_tree_model_get(GTK_TREE_MODEL(sensors_applet->sensors), - &sensors_iter, - PATH_COLUMN, ¤t_path, - ID_COLUMN, ¤t_id, - LABEL_COLUMN, ¤t_label, - INTERFACE_COLUMN, ¤t_interface, - SENSOR_TYPE_COLUMN, ¤t_sensor_type, - ENABLE_COLUMN, ¤t_enable, - LOW_VALUE_COLUMN, ¤t_low_value, - HIGH_VALUE_COLUMN, ¤t_high_value, - ALARM_ENABLE_COLUMN, ¤t_alarm_enable, - LOW_ALARM_COMMAND_COLUMN, ¤t_low_alarm_command, - HIGH_ALARM_COMMAND_COLUMN, ¤t_high_alarm_command, - ALARM_TIMEOUT_COLUMN, ¤t_alarm_timeout, - MULTIPLIER_COLUMN, ¤t_multiplier, - OFFSET_COLUMN, ¤t_offset, - ICON_TYPE_COLUMN, ¤t_icon_type, - GRAPH_COLOR_COLUMN, ¤t_graph_color, - -1); - - /* prepend values as this is faster then just - reverse list when finished */ - lists[PATHS_INDEX] = g_slist_prepend(lists[PATHS_INDEX], current_path); - lists[IDS_INDEX] = g_slist_prepend(lists[IDS_INDEX], current_id); - lists[LABELS_INDEX] = g_slist_prepend(lists[LABELS_INDEX], current_label); - lists[INTERFACES_INDEX] = g_slist_prepend(lists[INTERFACES_INDEX], current_interface); - lists[ENABLES_INDEX] = g_slist_prepend(lists[ENABLES_INDEX], GINT_TO_POINTER(current_enable)); - lists[LOW_VALUES_INDEX] = g_slist_prepend(lists[LOW_VALUES_INDEX], GINT_TO_POINTER((gint)(current_low_value * 1000))); - lists[HIGH_VALUES_INDEX] = g_slist_prepend(lists[HIGH_VALUES_INDEX], GINT_TO_POINTER((gint)(current_high_value * 1000))); - lists[ALARM_ENABLES_INDEX] = g_slist_prepend(lists[ALARM_ENABLES_INDEX], GINT_TO_POINTER(current_alarm_enable)); - lists[LOW_ALARM_COMMANDS_INDEX] = g_slist_prepend(lists[LOW_ALARM_COMMANDS_INDEX], current_low_alarm_command); - lists[HIGH_ALARM_COMMANDS_INDEX] = g_slist_prepend(lists[HIGH_ALARM_COMMANDS_INDEX], current_high_alarm_command); - lists[ALARM_TIMEOUTS_INDEX] = g_slist_prepend(lists[ALARM_TIMEOUTS_INDEX], GINT_TO_POINTER(current_alarm_timeout)); - lists[SENSOR_TYPES_INDEX] = g_slist_prepend(lists[SENSOR_TYPES_INDEX], GUINT_TO_POINTER(current_sensor_type)); - lists[MULTIPLIERS_INDEX] = g_slist_prepend(lists[MULTIPLIERS_INDEX], GINT_TO_POINTER((gint)(current_multiplier * 1000))); - lists[OFFSETS_INDEX] = g_slist_prepend(lists[OFFSETS_INDEX], GINT_TO_POINTER((gint)(current_offset * 1000))); - lists[ICON_TYPES_INDEX] = g_slist_prepend(lists[ICON_TYPES_INDEX], GUINT_TO_POINTER(current_icon_type)); - lists[GRAPH_COLORS_INDEX] = g_slist_prepend(lists[GRAPH_COLORS_INDEX], current_graph_color); - } - } - - /* keep lists in original order */ - for (i = 0; i < NUM_KEYS; i++) { - if (lists[i] != NULL) { - lists[i] = g_slist_reverse(lists[i]); - - mate_panel_applet_mateconf_set_list(sensors_applet->applet, - keys[i], - key_types[i], - lists[i], &error); - if (error) { - sensors_applet_notify(sensors_applet, MATECONF_WRITE_ERROR); - - g_error_free(error); - return FALSE; - } - } else { - g_debug("list %s is NULL", keys[i]); - } - - } - - sensors_applet_mateconf_free_lists(lists, - NUM_KEYS); - - /* store current version to identify config data */ - mate_panel_applet_mateconf_set_string(sensors_applet->applet, - SENSORS_APPLET_VERSION, - PACKAGE_VERSION, &error); - - return TRUE; -} - diff --git a/sensors-applet/sensors-applet-mateconf.h b/sensors-applet/sensors-applet-mateconf.h deleted file mode 100644 index be74941..0000000 --- a/sensors-applet/sensors-applet-mateconf.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2005-2009 Alex Murray - * - * 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 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, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SENSORS_APPLET_MATECONF_H -#define SENSORS_APPLET_MATECONF_H - -#include "sensors-applet.h" -#include - -#define FONT_SIZE "font-size" /* hidden mateconf option specifying font - * size in points */ - -#define HIDE_UNITS "hide-units" /* hidden mateconf option specifying not to - * show sensor units */ - -#define IS_SETUP "setup" /* have we actually set up this instance of - * the applet (gets set to true after - * closing prefences dialog) */ - -#define DISPLAY_MODE "display_mode" /* display icons or text labels?*/ - -#define LAYOUT_MODE "layout_mode" /* value beside or below label */ -#define TEMPERATURE_SCALE "temperature_scale" /* Kelvin, - Celsius or - Fahrenheit */ -#define DISPLAY_NOTIFICATIONS "display_notifications" /* whether to - * display - * notifications */ -#define TIMEOUT "timeout_delay" /* delay (in ms) between refreshes */ -#define GRAPH_SIZE "graph_size" /* the size of the graph in pixels - - * either width if horizontal, or - * height if vertical */ -#define PATHS "paths" /* full paths to filenames */ -#define IDS "ids" /* a list of the sensor device ids */ -#define INTERFACES "interfaces" /* a list of the sensor device - * interface for each sensor */ -#define LABELS "labels" /* user defined labels for each sensor */ -#define ENABLES "sensor_enables" /* list of booleans corresponding to - * the filenames of whether a sensor - * is enabled or not */ -#define LOW_VALUES "low_values" /* stored as ints (1000 * double - * value) for accuracy, since can - * only do ints easily */ -#define HIGH_VALUES "high_values" /* stored as ints (1000 * double - * value) for accuracy, since can - * only do ints easily */ -#define ALARM_ENABLES "alarm_enables" /* list of whether each sensor - * has its alarm enabled */ -#define LOW_ALARM_COMMANDS "low_alarm_commands" /* list of commands to execute - * when each alarm is - * activated */ -#define HIGH_ALARM_COMMANDS "high_alarm_commands" /* list of commands to execute - * when each alarm is - * activated */ - -#define ALARM_TIMEOUTS "alarm_timeouts" /* list of how often each - alarm should be sounded (in - seconds) */ - -#define SENSOR_TYPES "sensor_types" /* used to identify a sensor in a - list */ - -#define MULTIPLIERS "multipliers" -#define OFFSETS "offsets" -#define ICON_TYPES "icon_types" -#define GRAPH_COLORS "graph_colors" - -#define SENSORS_APPLET_VERSION "sensors_applet_version" /* version of - * config - * data */ - -gboolean sensors_applet_mateconf_save_sensors(SensorsApplet *sensors_applet); -gboolean sensors_applet_mateconf_setup_sensors(SensorsApplet *sensors_applet); -void sensors_applet_mateconf_setup(SensorsApplet *sensors_applet); - -#endif /* SENSORS_APPLET_MATECONF_H*/ diff --git a/sensors-applet/sensors-applet-settings.c b/sensors-applet/sensors-applet-settings.c new file mode 100644 index 0000000..6b0d92f --- /dev/null +++ b/sensors-applet/sensors-applet-settings.c @@ -0,0 +1,142 @@ +/* + * Copyright (C) 2005-2009 Alex Murray + * + * 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 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif /* HAVE_CONFIG_H */ + +#include +#include "sensors-applet.h" +#include "sensors-applet-settings.h" + +gchar* sensors_applet_settings_get_unique_id (const gchar *interface, const gchar *id, const gchar *path) { + gchar *unique_id; + gchar *unique_id_hash; + GChecksum *checksum; + guint8 digest[16]; + gsize digest_len = sizeof (digest); + + unique_id = g_strdup_printf ("%s/%s/%s", interface, id, path); + + checksum = g_checksum_new (G_CHECKSUM_MD5); + g_checksum_update (checksum, (const guchar *) unique_id, strlen (unique_id)); + g_checksum_get_digest (checksum, digest, &digest_len); + g_assert (digest_len == 16); + + unique_id_hash = g_strdup (g_checksum_get_string (checksum)); + + g_checksum_free (checksum); + g_free (unique_id); + + return unique_id_hash; +} + +gboolean sensors_applet_settings_save_sensors(SensorsApplet *sensors_applet) { + /* write everything to GSettings except VISIBLE and + ALARM_TIMEOUT_INDEX */ + /* for stepping through GtkTreeStore data structure */ + GtkTreeIter interfaces_iter, sensors_iter; + gboolean not_end_of_interfaces = TRUE, not_end_of_sensors = TRUE; + gchar *applet_path; + + int i; + gchar *current_path, *current_id, *current_label, *current_interface, + *current_low_alarm_command, *current_high_alarm_command, + *current_graph_color; + gboolean current_enable, current_alarm_enable; + gdouble current_low_value, current_high_value, current_multiplier, + current_offset; + guint current_alarm_timeout, current_sensor_type, + current_icon_type; + + applet_path = mate_panel_applet_get_preferences_path (sensors_applet->applet); + + /* now step through the GtkTreeStore sensors to + find which sensors are enabled */ + for (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(sensors_applet->sensors), &interfaces_iter); not_end_of_interfaces; not_end_of_interfaces = gtk_tree_model_iter_next(GTK_TREE_MODEL(sensors_applet->sensors), &interfaces_iter)) { + gtk_tree_model_get(GTK_TREE_MODEL(sensors_applet->sensors), + &interfaces_iter, + ID_COLUMN, ¤t_id, + -1); + + //mate_panel_applet_mateconf_set_bool(sensors_applet->applet, current_id, TRUE, NULL); + g_free(current_id); + + /* reset sensors sentinel */ + not_end_of_sensors = TRUE; + + for (gtk_tree_model_iter_children(GTK_TREE_MODEL(sensors_applet->sensors), &sensors_iter, &interfaces_iter); not_end_of_sensors; not_end_of_sensors = gtk_tree_model_iter_next(GTK_TREE_MODEL(sensors_applet->sensors), &sensors_iter)) { + gtk_tree_model_get(GTK_TREE_MODEL(sensors_applet->sensors), + &sensors_iter, + PATH_COLUMN, ¤t_path, + ID_COLUMN, ¤t_id, + LABEL_COLUMN, ¤t_label, + INTERFACE_COLUMN, ¤t_interface, + SENSOR_TYPE_COLUMN, ¤t_sensor_type, + ENABLE_COLUMN, ¤t_enable, + LOW_VALUE_COLUMN, ¤t_low_value, + HIGH_VALUE_COLUMN, ¤t_high_value, + ALARM_ENABLE_COLUMN, ¤t_alarm_enable, + LOW_ALARM_COMMAND_COLUMN, ¤t_low_alarm_command, + HIGH_ALARM_COMMAND_COLUMN, ¤t_high_alarm_command, + ALARM_TIMEOUT_COLUMN, ¤t_alarm_timeout, + MULTIPLIER_COLUMN, ¤t_multiplier, + OFFSET_COLUMN, ¤t_offset, + ICON_TYPE_COLUMN, ¤t_icon_type, + GRAPH_COLOR_COLUMN, ¤t_graph_color, + -1); + + gchar *path = g_strdup_printf ("%s%s/", + applet_path, + sensors_applet_settings_get_unique_id (current_interface, + current_id, + current_path)); + + GSettings *settings; + settings = g_settings_new_with_path ("org.mate.sensors-applet.sensor", + path); + g_free (path); + + g_settings_delay (settings); + g_settings_set_string (settings, PATH, current_path); + g_settings_set_string (settings, ID, current_id); + g_settings_set_string (settings, LABEL, current_label); + g_settings_set_string (settings, INTERFACE, current_interface); + g_settings_set_int (settings, SENSOR_TYPE, current_sensor_type); + g_settings_set_boolean (settings, ENABLED, current_enable); + g_settings_set_double (settings, LOW_VALUE, current_low_value); + g_settings_set_double (settings, HIGH_VALUE, current_high_value); + g_settings_set_boolean (settings, ALARM_ENABLED, current_alarm_enable); + g_settings_set_string (settings, LOW_ALARM_COMMAND, current_low_alarm_command); + g_settings_set_string (settings, HIGH_ALARM_COMMAND, current_high_alarm_command); + g_settings_set_int (settings, ALARM_TIMEOUT, current_alarm_timeout); + g_settings_set_double (settings, MULTIPLIER, current_multiplier); + g_settings_set_double (settings, OFFSET, current_offset); + g_settings_set_int (settings, ICON_TYPE, current_icon_type); + g_settings_set_string (settings, GRAPH_COLOR, current_graph_color); + g_settings_apply (settings); + g_object_unref (settings); + + } + } + + g_free (applet_path); + + return TRUE; +} + diff --git a/sensors-applet/sensors-applet-settings.h b/sensors-applet/sensors-applet-settings.h new file mode 100644 index 0000000..89f6ce0 --- /dev/null +++ b/sensors-applet/sensors-applet-settings.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2005-2009 Alex Murray + * + * 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 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, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef SENSORS_APPLET_SETTINGS_H +#define SENSORS_APPLET_SETTINGS_H + +#include "sensors-applet.h" +#include +#include + +#define FONT_SIZE "font-size" +#define HIDE_UNITS "hide-units" +#define DISPLAY_MODE "display-mode" +#define LAYOUT_MODE "layout-mode" +#define TEMPERATURE_SCALE "temperature-scale" +#define DISPLAY_NOTIFICATIONS "display-notifications" +#define TIMEOUT "timeout-delay" +#define GRAPH_SIZE "graph-size" +#define SENSORS_LIST "sensors-list" + +#define PATH "path" +#define ID "id" +#define INTERFACE "interface" +#define LABEL "label" +#define ENABLED "enabled" +#define LOW_VALUE "low-value" +#define HIGH_VALUE "high-value" +#define ALARM_ENABLED "alarm-enabled" +#define LOW_ALARM_COMMAND "low-alarm-command" +#define HIGH_ALARM_COMMAND "high-alarm-command" +#define ALARM_TIMEOUT "alarm-timeout" +#define SENSOR_TYPE "sensor-type" +#define MULTIPLIER "multiplier" +#define OFFSET "offset" +#define ICON_TYPE "icon-type" +#define GRAPH_COLOR "graph-color" + +gchar* sensors_applet_settings_get_unique_id (const gchar *interface, const gchar *id, const gchar *path); +gboolean sensors_applet_settings_save_sensors(SensorsApplet *sensors_applet); + +#endif /* SENSORS_APPLET_SETTINGS_H*/ diff --git a/sensors-applet/sensors-applet.c b/sensors-applet/sensors-applet.c index 2e0d3b9..63ed3f9 100644 --- a/sensors-applet/sensors-applet.c +++ b/sensors-applet/sensors-applet.c @@ -28,11 +28,12 @@ #include #endif /* HAVE_UNISTD_H */ -#include +#include #include +#include #include "sensors-applet.h" #include "active-sensor.h" -#include "sensors-applet-mateconf.h" +#include "sensors-applet-settings.h" #include "sensors-applet-plugins.h" #ifdef HAVE_LIBMATENOTIFY @@ -51,9 +52,8 @@ #define ROW_SPACING 0 /* callbacks for panel menu */ -static void prefs_cb(MateComponentUIComponent *uic, - gpointer *data, - const gchar *verbname) { +static void prefs_cb(GtkAction *action, + gpointer *data) { SensorsApplet *sensors_applet; sensors_applet = (SensorsApplet *)data; @@ -65,18 +65,16 @@ static void prefs_cb(MateComponentUIComponent *uic, prefs_dialog_open(sensors_applet); } -static void about_cb(MateComponentUIComponent *uic, - gpointer data, - const gchar *verbname) { +static void about_cb(GtkAction *action, + gpointer data) { SensorsApplet *sensors_applet; sensors_applet = (SensorsApplet *)data; about_dialog_open(sensors_applet); } -static void help_cb(MateComponentUIComponent *uic, - gpointer data, - const gchar *verbname) { +static void help_cb(GtkAction *action, + gpointer data) { GError *error = NULL; @@ -105,6 +103,11 @@ static void destroy_cb(GtkWidget *widget, gpointer data) { g_source_remove(sensors_applet->timeout_id); } + if (sensors_applet->settings ) { + g_object_unref (sensors_applet->settings); + sensors_applet->settings = NULL; + } + // destroy all active sensors g_list_foreach(sensors_applet->active_sensors, (GFunc)active_sensor_destroy, @@ -212,9 +215,7 @@ static void style_set_cb(GtkWidget *widget, g_debug("set-style occurred"); - display_mode = mate_panel_applet_mateconf_get_int(sensors_applet->applet, - DISPLAY_MODE, - NULL); + display_mode = g_settings_get_int (sensors_applet->settings, DISPLAY_MODE); if (sensors_applet->sensors) { for (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(sensors_applet->sensors), &interfaces_iter); not_end_of_interfaces; not_end_of_interfaces = gtk_tree_model_iter_next(GTK_TREE_MODEL(sensors_applet->sensors), &interfaces_iter)) { @@ -255,11 +256,16 @@ static void style_set_cb(GtkWidget *widget, } -static const MateComponentUIVerb sensors_applet_menu_verbs[] = { - MATECOMPONENT_UI_UNSAFE_VERB("Preferences", prefs_cb), - MATECOMPONENT_UI_UNSAFE_VERB ("Help", help_cb), - MATECOMPONENT_UI_UNSAFE_VERB("About", about_cb), - MATECOMPONENT_UI_VERB_END +static const GtkActionEntry sensors_applet_menu_actions[] = { + { "Preferences", GTK_STOCK_PROPERTIES, N_("_Preferences"), + NULL, NULL, + G_CALLBACK(prefs_cb) }, + { "Help", GTK_STOCK_HELP, N_("_Help"), + NULL, NULL, + G_CALLBACK(help_cb) }, + { "About", GTK_STOCK_ABOUT, N_("_About"), + NULL, NULL, + G_CALLBACK(about_cb) } }; #ifdef HAVE_LIBMATENOTIFY @@ -272,58 +278,6 @@ static void notif_closed_cb(NotifyNotification *notification, } #endif // HAVE_LIBMATENOTIFY -void sensors_applet_notify(SensorsApplet *sensors_applet, - NotifType notif_type) -{ -#ifdef HAVE_LIBMATENOTIFY - gchar *message; - gchar *summary; - GError *error = NULL; - g_assert(sensors_applet); - - if (!notify_is_initted()) { - if (!notify_init(PACKAGE)) { - return; - } - } - - if (sensors_applet->notification) { - g_debug("notification already shown, not showing another one..."); - return; - } - - switch (notif_type) { - case MATECONF_READ_ERROR: - summary = g_strdup_printf(_("Error restoring saved sensor configuration.")); - message = g_strdup_printf(_("An error occurred while trying to restore the saved sensor configuration. The previous configuration has been lost and will need to be re-entered.")); - break; - - case MATECONF_WRITE_ERROR: - summary = g_strdup_printf(_("Error saving sensor configuration.")); - message = g_strdup_printf(_("An error occurred while trying to save the current sensor configuration. ")); - break; - } - - sensors_applet->notification = notify_notification_new(summary, - message, - GTK_STOCK_DIALOG_WARNING, - GTK_WIDGET(sensors_applet->applet)); - g_free(summary); - g_free(message); - - g_signal_connect(sensors_applet->notification, - "closed", - G_CALLBACK(notif_closed_cb), - sensors_applet); - g_debug("showing notification"); - if (!notify_notification_show(sensors_applet->notification, &error)) { - g_debug("Error showing notification: %s", error->message); - g_error_free(error); - } -#endif // HAVE_LIBMATENOTIFY -} - - void sensors_applet_notify_active_sensor(ActiveSensor *active_sensor, NotifType notif_type) { #ifdef HAVE_LIBMATENOTIFY @@ -347,9 +301,7 @@ void sensors_applet_notify_active_sensor(ActiveSensor *active_sensor, NotifType sensors_applet = active_sensor->sensors_applet; - if (!mate_panel_applet_mateconf_get_bool(sensors_applet->applet, - DISPLAY_NOTIFICATIONS, - NULL)) { + if (!g_settings_get_boolean (sensors_applet->settings, DISPLAY_NOTIFICATIONS)) { g_debug("Wanted to display notification, but user has disabled them"); return; } @@ -411,9 +363,7 @@ void sensors_applet_notify_active_sensor(ActiveSensor *active_sensor, NotifType case TEMP_SENSOR: unit_type_title = _("Temperature"); unit_type = _("temperature"); - temp_scale = (TemperatureScale)mate_panel_applet_mateconf_get_int(active_sensor->sensors_applet->applet, - TEMPERATURE_SCALE, - NULL); + temp_scale = (TemperatureScale) g_settings_get_int (active_sensor->sensors_applet->settings, TEMPERATURE_SCALE); switch (temp_scale) { case CELSIUS: @@ -457,9 +407,7 @@ void sensors_applet_notify_active_sensor(ActiveSensor *active_sensor, NotifType case SENSOR_INTERFACE_ERROR: summary = g_strdup_printf(_("Error updating sensor %s"), sensor_label); message = g_strdup_printf(_("An error occurred while trying to update the value of the sensor %s located at %s."), sensor_label, sensor_path); - timeout_msecs = mate_panel_applet_mateconf_get_int(active_sensor->sensors_applet->applet, - TIMEOUT, - NULL); + timeout_msecs = g_settings_get_int (active_sensor->sensors_applet->settings, TIMEOUT); break; @@ -599,10 +547,8 @@ static void sensors_applet_pack_display(SensorsApplet *sensors_applet) { /* otherwise can acess active_sensors without any worries */ num_active_sensors = g_list_length(sensors_applet->active_sensors); - display_mode = (DisplayMode)mate_panel_applet_mateconf_get_int(sensors_applet->applet, - DISPLAY_MODE, NULL); - layout_mode = (LayoutMode)mate_panel_applet_mateconf_get_int(sensors_applet->applet, - LAYOUT_MODE, NULL); + display_mode = (DisplayMode) g_settings_get_int (sensors_applet->settings, DISPLAY_MODE); + layout_mode = (LayoutMode) g_settings_get_int (sensors_applet->settings, LAYOUT_MODE); horizontal = (((mate_panel_applet_get_orient(sensors_applet->applet) == MATE_PANEL_APPLET_ORIENT_UP) || @@ -1099,8 +1045,6 @@ gboolean sensors_applet_add_sensor(SensorsApplet *sensors_applet, g_debug("Added sensor interface %s to tree", interface); } - icon = sensors_applet_load_icon(icon_type); - /* then add sensor as a child under interface node - ie assume * we either found it or created it - the inteface node that @@ -1111,28 +1055,70 @@ gboolean sensors_applet_add_sensor(SensorsApplet *sensors_applet, &sensors_iter, &interfaces_iter); - gtk_tree_store_set(sensors_applet->sensors, - &sensors_iter, - PATH_COLUMN, path, - ID_COLUMN, id, - LABEL_COLUMN, label, - INTERFACE_COLUMN, interface, - SENSOR_TYPE_COLUMN, type, - ENABLE_COLUMN, enable, - VISIBLE_COLUMN, TRUE, - LOW_VALUE_COLUMN, low_value, - HIGH_VALUE_COLUMN, high_value, - ALARM_ENABLE_COLUMN, alarm_enable, - ALARM_TIMEOUT_COLUMN, alarm_timeout, - LOW_ALARM_COMMAND_COLUMN, low_alarm_command, - HIGH_ALARM_COMMAND_COLUMN, high_alarm_command, - MULTIPLIER_COLUMN, multiplier, - OFFSET_COLUMN, offset, - ICON_TYPE_COLUMN, icon_type, - ICON_PIXBUF_COLUMN, icon, - GRAPH_COLOR_COLUMN, graph_color, - -1); - g_debug("added sensor %s to tree", path); + /* if sensor is already in settings, load values from there */ + gchar *applet_path = mate_panel_applet_get_preferences_path (sensors_applet->applet); + gchar *settings_path = g_strdup_printf ("%s%s/", + applet_path, + sensors_applet_settings_get_unique_id (interface, + id, + path)); + GSettings *settings = g_settings_new_with_path ("org.mate.sensors-applet.sensor", settings_path); + g_free (applet_path); + g_free (settings_path); + + gchar *settings_id = g_settings_get_string (settings, ID); + + if (settings_id != NULL && settings_id[0] != '\0') { + icon = sensors_applet_load_icon(g_settings_get_int (settings, ICON_TYPE)); + gtk_tree_store_set(sensors_applet->sensors, + &sensors_iter, + PATH_COLUMN, g_settings_get_string (settings, PATH), + ID_COLUMN, settings_id, + LABEL_COLUMN, g_settings_get_string (settings, LABEL), + INTERFACE_COLUMN, g_settings_get_string (settings, INTERFACE), + SENSOR_TYPE_COLUMN, g_settings_get_int (settings, SENSOR_TYPE), + ENABLE_COLUMN, g_settings_get_boolean (settings, ENABLED), + VISIBLE_COLUMN, TRUE, + LOW_VALUE_COLUMN, g_settings_get_double (settings, LOW_VALUE), + HIGH_VALUE_COLUMN, g_settings_get_double (settings, HIGH_VALUE), + ALARM_ENABLE_COLUMN, g_settings_get_boolean (settings, ALARM_ENABLED), + ALARM_TIMEOUT_COLUMN, g_settings_get_int (settings, ALARM_TIMEOUT), + LOW_ALARM_COMMAND_COLUMN, g_settings_get_string (settings, LOW_ALARM_COMMAND), + HIGH_ALARM_COMMAND_COLUMN, g_settings_get_string (settings, HIGH_ALARM_COMMAND), + MULTIPLIER_COLUMN, g_settings_get_double (settings, MULTIPLIER), + OFFSET_COLUMN, g_settings_get_double (settings, OFFSET), + ICON_TYPE_COLUMN, g_settings_get_int (settings, ICON_TYPE), + ICON_PIXBUF_COLUMN, icon, + GRAPH_COLOR_COLUMN, g_settings_get_string (settings, GRAPH_COLOR), + -1); + g_free (settings_id); + } + else { + icon = sensors_applet_load_icon(icon_type); + gtk_tree_store_set(sensors_applet->sensors, + &sensors_iter, + PATH_COLUMN, path, + ID_COLUMN, id, + LABEL_COLUMN, label, + INTERFACE_COLUMN, interface, + SENSOR_TYPE_COLUMN, type, + ENABLE_COLUMN, enable, + VISIBLE_COLUMN, TRUE, + LOW_VALUE_COLUMN, low_value, + HIGH_VALUE_COLUMN, high_value, + ALARM_ENABLE_COLUMN, alarm_enable, + ALARM_TIMEOUT_COLUMN, alarm_timeout, + LOW_ALARM_COMMAND_COLUMN, low_alarm_command, + HIGH_ALARM_COMMAND_COLUMN, high_alarm_command, + MULTIPLIER_COLUMN, multiplier, + OFFSET_COLUMN, offset, + ICON_TYPE_COLUMN, icon_type, + ICON_PIXBUF_COLUMN, icon, + GRAPH_COLOR_COLUMN, graph_color, + -1); + } + g_object_unref (settings); + g_debug("added sensor %s to tree", path); /* remove reference to icon as tree now has ref */ g_object_unref(icon); @@ -1302,9 +1288,7 @@ void sensors_applet_graph_size_changed(SensorsApplet *sensors_applet) { if (sensors_applet->active_sensors) { - graph_size = mate_panel_applet_mateconf_get_int(sensors_applet->applet, - GRAPH_SIZE, - NULL); + graph_size = g_settings_get_int (sensors_applet->settings, GRAPH_SIZE); if (mate_panel_applet_get_orient(sensors_applet->applet) == MATE_PANEL_APPLET_ORIENT_UP || mate_panel_applet_get_orient(sensors_applet->applet) == @@ -1375,6 +1359,9 @@ void sensors_applet_init(SensorsApplet *sensors_applet) { g_assert(sensors_applet); g_assert(sensors_applet->applet); + GtkActionGroup *action_group; + gchar *ui_path; + /* plugin functions are stored as name -> get_value_function pairs so * use standard string functions on hash table */ sensors_applet->plugins = g_hash_table_new(g_str_hash, @@ -1395,9 +1382,9 @@ void sensors_applet_init(SensorsApplet *sensors_applet) { G_CALLBACK(destroy_cb), sensors_applet); - - /* if not setup, write defaults to mateconf */ - sensors_applet_mateconf_setup(sensors_applet); + /* init gsettings */ + sensors_applet->settings = mate_panel_applet_settings_new (sensors_applet->applet, + "org.mate.sensors-applet"); /* now do any setup needed manually */ sensors_applet_plugins_load_all(sensors_applet); @@ -1413,12 +1400,16 @@ void sensors_applet_init(SensorsApplet *sensors_applet) { } /* only do menu and signal connections if sensors are found */ - mate_panel_applet_setup_menu_from_file(sensors_applet->applet, - DATADIR, - SENSORS_APPLET_MENU_FILE, - NULL, - sensors_applet_menu_verbs, - sensors_applet); + action_group = gtk_action_group_new ("Sensors Applet Actions"); + gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE); + gtk_action_group_add_actions (action_group, + sensors_applet_menu_actions, + G_N_ELEMENTS (sensors_applet_menu_actions), + sensors_applet); + ui_path = g_build_filename (UIDIR, SENSORS_APPLET_MENU_FILE, NULL); + mate_panel_applet_setup_menu_from_file (sensors_applet->applet, ui_path, action_group); + g_free (ui_path); + g_object_unref (action_group); g_signal_connect(sensors_applet->applet, "style-set", G_CALLBACK(style_set_cb), @@ -1441,7 +1432,7 @@ void sensors_applet_init(SensorsApplet *sensors_applet) { sensors_applet_update_active_sensors(sensors_applet); sensors_applet_pack_display(sensors_applet); - sensors_applet->timeout_id = g_timeout_add_seconds(mate_panel_applet_mateconf_get_int(sensors_applet->applet, TIMEOUT, NULL) / 1000, + sensors_applet->timeout_id = g_timeout_add_seconds(g_settings_get_int(sensors_applet->settings, TIMEOUT) / 1000, (GSourceFunc)sensors_applet_update_active_sensors, sensors_applet); gtk_widget_show_all(GTK_WIDGET(sensors_applet->applet)); diff --git a/sensors-applet/sensors-applet.h b/sensors-applet/sensors-applet.h index 62abfcb..0cd35ec 100644 --- a/sensors-applet/sensors-applet.h +++ b/sensors-applet/sensors-applet.h @@ -60,7 +60,7 @@ static const gchar * const stock_icons[NUM_ICONS] = { /* enumeration used to identify columns in the GtkTreeStore data - * structure and to access specific mateconf keys too. + * structure */ enum { PATH_COLUMN = 0, @@ -110,8 +110,6 @@ typedef enum { LOW_ALARM = 0, HIGH_ALARM, SENSOR_INTERFACE_ERROR, - MATECONF_READ_ERROR, - MATECONF_WRITE_ERROR, NUM_NOTIFS } NotifType; @@ -137,6 +135,9 @@ struct _SensorsApplet { * list of labels and sensor values into this container */ GtkWidget *table; GList *active_sensors; + + GSettings *settings; + #ifdef HAVE_LIBMATENOTIFY NotifyNotification *notification; #endif // HAVE_LIBMATENOTIFY @@ -169,8 +170,7 @@ void sensors_applet_reorder_sensors(SensorsApplet *sensors_applet); gdouble sensors_applet_convert_temperature(gdouble value, TemperatureScale old, TemperatureScale new); -void sensors_applet_notify(SensorsApplet *sensors_applet, - NotifType notif_type); + void sensors_applet_notify_end(ActiveSensor *active_sensor, NotifType notif_type); void sensors_applet_notify_end_all(SensorsApplet *sensors_applet); void sensors_applet_notify_active_sensor(ActiveSensor *active_sensor, NotifType notif_type); -- cgit v1.2.1