Revert "Clean up wayland resources" 64/111264/1 accepted/tizen/3.0/common/20170125.121611 accepted/tizen/3.0/ivi/20170125.083625 accepted/tizen/3.0/mobile/20170125.083534 accepted/tizen/3.0/tv/20170125.083550 accepted/tizen/3.0/wearable/20170125.083604 accepted/tizen/common/20170124.182017 accepted/tizen/ivi/20170125.085636 accepted/tizen/mobile/20170125.085538 accepted/tizen/tv/20170125.085555 accepted/tizen/wearable/20170125.085617 submit/tizen/20170124.072039 submit/tizen_3.0/20170124.071853
authorJengHyun Kang <jhyuni.kang@samsung.com>
Fri, 20 Jan 2017 04:32:26 +0000 (13:32 +0900)
committerJengHyun Kang <jhyuni.kang@samsung.com>
Fri, 20 Jan 2017 04:32:30 +0000 (13:32 +0900)
This reverts commit bd4bc5770b7975fb29099d9fce5321224154b144.

Change-Id: Ibb3a29d0fe92c2149cbb0f3e05817247164caba1

src/efl_util.c

index 19b7ec5..3ae9094 100644 (file)
@@ -98,11 +98,7 @@ typedef struct _Efl_Util_Data
    struct
    {
       Eina_Bool init;
-      int ref_count;
-
       struct wl_display *dpy;
-      struct wl_registry *reg;
-
       struct wl_event_queue *queue;
 
       struct
@@ -124,7 +120,6 @@ typedef struct _Efl_Util_Data
       {
          struct tizen_input_device_manager *devicemgr;
          int request_notified;
-         Eina_List *device_list;
       } devmgr;
       struct
       {
@@ -144,8 +139,7 @@ static Efl_Util_Data _eflutil =
 {
    {
       EINA_FALSE,
-      0,
-      NULL, NULL, NULL,
+      NULL, NULL,
       { NULL, NULL, NULL }, /* tizen_policy protocol */
       { NULL, NULL, NULL, NULL, NULL, 0 }, /* screenshooter protocol */
       { NULL, -1 } /* tizen_input_device_manager protocol */
@@ -161,8 +155,6 @@ static Eina_Bool               _cb_info_del_by_win(Evas_Object *win, int idx);
 static Eina_List              *_cb_info_list_get(int idx);
 static Efl_Util_Callback_Info *_cb_info_find_by_win(Evas_Object *win, int idx);
 static Eina_Bool               _wl_init(void);
-static void                    _wl_shutdown(void);
-
 static void                    _cb_wl_reg_global(void *data, struct wl_registry *reg, unsigned int name, const char *interface, unsigned int version);
 static void                    _cb_wl_reg_global_remove(void *data, struct wl_registry *reg, unsigned int name);
 static void                    _cb_wl_reg_screenshooter_global(void *data, struct wl_registry *reg, unsigned int name, const char *interface, unsigned int version);
@@ -296,7 +288,7 @@ _cb_info_find_by_win(Evas_Object *win,
 static Eina_Bool
 _wl_init(void)
 {
-   _eflutil.wl.ref_count++;
+   struct wl_registry *reg = NULL;
 
    if (_eflutil.wl.init) return EINA_TRUE;
 
@@ -308,11 +300,11 @@ _wl_init(void)
    _eflutil.wl.queue = wl_display_create_queue(_eflutil.wl.dpy);
    EINA_SAFETY_ON_NULL_GOTO(_eflutil.wl.queue, fail);
 
-   _eflutil.wl.reg = wl_display_get_registry(_eflutil.wl.dpy);
-   EINA_SAFETY_ON_NULL_GOTO(_eflutil.wl.reg, fail);
+   reg = wl_display_get_registry(_eflutil.wl.dpy);
+   EINA_SAFETY_ON_NULL_GOTO(reg, fail);
 
-   wl_proxy_set_queue((struct wl_proxy*)_eflutil.wl.reg, _eflutil.wl.queue);
-   wl_registry_add_listener(_eflutil.wl.reg, &_wl_reg_listener, NULL);
+   wl_proxy_set_queue((struct wl_proxy*)reg, _eflutil.wl.queue);
+   wl_registry_add_listener(reg, &_wl_reg_listener, NULL);
 
    _eflutil.wl.init = EINA_TRUE;
 
@@ -324,96 +316,11 @@ fail:
         _eflutil.wl.queue = NULL;
      }
 
-   if (_eflutil.wl.reg)
-     {
-        wl_registry_destroy(_eflutil.wl.reg);
-        _eflutil.wl.reg = NULL;
-     }
-
-   _eflutil.wl.dpy = NULL;
-
    ecore_wl_shutdown();
    return EINA_FALSE;
 }
 
 static void
-_wl_shutdown(void)
-{
-   Eina_List *l, *ll;
-   struct tizen_input_device *data;
-   Efl_Util_Wl_Output_Info *output;
-
-   if (!_eflutil.wl.init) return;
-
-   _eflutil.wl.ref_count--;
-   if (_eflutil.wl.ref_count > 0)
-     return;
-
-   // tizen_policy
-   if (_eflutil.wl.policy.proto)
-     tizen_policy_destroy(_eflutil.wl.policy.proto);
-   _eflutil.wl.policy.proto = NULL;
-
-   eina_hash_free(_eflutil.wl.policy.hash_noti_lv);
-   _eflutil.wl.policy.hash_noti_lv = NULL;
-   eina_hash_free(_eflutil.wl.policy.hash_scr_mode);
-   _eflutil.wl.policy.hash_scr_mode = NULL;
-
-   // wl_output
-   if (_eflutil.wl.shot.output_list)
-     {
-        EINA_LIST_FREE(_eflutil.wl.shot.output_list, output)
-          {
-             wl_output_destroy(output->output);
-             free(output);
-          }
-     }
-   _eflutil.wl.shot.output_list = NULL;
-
-   // screenshooter
-   if (_eflutil.wl.shot.screenshooter)
-     screenshooter_destroy(_eflutil.wl.shot.screenshooter);
-   _eflutil.wl.shot.screenshooter = NULL;
-
-   // tizen_input_device_manager
-   EINA_LIST_FOREACH_SAFE(_eflutil.wl.devmgr.device_list, l, ll, data)
-     {
-        tizen_input_device_release(data);
-        _eflutil.wl.devmgr.device_list = eina_list_remove_list(_eflutil.wl.devmgr.device_list, l);
-     }
-   if (_eflutil.wl.devmgr.devicemgr)
-     tizen_input_device_manager_destroy(_eflutil.wl.devmgr.devicemgr);
-   _eflutil.wl.devmgr.devicemgr = NULL;
-
-   // tizen_display_policy
-   if (_eflutil.wl.display_policy.proto)
-     tizen_display_policy_destroy(_eflutil.wl.display_policy.proto);
-   _eflutil.wl.display_policy.proto = NULL;
-
-   eina_hash_free(_eflutil.wl.display_policy.hash_brightness);
-   _eflutil.wl.display_policy.hash_brightness = NULL;
-
-   if (_eflutil.wl.reg)
-     {
-        wl_proxy_set_queue((struct wl_proxy*)_eflutil.wl.reg, NULL);
-        wl_registry_destroy(_eflutil.wl.reg);
-        _eflutil.wl.reg = NULL;
-     }
-
-   if (_eflutil.wl.queue)
-     {
-        wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
-        wl_event_queue_destroy(_eflutil.wl.queue);
-        _eflutil.wl.queue = NULL;
-     }
-
-   _eflutil.wl.dpy = NULL;
-   _eflutil.wl.init = EINA_FALSE;
-
-   ecore_wl_shutdown();
-}
-
-static void
 _cb_wl_output_geometry(void *data, struct wl_output *wl_output, int x, int y,
                        int physical_width, int physical_height, int subpixel,
                        const char *make, const char *model, int transform)
@@ -544,53 +451,12 @@ _cb_wl_reg_global_remove(void *data,
                          struct wl_registry *reg,
                          unsigned int name)
 {
-   Eina_List *l, *ll;
-   struct tizen_input_device *ddata;
-   Efl_Util_Wl_Output_Info *output;
-
-   // tizen_policy
-   if (_eflutil.wl.policy.proto)
-     tizen_policy_destroy(_eflutil.wl.policy.proto);
    _eflutil.wl.policy.proto = NULL;
-
    eina_hash_free(_eflutil.wl.policy.hash_noti_lv);
-   _eflutil.wl.policy.hash_noti_lv = NULL;
    eina_hash_free(_eflutil.wl.policy.hash_scr_mode);
-   _eflutil.wl.policy.hash_scr_mode = NULL;
-
-   // wl_output
-   if (_eflutil.wl.shot.output_list)
-     {
-        EINA_LIST_FREE(_eflutil.wl.shot.output_list, output)
-          {
-             wl_output_destroy(output->output);
-             free(output);
-          }
-     }
-   _eflutil.wl.shot.output_list = NULL;
-
-   // screenshooter
-   if (_eflutil.wl.shot.screenshooter)
-     screenshooter_destroy(_eflutil.wl.shot.screenshooter);
-   _eflutil.wl.shot.screenshooter = NULL;
-
-   // tizen_input_device_manager
-   EINA_LIST_FOREACH_SAFE(_eflutil.wl.devmgr.device_list, l, ll, ddata)
-     {
-        tizen_input_device_release(ddata);
-        _eflutil.wl.devmgr.device_list = eina_list_remove_list(_eflutil.wl.devmgr.device_list, l);
-     }
-   if (_eflutil.wl.devmgr.devicemgr)
-     tizen_input_device_manager_destroy(_eflutil.wl.devmgr.devicemgr);
-   _eflutil.wl.devmgr.devicemgr = NULL;
 
-   // tizen_display_policy
-   if (_eflutil.wl.display_policy.proto)
-     tizen_display_policy_destroy(_eflutil.wl.display_policy.proto);
    _eflutil.wl.display_policy.proto = NULL;
-
    eina_hash_free(_eflutil.wl.display_policy.hash_brightness);
-   _eflutil.wl.display_policy.hash_brightness = NULL;
 }
 /* LCOV_EXCL_STOP */
 
@@ -769,45 +635,13 @@ _cb_window_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, vo
      return;
 
    eina_hash_del(_eflutil.wl.policy.hash_noti_lv, &lv_info->surface, lv_info);
-
-   eina_hash_population(_eflutil.wl.policy.hash_noti_lv);
-
-   if (eina_hash_population(_eflutil.wl.policy.hash_noti_lv) == 0)
-     {
-        _wl_shutdown();
-     }
-}
-
-static Eina_Bool
-_init_tizen_policy_proto(void)
-{
-   int ret = 0;
-
-   if (!_eflutil.wl.policy.proto)
-     {
-        ret = _wl_init();
-        EINA_SAFETY_ON_FALSE_RETURN_VAL(ret, EINA_FALSE);
-
-        ret = 0;
-        while (!_eflutil.wl.policy.proto && ret != -1)
-          ret = wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
-
-        EINA_SAFETY_ON_NULL_RETURN_VAL(_eflutil.wl.policy.proto, EINA_FALSE);
-     }
-
-   return EINA_TRUE;
 }
 
 API int
 efl_util_set_notification_window_level(Evas_Object *window,
                                        efl_util_notification_level_e level)
 {
-   Eina_Bool ret;
-   Elm_Win_Type type;
-   Ecore_Wl_Window *wlwin;
-   struct wl_surface *surface;
-   Efl_Util_Wl_Surface_Lv_Info *lv_info;
-   Ecore_Wl_Window_Type wl_type;
+   Eina_Bool res;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(window, EFL_UTIL_ERROR_INVALID_PARAMETER);
    EINA_SAFETY_ON_FALSE_RETURN_VAL((level >= EFL_UTIL_NOTIFICATION_LEVEL_NONE) &&
@@ -830,6 +664,15 @@ efl_util_set_notification_window_level(Evas_Object *window,
           "DEPRECATION WARNING: EFL_UTIL_NOTIFICATION_LEVEL_3 is deprecated and will be removed from next release. Use EFL_UTIL_NOTIFICATION_LEVEL_TOP instead.");
      }
 
+   Elm_Win_Type type;
+   Ecore_Wl_Window *wlwin;
+   struct wl_surface *surface;
+   Efl_Util_Wl_Surface_Lv_Info *lv_info;
+   Ecore_Wl_Window_Type wl_type;
+
+   res = _wl_init();
+   EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EFL_UTIL_ERROR_INVALID_PARAMETER);
+
    wlwin = elm_win_wl_window_get(window);
    EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, EFL_UTIL_ERROR_NOT_SUPPORTED_WINDOW_TYPE);
 
@@ -841,8 +684,8 @@ efl_util_set_notification_window_level(Evas_Object *window,
                                         EFL_UTIL_ERROR_NOT_SUPPORTED_WINDOW_TYPE);
      }
 
-   ret = _init_tizen_policy_proto();
-   EINA_SAFETY_ON_FALSE_RETURN_VAL(ret, EFL_UTIL_ERROR_NOT_SUPPORTED);
+   while (!_eflutil.wl.policy.proto)
+     wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
 
    surface = ecore_wl_window_surface_get(wlwin);
    EINA_SAFETY_ON_NULL_RETURN_VAL(surface,
@@ -906,15 +749,19 @@ API int
 efl_util_get_notification_window_level(Evas_Object *window,
                                        efl_util_notification_level_e *level)
 {
-   Eina_Bool ret;
+   Eina_Bool res;
+
+   EINA_SAFETY_ON_NULL_RETURN_VAL(window, EFL_UTIL_ERROR_INVALID_PARAMETER);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(level, EFL_UTIL_ERROR_INVALID_PARAMETER);
+
    Elm_Win_Type type;
    Ecore_Wl_Window *wlwin;
    struct wl_surface *surface;
    Efl_Util_Wl_Surface_Lv_Info *lv_info;
    Ecore_Wl_Window_Type wl_type;
 
-   EINA_SAFETY_ON_NULL_RETURN_VAL(window, EFL_UTIL_ERROR_INVALID_PARAMETER);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(level, EFL_UTIL_ERROR_INVALID_PARAMETER);
+   res = _wl_init();
+   EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EFL_UTIL_ERROR_INVALID_PARAMETER);
 
    wlwin = elm_win_wl_window_get(window);
    EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, EFL_UTIL_ERROR_NOT_SUPPORTED_WINDOW_TYPE);
@@ -927,13 +774,13 @@ efl_util_get_notification_window_level(Evas_Object *window,
                                         EFL_UTIL_ERROR_NOT_SUPPORTED_WINDOW_TYPE);
      }
 
