mirror of
https://codeberg.org/dwl/dwl-patches.git
synced 2025-09-08 12:14:50 +00:00
activation-rules: new patch
This commit is contained in:
parent
2ce469b149
commit
690a5dea84
8
patches/activation-rules/README.md
Normal file
8
patches/activation-rules/README.md
Normal file
@ -0,0 +1,8 @@
|
||||
### Description
|
||||
Allow certain clients to be focused on activation requests.
|
||||
|
||||
### Download
|
||||
- [main 2024-09-03](/dwl/dwl-patches/raw/branch/main/patches/activation-rules/activation-rules.patch)
|
||||
|
||||
### Authors
|
||||
- [sevz](https://codeberg.org/sevz)
|
116
patches/activation-rules/activation-rules.patch
Normal file
116
patches/activation-rules/activation-rules.patch
Normal file
@ -0,0 +1,116 @@
|
||||
From f06b23ec91aa019e529e23c18c14bde867b4ed0a Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Leonardo=20Hern=C3=A1ndez=20Hern=C3=A1ndez?=
|
||||
<leohdz172@proton.me>
|
||||
Date: Fri, 26 Jul 2024 23:04:32 -0600
|
||||
Subject: [PATCH] allow clients to be focused on activation requests
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Not all clients are allow to do so. Users can specify which clients through rules
|
||||
|
||||
Signed-off-by: Leonardo Hernández Hernández <leohdz172@proton.me>
|
||||
---
|
||||
config.def.h | 7 ++++---
|
||||
dwl.c | 35 ++++++++++++++++++++++++++++++-----
|
||||
2 files changed, 34 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/config.def.h b/config.def.h
|
||||
index 22d2171d..1a61ffb2 100644
|
||||
--- a/config.def.h
|
||||
+++ b/config.def.h
|
||||
@@ -22,10 +22,11 @@ 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 allow_activation 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, 0, -1 }, /* Start on currently visible tags floating, not tiled */
|
||||
+ { "firefox_EXAMPLE", NULL, 1 << 8, 0, 0, -1 }, /* Start on ONLY tag "9" */
|
||||
+ { "emacs_EXAMPLE", NULL, 0, 0, 1, -1 }, /* Allow to be focused through activations requests */
|
||||
};
|
||||
|
||||
/* layout(s) */
|
||||
diff --git a/dwl.c b/dwl.c
|
||||
index 9021e442..106099ed 100644
|
||||
--- a/dwl.c
|
||||
+++ b/dwl.c
|
||||
@@ -141,6 +141,7 @@ typedef struct {
|
||||
#endif
|
||||
unsigned int bw;
|
||||
uint32_t tags;
|
||||
+ int allow_activation;
|
||||
int isfloating, isurgent, isfullscreen;
|
||||
uint32_t resize; /* configure serial of a pending resize */
|
||||
} Client;
|
||||
@@ -231,6 +232,7 @@ typedef struct {
|
||||
const char *title;
|
||||
uint32_t tags;
|
||||
int isfloating;
|
||||
+ int allow_activation;
|
||||
int monitor;
|
||||
} Rule;
|
||||
|
||||
@@ -466,6 +468,7 @@ applyrules(Client *c)
|
||||
if ((!r->title || strstr(title, r->title))
|
||||
&& (!r->id || strstr(appid, r->id))) {
|
||||
c->isfloating = r->isfloating;
|
||||
+ c->allow_activation = r->allow_activation;
|
||||
newtags |= r->tags;
|
||||
i = 0;
|
||||
wl_list_for_each(m, &mons, link) {
|
||||
@@ -2899,10 +2902,20 @@ urgent(struct wl_listener *listener, void *data)
|
||||
return;
|
||||
|
||||
c->isurgent = 1;
|
||||
- printstatus();
|
||||
+ if (!client_surface(c)->mapped) {
|
||||
+ printstatus();
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
- if (client_surface(c)->mapped)
|
||||
+ if (event->token->seat && event->token->surface && c->allow_activation) {
|
||||
+ selmon = c->mon;
|
||||
+ if (!VISIBLEON(c, c->mon))
|
||||
+ view(&((Arg){.ui = c->tags}));
|
||||
+ focusclient(c, 1);
|
||||
+ } else {
|
||||
client_set_border_color(c, urgentcolor);
|
||||
+ printstatus();
|
||||
+ }
|
||||
}
|
||||
|
||||
void
|
||||
@@ -3112,10 +3125,22 @@ sethints(struct wl_listener *listener, void *data)
|
||||
return;
|
||||
|
||||
c->isurgent = xcb_icccm_wm_hints_get_urgency(c->surface.xwayland->hints);
|
||||
- printstatus();
|
||||
+ if (!surface || !surface->mapped) {
|
||||
+ printstatus();
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
- if (c->isurgent && surface && surface->mapped)
|
||||
- client_set_border_color(c, urgentcolor);
|
||||
+ if (c->isurgent) {
|
||||
+ if (c->allow_activation) {
|
||||
+ selmon = c->mon;
|
||||
+ if (!VISIBLEON(c, c->mon))
|
||||
+ view(&((Arg){.ui = c->tags}));
|
||||
+ focusclient(c, 1);
|
||||
+ } else {
|
||||
+ client_set_border_color(c, urgentcolor);
|
||||
+ printstatus();
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
void
|
||||
--
|
||||
2.46.0
|
||||
|
Loading…
x
Reference in New Issue
Block a user