From 1535c08c25920c6679c3355e664f25e12bf4ec8b Mon Sep 17 00:00:00 2001 From: Jiyoun Park Date: Sat, 16 Dec 2017 10:48:29 +0900 Subject: [PATCH] ecore_wl2: add ecore_wl2_window_find API 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 | 4 +++ src/lib/ecore_wl2/ecore_wl2.c | 8 +++++ src/lib/ecore_wl2/ecore_wl2_private.h | 5 +++ src/lib/ecore_wl2/ecore_wl2_window.c | 61 +++++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+) diff --git a/src/lib/ecore_wl2/Ecore_Wl2.h b/src/lib/ecore_wl2/Ecore_Wl2.h index f5f74ca..3e795a5 100644 --- a/src/lib/ecore_wl2/Ecore_Wl2.h +++ b/src/lib/ecore_wl2/Ecore_Wl2.h @@ -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 * diff --git a/src/lib/ecore_wl2/ecore_wl2.c b/src/lib/ecore_wl2/ecore_wl2.c index 6994149..b623ff2 100644 --- a/src/lib/ecore_wl2/ecore_wl2.c +++ b/src/lib/ecore_wl2/ecore_wl2.c @@ -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 */ diff --git a/src/lib/ecore_wl2/ecore_wl2_private.h b/src/lib/ecore_wl2/ecore_wl2_private.h index b001654..6cad72c 100644 --- a/src/lib/ecore_wl2/ecore_wl2_private.h +++ b/src/lib/ecore_wl2/ecore_wl2_private.h @@ -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; diff --git a/src/lib/ecore_wl2/ecore_wl2_window.c b/src/lib/ecore_wl2/ecore_wl2_window.c index bd5ed27..c78e3d6 100644 --- a/src/lib/ecore_wl2/ecore_wl2_window.c +++ b/src/lib/ecore_wl2/ecore_wl2_window.c @@ -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) { -- 2.7.4