+   while (!_eflutil.wl.policy.proto)
+     wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
+
    surface = ecore_wl_window_surface_get(wlwin);
    EINA_SAFETY_ON_NULL_RETURN_VAL(surface,
                                   EFL_UTIL_ERROR_NOT_SUPPORTED_WINDOW_TYPE);
 
-   ret = _init_tizen_policy_proto();
-   EINA_SAFETY_ON_FALSE_RETURN_VAL(ret, EFL_UTIL_ERROR_NOT_SUPPORTED);
-
    lv_info = eina_hash_find(_eflutil.wl.policy.hash_noti_lv, &surface);
    if (lv_info)
      {
@@ -1017,14 +864,28 @@ API int
 efl_util_set_window_opaque_state(Evas_Object *window,
                                  int opaque)
 {
-   Eina_Bool ret;
-   Ecore_Wl_Window *wlwin;
-   struct wl_surface *surface;
+   Eina_Bool res;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(window, EFL_UTIL_ERROR_INVALID_PARAMETER);
    EINA_SAFETY_ON_FALSE_RETURN_VAL(((opaque >= 0) && (opaque <= 1)),
                                    EFL_UTIL_ERROR_INVALID_PARAMETER);
 
+   Ecore_Wl_Window *wlwin;
+   struct wl_surface *surface;
+
+   if (!_eflutil.wl.policy.proto)
+     {
+        int ret = 0;
+
+        res = _wl_init();
+        EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EFL_UTIL_ERROR_INVALID_PARAMETER);
+
+        while (!_eflutil.wl.policy.proto && ret != -1)
+          ret = wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
+
+        EINA_SAFETY_ON_NULL_RETURN_VAL(_eflutil.wl.policy.proto, EFL_UTIL_ERROR_INVALID_PARAMETER);
+     }
+
    wlwin = elm_win_wl_window_get(window);
    if (!wlwin)
       return EFL_UTIL_ERROR_NOT_SUPPORTED_WINDOW_TYPE;
@@ -1033,9 +894,6 @@ efl_util_set_window_opaque_state(Evas_Object *window,
    if (!surface)
       return EFL_UTIL_ERROR_NOT_SUPPORTED_WINDOW_TYPE;
 
-   ret = _init_tizen_policy_proto();
-   EINA_SAFETY_ON_FALSE_RETURN_VAL(ret, EFL_UTIL_ERROR_NOT_SUPPORTED);
-
    tizen_policy_set_opaque_state(_eflutil.wl.policy.proto, surface, opaque);
 
    return EFL_UTIL_ERROR_NONE;
@@ -1053,65 +911,72 @@ efl_util_set_window_screen_mode(Evas_Object *window,
    Ecore_Wl_Window *wlwin;
    struct wl_surface *surface;
    Efl_Util_Wl_Surface_Scr_Mode_Info *scr_mode_info;
-   Eina_Bool ret;
+   Eina_Bool res;
 
-   wlwin = elm_win_wl_window_get(window);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, EFL_UTIL_ERROR_INVALID_PARAMETER);
-
-   surface = ecore_wl_window_surface_get(wlwin);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(surface, EFL_UTIL_ERROR_INVALID_PARAMETER);
-
-   ret = _init_tizen_policy_proto();
-   EINA_SAFETY_ON_FALSE_RETURN_VAL(ret, EFL_UTIL_ERROR_NOT_SUPPORTED);
+   res = _wl_init();
+   EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EFL_UTIL_ERROR_INVALID_PARAMETER);
 
-   scr_mode_info = eina_hash_find(_eflutil.wl.policy.hash_scr_mode, &surface);
-   if (!scr_mode_info)
+   wlwin = elm_win_wl_window_get(window);
+   if (wlwin)
      {
-        scr_mode_info = calloc(1, sizeof(Efl_Util_Wl_Surface_Scr_Mode_Info));
-        EINA_SAFETY_ON_NULL_RETURN_VAL(scr_mode_info, EFL_UTIL_ERROR_OUT_OF_MEMORY);
+        while (!_eflutil.wl.policy.proto)
+          wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
 
-        scr_mode_info->surface = surface;
-        scr_mode_info->mode = (unsigned int)mode;
-        scr_mode_info->wait_for_done = EINA_TRUE;
-        scr_mode_info->state = TIZEN_POLICY_ERROR_STATE_NONE;
+        surface = ecore_wl_window_surface_get(wlwin);
+        EINA_SAFETY_ON_NULL_RETURN_VAL(surface,
+                                       EFL_UTIL_ERROR_INVALID_PARAMETER);
 
-        eina_hash_add(_eflutil.wl.policy.hash_scr_mode,
-                      &surface,
-                      scr_mode_info);
-     }
-   else
-     {
-        scr_mode_info->mode = (unsigned int)mode;
-        scr_mode_info->wait_for_done = EINA_TRUE;
-        scr_mode_info->state = TIZEN_POLICY_ERROR_STATE_NONE;
-     }
+        scr_mode_info = eina_hash_find(_eflutil.wl.policy.hash_scr_mode, &surface);
+        if (!scr_mode_info)
+          {
+             scr_mode_info = calloc(1, sizeof(Efl_Util_Wl_Surface_Scr_Mode_Info));
+             EINA_SAFETY_ON_NULL_RETURN_VAL(scr_mode_info, EFL_UTIL_ERROR_OUT_OF_MEMORY);
 
-   tizen_policy_set_window_screen_mode(_eflutil.wl.policy.proto,
-                                       surface, (unsigned int)mode);
-   if (scr_mode_info->wait_for_done)
-     {
-        int count = 0;
-        while (scr_mode_info->wait_for_done && (count < 3))
+             scr_mode_info->surface = surface;
+             scr_mode_info->mode = (unsigned int)mode;
+             scr_mode_info->wait_for_done = EINA_TRUE;
+             scr_mode_info->state = TIZEN_POLICY_ERROR_STATE_NONE;
+
+             eina_hash_add(_eflutil.wl.policy.hash_scr_mode,
+                           &surface,
+                           scr_mode_info);
+          }
+        else
           {
-             ecore_wl_flush();
-             wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
-             count++;
+             scr_mode_info->mode = (unsigned int)mode;
+             scr_mode_info->wait_for_done = EINA_TRUE;
+             scr_mode_info->state = TIZEN_POLICY_ERROR_STATE_NONE;
           }
 
+        tizen_policy_set_window_screen_mode(_eflutil.wl.policy.proto,
+                                            surface, (unsigned int)mode);
         if (scr_mode_info->wait_for_done)
           {
-             return EFL_UTIL_ERROR_INVALID_PARAMETER;
-          }
-        else
-          {
-             if (scr_mode_info->state == TIZEN_POLICY_ERROR_STATE_PERMISSION_DENIED)
+             int count = 0;
+             while (scr_mode_info->wait_for_done && (count < 3))
                {
-                  return EFL_UTIL_ERROR_PERMISSION_DENIED;
+                  ecore_wl_flush();
+                  wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
+                  count++;
+               }
+
+             if (scr_mode_info->wait_for_done)
+               {
+                  return EFL_UTIL_ERROR_INVALID_PARAMETER;
+               }
+             else
+               {
+                  if (scr_mode_info->state == TIZEN_POLICY_ERROR_STATE_PERMISSION_DENIED)
+                    {
+                       return EFL_UTIL_ERROR_PERMISSION_DENIED;
+                    }
                }
           }
-     }
 
-   return EFL_UTIL_ERROR_NONE;
+        return EFL_UTIL_ERROR_NONE;
+     }
+   else
+     return EFL_UTIL_ERROR_INVALID_PARAMETER;
 }
 
 API int
