summaryrefslogtreecommitdiff
path: root/sensors-applet/sensors-applet.c
diff options
context:
space:
mode:
Diffstat (limited to 'sensors-applet/sensors-applet.c')
-rw-r--r--sensors-applet/sensors-applet.c2217
1 files changed, 1057 insertions, 1160 deletions
diff --git a/sensors-applet/sensors-applet.c b/sensors-applet/sensors-applet.c
index 2845ddc..a401d32 100644
--- a/sensors-applet/sensors-applet.c
+++ b/sensors-applet/sensors-applet.c
@@ -45,840 +45,790 @@
#include "about-dialog.h"
#define SENSORS_APPLET_MENU_FILE "SensorsApplet.xml"
-#define DEFAULT_APPLET_SIZE 24 /* initially set as
- * sensors_applet->size to ensure a
- * real value is stored */
+/* initially set as sensors_applet->size to ensure a real value is stored */
+#define DEFAULT_APPLET_SIZE 24
#define COLUMN_SPACING 2
#define ROW_SPACING 1
+
/* callbacks for panel menu */
-static void prefs_cb(GtkAction *action,
- gpointer *data) {
+static void prefs_cb(GtkAction *action, gpointer *data) {
- SensorsApplet *sensors_applet;
- sensors_applet = (SensorsApplet *)data;
+ SensorsApplet *sensors_applet;
+ sensors_applet = (SensorsApplet *)data;
- if (sensors_applet->prefs_dialog) {
- gtk_window_present(GTK_WINDOW(sensors_applet->prefs_dialog->dialog));
- return;
- }
- prefs_dialog_open(sensors_applet);
+ if (sensors_applet->prefs_dialog) {
+ gtk_window_present(GTK_WINDOW(sensors_applet->prefs_dialog->dialog));
+ return;
+ }
+ prefs_dialog_open(sensors_applet);
}
-static void about_cb(GtkAction *action,
- gpointer data) {
- SensorsApplet *sensors_applet;
- sensors_applet = (SensorsApplet *)data;
+static void about_cb(GtkAction *action, gpointer data) {
+ SensorsApplet *sensors_applet;
+ sensors_applet = (SensorsApplet *)data;
- about_dialog_open(sensors_applet);
+ about_dialog_open(sensors_applet);
}
-static void help_cb(GtkAction *action,
- gpointer data) {
+static void help_cb(GtkAction *action, gpointer data) {
- GError *error = NULL;
+ GError *error = NULL;
#if GTK_CHECK_VERSION (3, 22, 0)
- gtk_show_uri_on_window(NULL, "help:mate-sensors-applet",
+ gtk_show_uri_on_window(NULL, "help:mate-sensors-applet",
#else
- gtk_show_uri(NULL, "help:mate-sensors-applet",
+ gtk_show_uri(NULL, "help:mate-sensors-applet",
#endif
- gtk_get_current_event_time(),
- &error);
-
- if (error) {
- g_debug("Could not open help document: %s ",error->message);
- g_error_free(error);
- }
+
+ gtk_get_current_event_time(),
+ &error);
+
+ if (error) {
+ g_debug("Could not open help document: %s ",error->message);
+ g_error_free(error);
+ }
}
static void destroy_cb(GtkWidget *widget, gpointer data) {
- SensorsApplet *sensors_applet;
- sensors_applet = (SensorsApplet *)data;
-
- /* destroy dialogs, remove timeout and clear sensors tree and finally
- * the applet */
- if (sensors_applet->prefs_dialog != NULL) {
- // destroy's dialog too
- prefs_dialog_close(sensors_applet);
- }
-
- if (sensors_applet->timeout_id) {
- 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,
- NULL);
+ SensorsApplet *sensors_applet;
+ sensors_applet = (SensorsApplet *)data;
+
+ /* destroy dialogs, remove timeout and clear sensors tree and finally the applet */
+ if (sensors_applet->prefs_dialog != NULL) {
+ /* destroy's dialog too */
+ prefs_dialog_close(sensors_applet);
+ }
- if (sensors_applet->sensors != NULL) {
- gtk_tree_store_clear(sensors_applet->sensors);
- }
+ if (sensors_applet->timeout_id) {
+ g_source_remove(sensors_applet->timeout_id);
+ }
- gtk_widget_destroy(GTK_WIDGET(sensors_applet->applet));
+ if (sensors_applet->settings) {
+ g_object_unref (sensors_applet->settings);
+ sensors_applet->settings = NULL;
+ }
- g_free(sensors_applet);
- return;
+ /* destroy all active sensors */
+ g_list_foreach(sensors_applet->active_sensors,
+ (GFunc)active_sensor_destroy,
+ NULL);
+
+ if (sensors_applet->sensors != NULL) {
+ gtk_tree_store_clear(sensors_applet->sensors);
+ }
+
+ gtk_widget_destroy(GTK_WIDGET(sensors_applet->applet));
+
+ g_free(sensors_applet);
+ return;
}
-static void change_orient_cb (MatePanelApplet *applet,
- MatePanelAppletOrient orient,
+static void change_orient_cb (MatePanelApplet *applet,
+ MatePanelAppletOrient orient,
gpointer data) {
- SensorsApplet *sensors_applet;
- sensors_applet = (SensorsApplet *)data;
- sensors_applet_display_layout_changed(sensors_applet);
+ SensorsApplet *sensors_applet;
+ sensors_applet = (SensorsApplet *)data;
+
+ sensors_applet_display_layout_changed(sensors_applet);
}
-static void size_allocate_cb(MatePanelApplet *applet,
- GtkAllocation *allocation,
+static void size_allocate_cb(MatePanelApplet *applet,
+ GtkAllocation *allocation,
gpointer data) {
- SensorsApplet *sensors_applet;
- MatePanelAppletOrient orient;
-
- sensors_applet = (SensorsApplet *)data;
- orient = mate_panel_applet_get_orient(sensors_applet->applet);
-
- if ((orient == MATE_PANEL_APPLET_ORIENT_LEFT) ||
- (orient == MATE_PANEL_APPLET_ORIENT_RIGHT)) {
- if (sensors_applet->size == allocation->width)
- return;
- sensors_applet->size = allocation->width;
- } else {
- if (sensors_applet->size == allocation->height)
- return;
- sensors_applet->size = allocation->height;
- }
- /* update if new value */
- sensors_applet_graph_size_changed(sensors_applet);
- sensors_applet_display_layout_changed(sensors_applet);
+
+ SensorsApplet *sensors_applet;
+ MatePanelAppletOrient orient;
+
+ sensors_applet = (SensorsApplet *)data;
+ orient = mate_panel_applet_get_orient(sensors_applet->applet);
+
+ if ((orient == MATE_PANEL_APPLET_ORIENT_LEFT) ||
+ (orient == MATE_PANEL_APPLET_ORIENT_RIGHT)) {
+
+ if (sensors_applet->size == allocation->width)
+ return;
+ sensors_applet->size = allocation->width;
+ } else {
+ if (sensors_applet->size == allocation->height)
+ return;
+ sensors_applet->size = allocation->height;
+ }
+
+ /* update if new value */
+ sensors_applet_graph_size_changed(sensors_applet);
+ sensors_applet_display_layout_changed(sensors_applet);
}
-static void style_set_cb(GtkWidget *widget,
- GtkStyle *old_style,
- gpointer data) {
-
- /* update all icons in the sensors tree and update all active
- * sensors */
- GtkTreeIter interfaces_iter, sensors_iter;
- GtkTreePath *path;
- gboolean not_end_of_interfaces = TRUE, not_end_of_sensors = TRUE;
- IconType icon_type;
- GdkPixbuf *new_icon;
- gboolean enabled;
- SensorsApplet *sensors_applet;
- DisplayMode display_mode;
-
- sensors_applet = (SensorsApplet *)data;
-
- 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)) {
-
- /* 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,
- ENABLE_COLUMN, &enabled,
- ICON_TYPE_COLUMN, &icon_type,
- -1);
- /* update icons */
- new_icon = sensors_applet_load_icon(icon_type);
-
- gtk_tree_store_set(sensors_applet->sensors,
- &sensors_iter,
- ICON_PIXBUF_COLUMN, new_icon,
- -1);
- g_object_unref(new_icon);
-
- /* update icons only if currently being
- * displayed */
- if (enabled &&
- (display_mode == DISPLAY_ICON ||
- display_mode == DISPLAY_ICON_WITH_VALUE)) {
- path = gtk_tree_model_get_path(GTK_TREE_MODEL(sensors_applet->sensors),
- &sensors_iter);
- sensors_applet_icon_changed(sensors_applet,
- path);
- gtk_tree_path_free(path);
- }
- }
+static void style_set_cb(GtkWidget *widget, GtkStyle *old_style, gpointer data) {
+
+ /* update all icons in the sensors tree and update all active sensors */
+ GtkTreeIter interfaces_iter, sensors_iter;
+ GtkTreePath *path;
+ gboolean not_end_of_interfaces = TRUE, not_end_of_sensors = TRUE;
+ IconType icon_type;
+ GdkPixbuf *new_icon;
+ gboolean enabled;
+ SensorsApplet *sensors_applet;
+ DisplayMode display_mode;
+
+ sensors_applet = (SensorsApplet *)data;
+
+ 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)) {
+
+ /* 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,
+ ENABLE_COLUMN, &enabled,
+ ICON_TYPE_COLUMN, &icon_type,
+ -1);
+ /* update icons */
+ new_icon = sensors_applet_load_icon(icon_type);
+
+ gtk_tree_store_set(sensors_applet->sensors,
+ &sensors_iter,
+ ICON_PIXBUF_COLUMN, new_icon,
+ -1);
+ g_object_unref(new_icon);
+
+ /* update icons only if currently being displayed */
+ if (enabled &&
+ (display_mode == DISPLAY_ICON ||
+ display_mode == DISPLAY_ICON_WITH_VALUE)) {
+
+ path = gtk_tree_model_get_path(GTK_TREE_MODEL(sensors_applet->sensors), &sensors_iter);
+ sensors_applet_icon_changed(sensors_applet, path);
+ gtk_tree_path_free(path);
}
- /* now update layout as size may have changed */
- sensors_applet_display_layout_changed(sensors_applet);
}
-
+ }
+ /* now update layout as size may have changed */
+ sensors_applet_display_layout_changed(sensors_applet);
+ }
+
}
-static gboolean mouse_enter_cb(GtkWidget *widget,
- GdkEventCrossing *event,
- gpointer data)
+static gboolean mouse_enter_cb(GtkWidget *widget, GdkEventCrossing *event, gpointer data)
{
- SensorsApplet *sensor_applet = data;
- sensor_applet->show_tooltip = TRUE;
- sensors_applet_update_active_sensors(sensor_applet);
- return TRUE;
+ SensorsApplet *sensor_applet = data;
+ sensor_applet->show_tooltip = TRUE;
+ sensors_applet_update_active_sensors(sensor_applet);
+ return TRUE;
}
-static gboolean mouse_leave_cb(GtkWidget *widget,
- GdkEventCrossing *event,
- gpointer data)
+static gboolean mouse_leave_cb(GtkWidget *widget, GdkEventCrossing *event, gpointer data)
{
- SensorsApplet *sensor_applet = data;
- sensor_applet->show_tooltip = FALSE;
- return TRUE;
+ SensorsApplet *sensor_applet = data;
+ sensor_applet->show_tooltip = FALSE;
+ return TRUE;
}
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) }
+ { "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_LIBNOTIFY
-static void notif_closed_cb(NotifyNotification *notification,
- SensorsApplet *sensors_applet)
-{
- g_assert(sensors_applet);
-
- sensors_applet->notification = NULL;
+static void notif_closed_cb(NotifyNotification *notification, SensorsApplet *sensors_applet) {
+ g_assert(sensors_applet);
+
+ sensors_applet->notification = NULL;
}
#endif // HAVE_LIBNOTIFY
void sensors_applet_notify_active_sensor(ActiveSensor *active_sensor, NotifType notif_type) {
#ifdef HAVE_LIBNOTIFY
-
- SensorsApplet *sensors_applet;
- gchar *summary, *message;
- gint timeout_msecs;
- gchar *sensor_label;
- gchar *sensor_path;
- SensorType sensor_type;
- TemperatureScale temp_scale;
- GtkTreeIter iter;
- GtkTreePath *path;
- const gchar *unit_type = NULL;
- const gchar *unit_type_title = NULL;
- const gchar *relation = NULL;
- const gchar *limit_type = NULL;
- const gchar *units = NULL;
- gdouble limit_value;
-
- sensors_applet = active_sensor->sensors_applet;
-
- if (!g_settings_get_boolean (sensors_applet->settings, DISPLAY_NOTIFICATIONS)) {
- g_debug("Wanted to display notification, but user has disabled them");
- return;
- }
- path = gtk_tree_row_reference_get_path(active_sensor->sensor_row);
- if (gtk_tree_model_get_iter(GTK_TREE_MODEL(sensors_applet->sensors),
- &iter, path)) {
- gtk_tree_model_get(GTK_TREE_MODEL(sensors_applet->sensors), &iter,
- LABEL_COLUMN, &sensor_label,
- PATH_COLUMN, &sensor_path,
- SENSOR_TYPE_COLUMN, &sensor_type,
- -1);
- } else {
- g_warning("Error getting data from tree for notification...");
- gtk_tree_path_free(path);
- return;
- }
+ SensorsApplet *sensors_applet;
+ gchar *summary, *message;
+ gint timeout_msecs;
+ gchar *sensor_label;
+ gchar *sensor_path;
+ SensorType sensor_type;
+ TemperatureScale temp_scale;
+ GtkTreeIter iter;
+ GtkTreePath *path;
+ const gchar *unit_type = NULL;
+ const gchar *unit_type_title = NULL;
+ const gchar *relation = NULL;
+ const gchar *limit_type = NULL;
+ const gchar *units = NULL;
+ gdouble limit_value;
+
+ sensors_applet = active_sensor->sensors_applet;
+
+ if (!g_settings_get_boolean (sensors_applet->settings, DISPLAY_NOTIFICATIONS)) {
+ g_debug("Wanted to display notification, but user has disabled them");
+ return;
+ }
+
+ path = gtk_tree_row_reference_get_path(active_sensor->sensor_row);
+ if (gtk_tree_model_get_iter(GTK_TREE_MODEL(sensors_applet->sensors), &iter, path)) {
+
+ gtk_tree_model_get(GTK_TREE_MODEL(sensors_applet->sensors), &iter,
+ LABEL_COLUMN, &sensor_label,
+ PATH_COLUMN, &sensor_path,
+ SENSOR_TYPE_COLUMN, &sensor_type,
+ -1);
+ } else {
+ g_warning("Error getting data from tree for notification...");
gtk_tree_path_free(path);
-
- // do different stuff for different notif types
- switch (notif_type) {
- case LOW_ALARM: // fall thru
+ return;
+ }
+
+ gtk_tree_path_free(path);
+
+ /* do different stuff for different notif types */
+ switch (notif_type) {
+ case LOW_ALARM: /* fall thru */
case HIGH_ALARM:
- if (active_sensor->sensor_values[0] <= active_sensor->sensor_low_value &&
- notif_type == LOW_ALARM) {
- relation = _("is very low");
- limit_type = _("lower limit");
- limit_value = active_sensor->sensor_low_value;
- } else if (active_sensor->sensor_values[0] >= active_sensor->sensor_high_value &&
- notif_type == HIGH_ALARM) {
- /* assume high alarm condition */
- relation = _("is very high");
- limit_type = _("upper limit");
- limit_value = active_sensor->sensor_high_value;
- } else {
- g_warning("Alarm notify called when no alarm condition!");
- g_free(sensor_path);
- g_free(sensor_label);
- return;
- }
-
- switch ((SensorType)sensor_type) {
+ if (active_sensor->sensor_values[0] <= active_sensor->sensor_low_value && notif_type == LOW_ALARM) {
+
+ relation = _("is very low");
+ limit_type = _("lower limit");
+ limit_value = active_sensor->sensor_low_value;
+ } else if (active_sensor->sensor_values[0] >= active_sensor->sensor_high_value && notif_type == HIGH_ALARM) {
+
+ /* assume high alarm condition */
+ relation = _("is very high");
+ limit_type = _("upper limit");
+ limit_value = active_sensor->sensor_high_value;
+ } else {
+ g_warning("Alarm notify called when no alarm condition!");
+ g_free(sensor_path);
+ g_free(sensor_label);
+ return;
+ }
+
+ switch ((SensorType)sensor_type) {
case TEMP_SENSOR:
- unit_type_title = _("Temperature");
- unit_type = _("temperature");
- temp_scale = (TemperatureScale) g_settings_get_int (active_sensor->sensors_applet->settings, TEMPERATURE_SCALE);
-
- switch (temp_scale) {
+ unit_type_title = _("Temperature");
+ unit_type = _("temperature");
+ temp_scale = (TemperatureScale) g_settings_get_int (active_sensor->sensors_applet->settings, TEMPERATURE_SCALE);
+
+ switch (temp_scale) {
case CELSIUS:
- units = UNITS_CELSIUS;
- break;
+ units = UNITS_CELSIUS;
+ break;
case FAHRENHEIT:
- units = UNITS_FAHRENHEIT;
- break;
+ units = UNITS_FAHRENHEIT;
+ break;
case KELVIN:
- units = UNITS_KELVIN;
- break;
+ units = UNITS_KELVIN;
+ break;
default:
- units = NULL;
- }
-
- break;
+ units = NULL;
+ }
+ break;
+
case VOLTAGE_SENSOR:
- unit_type_title = _("Voltage");
- unit_type = _("voltage");
- units = UNITS_VOLTAGE;
- break;
+ unit_type_title = _("Voltage");
+ unit_type = _("voltage");
+ units = UNITS_VOLTAGE;
+ break;
+
case FAN_SENSOR:
- unit_type_title = _("Fan Speed");
- unit_type = _("fan speed");
- units = UNITS_RPM;
- break;
+ unit_type_title = _("Fan Speed");
+ unit_type = _("fan speed");
+ units = UNITS_RPM;
+ break;
+
case CURRENT_SENSOR:
- unit_type_title = _("Current");
- unit_type = _("current");
- units = UNITS_CURRENT;
- break;
- }
-
- timeout_msecs = (active_sensor->alarm_timeout ? MIN(DEFAULT_NOTIFY_TIMEOUT, (active_sensor->alarm_timeout * 1000)) : DEFAULT_NOTIFY_TIMEOUT);
-
- summary = g_strdup_printf("%s %s %s", sensor_label, unit_type_title, _("Alarm"));
- message = g_strdup_printf("%s %s %s (%s %2.0f%s)", sensor_label, unit_type,
- relation, limit_type, limit_value, units);
- break;
-
+ unit_type_title = _("Current");
+ unit_type = _("current");
+ units = UNITS_CURRENT;
+ break;
+ }
+
+ timeout_msecs = (active_sensor->alarm_timeout ? MIN(DEFAULT_NOTIFY_TIMEOUT, (active_sensor->alarm_timeout * 1000)) : DEFAULT_NOTIFY_TIMEOUT);
+
+ summary = g_strdup_printf("%s %s %s", sensor_label, unit_type_title, _("Alarm"));
+ message = g_strdup_printf("%s %s %s (%s %2.0f%s)", sensor_label, unit_type, relation, limit_type, limit_value, units);
+ break;
+
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 = g_settings_get_int (active_sensor->sensors_applet->settings, TIMEOUT);
-
- break;
-
+ 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 = g_settings_get_int (active_sensor->sensors_applet->settings, TIMEOUT);
+ break;
+
default:
- g_assert_not_reached();
- }
-
- active_sensor_libnotify_notify(active_sensor,
- notif_type,
- summary,
- message,
- "dialog-warning",
- timeout_msecs);
-
- g_free(sensor_path);
- g_free(sensor_label);
- g_free(summary);
- g_free(message);
+ g_assert_not_reached();
+ }
+
+ active_sensor_libnotify_notify(active_sensor,
+ notif_type,
+ summary,
+ message,
+ "dialog-warning",
+ timeout_msecs);
+
+ g_free(sensor_path);
+ g_free(sensor_label);
+ g_free(summary);
+ g_free(message);
#endif
}
-void sensors_applet_notify_end(ActiveSensor *active_sensor,
- NotifType notif_type) {
+void sensors_applet_notify_end(ActiveSensor *active_sensor, NotifType notif_type) {
#ifdef HAVE_LIBNOTIFY
- active_sensor_libnotify_notify_end(active_sensor, notif_type);
+ active_sensor_libnotify_notify_end(active_sensor, notif_type);
#endif
}
#ifdef HAVE_LIBNOTIFY
-static void sensors_applet_notify_end_all_gfunc(ActiveSensor *active_sensor,
- gpointer data) {
- active_sensor_libnotify_notify_end(active_sensor, LOW_ALARM);
- active_sensor_libnotify_notify_end(active_sensor, HIGH_ALARM);
+static void sensors_applet_notify_end_all_gfunc(ActiveSensor *active_sensor, gpointer data) {
+ active_sensor_libnotify_notify_end(active_sensor, LOW_ALARM);
+ active_sensor_libnotify_notify_end(active_sensor, HIGH_ALARM);
}
#endif
void sensors_applet_notify_end_all(SensorsApplet *sensors_applet) {
#ifdef HAVE_LIBNOTIFY
- g_list_foreach(sensors_applet->active_sensors,
- (GFunc)sensors_applet_notify_end_all_gfunc,
- NULL);
+ g_list_foreach(sensors_applet->active_sensors, (GFunc)sensors_applet_notify_end_all_gfunc, NULL);
#endif
}
-/* internal helper functions for updating display etc*/
+/* internal helper functions for updating display etc */
/* should be called as a g_container_foreach at the start of
* pack_display if the grid already exists to remove but keep alive
* all children of the grid before repacking it */
-static void
-sensors_applet_pack_display_empty_grid_cb(GtkWidget *widget,
- gpointer data)
+static void sensors_applet_pack_display_empty_grid_cb(GtkWidget *widget, gpointer data)
{
- GtkContainer *container;
+ GtkContainer *container;
- container = GTK_CONTAINER(data);
+ container = GTK_CONTAINER(data);
- /* ref then remove widget */
- g_object_ref(widget);
- gtk_container_remove(container, widget);
+ /* ref then remove widget */
+ g_object_ref(widget);
+ gtk_container_remove(container, widget);
}
/* should be called as a g_container_foreach at the end of
* pack_display to unref any of the old children that we have readdded
* to the table to stop reference creep from the g_object_ref called
* on each child at the start of pack labels */
-static void sensors_applet_pack_display_cleanup_refs_cb(GtkWidget *widget,
- gpointer data) {
-
- GList *old_children;
-
- old_children = (GList *)data;
- if (g_list_find(old_children, widget)) {
- g_object_unref(widget);
- }
-}
-
-static void sensors_applet_pack_display(SensorsApplet *sensors_applet) {
- /* note the if () around each widget is to ensure we only
- * operate on those that actually exist */
- GtkLabel *no_sensors_enabled_label = NULL;
- gint num_active_sensors = 0, num_sensors_per_group, rows, cols, i, j;
- GList *old_grid_children = NULL;
-
- GList *current_sensor;
-
- DisplayMode display_mode;
- LayoutMode layout_mode;
-
- gboolean horizontal;
- gint label_width, icon_width, value_width;
- gint label_height, icon_height, value_height;
-
- GtkRequisition req;
-
- ActiveSensor *first_sensor;
-
- /* it is possible that there could be no active sensors so
- * handle that case first - make sure we dont do a NULL
- * pointer access first though */
- if (sensors_applet->active_sensors == NULL ||
- g_list_length(sensors_applet->active_sensors) == 0) {
- g_debug("no active sensors to pack in grid");
- no_sensors_enabled_label = g_object_new(GTK_TYPE_LABEL,
- "label", _("No sensors enabled!"),
- NULL);
-
- if (sensors_applet->grid == NULL) {
- /* only need 1 row and 1 col */
- sensors_applet->grid = gtk_grid_new();
- gtk_grid_set_column_spacing(GTK_GRID(sensors_applet->grid), COLUMN_SPACING);
- gtk_grid_set_row_spacing(GTK_GRID(sensors_applet->grid), ROW_SPACING);
- gtk_widget_set_halign(sensors_applet->grid, GTK_ALIGN_CENTER);
- gtk_widget_set_valign(sensors_applet->grid, GTK_ALIGN_CENTER);
- /* add grid to applet */
- gtk_container_add(GTK_CONTAINER(sensors_applet->applet), sensors_applet->grid);
- } else {
- /* destroy existing widgets - could be an
- * existing version of no sensors label - okay
- * to just add again though if destroy first */
- g_debug("destroying any existing widgets in container");
- gtk_container_foreach(GTK_CONTAINER(sensors_applet->grid),
- (GtkCallback)gtk_widget_destroy,
- NULL);
- }
- g_debug("packing no sensors enabled label");
- gtk_grid_attach(GTK_GRID(sensors_applet->grid),
- GTK_WIDGET(no_sensors_enabled_label),
- 0, 0, 1, 1);
- gtk_widget_show_all(GTK_WIDGET(sensors_applet->applet));
- return;
- }
- /* otherwise can acess active_sensors without any worries */
- num_active_sensors = g_list_length(sensors_applet->active_sensors);
+static void sensors_applet_pack_display_cleanup_refs_cb(GtkWidget *widget, gpointer data) {
+
+ GList *old_children;
- display_mode = (DisplayMode) g_settings_get_int (sensors_applet->settings, DISPLAY_MODE);
- layout_mode = (LayoutMode) g_settings_get_int (sensors_applet->settings, LAYOUT_MODE);
+ old_children = (GList *)data;
+ if (g_list_find(old_children, widget)) {
+ g_object_unref(widget);
+ }
+}
+static void sensors_applet_pack_display(SensorsApplet *sensors_applet) {
+ /* note the if () around each widget is to ensure we only
+ * operate on those that actually exist */
+ GtkLabel *no_sensors_enabled_label = NULL;
+ gint num_active_sensors = 0, num_sensors_per_group, rows, cols, i, j;
+ GList *old_grid_children = NULL;
+
+ GList *current_sensor;
+
+ DisplayMode display_mode;
+ LayoutMode layout_mode;
+
+ gboolean horizontal;
+ gint label_width, icon_width, value_width;
+ gint label_height, icon_height, value_height;
+
+ GtkRequisition req;
+
+ ActiveSensor *first_sensor;
+
+ /* it is possible that there could be no active sensors so
+ * handle that case first - make sure we dont do a NULL
+ * pointer access first though */
+ if (sensors_applet->active_sensors == NULL || g_list_length(sensors_applet->active_sensors) == 0) {
+ g_debug("no active sensors to pack in grid");
+ no_sensors_enabled_label = g_object_new(GTK_TYPE_LABEL, "label", _("No sensors enabled!"), NULL);
+
+ if (sensors_applet->grid == NULL) {
+ /* only need 1 row and 1 col */
+ sensors_applet->grid = gtk_grid_new();
+ gtk_grid_set_column_spacing(GTK_GRID(sensors_applet->grid), COLUMN_SPACING);
+ gtk_grid_set_row_spacing(GTK_GRID(sensors_applet->grid), ROW_SPACING);
+ gtk_widget_set_halign(sensors_applet->grid, GTK_ALIGN_CENTER);
+ gtk_widget_set_valign(sensors_applet->grid, GTK_ALIGN_CENTER);
+ /* add grid to applet */
+ gtk_container_add(GTK_CONTAINER(sensors_applet->applet), sensors_applet->grid);
+ } else {
+ /* destroy existing widgets - could be an
+ * existing version of no sensors label - okay
+ * to just add again though if destroy first */
+ g_debug("destroying any existing widgets in container");
+ gtk_container_foreach(GTK_CONTAINER(sensors_applet->grid), (GtkCallback)gtk_widget_destroy, NULL);
+ }
+ g_debug("packing no sensors enabled label");
+ gtk_grid_attach(GTK_GRID(sensors_applet->grid),
+ GTK_WIDGET(no_sensors_enabled_label),
+ 0, 0, 1, 1);
+ gtk_widget_show_all(GTK_WIDGET(sensors_applet->applet));
+ return;
+ }
+ /* otherwise can acess active_sensors without any worries */
+ num_active_sensors = g_list_length(sensors_applet->active_sensors);
- horizontal = (((mate_panel_applet_get_orient(sensors_applet->applet) == MATE_PANEL_APPLET_ORIENT_UP) ||
- (mate_panel_applet_get_orient(sensors_applet->applet) == MATE_PANEL_APPLET_ORIENT_DOWN)));
+ display_mode = (DisplayMode) g_settings_get_int (sensors_applet->settings, DISPLAY_MODE);
+ layout_mode = (LayoutMode) g_settings_get_int (sensors_applet->settings, LAYOUT_MODE);
- /* figure out num rows / cols by how high / wide sensors
- * labels / icons are and how much size we have to put them
- * in */
+ horizontal = (((mate_panel_applet_get_orient(sensors_applet->applet) == MATE_PANEL_APPLET_ORIENT_UP) ||
+ (mate_panel_applet_get_orient(sensors_applet->applet) == MATE_PANEL_APPLET_ORIENT_DOWN)));
- /* get the first active sensor */
- first_sensor = (ActiveSensor *)sensors_applet->active_sensors->data;
+ /* figure out num rows / cols by how high / wide sensors
+ * labels / icons are and how much size we have to put them in */
+ /* get the first active sensor */
+ first_sensor = (ActiveSensor *)sensors_applet->active_sensors->data;
- switch (display_mode) {
+ switch (display_mode) {
case DISPLAY_VALUE:
- gtk_widget_get_preferred_size(GTK_WIDGET(first_sensor->value),
- &req, NULL);
- value_width = req.width + COLUMN_SPACING;
- value_height = req.height + ROW_SPACING;
-
- /* make sure all widths and heights are non zero,
- * otherwise will get a divide by zero exception below
- * - is a non critical error since can happen when
- * elements first added to list, so simply return - is
- * not a programming error */
- if (value_width == 0 && value_height == 0) {
- return;
- }
+ gtk_widget_get_preferred_size(GTK_WIDGET(first_sensor->value), &req, NULL);
+ value_width = req.width + COLUMN_SPACING;
+ value_height = req.height + ROW_SPACING;
+
+ /* make sure all widths and heights are non zero,
+ * otherwise will get a divide by zero exception below
+ * - is a non critical error since can happen when
+ * elements first added to list, so simply return - is
+ * not a programming error */
+ if (value_width == 0 && value_height == 0) {
+ return;
+ }
- num_sensors_per_group = (sensors_applet->size /
- (horizontal ? value_height :
- value_width));
- break;
+ num_sensors_per_group = (sensors_applet->size / (horizontal ? value_height : value_width));
+ break;
case DISPLAY_LABEL_WITH_VALUE:
- /* even though we end up packing the event boxes into the
- * panel, these dont give back request sizes, so need to ask
- * widgets directly */
- gtk_widget_get_preferred_size(GTK_WIDGET(first_sensor->value),
- &req, NULL);
-
- value_width = req.width + COLUMN_SPACING;
- value_height = req.height + ROW_SPACING;
-
- gtk_widget_get_preferred_size(GTK_WIDGET(first_sensor->label),
- &req, NULL);
- label_width = req.width + COLUMN_SPACING;
- label_height = req.height + ROW_SPACING;
-
- /* make sure all widths and heights are non zero, otherwise
- * will get a divide by zero exception below
- * - is a non critical error since can happen when
- * elements first added to list, so simply return - is
- * not a programming error */
- if (!(label_width && label_height &&
- value_width && value_height)) {
- return;
- }
+ /* even though we end up packing the event boxes into the
+ * panel, these dont give back request sizes, so need to ask
+ * widgets directly */
+ gtk_widget_get_preferred_size(GTK_WIDGET(first_sensor->value), &req, NULL);
+
+ value_width = req.width + COLUMN_SPACING;
+ value_height = req.height + ROW_SPACING;
+
+ gtk_widget_get_preferred_size(GTK_WIDGET(first_sensor->label), &req, NULL);
+ label_width = req.width + COLUMN_SPACING;
+ label_height = req.height + ROW_SPACING;
+
+ /* make sure all widths and heights are non zero, otherwise
+ * will get a divide by zero exception below
+ * - is a non critical error since can happen when
+ * elements first added to list, so simply return - is
+ * not a programming error */
+ if (!(label_width && label_height && value_width && value_height)) {
+ return;
+ }
- switch (layout_mode) {
+ switch (layout_mode) {
case VALUE_BESIDE_LABEL:
- num_sensors_per_group = (sensors_applet->size /
- (horizontal ? MAX(label_height, value_height) :
- (label_width + value_width)));
- break;
+ num_sensors_per_group = (sensors_applet->size / (horizontal ? MAX(label_height, value_height) : (label_width + value_width)));
+ break;
case VALUE_BELOW_LABEL:
- num_sensors_per_group = (sensors_applet->size /
- (horizontal ? (label_height + value_height) :
- MAX(label_width, value_width)));
+ num_sensors_per_group = (sensors_applet->size / (horizontal ? (label_height + value_height) : MAX(label_width, value_width)));
+ break;
+ }
+ break;
+ case DISPLAY_ICON_WITH_VALUE:
+ gtk_widget_get_preferred_size(GTK_WIDGET(first_sensor->value), &req, NULL);
+ value_width = req.width + COLUMN_SPACING;
+ value_height = req.height + ROW_SPACING;
- break;
- }
- break;
+ gtk_widget_get_preferred_size(GTK_WIDGET(first_sensor->icon), &req, NULL);
+ icon_width = req.width + COLUMN_SPACING;
+ icon_height = req.height + ROW_SPACING;
- case DISPLAY_ICON_WITH_VALUE:
- gtk_widget_get_preferred_size(GTK_WIDGET(first_sensor->value),
- &req, NULL);
- value_width = req.width + COLUMN_SPACING;
- value_height = req.height + ROW_SPACING;
-
- gtk_widget_get_preferred_size(GTK_WIDGET(first_sensor->icon),
- &req, NULL);
- icon_width = req.width + COLUMN_SPACING;
- icon_height = req.height + ROW_SPACING;
-
- if (!(icon_width && icon_height &&
- value_width && value_height)) {
- return;
- }
-
- switch (layout_mode) {
- case VALUE_BESIDE_LABEL:
- num_sensors_per_group = (sensors_applet->size /
- (horizontal ? MAX(icon_height, value_height) :
- (icon_width + value_width)));
- break;
- case VALUE_BELOW_LABEL:
- num_sensors_per_group = (sensors_applet->size /
- (horizontal ? (icon_height + value_height) :
- MAX(icon_width, value_width)));
+ if (!(icon_width && icon_height && value_width && value_height)) {
+ return;
+ }
+ switch (layout_mode) {
+ case VALUE_BESIDE_LABEL:
+ num_sensors_per_group = (sensors_applet->size / (horizontal ? MAX(icon_height, value_height) : (icon_width + value_width)));
+ break;
- break;
- }
- break;
+ case VALUE_BELOW_LABEL:
+ num_sensors_per_group = (sensors_applet->size / (horizontal ? (icon_height + value_height) : MAX(icon_width, value_width)));
+ break;
+ }
+ break;
case DISPLAY_ICON:
- gtk_widget_get_preferred_size(GTK_WIDGET(first_sensor->icon),
- &req, NULL);
- icon_width = req.width + COLUMN_SPACING;
- icon_height = req.height + ROW_SPACING;
+ gtk_widget_get_preferred_size(GTK_WIDGET(first_sensor->icon), &req, NULL);
+ icon_width = req.width + COLUMN_SPACING;
+ icon_height = req.height + ROW_SPACING;
- if (!(icon_width && icon_height)) {
- return;
- }
+ if (!(icon_width && icon_height)) {
+ return;
+ }
- num_sensors_per_group = (sensors_applet->size /
- (horizontal ? icon_height :
- icon_width));
- break;
+ num_sensors_per_group = (sensors_applet->size / (horizontal ? icon_height : icon_width));
+ break;
case DISPLAY_GRAPH:
- /* only show graphs in a line like System Monitor
- * applet */
- num_sensors_per_group = 1;
- break;
+ /* only show graphs in a line like System Monitor applet */
+ num_sensors_per_group = 1;
+ break;
+ }
+
+ /* ensure always atleast 1 sensor per group */
+ if (num_sensors_per_group < 1) {
+ /* force a better layout */
+ if (horizontal && layout_mode == VALUE_BELOW_LABEL) {
+ layout_mode = VALUE_BESIDE_LABEL;
+ } else if (!horizontal && layout_mode == VALUE_BESIDE_LABEL) {
+ layout_mode = VALUE_BELOW_LABEL;
}
- /* ensure always atleast 1 sensor per group */
- if (num_sensors_per_group < 1) {
- /* force a better layout */
- if (horizontal && layout_mode == VALUE_BELOW_LABEL) {
- layout_mode = VALUE_BESIDE_LABEL;
- } else if (!horizontal && layout_mode == VALUE_BESIDE_LABEL) {
- layout_mode = VALUE_BELOW_LABEL;
- }
- num_sensors_per_group = 1;
+ num_sensors_per_group = 1;
+ }
+
+ if (horizontal) {
+ /* if oriented horizontally, want as many
+ sensors per column as user has defined, then
+ enough columns to hold all the widgets */
+ rows = num_sensors_per_group;
+ cols = num_active_sensors / num_sensors_per_group;
+ while (rows * cols < num_active_sensors || cols == 0) {
+ cols++;
+ }
+
+ } else {
+ /* if oriented vertically, want as many
+ sensors per row as user has defined, then
+ enough rows to hold all the widgets*/
+ cols = num_sensors_per_group;
+ rows = num_active_sensors / num_sensors_per_group;
+ while (rows * cols < num_active_sensors || rows == 0) {
+ rows++;
}
- if (horizontal) {
- /* if oriented horizontally, want as many
- sensors per column as user has defined, then
- enough columns to hold all the widgets */
- rows = num_sensors_per_group;
- cols = num_active_sensors / num_sensors_per_group;
- while (rows * cols < num_active_sensors || cols == 0) {
- cols++;
- }
-
- } else {
- /* if oriented vertically, want as many
- sensors per row as user has defined, then
- enough rows to hold all the widgets*/
- cols = num_sensors_per_group;
- rows = num_active_sensors / num_sensors_per_group;
- while (rows * cols < num_active_sensors || rows == 0) {
- rows++;
- }
-
- }
-
- /* if displaying labels / icons and values need to modify
- number of rows / colums to accomodate this */
- if (display_mode == DISPLAY_LABEL_WITH_VALUE ||
- display_mode == DISPLAY_ICON_WITH_VALUE) {
- if (layout_mode == VALUE_BESIDE_LABEL) {
- /* to display labels next to values need twice
- as many columns */
- cols *= 2;
- } else {
- /* to display labels above values, we need
- * twice as many rows as without */
- rows *= 2;
- }
- }
-
- if (sensors_applet->grid == NULL) {
- /* create grid and add to applet */
- sensors_applet->grid = gtk_grid_new();
- gtk_grid_set_column_spacing(GTK_GRID(sensors_applet->grid), COLUMN_SPACING);
- gtk_grid_set_row_spacing(GTK_GRID(sensors_applet->grid), ROW_SPACING);
- gtk_widget_set_halign(sensors_applet->grid, GTK_ALIGN_CENTER);
- gtk_widget_set_valign(sensors_applet->grid, GTK_ALIGN_CENTER);
- gtk_container_add(GTK_CONTAINER(sensors_applet->applet), sensors_applet->grid);
- } else {
- /* remove all children if grid already exists so we can start
- * again */
- /* save a list of the old children for later */
- old_grid_children = gtk_container_get_children(GTK_CONTAINER(sensors_applet->grid));
-
- gtk_container_foreach(GTK_CONTAINER(sensors_applet->grid),
- sensors_applet_pack_display_empty_grid_cb,
- sensors_applet->grid);
- }
- /* pack icons / labels and values into grid */
- current_sensor = sensors_applet->active_sensors;
-
- /* if showing labels / icons and values, need to pack labels /
- * icons these first */
- if (display_mode == DISPLAY_ICON_WITH_VALUE ||
- display_mode == DISPLAY_LABEL_WITH_VALUE) {
- /* loop through columns */
- for (i = 0; current_sensor != NULL && i < cols; /* increments depends on how we lay them out - see below */) {
-
- /* loop through rows in a column */
- for (j = 0; current_sensor && j < rows; /* see bottom of for loop*/) {
- /* attach label / icon at this point */
- if (display_mode == DISPLAY_ICON_WITH_VALUE) {
- if (((ActiveSensor *)(current_sensor->data))->icon) {
- gtk_grid_attach(GTK_GRID(sensors_applet->grid),
- ((ActiveSensor *)(current_sensor->data))->icon,
- i, j, 1, 1);
- }
- } else {
- if (((ActiveSensor *)(current_sensor->data))->label) {
- gtk_grid_attach(GTK_GRID(sensors_applet->grid),
- ((ActiveSensor *)(current_sensor->data))->label,
- i, j, 1, 1);
- }
- }
- /* now attach sensor value to either row below or column next to */
- if (layout_mode == VALUE_BESIDE_LABEL) {
- /* left align labels */
- if (((ActiveSensor *)(current_sensor->data))->icon) {
- gtk_widget_set_halign (((ActiveSensor *)(current_sensor->data))->icon, GTK_ALIGN_START);
- gtk_widget_set_valign (((ActiveSensor *)(current_sensor->data))->icon, GTK_ALIGN_CENTER);
- }
- if (((ActiveSensor *)(current_sensor->data))->label) {
+ }
+
+ /* if displaying labels / icons and values need to modify
+ number of rows / colums to accomodate this */
+ if (display_mode == DISPLAY_LABEL_WITH_VALUE || display_mode == DISPLAY_ICON_WITH_VALUE) {
+ if (layout_mode == VALUE_BESIDE_LABEL) {
+ /* to display labels next to values need twice as many columns */
+ cols *= 2;
+ } else {
+ /* to display labels above values, we need twice as many rows as without */
+ rows *= 2;
+ }
+ }
+
+ if (sensors_applet->grid == NULL) {
+ /* create grid and add to applet */
+ sensors_applet->grid = gtk_grid_new();
+ gtk_grid_set_column_spacing(GTK_GRID(sensors_applet->grid), COLUMN_SPACING);
+ gtk_grid_set_row_spacing(GTK_GRID(sensors_applet->grid), ROW_SPACING);
+ gtk_widget_set_halign(sensors_applet->grid, GTK_ALIGN_CENTER);
+ gtk_widget_set_valign(sensors_applet->grid, GTK_ALIGN_CENTER);
+ gtk_container_add(GTK_CONTAINER(sensors_applet->applet), sensors_applet->grid);
+ } else {
+ /* remove all children if grid already exists so we can start again */
+ /* save a list of the old children for later */
+ old_grid_children = gtk_container_get_children(GTK_CONTAINER(sensors_applet->grid));
+
+ gtk_container_foreach(GTK_CONTAINER(sensors_applet->grid),
+ sensors_applet_pack_display_empty_grid_cb,
+ sensors_applet->grid);
+ }
+ /* pack icons / labels and values into grid */
+ current_sensor = sensors_applet->active_sensors;
+
+ /* if showing labels / icons and values, need to pack labels / icons these first */
+ if (display_mode == DISPLAY_ICON_WITH_VALUE || display_mode == DISPLAY_LABEL_WITH_VALUE) {
+ /* loop through columns */
+ for (i = 0; current_sensor != NULL && i < cols; /* increments depends on how we lay them out - see below */) {
+
+ /* loop through rows in a column */
+ for (j = 0; current_sensor && j < rows; /* see bottom of for loop*/) {
+ /* attach label / icon at this point */
+ if (display_mode == DISPLAY_ICON_WITH_VALUE) {
+ if (((ActiveSensor *)(current_sensor->data))->icon) {
+ gtk_grid_attach(GTK_GRID(sensors_applet->grid),
+ ((ActiveSensor *)(current_sensor->data))->icon,
+ i, j, 1, 1);
+ }
+ } else {
+ if (((ActiveSensor *)(current_sensor->data))->label) {
+ gtk_grid_attach(GTK_GRID(sensors_applet->grid),
+ ((ActiveSensor *)(current_sensor->data))->label,
+ i, j, 1, 1);
+ }
+ }
+ /* now attach sensor value to either row below or column next to */
+ if (layout_mode == VALUE_BESIDE_LABEL) {
+ /* left align labels */
+ if (((ActiveSensor *)(current_sensor->data))->icon) {
+ gtk_widget_set_halign (((ActiveSensor *)(current_sensor->data))->icon, GTK_ALIGN_START);
+ gtk_widget_set_valign (((ActiveSensor *)(current_sensor->data))->icon, GTK_ALIGN_CENTER);
+ }
+ if (((ActiveSensor *)(current_sensor->data))->label) {
#if GTK_CHECK_VERSION (3, 16, 0)
- gtk_label_set_xalign (GTK_LABEL(((ActiveSensor *)(current_sensor->data))->label), 0);
- gtk_label_set_yalign (GTK_LABEL(((ActiveSensor *)(current_sensor->data))->label), 0.5);
+ gtk_label_set_xalign (GTK_LABEL(((ActiveSensor *)(current_sensor->data))->label), 0);
+ gtk_label_set_yalign (GTK_LABEL(((ActiveSensor *)(current_sensor->data))->label), 0.5);
#else
- gtk_misc_set_alignment(GTK_MISC(((ActiveSensor *)(current_sensor->data))->label), 0.0, 0.5);
+ gtk_misc_set_alignment(GTK_MISC(((ActiveSensor *)(current_sensor->data))->label), 0.0, 0.5);
#endif
- }
- if (((ActiveSensor *)(current_sensor->data))->value) {
- gtk_widget_set_halign (((ActiveSensor *)(current_sensor->data))->value, GTK_ALIGN_START);
- gtk_widget_set_valign (((ActiveSensor *)(current_sensor->data))->value, GTK_ALIGN_CENTER);
- }
-
- /* place value next to label */
- if (((ActiveSensor *)(current_sensor->data))->value) {
- gtk_grid_attach(GTK_GRID(sensors_applet->grid),
- ((ActiveSensor *)(current_sensor->data))->value,
- i + 1, j, 1, 1);
- }
- j++;
- } else { /* place value below label */
-
- /* center align labels */
- if (((ActiveSensor *)(current_sensor->data))->icon) {
- gtk_widget_set_halign (((ActiveSensor *)(current_sensor->data))->icon, GTK_ALIGN_CENTER);
- gtk_widget_set_valign (((ActiveSensor *)(current_sensor->data))->icon, GTK_ALIGN_CENTER);
- }
- if (((ActiveSensor *)(current_sensor->data))->label) {
+ }
+ if (((ActiveSensor *)(current_sensor->data))->value) {
+ gtk_widget_set_halign (((ActiveSensor *)(current_sensor->data))->value, GTK_ALIGN_START);
+ gtk_widget_set_valign (((ActiveSensor *)(current_sensor->data))->value, GTK_ALIGN_CENTER);
+ }
+
+ /* place value next to label */
+ if (((ActiveSensor *)(current_sensor->data))->value) {
+ gtk_grid_attach(GTK_GRID(sensors_applet->grid),
+ ((ActiveSensor *)(current_sensor->data))->value,
+ i + 1, j, 1, 1);
+ }
+ j++;
+ } else { /* place value below label */
+
+ /* center align labels */
+ if (((ActiveSensor *)(current_sensor->data))->icon) {
+ gtk_widget_set_halign (((ActiveSensor *)(current_sensor->data))->icon, GTK_ALIGN_CENTER);
+ gtk_widget_set_valign (((ActiveSensor *)(current_sensor->data))->icon, GTK_ALIGN_CENTER);
+ }
+ if (((ActiveSensor *)(current_sensor->data))->label) {
#if GTK_CHECK_VERSION (3, 16, 0)
- gtk_label_set_xalign (GTK_LABEL(((ActiveSensor *)(current_sensor->data))->label), 0.5);
- gtk_label_set_yalign (GTK_LABEL(((ActiveSensor *)(current_sensor->data))->label), 0.5);
+ gtk_label_set_xalign (GTK_LABEL(((ActiveSensor *)(current_sensor->data))->label), 0.5);
+ gtk_label_set_yalign (GTK_LABEL(((ActiveSensor *)(current_sensor->data))->label), 0.5);
#else
- gtk_misc_set_alignment(GTK_MISC(((ActiveSensor *)(current_sensor->data))->label), 0.5, 0.5);
+ gtk_misc_set_alignment(GTK_MISC(((ActiveSensor *)(current_sensor->data))->label), 0.5, 0.5);
#endif
- }
- if (((ActiveSensor *)(current_sensor->data))->value) {
- gtk_widget_set_halign (((ActiveSensor *)(current_sensor->data))->value, GTK_ALIGN_CENTER);
- gtk_widget_set_valign (((ActiveSensor *)(current_sensor->data))->value, GTK_ALIGN_CENTER);
- }
-
- if (((ActiveSensor *)(current_sensor->data))->value) {
- gtk_grid_attach(GTK_GRID(sensors_applet->grid),
- ((ActiveSensor *)(current_sensor->data))->value,
- i, j + 1, 1, 1);
- }
- j += 2;
- }
- current_sensor = g_list_next(current_sensor);
- } /* end row loop */
-
- /* now increment column index as needed */
- if (layout_mode == VALUE_BESIDE_LABEL) { /* place value next to label */
- i += 2;
- } else {
- i++;
- }
- } /* end column loop */
-
- } else { /* not showing labels and icons with values, so just
- * pack either only icons or values */
- for (i = 0; current_sensor != NULL && i < cols; ++i) {
- for (j = 0; current_sensor!= NULL && j < rows; ++j) {
- if (display_mode == DISPLAY_VALUE) {
- if (((ActiveSensor *)(current_sensor->data))->value) {
- gtk_grid_attach(GTK_GRID(sensors_applet->grid),
- ((ActiveSensor *)(current_sensor->data))->value,
- i, j, 1, 1);
- }
- } else if (display_mode == DISPLAY_ICON) {
- if (((ActiveSensor *)(current_sensor->data))->value) {
- gtk_grid_attach(GTK_GRID(sensors_applet->grid),
- ((ActiveSensor *)(current_sensor->data))->icon,
- i, j, 1, 1);
- }
- } else if (display_mode == DISPLAY_GRAPH) {
- if (((ActiveSensor *)(current_sensor->data))->graph) {
- gtk_grid_attach(GTK_GRID(sensors_applet->grid),
- ((ActiveSensor *)(current_sensor->data))->graph_frame,
- i, j, 1, 1);
- }
- }
-
- current_sensor = g_list_next(current_sensor);
- }
- }
- }
- if (old_grid_children != NULL) {
- gtk_container_foreach(GTK_CONTAINER(sensors_applet->grid),
- sensors_applet_pack_display_cleanup_refs_cb,
- old_grid_children);
- g_list_free(old_grid_children);
- }
- gtk_widget_show_all(GTK_WIDGET(sensors_applet->applet));
-
-}
+ }
+ if (((ActiveSensor *)(current_sensor->data))->value) {
+ gtk_widget_set_halign (((ActiveSensor *)(current_sensor->data))->value, GTK_ALIGN_CENTER);
+ gtk_widget_set_valign (((ActiveSensor *)(current_sensor->data))->value, GTK_ALIGN_CENTER);
+ }
+
+ if (((ActiveSensor *)(current_sensor->data))->value) {
+ gtk_grid_attach(GTK_GRID(sensors_applet->grid),
+ ((ActiveSensor *)(current_sensor->data))->value,
+ i, j + 1, 1, 1);
+ }
+ j += 2;
+ }
+ current_sensor = g_list_next(current_sensor);
+ } /* end row loop */
+
+ /* now increment column index as needed */
+ if (layout_mode == VALUE_BESIDE_LABEL) { /* place value next to label */
+ i += 2;
+ } else {
+ i++;
+ }
+ } /* end column loop */
+
+ } else { /* not showing labels and icons with values, so just pack either only icons or values */
+ for (i = 0; current_sensor != NULL && i < cols; ++i) {
+ for (j = 0; current_sensor!= NULL && j < rows; ++j) {
+ if (display_mode == DISPLAY_VALUE) {
+ if (((ActiveSensor *)(current_sensor->data))->value) {
+ gtk_grid_attach(GTK_GRID(sensors_applet->grid),
+ ((ActiveSensor *)(current_sensor->data))->value,
+ i, j, 1, 1);
+ }
+ } else if (display_mode == DISPLAY_ICON) {
+ if (((ActiveSensor *)(current_sensor->data))->value) {
+ gtk_grid_attach(GTK_GRID(sensors_applet->grid),
+ ((ActiveSensor *)(current_sensor->data))->icon,
+ i, j, 1, 1);
+ }
+ } else if (display_mode == DISPLAY_GRAPH) {
+ if (((ActiveSensor *)(current_sensor->data))->graph) {
+ gtk_grid_attach(GTK_GRID(sensors_applet->grid),
+ ((ActiveSensor *)(current_sensor->data))->graph_frame,
+ i, j, 1, 1);
+ }
+ }
-/* must unref when done with returned pixbuf */
-GdkPixbuf *sensors_applet_load_icon(IconType icon_type) {
- GtkIconTheme *icon_theme;
- GdkPixbuf *icon = NULL;
- GError *error = NULL;
+ current_sensor = g_list_next(current_sensor);
+ }
+ }
+ }
- /* try to load the icon */
+ if (old_grid_children != NULL) {
+ gtk_container_foreach(GTK_CONTAINER(sensors_applet->grid),
+ sensors_applet_pack_display_cleanup_refs_cb,
+ old_grid_children);
+ g_list_free(old_grid_children);
+ }
+ gtk_widget_show_all(GTK_WIDGET(sensors_applet->applet));
- /* not allowed to unref or ref icon_theme once we have it */
- icon_theme = gtk_icon_theme_get_default();
+}
+
+/* must unref when done with returned pixbuf */
+GdkPixbuf *sensors_applet_load_icon(IconType icon_type) {
+ GtkIconTheme *icon_theme;
+ GdkPixbuf *icon = NULL;
+ GError *error = NULL;
+
+ /* try to load the icon */
+
+ /* not allowed to unref or ref icon_theme once we have it */
+ icon_theme = gtk_icon_theme_get_default();
+ icon = gtk_icon_theme_load_icon(icon_theme,
+ stock_icons[icon_type],
+ DEFAULT_ICON_SIZE,
+ GTK_ICON_LOOKUP_USE_BUILTIN,
+ &error);
+
+ if (error) {
+ g_warning ("Could not load icon: %s", error->message);
+ g_error_free(error);
+ error = NULL;
+
+ /* try again with default icon */
icon = gtk_icon_theme_load_icon(icon_theme,
- stock_icons[icon_type],
+ "image-missing",
DEFAULT_ICON_SIZE,
GTK_ICON_LOOKUP_USE_BUILTIN,
&error);
- if (error) {
- g_warning ("Could not load icon: %s", error->message);
- g_error_free(error);
- error = NULL;
-
- /* try again with default icon */
- icon = gtk_icon_theme_load_icon(icon_theme,
- "image-missing",
- DEFAULT_ICON_SIZE,
- GTK_ICON_LOOKUP_USE_BUILTIN,
- &error);
- if (error) {
- /* this will quit sensors-applet but
- * it is a pretty major error so may
- * as well */
-
- g_error("Could not load GTK_STOCK_MISSING_IMAGE - major error!!!: %s", error->message);
-
- g_error_free(error);
- error = NULL;
- }
-
+
+ if (error) {
+ /* this will quit sensors-applet but it is a pretty major error so may as well */
+ g_error("Could not load GTK_STOCK_MISSING_IMAGE - major error!!!: %s", error->message);
+ g_error_free(error);
+ error = NULL;
}
- return icon;
+
+ }
+ return icon;
}
// MUST FREE STRINGS AFTER CALLING THIS FUNCTION!!
gboolean sensors_applet_add_sensor(SensorsApplet *sensors_applet,
- const gchar *path,
- const gchar *id,
- const gchar *label,
- const gchar *interface,
- SensorType type,
+ const gchar *path,
+ const gchar *id,
+ const gchar *label,
+ const gchar *interface,
+ SensorType type,
gboolean enable,
gdouble low_value,
gdouble high_value,
@@ -890,523 +840,470 @@ gboolean sensors_applet_add_sensor(SensorsApplet *sensors_applet,
gdouble offset,
IconType icon_type,
const gchar *graph_color) {
-
-
- GtkTreeIter interfaces_iter, sensors_iter;
- gboolean not_empty_tree;
-
- gchar *node_interface;
- gboolean not_end_of_interfaces = TRUE, interface_exists = FALSE;
- gboolean not_end_of_sensors = TRUE;
- gchar *sensor_id;
- gchar *sensor_path;
- SensorType sensor_type;
- GdkPixbuf *icon;
- GtkTreePath *tree_path;
-
- g_assert(sensors_applet);
-
- /* assume tree is not empty */
- not_empty_tree = TRUE;
-
-
- if (NULL == sensors_applet->sensors) {
-
- sensors_applet->sensors = gtk_tree_store_new(N_COLUMNS,
- G_TYPE_STRING, /* path */
- G_TYPE_STRING, /* id */
- G_TYPE_STRING, /* label */
- G_TYPE_STRING, /* interface */
- G_TYPE_UINT, /* sensor
- * type */
- G_TYPE_BOOLEAN, /* enable */
- G_TYPE_BOOLEAN, /* visible */
- G_TYPE_DOUBLE, /* low value */
- G_TYPE_DOUBLE, /* high type */
- G_TYPE_BOOLEAN, /* alarm enable */
- G_TYPE_STRING, /* low alarm command */
- G_TYPE_STRING, /* high alarm command */
- G_TYPE_UINT, /* alarm timeout */
- G_TYPE_DOUBLE, /* multiplier */
- G_TYPE_DOUBLE, /* offset */
- G_TYPE_UINT, /* icon type */
- GDK_TYPE_PIXBUF, /* icon pixbuf */
- G_TYPE_STRING); /* graph color */
-
-
- g_debug("Sensor tree created.");
-
- /* we know tree is actually empty since we just created it */
- not_empty_tree = FALSE;
- }
-
- /* search sensor tree for the parent interface to place this
- * sensor under */
- for (not_empty_tree = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(sensors_applet->sensors), &interfaces_iter); not_empty_tree && not_end_of_interfaces && !interface_exists; 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,
- INTERFACE_COLUMN, &node_interface,
- -1);
- if (g_ascii_strcasecmp(interface, node_interface) == 0) {
- /* found interface in tree */
- interface_exists = TRUE;
-
- /* now see if this actual sensor already
- * exists within this interface - don't want
- * to add duplicates */
- /* see if have children */
- for (not_end_of_sensors = 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, &sensor_path,
- ID_COLUMN, &sensor_id,
- SENSOR_TYPE_COLUMN, &sensor_type,
- -1);
- if (g_ascii_strcasecmp(sensor_id, id) == 0 &&
- g_ascii_strcasecmp(sensor_path, path) == 0 &&
- sensor_type == type) {
- /* sensor already exists so
- * dont add a second time */
- g_debug("sensor with path: %s, id: %s already exists in tree, not adding a second time", sensor_path, sensor_id);
- g_free(sensor_id);
- g_free(sensor_path);
- g_free(node_interface);
- return FALSE;
- }
- g_free(sensor_id);
- g_free(sensor_path);
- }
- g_free(node_interface);
- break;
- }
- g_free(node_interface);
+
+ GtkTreeIter interfaces_iter, sensors_iter;
+ gboolean not_empty_tree;
+
+ gchar *node_interface;
+ gboolean not_end_of_interfaces = TRUE, interface_exists = FALSE;
+ gboolean not_end_of_sensors = TRUE;
+ gchar *sensor_id;
+ gchar *sensor_path;
+ SensorType sensor_type;
+ GdkPixbuf *icon;
+ GtkTreePath *tree_path;
+
+ g_assert(sensors_applet);
+
+ /* assume tree is not empty */
+ not_empty_tree = TRUE;
+
+ if (NULL == sensors_applet->sensors) {
+
+ sensors_applet->sensors = gtk_tree_store_new(N_COLUMNS,
+ G_TYPE_STRING, /* path */
+ G_TYPE_STRING, /* id */
+ G_TYPE_STRING, /* label */
+ G_TYPE_STRING, /* interface */
+ G_TYPE_UINT, /* sensor type */
+ G_TYPE_BOOLEAN, /* enable */
+ G_TYPE_BOOLEAN, /* visible */
+ G_TYPE_DOUBLE, /* low value */
+ G_TYPE_DOUBLE, /* high type */
+ G_TYPE_BOOLEAN, /* alarm enable */
+ G_TYPE_STRING, /* low alarm command */
+ G_TYPE_STRING, /* high alarm command */
+ G_TYPE_UINT, /* alarm timeout */
+ G_TYPE_DOUBLE, /* multiplier */
+ G_TYPE_DOUBLE, /* offset */
+ G_TYPE_UINT, /* icon type */
+ GDK_TYPE_PIXBUF, /* icon pixbuf */
+ G_TYPE_STRING); /* graph color */
+
+ g_debug("Sensor tree created.");
+
+ /* we know tree is actually empty since we just created it */
+ not_empty_tree = FALSE;
+ }
+
+ /* search sensor tree for the parent interface to place this sensor under */
+ for (not_empty_tree = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(sensors_applet->sensors), &interfaces_iter);
+ not_empty_tree && not_end_of_interfaces && !interface_exists;
+ 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, INTERFACE_COLUMN, &node_interface, -1);
+ if (g_ascii_strcasecmp(interface, node_interface) == 0) {
+ /* found interface in tree */
+ interface_exists = TRUE;
+
+ /* now see if this actual sensor already exists within this interface - don't want to add duplicates */
+ /* see if have children */
+ for (not_end_of_sensors = 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, &sensor_path,
+ ID_COLUMN, &sensor_id,
+ SENSOR_TYPE_COLUMN, &sensor_type,
+ -1);
+ if (g_ascii_strcasecmp(sensor_id, id) == 0 && g_ascii_strcasecmp(sensor_path, path) == 0 && sensor_type == type) {
+ /* sensor already exists so dont add a second time */
+ g_debug("sensor with path: %s, id: %s already exists in tree, not adding a second time", sensor_path, sensor_id);
+ g_free(sensor_id);
+ g_free(sensor_path);
+ g_free(node_interface);
+ return FALSE;
+ }
+ g_free(sensor_id);
+ g_free(sensor_path);
+ }
+ g_free(node_interface);
+ break;
}
-
-
-
- if (!interface_exists) {
- /* add to required plugins hash table so we ensure this
- plugin stays loaded to make sure we have a get sensor
- value function if possible */
- g_hash_table_insert(sensors_applet->required_plugins,
- g_strdup(interface),
- GINT_TO_POINTER(TRUE));
- g_debug("added interface %s to required plugins", interface);
-
- /* wasn't able to find interface root node so create it */
- gtk_tree_store_append(sensors_applet->sensors,
- &interfaces_iter,
- NULL);
-
- gtk_tree_store_set(sensors_applet->sensors,
- &interfaces_iter,
- ID_COLUMN, interface,
- INTERFACE_COLUMN, interface,
- VISIBLE_COLUMN, FALSE,
- -1);
- g_debug("Added sensor interface %s to tree", interface);
- }
-
-
- /* then add sensor as a child under interface node - ie assume
- * we either found it or created it - the inteface node that
- * is */
-
- /* for now just add sensors all in a single list */
- gtk_tree_store_append(sensors_applet->sensors,
- &sensors_iter,
- &interfaces_iter);
-
- /* if sensor is already in settings, load values from there */
- gchar *applet_path = mate_panel_applet_get_preferences_path (sensors_applet->applet);
- gchar *gsuid = sensors_applet_settings_get_unique_id (interface, id, path);
- gchar *settings_path = g_strdup_printf ("%s%s/", applet_path, gsuid);
- GSettings *settings = g_settings_new_with_path ("org.mate.sensors-applet.sensor", settings_path);
- g_free (applet_path);
- g_free (gsuid);
- g_free (settings_path);
-
- gchar *settings_id = g_settings_get_string (settings, ID);
-
- if (settings_id != NULL && settings_id[0] != '\0') {
- enable = g_settings_get_boolean (settings, ENABLED);
- 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, enable,
- 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);
-
- /* create the active sensor */
- if (enable) {
- tree_path = gtk_tree_model_get_path(GTK_TREE_MODEL(sensors_applet->sensors), &sensors_iter);
- sensors_applet_sensor_enabled(sensors_applet, tree_path);
- gtk_tree_path_free(tree_path);
- }
- return TRUE;
-}
-
-
-static ActiveSensor *sensors_applet_find_active_sensor(SensorsApplet *sensors_applet,
- GtkTreePath *path) {
- GtkTreePath *sensor_tree_path;
- GList *current_sensor;
-
- for (current_sensor = sensors_applet->active_sensors; current_sensor != NULL; current_sensor = g_list_next(current_sensor)) {
- sensor_tree_path = gtk_tree_row_reference_get_path(((ActiveSensor *)(current_sensor->data))->sensor_row);
-
- if (gtk_tree_path_compare(path, sensor_tree_path) == 0) {
- gtk_tree_path_free(sensor_tree_path);
- return ((ActiveSensor *)(current_sensor->data));
- }
- gtk_tree_path_free(sensor_tree_path);
- }
- return NULL;
+ g_free(node_interface);
+ }
+
+ if (!interface_exists) {
+ /* add to required plugins hash table so we ensure this
+ plugin stays loaded to make sure we have a get sensor
+ value function if possible */
+ g_hash_table_insert(sensors_applet->required_plugins,
+ g_strdup(interface),
+ GINT_TO_POINTER(TRUE));
+ g_debug("added interface %s to required plugins", interface);
+
+ /* wasn't able to find interface root node so create it */
+ gtk_tree_store_append(sensors_applet->sensors,
+ &interfaces_iter,
+ NULL);
+
+ gtk_tree_store_set(sensors_applet->sensors,
+ &interfaces_iter,
+ ID_COLUMN, interface,
+ INTERFACE_COLUMN, interface,
+ VISIBLE_COLUMN, FALSE,
+ -1);
+ g_debug("Added sensor interface %s to tree", interface);
+ }
+
+ /* then add sensor as a child under interface node - ie assume
+ * we either found it or created it - the inteface node that is */
+
+ /* for now just add sensors all in a single list */
+ gtk_tree_store_append(sensors_applet->sensors, &sensors_iter, &interfaces_iter);
+
+ /* if sensor is already in settings, load values from there */
+ gchar *applet_path = mate_panel_applet_get_preferences_path (sensors_applet->applet);
+ gchar *gsuid = sensors_applet_settings_get_unique_id (interface, id, path);
+ gchar *settings_path = g_strdup_printf ("%s%s/", applet_path, gsuid);
+ GSettings *settings = g_settings_new_with_path ("org.mate.sensors-applet.sensor", settings_path);
+ g_free (applet_path);
+ g_free (gsuid);
+ g_free (settings_path);
+
+ gchar *settings_id = g_settings_get_string (settings, ID);
+
+ if (settings_id != NULL && settings_id[0] != '\0') {
+ enable = g_settings_get_boolean (settings, ENABLED);
+ 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, enable,
+ 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);
+
+ /* create the active sensor */
+ if (enable) {
+ tree_path = gtk_tree_model_get_path(GTK_TREE_MODEL(sensors_applet->sensors), &sensors_iter);
+ sensors_applet_sensor_enabled(sensors_applet, tree_path);
+ gtk_tree_path_free(tree_path);
+ }
+ return TRUE;
}
-
-
+
+static ActiveSensor *sensors_applet_find_active_sensor(SensorsApplet *sensors_applet, GtkTreePath *path) {
+ GtkTreePath *sensor_tree_path;
+ GList *current_sensor;
+
+ for (current_sensor = sensors_applet->active_sensors; current_sensor != NULL; current_sensor = g_list_next(current_sensor)) {
+ sensor_tree_path = gtk_tree_row_reference_get_path(((ActiveSensor *)(current_sensor->data))->sensor_row);
+
+ if (gtk_tree_path_compare(path, sensor_tree_path) == 0) {
+ gtk_tree_path_free(sensor_tree_path);
+ return ((ActiveSensor *)(current_sensor->data));
+ }
+ gtk_tree_path_free(sensor_tree_path);
+ }
+ return NULL;
+}
+
/* path should be the full path to a file representing the sensor (eg
* /dev/hda or /sys/devices/platform/i2c-0/0-0290/temp1_input) */
-
void sensors_applet_display_layout_changed(SensorsApplet *sensors_applet) {
- /* update sensors since will need to update icons / graphs etc
- * if weren't displayed before */
- GList *list = NULL;
- for (list = sensors_applet->active_sensors;
- list != NULL;
- list = list->next) {
- ActiveSensor *as = (ActiveSensor *)list->data;
- as->updated = FALSE;
- }
- sensors_applet_update_active_sensors(sensors_applet);
- sensors_applet_pack_display(sensors_applet);
+ /* update sensors since will need to update icons / graphs etc
+ * if weren't displayed before */
+ GList *list = NULL;
+ for (list = sensors_applet->active_sensors; list != NULL; list = list->next) {
+ ActiveSensor *as = (ActiveSensor *)list->data;
+ as->updated = FALSE;
+ }
+ sensors_applet_update_active_sensors(sensors_applet);
+ sensors_applet_pack_display(sensors_applet);
}
void sensors_applet_alarm_off(SensorsApplet *sensors_applet,
GtkTreePath *path,
NotifType notif_type) {
- ActiveSensor *active_sensor;
+ ActiveSensor *active_sensor;
- if ((active_sensor = sensors_applet_find_active_sensor(sensors_applet,
- path)) != NULL) {
- active_sensor_alarm_off(active_sensor, notif_type);
- }
+ if ((active_sensor = sensors_applet_find_active_sensor(sensors_applet, path)) != NULL) {
+ active_sensor_alarm_off(active_sensor, notif_type);
+ }
}
-
-void sensors_applet_all_alarms_off(SensorsApplet *sensors_applet,
- GtkTreePath *path) {
- sensors_applet_alarm_off(sensors_applet, path, LOW_ALARM);
- sensors_applet_alarm_off(sensors_applet, path, HIGH_ALARM);
+
+void sensors_applet_all_alarms_off(SensorsApplet *sensors_applet, GtkTreePath *path) {
+ sensors_applet_alarm_off(sensors_applet, path, LOW_ALARM);
+ sensors_applet_alarm_off(sensors_applet, path, HIGH_ALARM);
}
+void sensors_applet_sensor_enabled(SensorsApplet *sensors_applet, GtkTreePath *path) {
+ ActiveSensor *active_sensor;
-void sensors_applet_sensor_enabled(SensorsApplet *sensors_applet,
- GtkTreePath *path) {
- ActiveSensor *active_sensor;
+ g_assert(sensors_applet);
+ g_assert(path);
- g_assert(sensors_applet);
- g_assert(path);
+ active_sensor = active_sensor_new(sensors_applet, gtk_tree_row_reference_new(GTK_TREE_MODEL(sensors_applet->sensors), path));
+ active_sensor_update(active_sensor, sensors_applet);
- active_sensor = active_sensor_new(sensors_applet,
- gtk_tree_row_reference_new(GTK_TREE_MODEL(sensors_applet->sensors), path));
-
- active_sensor_update(active_sensor, sensors_applet);
-
- /* keep list sorted */
- sensors_applet->active_sensors = g_list_insert_sorted(sensors_applet->active_sensors,
- active_sensor,
+ /* keep list sorted */
+ sensors_applet->active_sensors = g_list_insert_sorted(sensors_applet->active_sensors,
+ active_sensor,
(GCompareFunc)active_sensor_compare);
-
- sensors_applet_pack_display(sensors_applet);
+
+ sensors_applet_pack_display(sensors_applet);
}
void sensors_applet_reorder_sensors(SensorsApplet *sensors_applet) {
- sensors_applet->active_sensors = g_list_sort(sensors_applet->active_sensors, (GCompareFunc)active_sensor_compare);
+ sensors_applet->active_sensors = g_list_sort(sensors_applet->active_sensors, (GCompareFunc)active_sensor_compare);
- sensors_applet_pack_display(sensors_applet);
-}
-
-void sensors_applet_sensor_disabled(SensorsApplet *sensors_applet,
- GtkTreePath *path) {
-
- ActiveSensor *active_sensor;
-
- g_assert(sensors_applet);
- g_assert(path);
-
- if ((active_sensor = sensors_applet_find_active_sensor(sensors_applet,
- path)) != NULL) {
- g_debug("Destroying active sensor...");
-
- g_debug("-- removing from list...");
- sensors_applet->active_sensors = g_list_remove(sensors_applet->active_sensors,
- active_sensor);
- g_debug("-- repacking display....");
- sensors_applet_pack_display(sensors_applet);
-
- active_sensor_destroy(active_sensor);
- }
+ sensors_applet_pack_display(sensors_applet);
}
+void sensors_applet_sensor_disabled(SensorsApplet *sensors_applet, GtkTreePath *path) {
-void sensors_applet_update_sensor(SensorsApplet *sensors_applet,
- GtkTreePath *path) {
- ActiveSensor *active_sensor;
+ ActiveSensor *active_sensor;
- g_assert(sensors_applet);
- g_assert(path);
+ g_assert(sensors_applet);
+ g_assert(path);
- if ((active_sensor = sensors_applet_find_active_sensor(sensors_applet,
- path)) != NULL) {
- active_sensor_update(active_sensor,
- sensors_applet);
- }
+ if ((active_sensor = sensors_applet_find_active_sensor(sensors_applet, path)) != NULL) {
+ g_debug("Destroying active sensor...");
+
+ g_debug("-- removing from list...");
+ sensors_applet->active_sensors = g_list_remove(sensors_applet->active_sensors, active_sensor);
+ g_debug("-- repacking display....");
+ sensors_applet_pack_display(sensors_applet);
+
+ active_sensor_destroy(active_sensor);
+ }
+}
+
+void sensors_applet_update_sensor(SensorsApplet *sensors_applet, GtkTreePath *path) {
+ ActiveSensor *active_sensor;
+
+ g_assert(sensors_applet);
+ g_assert(path);
+
+ if ((active_sensor = sensors_applet_find_active_sensor(sensors_applet, path)) != NULL) {
+ active_sensor_update(active_sensor, sensors_applet);
+ }
}
-
-void sensors_applet_icon_changed(SensorsApplet *sensors_applet,
- GtkTreePath *path) {
- ActiveSensor *active_sensor;
-
- g_assert(sensors_applet);
- g_assert(path);
-
- if ((active_sensor = sensors_applet_find_active_sensor(sensors_applet,
- path)) != NULL) {
- active_sensor_icon_changed(active_sensor,
- sensors_applet);
- }
+
+void sensors_applet_icon_changed(SensorsApplet *sensors_applet, GtkTreePath *path) {
+ ActiveSensor *active_sensor;
+
+ g_assert(sensors_applet);
+ g_assert(path);
+
+ if ((active_sensor = sensors_applet_find_active_sensor(sensors_applet, path)) != NULL) {
+ active_sensor_icon_changed(active_sensor, sensors_applet);
+ }
}
-/**
- * Cycle thru ActiveSensors and update them all
- */
+/* Cycle thru ActiveSensors and update them all */
gboolean sensors_applet_update_active_sensors(SensorsApplet *sensors_applet) {
- g_assert(sensors_applet);
-
- if (sensors_applet->active_sensors) {
- g_list_foreach(sensors_applet->active_sensors,
- (GFunc)active_sensor_update,
- sensors_applet);
- return TRUE;
- }
- return FALSE;
+ g_assert(sensors_applet);
+
+ if (sensors_applet->active_sensors) {
+ g_list_foreach(sensors_applet->active_sensors,
+ (GFunc)active_sensor_update,
+ sensors_applet);
+ return TRUE;
+ }
+ return FALSE;
}
-/**
- * Cycle thru ActiveSensors and set new graph dimensions
- */
+/* Cycle thru ActiveSensors and set new graph dimensions */
void sensors_applet_graph_size_changed(SensorsApplet *sensors_applet) {
- gint dimensions[2];
- gint graph_size;
- g_assert(sensors_applet);
-
- if (sensors_applet->active_sensors) {
-
- 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) ==
- MATE_PANEL_APPLET_ORIENT_DOWN) {
- /* is horizontal so set graph_size as width */
- dimensions[0] = graph_size;
- dimensions[1] = sensors_applet->size;
- } else {
- dimensions[0] = sensors_applet->size;
- dimensions[1] = graph_size;
- }
+ gint dimensions[2];
+ gint graph_size;
+ g_assert(sensors_applet);
- g_list_foreach(sensors_applet->active_sensors,
- (GFunc)active_sensor_update_graph_dimensions,
- &dimensions);
+ if (sensors_applet->active_sensors) {
+
+ 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) == MATE_PANEL_APPLET_ORIENT_DOWN) {
+
+ /* is horizontal so set graph_size as width */
+ dimensions[0] = graph_size;
+ dimensions[1] = sensors_applet->size;
+ } else {
+ dimensions[0] = sensors_applet->size;
+ dimensions[1] = graph_size;
}
-
+
+ g_list_foreach(sensors_applet->active_sensors,
+ (GFunc)active_sensor_update_graph_dimensions,
+ &dimensions);
+ }
+
}
-gdouble sensors_applet_convert_temperature(gdouble value,
- TemperatureScale old,
- TemperatureScale new) {
+gdouble sensors_applet_convert_temperature(gdouble value, TemperatureScale old, TemperatureScale new) {
- switch (old) {
+ switch (old) {
case KELVIN:
- switch (new) {
+ switch (new) {
case CELSIUS:
- value = value - 273.0;
- break;
+ value = value - 273.0;
+ break;
case FAHRENHEIT:
- value = (9.0 * (value - 273) / 5.0) + 32.0;
- break;
+ value = (9.0 * (value - 273) / 5.0) + 32.0;
+ break;
case KELVIN:
- break;
- }
- break;
+ break;
+ }
+ break;
+
case CELSIUS:
- switch (new) {
+ switch (new) {
case FAHRENHEIT:
- value = (9.0 * value / 5.0) + 32.0;
- break;
+ value = (9.0 * value / 5.0) + 32.0;
+ break;
case KELVIN:
- value = value + 273.0;
- break;
+ value = value + 273.0;
+ break;
case CELSIUS:
- break;
- }
- break;
+ break;
+ }
+ break;
case FAHRENHEIT:
- switch (new) {
- case CELSIUS:
- value = (5.0 * (value - 32.0) / 9.0);
- break;
- case KELVIN:
- value = (5.0 * (value - 32.0) / 9.0) + 273.0;
- break;
- case FAHRENHEIT:
- break;
- }
+ switch (new) {
+ case CELSIUS:
+ value = (5.0 * (value - 32.0) / 9.0);
break;
- }
- return value;
+ case KELVIN:
+ value = (5.0 * (value - 32.0) / 9.0) + 273.0;
+ break;
+ case FAHRENHEIT:
+ break;
+ }
+ break;
+ }
+ return value;
}
void sensors_applet_init(SensorsApplet *sensors_applet) {
-
- g_assert(sensors_applet);
- g_assert(sensors_applet->applet);
-
- GtkActionGroup *action_group;
- gchar *ui_path;
-
- /* Have our background automatically painted. */
- mate_panel_applet_set_background_widget(MATE_PANEL_APPLET(sensors_applet->applet),
- GTK_WIDGET(sensors_applet->applet));
-
- /* 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,
- g_str_equal);
-
- sensors_applet->required_plugins = g_hash_table_new_full(g_str_hash,
- g_str_equal,
- g_free,
- NULL);
-
- /* initialise size */
- sensors_applet->size = DEFAULT_APPLET_SIZE;
-
- mate_panel_applet_set_flags(sensors_applet->applet,
- MATE_PANEL_APPLET_EXPAND_MINOR);
-
- g_signal_connect(sensors_applet->applet, "destroy",
- G_CALLBACK(destroy_cb),
- sensors_applet);
-
- /* init gsettings */
- sensors_applet->settings = mate_panel_applet_settings_new (sensors_applet->applet,
- "org.mate.sensors-applet");
-
- // load sensors from array saved in gsettings
- sensors_applet_conf_setup_sensors(sensors_applet);
-
-
- /* now do any setup needed manually */
- sensors_applet_plugins_load_all(sensors_applet);
-
- /* should have created sensors tree above, but if have
- not was because we couldn't find any sensors */
- if (NULL == sensors_applet->sensors) {
- GtkWidget *label;
- label = gtk_label_new(_("No sensors found!"));
- gtk_container_add(GTK_CONTAINER(sensors_applet->applet), label);
- gtk_widget_show_all(GTK_WIDGET(sensors_applet->applet));
- return;
- }
-
- /* only do menu and signal connections if sensors are found */
- 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),
- sensors_applet);
-
- g_signal_connect(G_OBJECT(sensors_applet->applet), "change_orient",
- G_CALLBACK(change_orient_cb),
- sensors_applet);
-
- g_signal_connect(G_OBJECT(sensors_applet->applet), "size_allocate",
- G_CALLBACK(size_allocate_cb),
- sensors_applet);
-
- g_signal_connect(G_OBJECT(sensors_applet->applet), "leave_notify_event",
- G_CALLBACK(mouse_leave_cb),
- (gpointer)sensors_applet);
-
- g_signal_connect(G_OBJECT(sensors_applet->applet), "enter_notify_event",
- G_CALLBACK(mouse_enter_cb),
- (gpointer)sensors_applet);
-
-
- sensors_applet_update_active_sensors(sensors_applet);
- sensors_applet_pack_display(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);
- gtk_widget_show_all(GTK_WIDGET(sensors_applet->applet));
-}
+ g_assert(sensors_applet);
+ g_assert(sensors_applet->applet);
+
+ GtkActionGroup *action_group;
+ gchar *ui_path;
+
+ /* Have our background automatically painted. */
+ mate_panel_applet_set_background_widget(MATE_PANEL_APPLET(sensors_applet->applet), GTK_WIDGET(sensors_applet->applet));
+
+ /* 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, g_str_equal);
+
+ sensors_applet->required_plugins = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
+
+ /* initialise size */
+ sensors_applet->size = DEFAULT_APPLET_SIZE;
+
+ mate_panel_applet_set_flags(sensors_applet->applet, MATE_PANEL_APPLET_EXPAND_MINOR);
+
+ g_signal_connect(sensors_applet->applet, "destroy",
+ G_CALLBACK(destroy_cb),
+ sensors_applet);
+
+ /* init gsettings */
+ sensors_applet->settings = mate_panel_applet_settings_new (sensors_applet->applet, "org.mate.sensors-applet");
+ // load sensors from array saved in gsettings
+ sensors_applet_conf_setup_sensors(sensors_applet);
+
+ /* now do any setup needed manually */
+ sensors_applet_plugins_load_all(sensors_applet);
+
+ /* should have created sensors tree above, but if have not was because we couldn't find any sensors */
+ if (NULL == sensors_applet->sensors) {
+ GtkWidget *label;
+ label = gtk_label_new(_("No sensors found!"));
+ gtk_container_add(GTK_CONTAINER(sensors_applet->applet), label);
+ gtk_widget_show_all(GTK_WIDGET(sensors_applet->applet));
+ return;
+ }
+
+ /* only do menu and signal connections if sensors are found */
+ 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),
+ sensors_applet);
+
+ g_signal_connect(G_OBJECT(sensors_applet->applet), "change_orient",
+ G_CALLBACK(change_orient_cb),
+ sensors_applet);
+
+ g_signal_connect(G_OBJECT(sensors_applet->applet), "size_allocate",
+ G_CALLBACK(size_allocate_cb),
+ sensors_applet);
+
+ g_signal_connect(G_OBJECT(sensors_applet->applet), "leave_notify_event",
+ G_CALLBACK(mouse_leave_cb),
+ (gpointer)sensors_applet);
+
+ g_signal_connect(G_OBJECT(sensors_applet->applet), "enter_notify_event",
+ G_CALLBACK(mouse_enter_cb),
+ (gpointer)sensors_applet);
+
+ sensors_applet_update_active_sensors(sensors_applet);
+ sensors_applet_pack_display(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);
+ gtk_widget_show_all(GTK_WIDGET(sensors_applet->applet));
+}