add 'disable-keybindings-on-fullscreen' patch

This commit is contained in:
korei999 2025-02-09 16:57:49 +02:00
parent 5f6ffb8161
commit 28e8282191
2 changed files with 91 additions and 0 deletions

View File

@ -0,0 +1,9 @@
### Description
This patch disables all keybindings except `togglefullscreen` when the focused window is fullscreen.
Might help prevent fat-fingering.
### Download
- [git branch](https://codeberg.org/korei999/dwl/src/branch/disable-keybindings-on-fullscreen)
- [2025-02-09](https://codeberg.org/dwl/dwl-patches/raw/branch/main/patches/disable-keybindings-on-fullscreen/disable-keybindings-on-fullscreen.patch)
### Authors
- [korei999](https://codeberg.org/korei999)

View File

@ -0,0 +1,82 @@
From 2d6b845701091d3238774747c718df7fef135986 Mon Sep 17 00:00:00 2001
From: korei999 <ju7t1xe@gmail.com>
Date: Sun, 9 Feb 2025 14:59:33 +0200
Subject: [PATCH] disable keybindings on fullscreen
---
dwl.c | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/dwl.c b/dwl.c
index ec4ca86..8c771e8 100644
--- a/dwl.c
+++ b/dwl.c
@@ -282,6 +282,7 @@ static void destroypointerconstraint(struct wl_listener *listener, void *data);
static void destroysessionlock(struct wl_listener *listener, void *data);
static void destroykeyboardgroup(struct wl_listener *listener, void *data);
static Monitor *dirtomon(enum wlr_direction dir);
+static Client *firstfocused(void);
static void focusclient(Client *c, int lift);
static void focusmon(const Arg *arg);
static void focusstack(const Arg *arg);
@@ -620,11 +621,15 @@ buttonpress(struct wl_listener *listener, void *data)
struct wlr_pointer_button_event *event = data;
struct wlr_keyboard *keyboard;
uint32_t mods;
- Client *c;
+ Client *c, *focused;
const Button *b;
wlr_idle_notifier_v1_notify_activity(idle_notifier, seat);
+ focused = firstfocused();
+ if (focused && focused->isfullscreen)
+ goto skip_click;
+
switch (event->state) {
case WL_POINTER_BUTTON_STATE_PRESSED:
cursor_mode = CurPressed;
@@ -664,6 +669,7 @@ buttonpress(struct wl_listener *listener, void *data)
}
/* If the event wasn't handled by the compositor, notify the client with
* pointer focus that a button press has occurred */
+skip_click:
wlr_seat_pointer_notify_button(seat,
event->time_msec, event->button, event->state);
}
@@ -1393,6 +1399,13 @@ dirtomon(enum wlr_direction dir)
return selmon;
}
+Client *
+firstfocused(void)
+{
+ Client *c = wl_container_of(fstack.next, c, flink);
+ return c;
+}
+
void
focusclient(Client *c, int lift)
{
@@ -1607,10 +1620,18 @@ keybinding(uint32_t mods, xkb_keysym_t sym)
* processing keys, rather than passing them on to the client for its own
* processing.
*/
+ Client *c = firstfocused();
const Key *k;
for (k = keys; k < END(keys); k++) {
if (CLEANMASK(mods) == CLEANMASK(k->mod)
&& sym == k->keysym && k->func) {
+ if (c && c->isfullscreen) {
+ if (k->func == togglefullscreen) {
+ k->func(&k->arg);
+ return 1;
+ }
+ return 0;
+ }
k->func(&k->arg);
return 1;
}
--
2.48.1