Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Make doubletap filtering obey the doubletap wakeup setting
Filtering occurs in one place, regardless of where and how the doubletap
event gets emitted from. Filtering takes the doubletap wakeup setting
into account, and thus "mcetool --set-doubletap-wakeup=always" works now
as expected.

[mce] Make doubletap filtering obey the doubletap wakeup setting
  • Loading branch information
spiiroin committed Mar 11, 2014
1 parent 0d238cb commit 76546fa
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 18 deletions.
2 changes: 2 additions & 0 deletions .depend
Expand Up @@ -915,6 +915,7 @@ tklock.o:\
mce-io.h\
mce-log.h\
mce.h\
modules/doubletap.h\
systemui/dbus-names.h\
systemui/tklock-dbus-names.h\
tklock.h\
Expand All @@ -930,6 +931,7 @@ tklock.pic.o:\
mce-io.h\
mce-log.h\
mce.h\
modules/doubletap.h\
systemui/dbus-names.h\
systemui/tklock-dbus-names.h\
tklock.h\
Expand Down
22 changes: 9 additions & 13 deletions event-input.c
Expand Up @@ -1724,7 +1724,7 @@ static gboolean touchscreen_iomon_cb(gpointer data, gsize bytes_read)
case MCE_DISPLAY_LPM_OFF:
case MCE_DISPLAY_LPM_ON:
if( doubletap_emulate(ev) ) {
mce_log(LL_NOTICE, "EMULATING DOUBLETAP");
mce_log(LL_DEVEL, "[doubletap] emulated from touch input");
ev->type = EV_MSC;
ev->code = MSC_GESTURE;
ev->value = 0x4;
Expand Down Expand Up @@ -1818,18 +1818,14 @@ static gboolean doubletap_iomon_cb(gpointer data, gsize bytes_read)
mce_log(LL_DEVEL, "[doubletap] while proximity=%s",
proximity_state_repr(proximity_sensor_state));

if( proximity_sensor_state == COVER_CLOSED ) {
mce_log(LL_DEVEL, "[doubletap] ignored");
}
else {
mce_log(LL_DEVEL, "[doubletap] forwarded");
/* Mimic N9 style gesture event for which we
* already have logic in place */
ev->type = EV_MSC;
ev->code = MSC_GESTURE;
ev->value = 0x4;
flush = touchscreen_iomon_cb(ev, sizeof *ev);
}
/* Mimic N9 style gesture event for which we
* already have logic in place. Possible filtering
* due to proximity state etc happens at tklock.c
*/
ev->type = EV_MSC;
ev->code = MSC_GESTURE;
ev->value = 0x4;
touchscreen_iomon_cb(ev, sizeof *ev);
}
EXIT:
return flush;
Expand Down
56 changes: 51 additions & 5 deletions tklock.c
Expand Up @@ -52,6 +52,8 @@
# include "libwakelock.h"
#endif

#include "modules/doubletap.h"

// FIXME: not used atm, need to implement something similar
#ifdef DEAD_CODE
/* Valid triggers for autorelock */
Expand Down Expand Up @@ -260,6 +262,12 @@ static gint doubletap_gesture_policy = DEFAULT_DOUBLETAP_GESTURE_POLICY;
/** GConf callback ID for doubletap_gesture_policy */
static guint doubletap_gesture_policy_cb_id = 0;

/** Touchscreen double tap gesture mode */
gint doubletap_enable_mode = DBLTAP_ENABLE_DEFAULT;
/** GConf callback ID for doubletap_enable_mode */
static guint doubletap_enable_mode_cb_id = 0;


/** Flag: Disable automatic dim/blank from tklock */
static gint tklock_blank_disable = FALSE;
/** GConf notifier id for tracking tklock_blank_disable changes */
Expand Down Expand Up @@ -594,7 +602,6 @@ static void tklock_datapipe_proximity_sensor_cb(gconstpointer data)
}
else {
tklock_datapipe_proximity_uncover_cancel();

tklock_datapipe_proximity_update();
}

Expand Down Expand Up @@ -660,7 +667,6 @@ static void tklock_datapipe_music_playback_cb(gconstpointer data)
return;
}


/** Alarm state; assume no active alarms */
static alarm_ui_state_t alarm_ui_state = MCE_ALARM_UI_OFF_INT32;