@@ -1124,51 +989,50 @@ efl_util_get_window_screen_mode(Evas_Object *window,
    Ecore_Wl_Window *wlwin;
    struct wl_surface *surface;
    Efl_Util_Wl_Surface_Scr_Mode_Info *scr_mode_info;
-   Eina_Bool ret;
+   Eina_Bool res;
 
-   wlwin = elm_win_wl_window_get(window);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, EFL_UTIL_ERROR_INVALID_PARAMETER);
+   res = _wl_init();
+   EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EFL_UTIL_ERROR_INVALID_PARAMETER);
 
-   surface = ecore_wl_window_surface_get(wlwin);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(surface, EFL_UTIL_ERROR_INVALID_PARAMETER);
+   wlwin = elm_win_wl_window_get(window);
+   if (wlwin)
+     {
+        while (!_eflutil.wl.policy.proto)
+          wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
 
-   ret = _init_tizen_policy_proto();
-   EINA_SAFETY_ON_FALSE_RETURN_VAL(ret, EFL_UTIL_ERROR_NOT_SUPPORTED);
+        surface = ecore_wl_window_surface_get(wlwin);
+        EINA_SAFETY_ON_NULL_RETURN_VAL(surface,
+                                       EFL_UTIL_ERROR_INVALID_PARAMETER);
 
-   scr_mode_info = eina_hash_find(_eflutil.wl.policy.hash_scr_mode, &surface);
-   if (scr_mode_info)
-     {
-        if (scr_mode_info->wait_for_done)
+        scr_mode_info = eina_hash_find(_eflutil.wl.policy.hash_scr_mode, &surface);
+        if (scr_mode_info)
           {
-             while (scr_mode_info->wait_for_done)
+             if (scr_mode_info->wait_for_done)
                {
-                  ecore_wl_flush();
-                  wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
+                  while (scr_mode_info->wait_for_done)
+                    {
+                       ecore_wl_flush();
+                       wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
+                    }
                }
-          }
 
-        switch (scr_mode_info->mode)
+             switch (scr_mode_info->mode)
+               {
+                case TIZEN_POLICY_MODE_DEFAULT:   *mode = EFL_UTIL_SCREEN_MODE_DEFAULT;   break;
+                case TIZEN_POLICY_MODE_ALWAYS_ON: *mode = EFL_UTIL_SCREEN_MODE_ALWAYS_ON; break;
+                default:                          *mode = EFL_UTIL_SCREEN_MODE_DEFAULT;
+                  return EFL_UTIL_ERROR_INVALID_PARAMETER;
+               }
+             return EFL_UTIL_ERROR_NONE;
+          }
+        else
           {
-           case TIZEN_POLICY_MODE_DEFAULT:
-              *mode = EFL_UTIL_SCREEN_MODE_DEFAULT;
-              break;
-
-           case TIZEN_POLICY_MODE_ALWAYS_ON:
-              *mode = EFL_UTIL_SCREEN_MODE_ALWAYS_ON;
-              break;
-
-           default:
-              *mode = EFL_UTIL_SCREEN_MODE_DEFAULT;
-              return EFL_UTIL_ERROR_INVALID_PARAMETER;
+             *mode = EFL_UTIL_SCREEN_MODE_DEFAULT;
+             return EFL_UTIL_ERROR_INVALID_PARAMETER;
           }
-
-        return EFL_UTIL_ERROR_NONE;
      }
    else
