From 927c507effb47b35fd4d98c4818fb64f96d5bf5e Mon Sep 17 00:00:00 2001 From: allusive-dev Date: Sat, 4 Nov 2023 17:49:36 +1100 Subject: added inactive and active opacity exclude lists --- picom.sample.conf | 13 +++++++------ src/win.c | 42 +++++++++++++++++++++++++++++++++++++----- 2 files changed, 44 insertions(+), 11 deletions(-) diff --git a/picom.sample.conf b/picom.sample.conf index bcd7849..7111256 100644 --- a/picom.sample.conf +++ b/picom.sample.conf @@ -1,6 +1,6 @@ # Enables patches for specific window managers. -# Currently patched: "awesome", "dwm" +# Currently patched: "awesome", "dwm", "herb" wm-support = "none"; ################################# @@ -102,7 +102,11 @@ shadow-offset-y = -15; # FADING IS REQUIRED FOR CLOSING ANIMATIONS fading = true; -# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028) +# +# CHANGING FADING SETTINGS MAKE A BIG DIFFERENCE TO HOW ANIMATIONS APPEAR. ITS NOT RECCOMENDED TO CHANGE FADE SETTINGS. +# + +# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.03) fade-in-step = 0.03; # Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03) @@ -144,10 +148,7 @@ active-opacity = 1.0 # Specify a list of conditions of windows that should never be considered focused. # focus-exclude = [ # "class_g = 'Cairo-clock'" -#]; - -# Use fixed inactive dim value, instead of adjusting according to window opacity. -# inactive-dim-fixed = 1.0 +#]; # Specify a list of opacity rules, in the format `PERCENT:PATTERN`, # like `50:name *= "Firefox"`. diff --git a/src/win.c b/src/win.c index 1d50313..8c85449 100644 --- a/src/win.c +++ b/src/win.c @@ -1134,12 +1134,24 @@ double win_calc_opacity_target(session_t *ps, const struct managed_win *w) { } else if (w->opacity_is_set && ps->o.inactive_opacity_override) { if (ps->o.support_for_wm == WM_SUPPORT_DWM) { if (win_is_focused_raw(ps, w)) { - opacity = w->opacity_set; + if (c2_match(ps, w, ps->o.active_opacity_blacklist, NULL)) { + opacity = 1.0; + } else { + opacity = w->opacity_set; + } } else if (!win_is_focused_raw(ps, w)) { if (ps->o.inactive_opacity == 1.0) { opacity = w->opacity_set; } else { - opacity = ps->o.inactive_opacity; + if (c2_match(ps, w, ps->o.inactive_opacity_blacklist, NULL)) { + if (c2_match(ps, w, ps->o.active_opacity_blacklist, NULL)) { + opacity = 1.0; + } else { + opacity = ps->o.active_opacity; + } + } else { + opacity = ps->o.inactive_opacity; + } } } } else { @@ -1149,7 +1161,15 @@ double win_calc_opacity_target(session_t *ps, const struct managed_win *w) { if (ps->o.inactive_opacity == 1.0) { opacity = w->opacity_set; } else { - opacity = ps->o.inactive_opacity; + if (c2_match(ps, w, ps->o.inactive_opacity_blacklist, NULL)) { + if (c2_match(ps, w, ps->o.active_opacity_blacklist, NULL)) { + opacity = 1.0; + } else { + opacity = ps->o.active_opacity; + } + } else { + opacity = ps->o.inactive_opacity; + } } } } @@ -1160,9 +1180,21 @@ double win_calc_opacity_target(session_t *ps, const struct managed_win *w) { // Respect active_opacity only when the window is physically // focused if (win_is_focused_raw(ps, w)) { - opacity = ps->o.active_opacity; + if (c2_match(ps, w, ps->o.active_opacity_blacklist, NULL)) { + opacity = 1.0; + } else { + opacity = ps->o.active_opacity; + } } else if (!w->focused) { - opacity = ps->o.inactive_opacity; + if (c2_match(ps, w, ps->o.inactive_opacity_blacklist, NULL)) { + if (c2_match(ps, w, ps->o.active_opacity_blacklist, NULL)) { + opacity = 1.0; + } else { + opacity = ps->o.active_opacity; + } + } else { + opacity = ps->o.inactive_opacity; + } } } -- cgit v1.2.3