if (E_CONTAINS(cec->x, cec->y, cec->w, cec->h, ec->x, ec->y, ec->w, ec->h))
{
if (!cec->argb) break;
- if (cec->visibility.opaque > 0) break;
+ if (cec->visibility.opaque == E_ALPHA_OPAQUE_SET) break;
}
}
ec->netwm.opacity = 255;
ec->visibility.obscured = E_VISIBILITY_UNKNOWN;
- ec->visibility.opaque = -1;
+ ec->visibility.opaque = E_ALPHA_OPAQUE_UNKNOWN;
ec->visibility.changed = 0;
ec->visibility.skip = 0;
ec->visibility.last_sent_type = E_VISIBILITY_UNKNOWN;
}
E_API void
-e_client_visibility_opaque_state_set(E_Client *ec, int opaque)
+e_client_visibility_alpha_opaque_set(E_Client *ec, E_Alpha_Opaque opaque)
{
if (ec) ec->visibility.opaque = opaque;
}
-E_API Eina_Bool
-e_client_visibility_opaque_state_get(E_Client *ec, int *opaque)
+E_API E_Alpha_Opaque
+e_client_visibility_alpha_opaque_get(E_Client *ec)
{
- if (!ec) return EINA_FALSE;
+ if (!ec) return E_ALPHA_OPAQUE_UNKNOWN;
return ec->visibility.opaque;
}
if (canvas_vis && !skip_by_pending_show && !is_vis_on_skip)
{
/* check alpha window is opaque or not. */
- if ((ec->visibility.opaque > 0) && (ec->argb))
+ if ((ec->visibility.opaque == E_ALPHA_OPAQUE_SET) && (ec->argb))
ec_opaque = EINA_TRUE;
/* if e_client is not alpha or opaque then delete intersect rect */
cdata->has_extern_parent = EINA_TRUE;
}
+static E_Alpha_Opaque
+_e_policy_wl_convert_tz_opaque_to_alpha_opaque(int32_t tz_state)
+{
+ return (tz_state > 0) ? E_ALPHA_OPAQUE_SET : E_ALPHA_OPAQUE_UNSET;
+}
+
static void
_tzpol_iface_cb_opaque_state_set(struct wl_client *client, struct wl_resource *resource, struct wl_resource *surface, int32_t state)
{
E_Client *ec;
+ E_Alpha_Opaque alpha_opaque;
ec = e_client_from_surface_resource(surface);
EINA_SAFETY_ON_NULL_RETURN(ec);
ELOGF("TZPOL", "OPAQUE |opaque_state:%d", ec, state);
- if(ec->visibility.opaque == state)
+ alpha_opaque = _e_policy_wl_convert_tz_opaque_to_alpha_opaque(state);
+ if(ec->visibility.opaque == alpha_opaque)
return;
- ec->visibility.opaque = state;
+ ec->visibility.opaque = alpha_opaque;
EC_CHANGED(ec);
}
if (above_ec->argb)
{
- if (above_ec->visibility.opaque <= 0)
+ if (above_ec->visibility.opaque != E_ALPHA_OPAQUE_SET)
continue;
else
{
if ((!ec->argb) ||
((ec->argb) &&
- (ec->visibility.opaque == 1)))
+ (ec->visibility.opaque == E_ALPHA_OPAQUE_SET)))
{
e_client_geometry_get(ec, &x, &y, &w, &h);
if (E_CONTAINS(x, y, w, h, zone->x, zone->y, zone->w, zone->h))
if (above_ec->argb)
{
- if (above_ec->visibility.opaque <= 0)
+ if (above_ec->visibility.opaque != E_ALPHA_OPAQUE_SET)
continue;
else
{
e_policy_wl_iconify_state_change_send(ec, 0);
}
- if ((ec->visibility.opaque > 0) && (ec->argb))
+ if ((ec->visibility.opaque == E_ALPHA_OPAQUE_SET) && (ec->argb))
{
_e_policy_client_below_uniconify(ec);
}
}
else
{
- if (child->visibility.opaque > 0)
+ if (child->visibility.opaque == E_ALPHA_OPAQUE_SET)
{
ELOGF("POL_VIS", "Fully Obscured by alpha opaque child (win:%zx, child:%p)",
ec, e_client_util_win_get(child), child);
}
else
{
- if (above->visibility.opaque <= 0)
+ if (above->visibility.opaque != E_ALPHA_OPAQUE_SET)
continue;
else
{
}
else
{
- if (above->visibility.opaque <= 0)
+ if (above->visibility.opaque != E_ALPHA_OPAQUE_SET)
continue;
else
{
/* check if ignored */
if (e_client_util_ignored_get(ec)) return EINA_FALSE;
/* check transparent */
- if (check_alpha && ((ec->argb) && (ec->visibility.opaque <= 0))) return EINA_FALSE;
+ if (check_alpha && ((ec->argb) && (ec->visibility.opaque != E_ALPHA_OPAQUE_SET))) return EINA_FALSE;
/* check deleted client */
if (e_object_is_del(E_OBJECT(ec))) return EINA_FALSE;
/* check launchscreen */
above_vis_type = E_POL_VIS_TYPE_NON_ALPHA;
else
{
- if (above->visibility.opaque > 0)
+ if (above->visibility.opaque == E_ALPHA_OPAQUE_SET)
above_vis_type = E_POL_VIS_TYPE_ALPHA_OPAQUE;
continue;
if (ec->iconic && e_client_is_iconified_by_client(ec)) return EINA_FALSE;
if (ec->bg_state) return EINA_FALSE;
if (ec->comp_data && !ec->comp_data->mapped) return EINA_FALSE;
- if ((ec->argb) && (ec->visibility.opaque <= 0)) return EINA_FALSE;
+ if ((ec->argb) && (ec->visibility.opaque != E_ALPHA_OPAQUE_SET)) return EINA_FALSE;
if (e_client_visibility_get(ec) != E_VISIBILITY_UNOBSCURED) return EINA_FALSE;
if (!ec->visible) return EINA_FALSE;
if (!below->internal)
*below_list = eina_list_prepend(*below_list, vc);
- if (!(below->argb) || !(below->visibility.opaque <= 0))
+
+ if (!(below->argb) || !(below->visibility.opaque != E_ALPHA_OPAQUE_SET))
{
eina_tiler_union(above_tile, below_tile);
E_VISIBILITY_PRE_UNOBSCURED = 3,
} E_Visibility;
+typedef enum _E_Alpha_Opaque
+{
+ E_ALPHA_OPAQUE_UNKNOWN = -1,
+ E_ALPHA_OPAQUE_UNSET = 0,
+ E_ALPHA_OPAQUE_SET = 1,
+} E_Alpha_Opaque;
+
typedef enum _E_Changable_Layer_Type
{
E_CHANGABLE_LAYER_TYPE_TRANSIENT = 0,
struct
{
- int opaque;
+ E_Alpha_Opaque opaque;
int obscured;
unsigned char changed : 1;
Eina_Bool skip : 1;
E_API Eina_Bool e_client_visibility_changed_get(E_Client *ec);
E_API Eina_Bool e_client_visibility_force_obscured_get(E_Client *ec);
-E_API Eina_Bool e_client_visibility_opaque_state_get(E_Client *ec, int *opaque);
-E_API void e_client_visibility_opaque_state_set(E_Client *ec, int opaque);
+E_API E_Alpha_Opaque e_client_visibility_alpha_opaque_get(E_Client *ec);
+E_API void e_client_visibility_alpha_opaque_set(E_Client *ec, int opaque);
E_API void e_client_visibility_obscured_set(E_Client *ec, E_Visibility obscured);
E_API E_Visibility e_client_visibility_obscured_get(E_Client *ec);
E_API Eina_Bool e_client_visibility_skip_get(E_Client *ec);