[Keyboard_Tracker]: when quickpanel is shown, keyboard still receive events issue... 91/79191/4
authorShilpa Singh <shilpa.singh@samsung.com>
Fri, 8 Jul 2016 14:48:08 +0000 (20:18 +0530)
committerShilpa Singh <shilpa.singh@samsung.com>
Tue, 12 Jul 2016 06:33:53 +0000 (12:03 +0530)
Change-Id: I4e06a16a3a17cb2aabdb48de559a3881662d5437
Signed-off-by: Shilpa Singh <shilpa.singh@samsung.com>
include/keyboard_tracker.h
src/keyboard_tracker.c [changed mode: 0644->0755]
src/navigator.c
src/window_tracker.c

index d4f27f754946b481d690a0b7c5a95eb63be70590..8ed21a54471b56674ebb28bb34e2346e2c952e08 100644 (file)
@@ -19,4 +19,5 @@ void keyboard_tracker_shutdown(void);
 void keyboard_geometry_set(int x, int y, int width, int height);
 void keyboard_geometry_get(int *x, int *y, int *width, int *height);
 Eina_Bool keyboard_event_status(int x, int y);
+void keyboard_signal_emit(int type, int x, int y);
 #endif
old mode 100644 (file)
new mode 100755 (executable)
index 5d40385..21d64a3
@@ -31,6 +31,23 @@ static int keyboardX = 0;
 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
@@ -218,6 +235,11 @@ void keyboard_tracker_init(void)
        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");
@@ -231,6 +253,9 @@ void keyboard_tracker_shutdown(void)
        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");
@@ -255,11 +280,26 @@ void keyboard_geometry_get(int *x, int *y, int *width, int *height)
 
 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
index 73740c5e451ee75172734ab2f14945aca4919282..9121e6bf305bd1d6ab699f736b49dc7cd3ef903c 100755 (executable)
@@ -2178,7 +2178,11 @@ static void on_gesture_detected(void *data, const Eldbus_Message *msg)
                        }
 #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);
                }
@@ -2223,7 +2227,11 @@ static void on_gesture_detected(void *data, const Eldbus_Message *msg)
                }
 #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);
@@ -2237,7 +2245,11 @@ static void on_gesture_detected(void *data, const Eldbus_Message *msg)
                }
 #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;
index 424c9c6db1b856faa8a2e5ad3be7e7efbb1254b4..a2adfc11644e409f274ed09a94487add373196ee 100644 (file)
@@ -27,6 +27,7 @@ static Window_Tracker_Cb user_cb;
 static void *user_data;
 static AtspiEventListener *listener;
 static AtspiAccessible *last_active_win;
+AtspiAccessible *top_win;
 
 static void _on_atspi_window_cb(const AtspiEvent * event)
 {
@@ -35,10 +36,10 @@ 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"))
@@ -47,11 +48,13 @@ static void _on_atspi_window_cb(const AtspiEvent * event)
                {
                        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;
                }
        }
 
@@ -117,6 +120,7 @@ static AtspiAccessible *_get_active_win(void)
        }
        g_object_unref(desktop);
        DEBUG("END last_active_win: %p", last_active_win);
+       top_win = last_active_win;
        return last_active_win;
 }
 
@@ -138,6 +142,7 @@ void window_tracker_shutdown(void)
        user_cb = NULL;
        user_data = NULL;
        last_active_win = NULL;
+       top_win = NULL;
 }
 
 void window_tracker_register(Window_Tracker_Cb cb, void *data)