-     {
-        *mode = EFL_UTIL_SCREEN_MODE_DEFAULT;
-        return EFL_UTIL_ERROR_INVALID_PARAMETER;
-     }
+     return EFL_UTIL_ERROR_INVALID_PARAMETER;
 }
 
 #ifndef TIZEN_WEARABLE
@@ -1211,94 +1075,80 @@ efl_util_unset_window_screen_mode_error_cb(Evas_Object *window)
 }
 #endif
 
-static Eina_Bool
-_init_tizen_display_policy_proto(void)
-{
-   int ret = 0;
-
-   if (!_eflutil.wl.display_policy.proto)
-     {
-        ret = _wl_init();
-        EINA_SAFETY_ON_FALSE_RETURN_VAL(ret, EINA_FALSE);
-
-        ret = 0;
-        while (!_eflutil.wl.display_policy.proto && ret != -1)
-          ret = wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
-
-        EINA_SAFETY_ON_NULL_RETURN_VAL(_eflutil.wl.display_policy.proto, EINA_FALSE);
-     }
-
-   return EINA_TRUE;
-}
-
 API int
 efl_util_set_window_brightness(Evas_Object *window, int brightness)
 {
    Ecore_Wl_Window *wlwin;
    struct wl_surface *surface;
    Efl_Util_Wl_Surface_Brightness_Info *brightness_info;
-   Eina_Bool ret;
+   Eina_Bool res;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(window, EFL_UTIL_ERROR_INVALID_PARAMETER);
    EINA_SAFETY_ON_FALSE_RETURN_VAL(brightness <= 100, EFL_UTIL_ERROR_INVALID_PARAMETER);
 
-   wlwin = elm_win_wl_window_get(window);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, EFL_UTIL_ERROR_INVALID_PARAMETER);
-
-   surface = ecore_wl_window_surface_get(wlwin);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(surface, EFL_UTIL_ERROR_INVALID_PARAMETER);
-
-   ret = _init_tizen_display_policy_proto();
-   EINA_SAFETY_ON_FALSE_RETURN_VAL(ret, EFL_UTIL_ERROR_NOT_SUPPORTED);
-
-   brightness_info = eina_hash_find(_eflutil.wl.display_policy.hash_brightness, &surface);
-   if (!brightness_info)
-     {
-        brightness_info = calloc(1, sizeof(Efl_Util_Wl_Surface_Brightness_Info));
-        EINA_SAFETY_ON_NULL_RETURN_VAL(brightness_info, EFL_UTIL_ERROR_OUT_OF_MEMORY);
-
-        brightness_info->surface = surface;
-        brightness_info->brightness = brightness;
-        brightness_info->wait_for_done = EINA_TRUE;
-        brightness_info->state = TIZEN_DISPLAY_POLICY_ERROR_STATE_NONE;
+   res = _wl_init();
+   EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EFL_UTIL_ERROR_INVALID_PARAMETER);
 
