summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorinfo-cppsp <[email protected]>2018-01-24 21:11:34 +0100
committerraveit65 <[email protected]>2018-01-25 14:59:35 +0100
commitaaddbc0387c7e4089fe1d828ae422f2c88885d9f (patch)
treee95bc90a835060814d600f23ce845d808f037ee7
parent826c61d7a97c6dcb4a5136dfc15cc6702515b480 (diff)
downloadmate-sensors-applet-aaddbc0387c7e4089fe1d828ae422f2c88885d9f.tar.bz2
mate-sensors-applet-aaddbc0387c7e4089fe1d828ae422f2c88885d9f.tar.xz
Fix popup shower on removed HDD
Added timer to active sensors, to suppress infinite popups, when a drive is removed from the system, with its sensor still active in msa. fixes #62
-rw-r--r--sensors-applet/active-sensor.c5
-rw-r--r--sensors-applet/active-sensor.h3
-rw-r--r--sensors-applet/sensors-applet.c28
3 files changed, 30 insertions, 6 deletions
diff --git a/sensors-applet/active-sensor.c b/sensors-applet/active-sensor.c
index 5ffb262..6ae6831 100644
--- a/sensors-applet/active-sensor.c
+++ b/sensors-applet/active-sensor.c
@@ -420,6 +420,11 @@ ActiveSensor *active_sensor_new(SensorsApplet *sensors_applet,
active_sensor->sensor_row = sensor_row;
+#ifdef HAVE_LIBNOTIFY
+ /* set a base time, creation -5 minutes */
+ active_sensor->ierror_ts = time(NULL) - 300;
+#endif
+
int i;
for (i = 0; i < NUM_ALARMS; i++) {
active_sensor->alarm_timeout_id[i] = -1;
diff --git a/sensors-applet/active-sensor.h b/sensors-applet/active-sensor.h
index 6db381e..5c5e864 100644
--- a/sensors-applet/active-sensor.h
+++ b/sensors-applet/active-sensor.h
@@ -20,6 +20,7 @@
#define ACTIVE_SENSOR_H
#ifdef HAVE_LIBNOTIFY
+#include <time.h>
#include <libnotify/notify.h>
#include "active-sensor-libnotify.h"
#endif
@@ -42,6 +43,8 @@ struct _ActiveSensor {
#ifdef HAVE_LIBNOTIFY
NotifyNotification *notification[NUM_NOTIFS];
+ /* error timestamp - save the time of the last SENSOR_INTERFACE_ERROR */
+ time_t ierror_ts;
#endif
gboolean updated;
diff --git a/sensors-applet/sensors-applet.c b/sensors-applet/sensors-applet.c
index a401d32..3ddd48d 100644
--- a/sensors-applet/sensors-applet.c
+++ b/sensors-applet/sensors-applet.c
@@ -272,6 +272,8 @@ void sensors_applet_notify_active_sensor(ActiveSensor *active_sensor, NotifType
const gchar *limit_type = NULL;
const gchar *units = NULL;
gdouble limit_value;
+ gdouble seconds;
+ gboolean show_notification = TRUE;
sensors_applet = active_sensor->sensors_applet;
@@ -365,21 +367,35 @@ void sensors_applet_notify_active_sensor(ActiveSensor *active_sensor, NotifType
break;
case SENSOR_INTERFACE_ERROR:
+ /* get time since the last error */
+ seconds = difftime(time(NULL), active_sensor->ierror_ts);
+
+ /* if the last error happened less than 10 seconds ago, don't display this one
+ * this should prevent recurring popups for removed sensors, like USB-HDDs */
+ if (seconds < 11.0) {
+ show_notification = FALSE;
+ }
+
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);
+
+ /* update timestamp */
+ time(&(active_sensor->ierror_ts));
break;
default:
g_assert_not_reached();
}
- active_sensor_libnotify_notify(active_sensor,
- notif_type,
- summary,
- message,
- "dialog-warning",
- timeout_msecs);
+ if (show_notification) {
+ active_sensor_libnotify_notify(active_sensor,
+ notif_type,
+ summary,
+ message,
+ "dialog-warning",
+ timeout_msecs);
+ }
g_free(sensor_path);
g_free(sensor_label);