From 2a498ebea08c5d2cacdeca392e733e908462b598 Mon Sep 17 00:00:00 2001 From: Boram Park Date: Fri, 7 Aug 2015 18:49:42 +0900 Subject: [PATCH] implement window_opaque_state for wayland Change-Id: I956a04328d64a3dce5836849f89152dfa3358f85 --- src/e_mod_visivility.c | 24 +++++++++++++++++------- src/e_mod_wl.c | 23 ++++++++++++++++++++++- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/src/e_mod_visivility.c b/src/e_mod_visivility.c index b377062..052f80f 100644 --- a/src/e_mod_visivility.c +++ b/src/e_mod_visivility.c @@ -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 diff --git a/src/e_mod_wl.c b/src/e_mod_wl.c index bba6f97..028a1da 100644 --- a/src/e_mod_wl.c +++ b/src/e_mod_wl.c @@ -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 -- 2.34.1