-        eina_hash_add(_eflutil.wl.display_policy.hash_brightness,
-                      &surface,
-                      brightness_info);
-     }
-   else
+   wlwin = elm_win_wl_window_get(window);
+   if (wlwin)
      {
-        brightness_info->brightness = brightness;
-        brightness_info->wait_for_done = EINA_TRUE;
-        brightness_info->state = TIZEN_DISPLAY_POLICY_ERROR_STATE_NONE;
-     }
+        while (!_eflutil.wl.display_policy.proto)
+          wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
 
-   tizen_display_policy_set_window_brightness(_eflutil.wl.display_policy.proto,
-                                              surface, brightness);
-   if (brightness_info->wait_for_done)
-     {
-        int count = 0;
-        while (brightness_info->wait_for_done && (count < 3))
-          {
-             ecore_wl_flush();
-             wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
-             count++;
-          }
+        surface = ecore_wl_window_surface_get(wlwin);
+        EINA_SAFETY_ON_NULL_RETURN_VAL(surface,
+                                       EFL_UTIL_ERROR_INVALID_PARAMETER);
 
-        if (brightness_info->wait_for_done)
+        brightness_info = eina_hash_find(_eflutil.wl.display_policy.hash_brightness, &surface);
+        if (!brightness_info)
           {
-             return EFL_UTIL_ERROR_INVALID_PARAMETER;
-          }
-        else
-          {
-             if (brightness_info->state == TIZEN_DISPLAY_POLICY_ERROR_STATE_PERMISSION_DENIED)
-               {
-                  return EFL_UTIL_ERROR_PERMISSION_DENIED;
-               }
-          }
+             brightness_info = calloc(1, sizeof(Efl_Util_Wl_Surface_Brightness_Info));
+             EINA_SAFETY_ON_NULL_RETURN_VAL(brightness_info, EFL_UTIL_ERROR_OUT_OF_MEMORY);
+
+             brightness_info->surface = surface;
+             brightness_info->brightness = brightness;
+             brightness_info->wait_for_done = EINA_TRUE;
+             brightness_info->state = TIZEN_DISPLAY_POLICY_ERROR_STATE_NONE;
+
+             eina_hash_add(_eflutil.wl.display_policy.hash_brightness,
+                           &surface,
+                           brightness_info);
+           }
+         else
+           {
+              brightness_info->brightness = brightness;
+              brightness_info->wait_for_done = EINA_TRUE;
+              brightness_info->state = TIZEN_DISPLAY_POLICY_ERROR_STATE_NONE;
+           }
+
+         tizen_display_policy_set_window_brightness(_eflutil.wl.display_policy.proto,
+                                                    surface, brightness);
+         if (brightness_info->wait_for_done)
+           {
+              int count = 0;
+              while (brightness_info->wait_for_done && (count < 3))
+                {
+                   ecore_wl_flush();
+                   wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
+                   count++;
+                }
+
+              if (brightness_info->wait_for_done)
+                {
+                   return EFL_UTIL_ERROR_INVALID_PARAMETER;
+                }
+              else
+                {
+                   if (brightness_info->state == TIZEN_DISPLAY_POLICY_ERROR_STATE_PERMISSION_DENIED)
+                     {
+                        return EFL_UTIL_ERROR_PERMISSION_DENIED;
+                     }
+                }
+           }
+        return EFL_UTIL_ERROR_NONE;
      }
