implement window_opaque_state for wayland 62/45562/2 submit/tizen/20150807.102244
authorBoram Park <boram1288.park@samsung.com>
Fri, 7 Aug 2015 09:49:42 +0000 (18:49 +0900)
committerBoram Park <boram1288.park@samsung.com>
Fri, 7 Aug 2015 09:56:23 +0000 (18:56 +0900)
Change-Id: I956a04328d64a3dce5836849f89152dfa3358f85

src/e_mod_visivility.c
src/e_mod_wl.c

index b37706256eb3ca28980094a421edaadecd45567c..052f80f337b6dda5c754aed1cdacf60cb8d6ff10 100644 (file)
@@ -1,5 +1,7 @@
 #include "e_mod_main.h"
 #ifdef HAVE_WAYLAND_ONLY
+#define E_COMP_WL
+#include "e_comp_wl.h"
 #include "e_mod_wl.h"
 #else
 #include "e_mod_atoms.h"
@@ -32,8 +34,8 @@ static Pol_Win_Opaque *_win_opaque_find(E_Client *ec);
 static void            _pol_cb_win_opaque_data_free(void *data);
 #ifndef HAVE_WAYLAND_ONLY
 static Eina_Bool       _win_opaque_prop_get(Ecore_X_Window win, int *opaque);
-static Pol_Win_Opaque *_win_opaque_add(E_Client *ec, int opaque);
 #endif
+static Pol_Win_Opaque *_win_opaque_add(E_Client *ec, int opaque);
 
 static Pol_Visibility *
 _visibility_add(E_Client *ec, int visibility)
@@ -124,6 +126,7 @@ _win_opaque_prop_get(Ecore_X_Window win, int *opaque)
    *opaque = (int)val;
    return EINA_TRUE;
 }
+#endif
 
 static Pol_Win_Opaque *
 _win_opaque_add(E_Client *ec, int opaque)
@@ -143,7 +146,6 @@ _win_opaque_add(E_Client *ec, int opaque)
 
    return pwo;
 }
-#endif
 
 void
 e_mod_pol_visibility_init(void)
@@ -319,16 +321,24 @@ e_mod_pol_client_visibility_del(E_Client *ec)
 void
 e_mod_pol_client_window_opaque_set(E_Client *ec)
 {
-#ifndef HAVE_WAYLAND_ONLY
-   Ecore_X_Window win;
    int opaque = 0;
 
    if (!ec) return;
-   win = e_client_util_win_get(ec);
 
-   if (_win_opaque_prop_get(win, &opaque))
-     _win_opaque_add(ec, opaque);
+#ifndef HAVE_WAYLAND_ONLY
+   Ecore_X_Window win = e_client_util_win_get(ec);
+
+   if (!_win_opaque_prop_get(win, &opaque)) return;
+#else
+   E_Comp_Wl_Client_Data *cdata;
+
+   if (!ec->pixmap) return;
+   if (!(cdata = e_pixmap_cdata_get(ec->pixmap))) return;
+
+   opaque = cdata->opaque_state;
 #endif
+
+   _win_opaque_add(ec, opaque);
 }
 
 #ifndef HAVE_WAYLAND_ONLY
index bba6f979d29bcf622f5d958172dfb078367f3717..028a1da00296ec8e785a35f232fc4bb12976f5e2 100644 (file)
@@ -928,6 +928,26 @@ _tzpol_iface_cb_subsurf_place_below_parent(struct wl_client *client EINA_UNUSED,
    epc->comp_data->sub.list_changed = EINA_TRUE;
 }
 
+static void
+_tzpol_iface_cb_opaque_state_set(struct wl_client *client, struct wl_resource *resource, struct wl_resource *surface, int32_t state)
+{
+   E_Pixmap *ep;
+   E_Client *ec;
+   E_Comp_Wl_Client_Data *cdata;
+
+   ep = wl_resource_get_user_data(surface);
+   EINA_SAFETY_ON_NULL_RETURN(ep);
+
+   cdata = e_pixmap_cdata_get(ep);
+   EINA_SAFETY_ON_NULL_RETURN(cdata);
+
+   cdata->opaque_state = state;
+
+   ec = e_pixmap_client_get(ep);
+   if (ec)
+     e_mod_pol_client_window_opaque_set(ec);
+}
+
 static const struct tizen_policy_interface _tzpol_iface =
 {
    _tzpol_iface_cb_vis_get,
@@ -945,7 +965,8 @@ static const struct tizen_policy_interface _tzpol_iface =
    _tzpol_iface_cb_transient_for_set,
    _tzpol_iface_cb_transient_for_unset,
    _tzpol_iface_cb_win_scrmode_set,
-   _tzpol_iface_cb_subsurf_place_below_parent
+   _tzpol_iface_cb_subsurf_place_below_parent,
+   _tzpol_iface_cb_opaque_state_set,
 };
 
 static void