#include <string.h>
#include <stdlib.h>
+#include <time.h>
#include <glib.h>
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-lowlevel.h>
gboolean mode_locked;
gboolean display_on;
+ time_t last_press;
+ unsigned press_count;
};
+static void speak_time(struct app_data *app)
+{
+ int res = system("espeaktime-now.sh");
+ g_debug("speak script: %d", res);
+}
+
static void sig_tklock_mode(DBusGProxy *proxy, const char *mode, gpointer user_data)
{
struct app_data *app = user_data;
struct app_data *app = user_data;
g_debug("sig_display_status [%s]", status);
app->display_on = !strcmp(status, MCE_DISPLAY_ON_STRING);
+
+ /* Double-pressing the button at a normal rate will usually result
+ * in the two ButtonPress events being received before the display_status==on
+ * event. Check here if that's the case.
+ */
+ if (app->display_on && app->press_count > 1 && app->last_press - time(NULL) <= 1)
+ speak_time(app);
}
static void debug_log(const gchar *log_domain,
static void power_button(struct app_data *app)
{
- g_debug("power button");
- if (app->mode_locked && app->display_on) {
- int res = system("espeaktime-now.sh");
- g_debug("speak script: %d", res);
- }
+ time_t now;
+
+ time(&now);
+ if (now - app->last_press > 1)
+ app->press_count = 0;
+ app->press_count++;
+ app->last_press = now;
+
+ g_debug("power button: count=%d", app->press_count);
+ if (app->mode_locked && app->display_on)
+ speak_time(app);
}
/**