-
-   return EFL_UTIL_ERROR_NONE;
+   else
+     return EFL_UTIL_ERROR_INVALID_PARAMETER;
 }
 
 API int
@@ -1307,19 +1157,23 @@ efl_util_get_window_brightness(Evas_Object *window, int *brightness)
    Ecore_Wl_Window *wlwin;
    struct wl_surface *surface;
    Efl_Util_Wl_Surface_Brightness_Info *brightness_info;
-   Eina_Bool ret;
+   Eina_Bool res;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(window, EFL_UTIL_ERROR_INVALID_PARAMETER);
    EINA_SAFETY_ON_NULL_RETURN_VAL(brightness, EFL_UTIL_ERROR_INVALID_PARAMETER);
 
+   res = _wl_init();
+   EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EFL_UTIL_ERROR_INVALID_PARAMETER);
+
    wlwin = elm_win_wl_window_get(window);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, EFL_UTIL_ERROR_INVALID_PARAMETER);
+   if (!wlwin) return EFL_UTIL_ERROR_INVALID_PARAMETER;
 
-   surface = ecore_wl_window_surface_get(wlwin);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(surface, EFL_UTIL_ERROR_INVALID_PARAMETER);
+   while (!_eflutil.wl.display_policy.proto)
+     wl_display_dispatch_queue(_eflutil.wl.dpy, _eflutil.wl.queue);
 
