static int keyboardY = 0;
static int keyboardW = 0;
static int keyboardH = 0;
+extern AtspiAccessible *top_win;
+#define E_KEYBOARD_SERVICE_BUS_NAME "org.tizen.keyboard"
+#define E_KEYBOARD_SERVICE_NAVI_IFC_NAME "org.tizen.KBGestureNavigation"
+#define E_KEYBOARD_SERVICE_NAVI_OBJ_PATH "/org/tizen/KBGestureNavigation"
+
+static Eldbus_Connection *conn = NULL;
+static Eldbus_Service_Interface *iface = NULL;
+#define KB_GESTURE_SIGNAL 0
+static const Eldbus_Signal signals[] = {
+ [KB_GESTURE_SIGNAL] = {"KBGestureDetected",
+ ELDBUS_ARGS({"i", "type"},{"i", "x"},{"i", "y"}),0},
+ { }
+};
+
+static const Eldbus_Service_Interface_Desc iface_desc = {
+ E_KEYBOARD_SERVICE_NAVI_IFC_NAME, NULL, signals
+};
#endif
#ifndef X11_ENABLED
active_xwindow_property_tracker_register();
root_xwindow_property_tracker_register();
#else
+ eldbus_init();
+ conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
+ eldbus_name_request(conn, E_KEYBOARD_SERVICE_BUS_NAME,
+ ELDBUS_NAME_REQUEST_FLAG_DO_NOT_QUEUE, NULL, NULL);
+ iface = eldbus_service_interface_register(conn, E_KEYBOARD_SERVICE_NAVI_OBJ_PATH, &iface_desc);
_set_vconf_key_changed_callback_keyboard_status();
#endif
DEBUG("keyboard tracker init");
root_xwindow_property_tracker_unregister();
active_xwindow_property_tracker_unregister();
#else
+ eldbus_name_release(conn, E_KEYBOARD_SERVICE_BUS_NAME, NULL, NULL);
+ eldbus_connection_unref(conn);
+ eldbus_shutdown();
_unset_vconf_key_changed_callback_keyboard_status();
#endif
DEBUG("keyboard tracker shutdown");
Eina_Bool keyboard_event_status(int x, int y)
{
+ gchar* name = NULL;
if (prev_keyboard_state == VCONFKEY_ISF_INPUT_PANEL_STATE_SHOW) {
- if ((y >= keyboardY) && (y <= (keyboardY + keyboardH)) && (x >= keyboardX) && (x <= (keyboardX + keyboardW))) {
- return EINA_TRUE;
+ if (top_win)
+ name = atspi_accessible_get_name(top_win, NULL);
+ if (name && strcmp(name, "Quickpanel Window")) {
+ if ((y >= keyboardY) && (y <= (keyboardY + keyboardH)) && (x >= keyboardX) && (x <= (keyboardX + keyboardW))) {
+ g_free(name);
+ return EINA_TRUE;
+ }
}
+ g_free(name);
}
return EINA_FALSE;
}
+
+void keyboard_signal_emit(int type, int x, int y)
+{
+ if (!conn) return;
+ if (!iface) return;
+
+ eldbus_service_signal_emit(iface, KB_GESTURE_SIGNAL, type, x, y);
+}
#endif
}
#else
keyboard_status = keyboard_event_status(info->x_end, info->y_end);
- if (keyboard_status) break;
+ if (keyboard_status)
+ {
+ keyboard_signal_emit(info->type, info->x_end, info->y_end);
+ break;
+ }
#endif
_focus_widget(info);
}
}
#else
keyboard_status = keyboard_event_status(info->x_end, info->y_end);
- if (keyboard_status) break;
+ if (keyboard_status)
+ {
+ keyboard_signal_emit(info->type, info->x_end, info->y_end);
+ break;
+ }
#endif
if (!prepared)
_focus_widget(info);
}
#else
keyboard_status = keyboard_event_status(info->x_end, info->y_end);
- if (keyboard_status) break;
+ if (keyboard_status)
+ {
+ keyboard_signal_emit(info->type, info->x_end, info->y_end);
+ break;
+ }
#endif
_activate_widget();
break;
static void *user_data;
static AtspiEventListener *listener;
static AtspiAccessible *last_active_win;
+AtspiAccessible *top_win;
static void _on_atspi_window_cb(const AtspiEvent * event)
{
if (!strcmp(event->type, "window:activate") && last_active_win != event->source) //if we got activate 2 times
{
-
if (user_cb)
user_cb(user_data, event->source);
last_active_win = event->source;
+ top_win = last_active_win;
}
if (!strcmp(event->type, "object:state-changed:visible") && !strcmp(name, "Quickpanel Window"))
{
if (user_cb)
user_cb(user_data, event->source);
+ top_win = event->source;
}
else
{
if (user_cb)
user_cb(user_data, last_active_win);
+ top_win = last_active_win;
}
}
}
g_object_unref(desktop);
DEBUG("END last_active_win: %p", last_active_win);
+ top_win = last_active_win;
return last_active_win;
}
user_cb = NULL;
user_data = NULL;
last_active_win = NULL;
+ top_win = NULL;
}
void window_tracker_register(Window_Tracker_Cb cb, void *data)