ecore_wl2_window: support tizen_resource
authorDoyoun Kang <doyoun.kang@samsung.com>
Mon, 13 Nov 2017 00:17:17 +0000 (09:17 +0900)
committerJiyoun Park <jy0703.park@samsung.com>
Tue, 19 Dec 2017 05:40:11 +0000 (14:40 +0900)
@tizen_feature

Change-Id: Iff80dfc883205cc65be47e3851634e489281bc2e

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

index 1a80379..c2058ae 100644 (file)
@@ -300,6 +300,9 @@ typedef struct _Ecore_Wl2_Event_Window_Show
    unsigned int win;
    unsigned int parent_win;
    unsigned int event_win;
+   // TIZEN_ONLY
+   unsigned int data[4];
+   //
 } Ecore_Wl2_Event_Window_Show;
 
 typedef struct _Ecore_Wl2_Event_Window_Hide
index 5c849d1..ab4a3e5 100644 (file)
@@ -208,6 +208,8 @@ struct _Ecore_Wl2_Window
    // TIZEN_ONLY(20150424) : tizen_visibility
    struct tizen_visibility *tz_visibility;
    struct tizen_position *tz_position;
+   struct tizen_resource *tz_resource;
+   unsigned int resource_id;
    //
 
    Eina_Stringshare *uuid;
index 919d4ce..8018dc5 100644 (file)
@@ -394,6 +394,31 @@ static const struct tizen_position_listener _tizen_position_listener =
 {
    _tizen_position_cb_changed,
 };
+
+static void
+_tizen_resource_cb_resource_id(void *data, struct tizen_resource *tizen_resource EINA_UNUSED, uint32_t id)
+{
+   Ecore_Wl2_Window *win;
+   Ecore_Wl2_Event_Window_Show *ev;
+
+   if (!(win = data)) return;
+   if (!(ev = calloc(1, sizeof(Ecore_Wl2_Event_Window_Show)))) return;
+
+   ev->win = win->id;
+   if (win->parent)
+     ev->parent_win = win->parent->id;
+   else
+     ev->parent_win = 0;
+   ev->event_win = win->id;
+   ev->data[0] = (unsigned int)id;
+   win->resource_id = (unsigned int)id;
+   ecore_event_add(ECORE_WL2_EVENT_WINDOW_SHOW, ev, NULL, NULL);
+}
+
+static const struct tizen_resource_listener _tizen_resource_listener =
+{
+   _tizen_resource_cb_resource_id,
+};
 //
 
 void
@@ -512,6 +537,17 @@ _ecore_wl2_window_shell_surface_init(Ecore_Wl2_Window *window)
                                               window->surface);
           }
      }
+
+   if (window->display->wl.tz_surf && !window->tz_resource)
+     {
+        window->tz_resource =
+          tizen_surface_get_tizen_resource(window->display->wl.tz_surf, window->surface);
+        if (!window->tz_resource) return;
+
+        tizen_resource_add_listener(window->tz_resource,
+                                    &_tizen_resource_listener, window);
+
+     }
 //
 
    if (window->display->wl.session_recovery)
@@ -708,6 +744,9 @@ ecore_wl2_window_hide(Ecore_Wl2_Window *window)
 
    if (window->tz_position) tizen_position_destroy(window->tz_position);
    window->tz_position = NULL;
+
+   if (window->tz_resource) tizen_resource_destroy(window->tz_resource);
+   window->tz_resource = NULL;
    //
 
    EINA_INLIST_FOREACH_SAFE(window->subsurfs, tmp, subsurf)
@@ -769,6 +808,9 @@ ecore_wl2_window_free(Ecore_Wl2_Window *window)
 
    if (window->tz_position) tizen_position_destroy(window->tz_position);
    window->tz_position = NULL;
+
+   if (window->tz_resource) tizen_resource_destroy(window->tz_resource);
+   window->tz_resource = NULL;
    //
 
    if (window->callback) wl_callback_destroy(window->callback);