-   ret = _init_tizen_display_policy_proto();
-   EINA_SAFETY_ON_FALSE_RETURN_VAL(ret, EFL_UTIL_ERROR_NOT_SUPPORTED);
+   surface = ecore_wl_window_surface_get(wlwin);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(surface,
+                                  EFL_UTIL_ERROR_INVALID_PARAMETER);
 
    brightness_info = eina_hash_find(_eflutil.wl.display_policy.hash_brightness, &surface);
    if (brightness_info)
@@ -1351,18 +1205,10 @@ _cb_device_add(void *data EINA_UNUSED,
                struct tizen_input_device_manager *tizen_input_device_manager EINA_UNUSED,
                uint32_t serial EINA_UNUSED,
                const char *identifier EINA_UNUSED,
-               struct tizen_input_device *device,
+               struct tizen_input_device *device EINA_UNUSED,
                struct wl_seat *seat EINA_UNUSED)
 {
-   Eina_List *l;
-   struct tizen_input_device *ddata;
-
-   EINA_LIST_FOREACH(_eflutil.wl.devmgr.device_list, l, ddata)
-     {
-        if (device == ddata) return;
-     }
-
-   _eflutil.wl.devmgr.device_list = eina_list_append(_eflutil.wl.devmgr.device_list, device);
+   ;
 }
 
 /* LCOV_EXCL_START */
