#define DEFAULT_QUICKPANEL_AREA_SIZE 60
#define DEFAULT_LONGPRESS_TIMEOUT 0.4
+#define DEFAULT_INVALID_AREA_SIZE 0
#define ACCESSIBILITY_CONFIG "Screen_Reader_Accessibility_Config"
#define MODULE_ACCESSIBILITY "module.screen_reader.accessibility"
aconfig->conf->gesture.quickpanel_area_size = DEFAULT_QUICKPANEL_AREA_SIZE;
if (aconfig->conf->gesture.longpress_timeout <= 0.0)
aconfig->conf->gesture.longpress_timeout = DEFAULT_LONGPRESS_TIMEOUT;
+ if (aconfig->conf->gesture.invalid_area_size.top < 0)
+ aconfig->conf->gesture.invalid_area_size.top = DEFAULT_INVALID_AREA_SIZE;
+ if (aconfig->conf->gesture.invalid_area_size.bottom < 0)
+ aconfig->conf->gesture.invalid_area_size.bottom = DEFAULT_INVALID_AREA_SIZE;
}
void
E_CONFIG_VAL(aconfig->conf_edd, E_Accessibility_Conf_Edd, gesture.quickpanel_area_size, UINT);
E_CONFIG_VAL(aconfig->conf_edd, E_Accessibility_Conf_Edd, gesture.longpress_timeout, DOUBLE);
+ E_CONFIG_VAL(aconfig->conf_edd, E_Accessibility_Conf_Edd, gesture.invalid_area_size.top, UINT);
+ E_CONFIG_VAL(aconfig->conf_edd, E_Accessibility_Conf_Edd, gesture.invalid_area_size.bottom, UINT);
aconfig->conf = e_config_domain_load(MODULE_ACCESSIBILITY, aconfig->conf_edd);
Eina_Bool started; // indicates if taps recognition process has started
Eina_Bool pressed; // indicates if finger is down
int n_taps; // number of taps captures in sequence
- int finger[3]; // device id of finget
+ int finger[3]; // device id of finger
Ecore_Timer *timer; // sequence expiration timer
int x_org[3], y_org[3]; // coordinates of first tap
gesture_type_e tap_type;
int drag_y_delta;
} tap_n_hold_gesture_data;
+ struct {
+ int n_taps;
+ Eina_Bool invalid_pressed;
+ } finger_data;
+
Ecore_Timer *up_timer;
};
typedef struct _Cover Cover;
}
static Eina_Bool
+_is_event_on_valid_area(int type, int x, int y)
+{
+ E_Zone *zone;
+ E_Accessibility_Conf_Edd* conf;
+ Eina_Bool is_invalid_area = EINA_FALSE;
+
+ conf = e_accessibility_get_configuration();
+ if (!conf) return EINA_TRUE;
+
+ if (conf->gesture.invalid_area_size.top == 0 &&
+ conf->gesture.invalid_area_size.bottom == 0) return EINA_TRUE;
+
+ zone = e_zone_current_get();
+ if (!zone) return EINA_TRUE;
+
+ /*TODO: handle zone->rot.act 90, 270 */
+ if ((y > zone->h - conf->gesture.invalid_area_size.bottom) ||
+ (y < conf->gesture.invalid_area_size.top ))
+ {
+ is_invalid_area = EINA_TRUE;
+ }
+
+ if (ECORE_EVENT_MOUSE_BUTTON_DOWN == type)
+ {
+ if (is_invalid_area)
+ {
+ if (cover->finger_data.n_taps == 0)
+ cover->finger_data.invalid_pressed = EINA_TRUE;
+ }
+ cover->finger_data.n_taps++;
+
+ if (is_invalid_area || cover->finger_data.invalid_pressed)
+ return EINA_FALSE;
+ }
+ else if (ECORE_EVENT_MOUSE_BUTTON_UP == type)
+ {
+ cover->finger_data.n_taps--;
+ if (cover->finger_data.invalid_pressed)
+ {
+ if (cover->finger_data.n_taps == 0)
+ cover->finger_data.invalid_pressed = EINA_FALSE;
+ return EINA_FALSE;
+ }
+ }
+ else
+ {
+ if (is_invalid_area && (cover->finger_data.n_taps == 0))
+ return EINA_FALSE;
+
+ if (cover->finger_data.invalid_pressed)
+ return EINA_FALSE;
+ }
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool
+_is_valid_event(int type, void *event)
+{
+ if (type == ECORE_EVENT_MOUSE_BUTTON_DOWN)
+ {
+ Ecore_Event_Mouse_Button *ev = event;
+ return _is_event_on_valid_area(type, ev->x, ev->y);
+ }
+ else if (type == ECORE_EVENT_MOUSE_BUTTON_UP)
+ {
+ Ecore_Event_Mouse_Button *ev = event;
+ return _is_event_on_valid_area(type, ev->x, ev->y);
+ }
+ else if (type == ECORE_EVENT_MOUSE_MOVE)
+ {
+ Ecore_Event_Mouse_Move *ev = event;
+ return _is_event_on_valid_area(type, ev->x, ev->y);
+ }
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool
_event_filter(void *data, void *loop_data, int type, void *event)
{
Eina_Bool ret = EINA_TRUE;
return ret;
}
+ /* FHub requirement */
+ if (!_is_valid_event(type, event))
+ {
+ return ret;
+ }
+
if (type == ECORE_EVENT_MOUSE_BUTTON_DOWN)
{
ret = _mouse_button_down(type, event);