ecore_wl2: add ecore_wl2_window_find API
authorJiyoun Park <jy0703.park@samsung.com>
Sat, 16 Dec 2017 01:48:29 +0000 (10:48 +0900)
committerJiyoun Park <jy0703.park@samsung.com>
Thu, 21 Dec 2017 13:34:07 +0000 (22:34 +0900)
opensource didn't implement this API.
we need to check the reason why opensource remove this api.

Change-Id: I8e1d8e942bb273791f52382e9e7a13daf601d7f8

src/lib/ecore_wl2/Ecore_Wl2.h
src/lib/ecore_wl2/ecore_wl2.c
src/lib/ecore_wl2/ecore_wl2_private.h
src/lib/ecore_wl2/ecore_wl2_window.c

index f5f74ca..3e795a5 100644 (file)
@@ -1043,6 +1043,10 @@ EAPI void ecore_wl2_window_position_set(Ecore_Wl2_Window *window, int x, int y);
 EAPI int ecore_wl2_window_active_angle_get(Ecore_Wl2_Window *window);
 //
 
+//TIZEN_ONLY(20171216): add ecore_wl2_window_find
+EAPI Ecore_Wl2_Window *ecore_wl2_window_find(unsigned int id);
+//
+
 /**
  * Get if a given window is alpha
  *
index 6994149..b623ff2 100644 (file)
@@ -182,6 +182,10 @@ ecore_wl2_init(void)
    if (!no_session_recovery)
      no_session_recovery = !!getenv("EFL_NO_WAYLAND_SESSION_RECOVERY");
 
+//TIZEN_ONLY(20171216): add ecore_wl2_window_find
+   _ecore_wl2_window_init();
+//
+
    return _ecore_wl2_init_count;
 
 ecore_event_err:
@@ -205,6 +209,10 @@ ecore_wl2_shutdown(void)
         return 0;
      }
 
+//TIZEN_ONLY(20171216): add ecore_wl2_window_find
+   _ecore_wl2_window_shutdown();
+//
+
    if (--_ecore_wl2_init_count != 0) return _ecore_wl2_init_count;
 
    /* reset events */
index b001654..6cad72c 100644 (file)
@@ -802,6 +802,11 @@ void _ecore_wl2_input_device_manager_setup(Ecore_Wl2_Display *ewd, unsigned int
 void _ecore_wl2_window_ignore_output_transform_set(Ecore_Wl2_Window *window, Eina_Bool ignore);
 //
 
+//TIZEN_ONLY(20171216): add ecore_wl2_window_find
+void _ecore_wl2_window_init(void);
+void _ecore_wl2_window_shutdown(void);
+//
+
 EAPI extern int _ecore_wl2_event_window_www;
 EAPI extern int _ecore_wl2_event_window_www_drag;
 
index bd5ed27..c78e3d6 100644 (file)
@@ -5,6 +5,47 @@
 #include "ecore_wl2_private.h"
 #include "efl-hints-client-protocol.h"
 
+//TIZEN_ONLY(20171216): add ecore_wl2_window_find
+/* local variables */
+static Eina_Hash *_windows = NULL;
+
+/* internal functions */
+void
+_ecore_wl2_window_init(void)
+{
+   if (!_windows)
+     _windows = eina_hash_string_superfast_new(NULL);
+}
+
+void
+_ecore_wl2_window_shutdown(void)
+{
+   eina_hash_free(_windows);
+   _windows = NULL;
+}
+
+static char *
+_ecore_wl2_window_id_str_get(int win_id)
+{
+   const char *vals = "qWeRtYuIoP5$&<~";
+   static char id[9];
+   unsigned int val;
+
+   val = (unsigned int)win_id;
+   id[0] = vals[(val >> 28) & 0xf];
+   id[1] = vals[(val >> 24) & 0xf];
+   id[2] = vals[(val >> 20) & 0xf];
+   id[3] = vals[(val >> 16) & 0xf];
+   id[4] = vals[(val >> 12) & 0xf];
+   id[5] = vals[(val >> 8) & 0xf];
+   id[6] = vals[(val >> 4) & 0xf];
+   id[7] = vals[(val) & 0xf];
+   id[8] = 0;
+
+   return id;
+}
+//
+
 void
 _ecore_wl2_window_semi_free(Ecore_Wl2_Window *window)
 {
@@ -914,6 +955,10 @@ ecore_wl2_window_new(Ecore_Wl2_Display *display, Ecore_Wl2_Window *parent, int x
 
    _ecore_wl2_window_surface_create(win);
 
+//TIZEN_ONLY(20171216): add ecore_wl2_window_find
+   eina_hash_add(_windows, _ecore_wl2_window_id_str_get(win->id), win);
+//
+
    return win;
 }
 
@@ -1036,6 +1081,10 @@ ecore_wl2_window_free(Ecore_Wl2_Window *window)
 
    EINA_SAFETY_ON_NULL_RETURN(window);
 
+//TIZEN_ONLY(20171216): add ecore_wl2_window_find
+   eina_hash_del(_windows, _ecore_wl2_window_id_str_get(window->id), window);
+//
+
    display = window->display;
 
    EINA_INLIST_FOREACH(display->inputs, input)
@@ -1777,6 +1826,18 @@ ecore_wl2_window_iconify_state_update(Ecore_Wl2_Window *window, Eina_Bool iconif
 }
 //
 
+//TIZEN_ONLY(20171216): add ecore_wl2_window_find
+EAPI Ecore_Wl2_Window *
+ecore_wl2_window_find(unsigned int id)
+{
+   Ecore_Wl2_Window *win = NULL;
+
+   if (!_windows) return NULL;
+   win = eina_hash_find(_windows, _ecore_wl2_window_id_str_get(id));
+   return win;
+}
+//
+
 EAPI void
 ecore_wl2_window_type_set(Ecore_Wl2_Window *window, Ecore_Wl2_Window_Type type)
 {