Expand Down Expand Up @@ -979,9 +985,32 @@ static void tklock_datapipe_touchscreen_cb(gconstpointer const data)
if( ev->type != EV_MSC || ev->code != MSC_GESTURE || ev->value != 0x4 )
goto EXIT;

if( system_state != MCE_STATE_USER )
switch( doubletap_enable_mode ) {
case DBLTAP_ENABLE_NEVER:
mce_log(LL_DEVEL, "[doubletap] ignored due to setting=never");
goto EXIT;

case DBLTAP_ENABLE_ALWAYS:
break;

default:
case DBLTAP_ENABLE_NO_PROXIMITY:
if( proximity_state_actual != COVER_OPEN ) {
mce_log(LL_DEVEL, "[doubletap] ignored due to proximity");
goto EXIT;
}
break;
}

switch( system_state ) {
case MCE_STATE_USER:
case MCE_STATE_ACTDEAD:
break;
default:
mce_log(LL_DEVEL, "[doubletap] ignored due to system state");
goto EXIT;
}

switch( display_state )
{
case MCE_DISPLAY_OFF:
Expand All @@ -995,6 +1024,7 @@ static void tklock_datapipe_touchscreen_cb(gconstpointer const data)
case MCE_DISPLAY_DIM:
case MCE_DISPLAY_POWER_UP:
case MCE_DISPLAY_UNDEF:
mce_log(LL_DEVEL, "[doubletap] ignored due to display state");
goto EXIT;
}

Expand Down Expand Up @@ -2347,6 +2377,7 @@ static void tklock_evctrl_rethink(void)
* - - - - - - - - - - - - - - - - - - - */

mce_log(LL_DEBUG, "kp=%d dt=%d ts=%d", enable_kp, enable_dt, enable_ts);

tklock_evctrl_set_kp_state(enable_kp);
tklock_evctrl_set_dt_state(enable_dt);
tklock_evctrl_set_ts_state(enable_ts);
Expand Down Expand Up @@ -2386,7 +2417,6 @@ static void tklock_evctrl_rethink(void)
GINT_TO_POINTER(grab_ts),
USE_INDATA, CACHE_INDATA);


/* - - - - - - - - - - - - - - - - - - - *
* in case emitting of keypad events can't
* be controlled, we use evdev input grab
Expand Down Expand Up @@ -2564,6 +2594,12 @@ static void tklock_gconf_cb(GConfClient *const gcc, const guint id,
#endif

}
else if( id == doubletap_enable_mode_cb_id ) {
gint old = doubletap_enable_mode;
doubletap_enable_mode = gconf_value_get_int(gcv);
mce_log(LL_NOTICE, "doubletap_enable_mode: %d -> %d",
old, doubletap_enable_mode);
}
else {
mce_log(LL_WARN, "Spurious GConf value received; confused!");
}
Expand Down Expand Up @@ -2608,6 +2644,14 @@ static void tklock_gconf_init(void)
doubletap_gesture_policy = DEFAULT_DOUBLETAP_GESTURE_POLICY;
}

/** Touchscreen double tap gesture mode */
mce_gconf_notifier_add(MCE_GCONF_DOUBLETAP_PATH,
MCE_GCONF_DOUBLETAP_MODE,
tklock_gconf_cb,
&doubletap_enable_mode_cb_id);
mce_gconf_get_int(MCE_GCONF_DOUBLETAP_MODE, &doubletap_enable_mode);


/* Touchscreen/keypad autolock enabled/disabled */
mce_gconf_notifier_add(MCE_GCONF_LOCK_PATH,
MCE_GCONF_TK_DOUBLE_TAP_GESTURE_PATH,
Expand All @@ -2627,6 +2671,9 @@ static void tklock_gconf_quit(void)

if( tklock_blank_disable_id )
mce_gconf_notifier_remove(GINT_TO_POINTER(tklock_blank_disable_id), 0);

if( doubletap_enable_mode_cb_id )
mce_gconf_notifier_remove(GINT_TO_POINTER(doubletap_enable_mode_cb_id), 0);
}

/* ========================================================================= *
Expand Down Expand Up @@ -2996,7 +3043,6 @@ static gboolean tklock_dbus_mode_change_req_cb(DBusMessage *const msg)
mce_log(LL_DEVEL, "Received tklock mode change request '%s' from %s",
mode, mce_dbus_get_message_sender_ident(msg));


int state = LOCK_UNDEF;

if (!strcmp(MCE_TK_LOCKED, mode))
Expand Down

0 comments on commit 76546fa

Please sign in to comment.