ZOOM_OUT,
};
+int device_number_shift;
+
typedef struct _TouchInputSequence {
double delay;
void (*dispatch_func)(int type, int x, int y, int device);
ev->multi.y = y;
ev->multi.root.x = x;
ev->multi.root.y = y;
- ev->multi.device = device;
+ ev->multi.device = device + device_number_shift;
ev->window = e_comp->win;
ev->event_window = ev->window;
ev->root_window = e_comp->root;
ev->multi.y = y;
ev->multi.root.x = x;
ev->multi.root.y = y;
- ev->multi.device = device;
+ ev->multi.device = device + device_number_shift;
ev->window = e_comp->win;
ev->event_window = ev->window;
ev->root_window = e_comp->root;
ev->multi.y = y;
ev->multi.root.x = x;
ev->multi.root.y = y;
- ev->multi.device = device;
+ ev->multi.device = device + device_number_shift;
ev->window = e_comp->win;
ev->event_window = ev->window;
ev->root_window = e_comp->root;
int _eina_log_dom = 0;
#define DBG(...) do EINA_LOG_DOM_DBG(_eina_log_dom, __VA_ARGS__); while(0)
+// constant below allows to distinguish the origin of mouse events between one created in this module and the one created by user
+#define MAGIC_DEVICE_NUMBER 2048
+
+
static Eina_Bool g_gesture_navi;
static Eina_List *handlers;
Eldbus_Connection *conn = NULL;
int highlighted_object_x, highlighted_object_y;
Eina_Bool is_selection_mode;
int object_needs_scroll_from_x, object_needs_scroll_from_y;
+Ecore_Event_Filter *ssp_ef = NULL;
+extern int device_number_shift;
EAPI E_Module_Api e_modapi =
{
"Screen Reader Module of Window Manager"
};
-#define GESTURE_DETECTED_SIGNAL 0
+typedef enum signal_type_ {
+ GESTURE_DETECTED_SIGNAL,
+ MOUSE_DOWN_SIGNAL,
+ MOUSE_UP_SIGNAL
+} signal_type;
+
+
static Eldbus_Message *_sc_enable(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
+static Eldbus_Message *_ssp_enable(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
static Eldbus_Message *_is_slider(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
static Eldbus_Message *_highlighted_object_info(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
static Eldbus_Message *_is_screen_reader_support(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
{ "ScreenReaderEnabled", ELDBUS_ARGS({"b", "bool"}), ELDBUS_ARGS({"b", "bool"}),
_sc_enable
},
+ { "ScreenSwitchProviderEnabled", ELDBUS_ARGS({"b", "bool"}), NULL,
+ _ssp_enable
+ },
{ "IsSlider", ELDBUS_ARGS({"b", "bool"}), NULL,
_is_slider
},
{"i", "x_end"}, {"i", "y_end"},
{"i", "state"}, {"u", "event_time"}),
0},
+ [MOUSE_DOWN_SIGNAL] = {"MouseDown", ELDBUS_ARGS({"i", "deviceId"}), 0},
+ [MOUSE_UP_SIGNAL] = {"MouseUp", ELDBUS_ARGS({"i", "deviceId"}), 0},
{ }
};
INFO("GestureDetected %s %d (%d %d %d %d %d %u)", _gesture_enum_to_string(gi->type),
(int)gi->type, gi->x_beg, gi->y_beg, gi->x_end, gi->y_end, gi->state, gi->event_time);
+
return 0;
}
return NULL;
}
+static Eina_Bool
+_ssp_filter(void *data, void *loop_data, int type, void *event)
+{
+ if (type == ECORE_EVENT_MOUSE_BUTTON_DOWN || type == ECORE_EVENT_MOUSE_BUTTON_UP)
+ {
+ Ecore_Event_Mouse_Button *ev = event;
+
+ if (ev->multi.device >= MAGIC_DEVICE_NUMBER)
+ {
+ ev->multi.device = ev->multi.device - MAGIC_DEVICE_NUMBER;
+ return EINA_TRUE;
+ }
+
+ if (type == ECORE_EVENT_MOUSE_BUTTON_DOWN)
+ eldbus_service_signal_emit(iface, MOUSE_DOWN_SIGNAL, ev->multi.device);
+ else
+ eldbus_service_signal_emit(iface, MOUSE_UP_SIGNAL, ev->multi.device);
+
+ return EINA_FALSE;
+ }
+
+ if (type == ECORE_EVENT_MOUSE_MOVE)
+ {
+ Ecore_Event_Mouse_Move *ev = event;
+
+ if (ev->multi.device >= MAGIC_DEVICE_NUMBER)
+ {
+ ev->multi.device = ev->multi.device - MAGIC_DEVICE_NUMBER;
+ return EINA_TRUE;
+ }
+ else
+ {
+ return EINA_FALSE;
+ }
+ }
+
+ return EINA_TRUE;
+}
+
+static Eldbus_Message *
+_ssp_enable(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
+{
+ Eina_Bool enabled = EINA_FALSE;
+ if (!eldbus_message_arguments_get(msg, "b", &enabled))
+ {
+ ERROR("eldbus_message_arguments_get() error\n");
+ return NULL;
+ }
+
+ if (enabled && !ssp_ef)
+ {
+ ssp_ef = ecore_event_filter_add(NULL, _ssp_filter, NULL, NULL);
+ device_number_shift = MAGIC_DEVICE_NUMBER;
+ }
+ else if (!enabled)
+ {
+ ecore_event_filter_del(ssp_ef);
+ ssp_ef = NULL;
+ device_number_shift = 0;
+ }
+
+ return eldbus_message_method_return_new(msg);
+}
+
+
static Eldbus_Message *
_is_slider(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
{
else
ERROR("eldbus_message_arguments_get() error\n");
- return NULL;
+ return eldbus_message_method_return_new(msg);
}
static int