Remove ARGB as a window mode

Instead use win_has_alpha to check for alpha channel, window mode is
reserved for determine if the window is possibly transparent.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
This commit is contained in:
Yuxuan Shui
2018-09-29 19:07:39 +01:00
parent 290cdd2b85
commit 90b6aa16ad
8 changed files with 42 additions and 30 deletions

View File

@ -281,19 +281,21 @@ bool wid_get_opacity_prop(session_t *ps, Window wid, opacity_t def,
return ret;
}
// XXX should distinguish between frame has alpha and window body has alpha
bool win_has_alpha(win *w) {
return w->pictfmt &&
w->pictfmt->type == XCB_RENDER_PICT_TYPE_DIRECT &&
w->pictfmt->direct.alpha_mask;
}
void win_determine_mode(session_t *ps, win *w) {
winmode_t mode = WMODE_SOLID;
if (w->pictfmt && w->pictfmt->type == XCB_RENDER_PICT_TYPE_DIRECT &&
w->pictfmt->direct.alpha_mask) {
mode = WMODE_ARGB;
} else if (w->opacity != OPAQUE) {
mode = WMODE_TRANS;
if (win_has_alpha(w) || w->opacity != OPAQUE) {
w->mode = WMODE_TRANS;
} else if (w->frame_opacity) {
w->mode = WMODE_FRAME_TRANS;
} else {
mode = WMODE_SOLID;
w->mode = WMODE_SOLID;
}
w->mode = mode;
}
/**
@ -375,7 +377,7 @@ void win_determine_fade(session_t *ps, win *w) {
else if (ps->o.no_fading_openclose && w->in_openclose)
w->fade_last = w->fade = false;
else if (ps->o.no_fading_destroyed_argb && w->destroyed &&
WMODE_ARGB == w->mode && w->client_win && w->client_win != w->id) {
win_has_alpha(w) && w->client_win && w->client_win != w->id) {
w->fade_last = w->fade = false;
}
// Ignore other possible causes of fading state changes after window