ecore_wl: call tizen_policy_set_parent if parent doesn't have xdg_surface 95/111695/4
authorDuna Oh <duna.oh@samsung.com>
Mon, 23 Jan 2017 11:36:28 +0000 (20:36 +0900)
committerDuna Oh <duna.oh@samsung.com>
Tue, 24 Jan 2017 01:15:04 +0000 (10:15 +0900)
Isf-input-panel doesn't have a xdg_surface.
So, if isf subwindows request set_parent with isf-input-panel, ecore_wl calls
tizen_policy_set_parent instead.

Signed-off-by: Duna Oh <duna.oh@samsung.com>
Change-Id: I426d85f30f0bfe36864e88b81e7b397eeefd4f54

src/lib/ecore_wayland/ecore_wl.c
src/lib/ecore_wayland/ecore_wl_window.c

index 88dcecd..175c09c 100644 (file)
@@ -996,8 +996,13 @@ _ecore_wl_cb_handle_global(void *data, struct wl_registry *registry, unsigned in
      }
    else if (!strcmp(interface, "tizen_policy"))
      {
+        if (version >= 3)
+          client_version = 3;
+        else
+          client_version = version;
+
         ewd->wl.tz_policy =
-          wl_registry_bind(registry, id, &tizen_policy_interface, 1);
+          wl_registry_bind(registry, id, &tizen_policy_interface, client_version);
         if (ewd->wl.tz_policy)
           tizen_policy_add_listener(_ecore_wl_disp->wl.tz_policy, &_ecore_tizen_policy_listener, ewd->wl.display);
      }
index 8e3d029..0150ec9 100644 (file)
@@ -320,8 +320,14 @@ _ecore_wl_window_shell_surface_init(Ecore_Wl_Window *win)
 
    if (win->parent)
      {
-        if (win->xdg_surface)
+        if (win->xdg_surface && win->parent->xdg_surface)
           xdg_surface_set_parent(win->xdg_surface, win->parent->xdg_surface);
+        else if (_ecore_wl_disp->wl.tz_policy && win->surface && win->parent->surface)
+          {
+             uint32_t ver = wl_proxy_get_version((struct wl_proxy *)_ecore_wl_disp->wl.tz_policy);
+             if (ver >= 3)
+               tizen_policy_set_parent(_ecore_wl_disp->wl.tz_policy, win->surface, win->parent->surface);
+          }
         else if (win->shell_surface)
           wl_shell_surface_set_transient(win->shell_surface,
                                          win->parent->surface,
@@ -1041,8 +1047,14 @@ ecore_wl_window_parent_set(Ecore_Wl_Window *win, Ecore_Wl_Window *parent)
    win->parent = parent;
    if (win->parent)
      {
-        if (win->xdg_surface)
+        if (win->xdg_surface && win->parent->xdg_surface)
           xdg_surface_set_parent(win->xdg_surface, win->parent->xdg_surface);
+        else if (_ecore_wl_disp->wl.tz_policy && win->surface && win->parent->surface)
+          {
+             uint32_t ver = wl_proxy_get_version((struct wl_proxy *)_ecore_wl_disp->wl.tz_policy);
+             if (ver >= 3)
+               tizen_policy_set_parent(_ecore_wl_disp->wl.tz_policy, win->surface, win->parent->surface);
+          }
         else if (win->shell_surface)
           wl_shell_surface_set_transient(win->shell_surface,
                                          win->parent->surface,