ecore_wl2_window: Added internal aux hint list and maintain functions. 08/256508/14
authorJunseok, Kim <juns.kim@samsung.com>
Wed, 21 Apr 2021 02:03:45 +0000 (11:03 +0900)
committerJunseok, Kim <juns.kim@samsung.com>
Wed, 21 Apr 2021 06:28:15 +0000 (15:28 +0900)
Added internal aux hint list and functions to manage the list.

Change-Id: I9b3c1a4871125c6242754fc2cefad78f8c07b70e
Signed-off-by: Junseok, Kim <juns.kim@samsung.com>
src/lib/ecore_wl2/ecore_wl2_private.h
src/lib/ecore_wl2/ecore_wl2_window.c

index 59c4dd5..2c5e7f4 100644 (file)
@@ -432,6 +432,10 @@ struct _Ecore_Wl2_Window
    // TIZEN_ONLY(20200601): support tizen_renderer_surface
    struct tizen_renderer_surface *tz_renderer_surface;
    //
+
+   // TIZEN_ONLY(20210330): for maintain internal aux hint list
+   Eina_List *aux_hints;
+   //
 };
 
 struct _Ecore_Wl2_Output
index b9bf740..7233edf 100644 (file)
@@ -21,6 +21,16 @@ static void _opaque_set(Ecore_Wl2_Window *window);
 static void _opaque_region_set(Ecore_Wl2_Window *window, struct wl_region *region);
 //
 
+// TIZEN_ONLY(20210330): for maintain internal aux hint list
+typedef struct _Ecore_Wl2_Window_Aux_Hint Ecore_Wl2_Window_Aux_Hint;
+struct _Ecore_Wl2_Window_Aux_Hint
+{
+   int id;
+   Eina_Stringshare *hint;
+   Eina_Stringshare *val;
+};
+//
+
 /* internal functions */
 void
 _ecore_wl2_window_init(void)
@@ -1392,9 +1402,18 @@ ecore_wl2_window_free(Ecore_Wl2_Window *window)
    Ecore_Wl2_Input *input;
    Ecore_Wl2_Subsurface *subsurf;
    Eina_Inlist *tmp;
+   Ecore_Wl2_Window_Aux_Hint *hint;
 
    EINA_SAFETY_ON_NULL_RETURN(window);
 
+   // TIZEN_ONLY(20210330): for maintain internal aux hint list
+   EINA_LIST_FREE(window->aux_hints, hint)
+     {
+        eina_stringshare_del(hint->hint);
+        eina_stringshare_del(hint->val);
+     }
+   //
+
 //TIZEN_ONLY(20171216): add ecore_wl2_window_find
    eina_hash_del(_windows, _ecore_wl2_window_id_str_get(window->id), window);
 //
@@ -2645,6 +2664,78 @@ ecore_wl2_window_rotation_changed_callback_set(Ecore_Wl2_Window *win, void *data
 }
 //
 
