From cdea4e8dfaa867aaff629f2b4a725e87c8f21480 Mon Sep 17 00:00:00 2001 From: Hans von Hohenstaufen Date: Mon, 22 Dec 2025 01:49:51 +0000 Subject: [PATCH] Change names to focus and unfocus. --- patches/client-opacity-focus/README.md | 5 +- .../client-opacity-focus.patch | 107 +++++++++--------- 2 files changed, 57 insertions(+), 55 deletions(-) diff --git a/patches/client-opacity-focus/README.md b/patches/client-opacity-focus/README.md index 3008d90..69b158a 100644 --- a/patches/client-opacity-focus/README.md +++ b/patches/client-opacity-focus/README.md @@ -6,13 +6,14 @@ patch. This patch adds differing opacity levels depending upon whether the clien The opacity levels can be change by short cuts. ``` -[MODKEY]+[Ctrl]+[k] -> increase focus opacity -[MODKEY]+[Ctrl]+[j] -> decrease focus opacity +[MODKEY]+[Ctrl]+[k] -> increase focus opacity unfocused client +[MODKEY]+[Ctrl]+[j] -> decrease focus opacity unfocused client [MODKEY]+[Ctrl]+[Shift]+[k] -> increase focus opacity focused client [MODKEY]+[Ctrl]+[Shift]+[j] -> decrease focus opacity focused client ``` ### Download +- [git branch](https://codeberg.org/Hansvon/dwl/src/branch/client-opacity-focus) - [2025-12-11](https://codeberg.org/dwl/dwl-patches/raw/branch/main/patches/client-opacity-focus/client-opacity-focus.patch) ### Authors diff --git a/patches/client-opacity-focus/client-opacity-focus.patch b/patches/client-opacity-focus/client-opacity-focus.patch index 29a7f72..37f7e4d 100644 --- a/patches/client-opacity-focus/client-opacity-focus.patch +++ b/patches/client-opacity-focus/client-opacity-focus.patch @@ -1,73 +1,73 @@ -From 32856e720c4992b9ecc05e408a74f3ac5e9c351e Mon Sep 17 00:00:00 2001 +From 694751a31a437bbb28c3a75c917ed922231ab366 Mon Sep 17 00:00:00 2001 From: Hans von Hohenstaufen -Date: Thu, 11 Dec 2025 02:30:36 +0000 -Subject: [PATCH] Add client-opacity-focus patch +Date: Mon, 22 Dec 2025 01:43:50 +0000 +Subject: [PATCH] Add client opacity focus --- config.def.h | 12 +++++++--- - dwl.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 71 insertions(+), 3 deletions(-) + dwl.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 72 insertions(+), 3 deletions(-) diff --git a/config.def.h b/config.def.h -index 95c2afa..b3170d1 100644 +index 95c2afa..b7002f5 100644 --- a/config.def.h +++ b/config.def.h @@ -13,6 +13,8 @@ static const float focuscolor[] = COLOR(0x005577ff); static const float urgentcolor[] = COLOR(0xff0000ff); /* This conforms to the xdg-protocol. Set the alpha to zero to restore the old behavior */ static const float fullscreen_bg[] = {0.0f, 0.0f, 0.0f, 1.0f}; /* You can also use glsl colors */ -+static const float default_opacity_inactive = 0.70; -+static const float default_opacity_active = 1.00; - ++static const float default_opacity_unfocus = 0.70f; ++static const float default_opacity_focus = 1.00f; + /* tagging - TAGCOUNT must be no greater than 31 */ #define TAGCOUNT (9) @@ -22,10 +24,10 @@ static int log_level = WLR_ERROR; - + /* NOTE: ALWAYS keep a rule declared even if you don't use rules (e.g leave at least one example) */ static const Rule rules[] = { - /* app_id title tags mask isfloating monitor */ -+ /* app_id title tags mask isfloating alpha monitor */ ++ /* app_id title tags mask isfloating alpha unfocus monitor */ /* examples: */ - { "Gimp_EXAMPLE", NULL, 0, 1, -1 }, /* Start on currently visible tags floating, not tiled */ - { "firefox_EXAMPLE", NULL, 1 << 8, 0, -1 }, /* Start on ONLY tag "9" */ -+ { "Gimp_EXAMPLE", NULL, 0, 1, default_opacity_inactive, -1 }, /* Start on currently visible tags floating, not tiled */ -+ { "firefox_EXAMPLE", NULL, 1 << 8, 0, 1.00, -1 }, /* Start on ONLY tag "9" */ ++ { "Gimp_EXAMPLE", NULL, 0, 1, default_opacity_unfocus, -1 }, /* Start on currently visible tags floating, not tiled */ ++ { "firefox_EXAMPLE", NULL, 1 << 8, 0, 1.00, -1 }, /* Start on ONLY tag "9" */ }; - + /* layout(s) */ @@ -139,6 +141,10 @@ static const Key keys[] = { { MODKEY, XKB_KEY_t, setlayout, {.v = &layouts[0]} }, { MODKEY, XKB_KEY_f, setlayout, {.v = &layouts[1]} }, { MODKEY, XKB_KEY_m, setlayout, {.v = &layouts[2]} }, -+ { MODKEY|WLR_MODIFIER_CTRL, XKB_KEY_k, setopacityinactive, {.f = +0.1f} }, -+ { MODKEY|WLR_MODIFIER_CTRL, XKB_KEY_j, setopacityinactive, {.f = -0.1f} }, -+ { MODKEY|WLR_MODIFIER_CTRL|WLR_MODIFIER_SHIFT, XKB_KEY_K, setopacityactive, {.f = +0.1f} }, -+ { MODKEY|WLR_MODIFIER_CTRL|WLR_MODIFIER_SHIFT, XKB_KEY_J, setopacityactive, {.f = -0.1f} }, ++ { MODKEY|WLR_MODIFIER_CTRL, XKB_KEY_k, setopacityunfocus, {.f = +0.1f} }, ++ { MODKEY|WLR_MODIFIER_CTRL, XKB_KEY_j, setopacityunfocus, {.f = -0.1f} }, ++ { MODKEY|WLR_MODIFIER_CTRL|WLR_MODIFIER_SHIFT, XKB_KEY_K, setopacityfocus, {.f = +0.1f} }, ++ { MODKEY|WLR_MODIFIER_CTRL|WLR_MODIFIER_SHIFT, XKB_KEY_J, setopacityfocus, {.f = -0.1f} }, { MODKEY, XKB_KEY_space, setlayout, {0} }, { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_space, togglefloating, {0} }, { MODKEY, XKB_KEY_e, togglefullscreen, {0} }, diff --git a/dwl.c b/dwl.c -index 12f441e..caafab1 100644 +index 12f441e..7539738 100644 --- a/dwl.c +++ b/dwl.c @@ -138,6 +138,9 @@ typedef struct { unsigned int bw; uint32_t tags; int isfloating, isurgent, isfullscreen; -+ float opacity; -+ float opacity_active; -+ float opacity_inactive; ++ float opacity; ++ float opacity_focus; ++ float opacity_unfocus; uint32_t resize; /* configure serial of a pending resize */ } Client; - + @@ -227,6 +230,7 @@ typedef struct { const char *title; uint32_t tags; int isfloating; -+ float opacity; ++ float opacity_unfocus; int monitor; } Rule; - + @@ -319,6 +323,7 @@ static void requeststartdrag(struct wl_listener *listener, void *data); static void requestmonstate(struct wl_listener *listener, void *data); static void resize(Client *c, struct wlr_box geo, int interact); @@ -80,8 +80,8 @@ index 12f441e..caafab1 100644 static void setlayout(const Arg *arg); static void setmfact(const Arg *arg); static void setmon(Client *c, Monitor *m, uint32_t newtags); -+static void setopacityinactive(const Arg *arg); -+static void setopacityactive(const Arg *arg); ++static void setopacityunfocus(const Arg *arg); ++static void setopacityfocus(const Arg *arg); static void setpsel(struct wl_listener *listener, void *data); static void setsel(struct wl_listener *listener, void *data); static void setup(void); @@ -89,7 +89,7 @@ index 12f441e..caafab1 100644 if ((!r->title || strstr(title, r->title)) && (!r->id || strstr(appid, r->id))) { c->isfloating = r->isfloating; -+ c->opacity = r->opacity; ++ c->opacity = r->opacity_unfocus; newtags |= r->tags; i = 0; wl_list_for_each(m, &mons, link) { @@ -98,25 +98,25 @@ index 12f441e..caafab1 100644 c->surface.xdg = toplevel->base; c->bw = borderpx; + /* Set default opacity*/ -+ c->opacity_inactive = default_opacity_inactive; -+ c->opacity_active = default_opacity_active; -+ c->opacity = default_opacity_inactive; - ++ c->opacity_unfocus = default_opacity_unfocus; ++ c->opacity_focus = default_opacity_focus; ++ c->opacity = default_opacity_unfocus; + LISTEN(&toplevel->base->surface->events.commit, &c->commit, commitnotify); LISTEN(&toplevel->base->surface->events.map, &c->map, mapnotify); @@ -1429,6 +1441,7 @@ focusclient(Client *c, int lift) wl_list_insert(&fstack, &c->flink); selmon = c->mon; c->isurgent = 0; -+ c->opacity = c->opacity_active; - ++ c->opacity = c->opacity_focus; + /* Don't change border color if there is an exclusive focus or we are * handling a drag operation */ @@ -1453,6 +1466,7 @@ focusclient(Client *c, int lift) client_set_border_color(old_c, bordercolor); - + client_activate_surface(old, 0); -+ old_c->opacity = old_c->opacity_inactive; ++ old_c->opacity = old_c->opacity_unfocus; } } printstatus(); @@ -131,7 +131,7 @@ index 12f441e..caafab1 100644 @@ -2295,6 +2310,15 @@ run(char *startup_cmd) wl_display_run(dpy); } - + +void +scenebuffersetopacity(struct wlr_scene_buffer *buffer, int sx, int sy, void *data) +{ @@ -152,43 +152,44 @@ index 12f441e..caafab1 100644 arrange(c->mon); printstatus(); } -@@ -2419,6 +2444,43 @@ setmon(Client *c, Monitor *m, uint32_t newtags) +@@ -2419,6 +2444,44 @@ setmon(Client *c, Monitor *m, uint32_t newtags) focusclient(focustop(selmon), 1); } - + + +void -+setopacityinactive(const Arg *arg) ++setopacityunfocus(const Arg *arg) +{ + Client *sel = focustop(selmon); + if (!sel) + return; + -+ sel->opacity_default += arg->f; -+ if (sel->opacity_default > 1.0) -+ sel->opacity_default = 1.0f; ++ sel->opacity_unfocus += arg->f; ++ if (sel->opacity_unfocus > 1.0) ++ sel->opacity_unfocus = 1.0f; + -+ if (sel->opacity_default < 0.1) -+ sel->opacity_default = 0.1f; ++ if (sel->opacity_unfocus < 0.1) ++ sel->opacity_unfocus = 0.1f; + + wlr_scene_node_for_each_buffer(&sel->scene_surface->node, scenebuffersetopacity, sel); +} + +void -+setopacityactive(const Arg *arg) ++setopacityfocus(const Arg *arg) +{ + Client *sel = focustop(selmon); + if (!sel) + return; + -+ sel->opacity_active += arg->f; -+ if (sel->opacity_active > 1.0) -+ sel->opacity_active = 1.0f; ++ sel->opacity_focus += arg->f; ++ if (sel->opacity_focus > 1.0) ++ sel->opacity_focus = 1.0f; + -+ if (sel->opacity_active < 0.1) -+ sel->opacity_active = 0.1f; ++ if (sel->opacity_focus < 0.1) ++ sel->opacity_focus = 0.1f; + -+ sel->opacity = sel->opacity_active; ++ /* Change opacity from current client */ ++ sel->opacity = sel->opacity_focus; + + wlr_scene_node_for_each_buffer(&sel->scene_surface->node, scenebuffersetopacity, sel); +} @@ -196,6 +197,6 @@ index 12f441e..caafab1 100644 void setpsel(struct wl_listener *listener, void *data) { --- +-- 2.51.2