X-Git-Url: http://git.maemo.org/git/?p=espeaktime;a=blobdiff_plain;f=src%2Fdaemon.c;h=065c99010822d8287b3ddd3345feb5478874aebc;hp=3330da098f9b5bdbbc2597b3fe5d74f070e00be1;hb=669f1a2dd13d094f28392a90cf81500e6314816b;hpb=bb6debe65662306cc7ffa3b86c83b2404299b03f diff --git a/src/daemon.c b/src/daemon.c index 3330da0..065c990 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -18,8 +19,16 @@ struct app_data { 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; @@ -32,6 +41,13 @@ static void sig_display_status(DBusGProxy *proxy, const char *status, gpointer u 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 && time(NULL) - app->last_press <= 1) + speak_time(app); } static void debug_log(const gchar *log_domain, @@ -42,11 +58,17 @@ 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); } /**