@@ -1371,19 +1217,10 @@ _cb_device_remove(void *data EINA_UNUSED,
                struct tizen_input_device_manager *tizen_input_device_manager EINA_UNUSED,
                uint32_t serial  EINA_UNUSED,
                const char *identifier  EINA_UNUSED,
-               struct tizen_input_device *device,
+               struct tizen_input_device *device  EINA_UNUSED,
                struct wl_seat *seat  EINA_UNUSED)
 {
-   Eina_List *l, *ll;
-   struct tizen_input_device *ddata;
-
-   EINA_LIST_FOREACH_SAFE(_eflutil.wl.devmgr.device_list, l, ll, ddata)
-     {
-        if (device == ddata)
-          {
-             _eflutil.wl.devmgr.device_list = eina_list_remove_list(_eflutil.wl.devmgr.device_list, l);
-          }
-     }
+   ;
 }
 /* LCOV_EXCL_STOP */
 
@@ -1498,8 +1335,6 @@ efl_util_input_deinitialize_generator(efl_util_inputgen_h inputgen_h)
    ret = _efl_util_input_convert_input_generator_error(_eflutil.wl.devmgr.request_notified);
    _eflutil.wl.devmgr.request_notified = -1;
 
-   _wl_shutdown();
-
    return ret;
 }
 
@@ -1812,8 +1647,6 @@ efl_util_screenshot_deinitialize(efl_util_screenshot_h screenshot)
    _screenshot_mutex_unlock();
    _screenshot_mutex_destory();
 
-   _wl_shutdown();
-
    return EFL_UTIL_ERROR_NONE;
 }