+++ /dev/null
-#include <string.h>
-#include "gesture_tracker.h"
-#include "logger.h"
-
-#define BUS "com.samsung.EModule"
-#define INTERFACE "com.samsung.GestureNavigation"
-#define PATH "/com/samsung/GestureNavigation"
-#define SIGNAL "GestureDetected"
-
-static Eldbus_Connection *a11y_conn;
-static Eldbus_Object *object;
-static Eldbus_Proxy *man;
-static Gesture_Tracker_Cb user_cb;
-static void *user_data;
-
-static Gesture gesture_name_to_enum (const char *gesture_name)
-{
- if(!gesture_name)
- return GESTURES_COUNT;
-
- DEBUG("Dbus incoming gesture: %s", gesture_name);
-
- if(!strcmp("OneFingerHover", gesture_name))
- return ONE_FINGER_HOVER;
-
- if(!strcmp("TwoFingersHover", gesture_name))
- return TWO_FINGERS_HOVER;
-
- if(!strcmp("OneFingerFlickLeft", gesture_name))
- return ONE_FINGER_FLICK_LEFT;
-
- if(!strcmp("OneFingerFlickRight", gesture_name))
- return ONE_FINGER_FLICK_RIGHT;
-
- if(!strcmp("OneFingerFlickUp", gesture_name))
- return ONE_FINGER_FLICK_UP;
-
- if(!strcmp("OneFingerFlickDown", gesture_name))
- return ONE_FINGER_FLICK_DOWN;
-
- if(!strcmp("ThreeFingersFlickLeft", gesture_name))
- return THREE_FINGERS_FLICK_LEFT;
-
- if(!strcmp("ThreeFingersFlickRight", gesture_name))
- return THREE_FINGERS_FLICK_RIGHT;
-
- if(!strcmp("ThreeFingersFlickUp", gesture_name))
- return THREE_FINGERS_FLICK_UP;
-
- if(!strcmp("ThreeFingersFlickDown", gesture_name))
- return THREE_FINGERS_FLICK_DOWN;
-
- if(!strcmp("OneFingerSingleTap", gesture_name))
- return ONE_FINGER_SINGLE_TAP;
-
- if(!strcmp("OneFingerDoubleTap", gesture_name))
- return ONE_FINGER_DOUBLE_TAP;
-
- if(!strcmp("TwoFingersFlickLeft", gesture_name))
- return TWO_FINGERS_FLICK_LEFT;
-
- if(!strcmp("TwoFingersFlickRight", gesture_name))
- return TWO_FINGERS_FLICK_RIGHT;
-
- if(!strcmp("TwoFingersFlickUp", gesture_name))
- return TWO_FINGERS_FLICK_UP;
-
- if(!strcmp("TwoFingersFlickDown", gesture_name))
- return TWO_FINGERS_FLICK_DOWN;
-
- return GESTURES_COUNT;
-}
-
-static void on_gesture_detected(void *context EINA_UNUSED, const Eldbus_Message *msg)
-{
- const char *gesture_name;
- int x_s, y_s, x_e, y_e, state;
-
- if(!eldbus_message_arguments_get(msg, "siiiiu", &gesture_name, &x_s, &y_s, &x_e, &y_e, &state))
- ERROR("error geting arguments on_gesture_detected");
-
- Gesture_Info g;
- g.type = gesture_name_to_enum(gesture_name);
- g.x_begin = x_s;
- g.y_begin = y_s;
- g.x_end = x_e;
- g.y_end = y_e;
- g.state = state;
-
- if(user_cb)
- user_cb(user_data, &g);
-}
-
-void gesture_tracker_init(Eldbus_Connection *conn)
-{
- a11y_conn = conn;
- eldbus_connection_ref(conn);
- object = eldbus_object_get(conn, BUS, PATH);
- man = eldbus_proxy_get(object, INTERFACE);
- eldbus_proxy_signal_handler_add(man, SIGNAL, on_gesture_detected, NULL);
-}
-
-void gesture_tracker_register(Gesture_Tracker_Cb cb, void *data)
-{
- user_cb = cb;
- user_data = data;
-}
-
-void gesture_tracker_shutdown(void)
-{
- eldbus_proxy_unref(man);
- eldbus_object_unref(object);
- eldbus_connection_unref(a11y_conn);
-}
#include <math.h>
#include "logger.h"
#include "navigator.h"
-#include "gesture_tracker.h"
#include "window_tracker.h"
#include "keyboard_tracker.h"
#include "pivot_chooser.h"
error = NULL;\
}
-typedef struct
-{
- int x,y;
-} last_focus_t;
-
-static last_focus_t last_focus = {-1,-1};
-static AtspiAccessible *current_obj;
static AtspiAccessible *top_window;
static Eina_Bool _window_cache_builded;
static FlatNaviContext *context;
}
#endif
-static void _focus_widget(Gesture_Info *info)
-{
- AtspiAccessible *target_widget;
- AtspiComponent *window_component;
- GError *err = NULL;
-
- window_component = atspi_accessible_get_component(top_window);
- if(!window_component)
- return;
- if ((last_focus.x == info->x_begin) && (last_focus.y == info->y_begin))
- return;
-
- target_widget = atspi_component_get_accessible_at_point(window_component, info->x_begin, info->y_begin, ATSPI_COORD_TYPE_WINDOW, &err);
- GERROR_CHECK(err)
- if (target_widget) {
- if (flat_navi_context_current_set(context, target_widget))
- {
- _current_highlight_object_set(target_widget);
- last_focus.x = info->x_begin;
- last_focus.y = info->y_begin;
- }
- else
- ERROR("Hoveed object not found in window context[%dx%d][%s]", info->x_begin, info->y_begin, atspi_accessible_get_role_name(top_window, &err));
- }
- else
- DEBUG("NO widget under (%d, %d) found",
- info->x_begin, info->y_begin);
-}
-
static void _focus_next(void)
{
AtspiAccessible *obj;
DEBUG("Previous widget not found. Abort");
}
-static void _value_inc_widget(void)
-{
- AtspiAccessible* current_widget = NULL;
- AtspiText *text_interface;
- gint current_offset;
- gboolean ret;
- GError *err = NULL;
- gchar *role;
-
- if(!current_obj)
- return;
-
- current_widget = current_obj;
-
- role = atspi_accessible_get_role_name(current_widget, &err);
- GERROR_CHECK(err)
- if(!strcmp(role, "entry"))
- {
- text_interface = atspi_accessible_get_text(current_widget);
- if(text_interface)
- {
- current_offset = atspi_text_get_caret_offset(text_interface, &err);
- GERROR_CHECK(err)
- ret = atspi_text_set_caret_offset(text_interface, current_offset + 1, &err);
- GERROR_CHECK(err)
- if(ret)
- {
- ERROR("Caret position increment done");
- }
- else
- {
- ERROR("Caret position increment error");
- }
- }
- else
- ERROR("No text interface supported!");
- g_free(role);
- return;
- }
- g_free(role);
- AtspiValue *value_interface = atspi_accessible_get_value(current_widget);
- if(value_interface)
- {
- ERROR("Value interface supported!\n");
- gdouble current_val = atspi_value_get_current_value(value_interface, &err);
- GERROR_CHECK(err)
- ERROR("Current value: %f\n ", (double)current_val);
- gdouble minimum_inc = atspi_value_get_minimum_increment(value_interface, &err);
- ERROR("Minimum increment: %f\n ", (double)minimum_inc);
- GERROR_CHECK(err)
- atspi_value_set_current_value(value_interface, current_val + minimum_inc, &err);
- GERROR_CHECK(err)
- }
- else
- ERROR("No value interface supported!\n");
-}
-
-static void _value_dec_widget(void)
-{
- AtspiAccessible* current_widget = NULL;
- AtspiText *text_interface;
- gint current_offset;
- GError *err = NULL;
- gboolean ret;
- gchar *role;
-
- if(!current_obj)
- return;
- current_widget = current_obj;
-
- role = atspi_accessible_get_role_name(current_widget, &err);
- GERROR_CHECK(err)
- if(!strcmp(role, "entry"))
- {
- text_interface = atspi_accessible_get_text(current_widget);
- if(text_interface)
- {
- current_offset = atspi_text_get_caret_offset(text_interface, &err);
- GERROR_CHECK(err)
- ret = atspi_text_set_caret_offset(text_interface, current_offset - 1, &err);
- GERROR_CHECK(err)
- if(ret)
- {
- ERROR("Caret position decrement done");
- }
- else
- {
- ERROR("Caret position decrement error");
- }
- }
- else
- ERROR("No text interface supported!");
- g_free(role);
- return;
- }
- g_free(role);
-
- AtspiValue *value_interface = atspi_accessible_get_value(current_widget);
- if(value_interface)
- {
- ERROR("Value interface supported!\n");
- gdouble current_val = atspi_value_get_current_value(value_interface, &err);
- GERROR_CHECK(err)
- ERROR("Current value: %f\n ", (double)current_val);
- gdouble minimum_inc = atspi_value_get_minimum_increment(value_interface, &err);
- GERROR_CHECK(err)
- ERROR("Minimum increment: %f\n ", (double)minimum_inc);
- atspi_value_set_current_value(value_interface, current_val - minimum_inc, &err);
- GERROR_CHECK(err)
- }
- else
- ERROR("No value interface supported!\n");
-}
-
-static void _activate_widget(void)
-{
- //activate the widget
- //only if activate mean click
- //special behavior for entry, caret should move from first/last last/first
-
- AtspiAccessible *current_widget = NULL;
- AtspiComponent *focus_component;
- GError *err = NULL;
-
- if(!current_obj)
- return;
-
- current_widget = current_obj;
-
- gchar *roleName;
- gchar *actionName;
- roleName = atspi_accessible_get_role_name(current_widget, &err);
- GERROR_CHECK(err)
- ERROR("Widget role prev: %s\n", roleName);
-
- if(!strcmp(roleName, "entry"))
- {
- focus_component = atspi_accessible_get_component(current_widget);
- if (focus_component != NULL)
- {
- if (atspi_component_grab_focus(focus_component, &err) == TRUE)
- {
- ERROR("Entry activated\n");
- GERROR_CHECK(err)
- }
- g_free(roleName);
- return;
- }
- }
- g_free(roleName);
-
- AtspiAction *action;
- gint number;
- int i;
- int k;
-
- action = atspi_accessible_get_action(current_widget);
-
- if(!action)
- {
- ERROR("Action null");
- return;
- }
- number = atspi_action_get_n_actions(action, &err);
- ERROR("Number of available action = %d\n", number);
- GERROR_CHECK(err)
- GArray *array = atspi_accessible_get_interfaces(current_widget);
- ERROR("TAB LEN = %d \n", array->len);
-
- for (k=0; k < array->len; k++)
- ERROR("Interface = %s\n", g_array_index( array, gchar *, k ));
-
- for (i=0; i<number; i++)
- {
- actionName = atspi_action_get_name(action, i, &err);
- ERROR("Action name = %s\n", actionName);
- GERROR_CHECK(err)
-
- if (actionName && !strcmp("click", actionName))
- {
- atspi_action_do_action(action, 0, &err);
- GERROR_CHECK(err)
- }
- g_free(actionName);
- }
-
-}
-
-static void _quickpanel_change_state(gboolean quickpanel_switch)
-{
- Ecore_X_Window xwin = 0;
-
- ERROR(quickpanel_switch ? "QUICKPANEL STATE ON" : "QUICKPANEL STATE OFF");
-
- Ecore_X_Illume_Quickpanel_State state;
-
-
-
- ecore_x_window_prop_xid_get(ecore_x_window_root_first_get(),
- ECORE_X_ATOM_NET_ACTIVE_WINDOW,
- ECORE_X_ATOM_WINDOW,
- &xwin, 1);
-
- state = quickpanel_switch ? ECORE_X_ILLUME_QUICKPANEL_STATE_ON : ECORE_X_ILLUME_QUICKPANEL_STATE_OFF;
-
- ecore_x_e_illume_quickpanel_state_set(xwin, state);
-
- ecore_x_e_illume_quickpanel_state_send(ecore_x_e_illume_zone_get(xwin), state);
-
- ecore_main_loop_iterate();
-}
-
-static void on_gesture_detected(void *data, Gesture_Info *info)
-{
- switch(info->type)
- {
- case ONE_FINGER_HOVER:
- _focus_widget(info);
- break;
- case ONE_FINGER_FLICK_LEFT:
- _focus_prev();
- break;
- case ONE_FINGER_FLICK_RIGHT:
- _focus_next();
- break;
- case ONE_FINGER_FLICK_UP:
- _value_inc_widget();
- break;
- case ONE_FINGER_FLICK_DOWN:
- _value_dec_widget();
- break;
- case ONE_FINGER_SINGLE_TAP:
- _focus_widget(info);
- break;
- case ONE_FINGER_DOUBLE_TAP:
- _activate_widget();
- break;
- case THREE_FINGERS_FLICK_DOWN:
- _quickpanel_change_state(QUICKPANEL_DOWN);
- break;
- case THREE_FINGERS_FLICK_UP:
- _quickpanel_change_state(QUICKPANEL_UP);
- break;
- default:
- DEBUG("Gesture type %d not handled in switch", info->type);
- }
-}
-
static void
_on_cache_builded(void *data)
{
void navigator_init(void)
{
- // register on gesture_getected
- gesture_tracker_register(on_gesture_detected, NULL);
- // register on active_window
window_tracker_init();
window_tracker_register(on_window_activate, NULL);
window_tracker_active_window_request();