+// TIZEN_ONLY(20210330): for maintain internal aux hint list
+static Ecore_Wl2_Window_Aux_Hint *
+_ecore_wl2_window_aux_hint_get_by_id(Ecore_Wl2_Window *win, int id)
+{
+   Ecore_Wl2_Window_Aux_Hint *ewah = NULL;
+   Eina_List *l = NULL;
+
+   EINA_SAFETY_ON_NULL_RETURN_VAL(win, NULL);
+
+   EINA_LIST_REVERSE_FOREACH(win->aux_hints, l, ewah)
+     {
+        if (ewah->id == id)
+          return ewah;
+     }
+
+   return NULL;
+}
+
+static Eina_Bool
+_ecore_wl2_window_aux_hint_list_add(Ecore_Wl2_Window *win, int id, const char *hint, const char *val)
+{
+   Ecore_Wl2_Window_Aux_Hint *ewah = NULL;
+
+   EINA_SAFETY_ON_NULL_RETURN_VAL(win, EINA_FALSE);
+
+   ewah = _ecore_wl2_window_aux_hint_get_by_id(win, id);
+   if (ewah)
+     {
+        eina_stringshare_del(ewah->hint);
+        eina_stringshare_del(ewah->val);
+        ewah->hint = eina_stringshare_add(hint);
+        ewah->val = eina_stringshare_add(val);
+        return EINA_TRUE;
+     }
+
+   ewah = (Ecore_Wl2_Window_Aux_Hint *)calloc(1, sizeof(Ecore_Wl2_Window_Aux_Hint));
+   EINA_SAFETY_ON_NULL_RETURN_VAL(ewah, EINA_FALSE);
+
+   ewah->hint = eina_stringshare_add(hint);
+   ewah->val = eina_stringshare_add(val);
+   ewah->id = id;
+   win->aux_hints = eina_list_append(win->aux_hints, ewah);
+
+   return EINA_TRUE;
+}
+
+static Eina_Bool
+_ecore_wl2_window_aux_hint_list_change(Ecore_Wl2_Window *win, Ecore_Wl2_Window_Aux_Hint *ewah, const char *val)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(win, EINA_FALSE);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(ewah, EINA_FALSE);
+
+   eina_stringshare_del(ewah->val);
+   ewah->val = eina_stringshare_add(val);
+
+   return EINA_TRUE;
+}
+
+static Eina_Bool
+_ecore_wl2_window_aux_hint_list_del(Ecore_Wl2_Window *win, Ecore_Wl2_Window_Aux_Hint *ewah)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(win, EINA_FALSE);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(ewah, EINA_FALSE);
+
+   eina_stringshare_del(ewah->hint);
+   eina_stringshare_del(ewah->val);
+   win->aux_hints = eina_list_remove(win->aux_hints, ewah);
+
+   return EINA_TRUE;
+}
+// END OF TIZEN_ONLY
+
 EAPI Eina_List *
 ecore_wl2_window_aux_hints_supported_get(Ecore_Wl2_Window *win)
 {
@@ -2682,6 +2773,10 @@ ecore_wl2_window_aux_hint_add(Ecore_Wl2_Window *win, int id, const char *hint, c
      tizen_policy_add_aux_hint(win->display->wl.tz_policy, win->surface, id, hint, val);
    //
 
+   // TIZEN_ONLY(20210330): for maintain internal aux hint list
+   _ecore_wl2_window_aux_hint_list_add(win, id, hint, val);
+   //
+
    if ((!win->surface) || (!win->display->wl.efl_aux_hints)) return;
 
    efl_aux_hints_add_aux_hint(win->display->wl.efl_aux_hints, win->surface, id, hint, val);
@@ -2698,6 +2793,13 @@ ecore_wl2_window_aux_hint_change(Ecore_Wl2_Window *win, int id, const char *val)
      tizen_policy_change_aux_hint(win->display->wl.tz_policy, win->surface, id, val);
    //
 
+   // TIZEN_ONLY(20210330): for maintain internal aux hint list
+   Ecore_Wl2_Window_Aux_Hint *ewah = NULL;
+   ewah = _ecore_wl2_window_aux_hint_get_by_id(win, id);
+   if (ewah)
+     _ecore_wl2_window_aux_hint_list_change(win, ewah, val);
+   //
+
    if ((!win->surface) || (!win->display->wl.efl_aux_hints)) return;
 
    efl_aux_hints_change_aux_hint(win->display->wl.efl_aux_hints, win->surface, id, val);
@@ -2714,6 +2816,13 @@ ecore_wl2_window_aux_hint_del(Ecore_Wl2_Window *win, int id)
      tizen_policy_del_aux_hint(win->display->wl.tz_policy, win->surface, id);
    //
 
+   // TIZEN_ONLY(20210330): for maintain internal aux hint list
+   Ecore_Wl2_Window_Aux_Hint *ewah = NULL;
+   ewah = _ecore_wl2_window_aux_hint_get_by_id(win, id);
+   if (ewah)
+     _ecore_wl2_window_aux_hint_list_del(win, ewah);
+   //
+
    if ((!win->surface) || (!win->display->wl.efl_aux_hints)) return;
 
    efl_aux_hints_del_aux_hint(win->display->wl.efl_aux_hints, win->surface, id);