You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
patches/dwm/dwm-tabbed_fickering_after_...

52 lines
1.8 KiB
Diff

From 76ae3926b9c223a8000fc062141a979ede338749 Mon Sep 17 00:00:00 2001
From: Bakkeby <bakkeby@gmail.com>
Date: Wed, 9 Feb 2022 10:14:37 +0100
Subject: [PATCH] Fixes flickering in tabbed after reparenting a window in dwm
This is a workaround ref.
https://www.reddit.com/r/suckless/comments/sisbe2/adding_an_existing_window_to_tabbed_causes/
This workaround is deprecated in favour of the following fix:
https://github.com/bakkeby/patches/blob/master/dwm/dwm-tabbed_fickering_after_xdotool_windowreparent_fix-20220612-d3f93c7.diff
The scenario is that you run tabbed and then you use xdotool to
reparent an existing client window into tabbed then that window
will start flickering when it has focus.
This has to do with that both dwm and tabbed will receive FocusIn
events resulting in an endless loop where tabbed sets focus to the
tabbed window whereas dwm will set the focus back to tabbed itself.
To replicate:
- start two terminals and tabbed
- run xwininfo on tabbed to get its window ID (e.g. 0xe00003)
- now run the following command and select the other terminal
xdotool windowreparent $(xdotool selectwindow) 0xe00003
The other terminal should be placed within tabbed as expected, but
it should flicker and CPU usage should go up.
The workaround is to have dwm ignore the FocusIn event if the window
that the event is related to is not managed by the window manager.
---
dwm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dwm.c b/dwm.c
index a96f33c..f625ef3 100644
--- a/dwm.c
+++ b/dwm.c
@@ -815,7 +815,7 @@ focusin(XEvent *e)
{
XFocusChangeEvent *ev = &e->xfocus;
- if (selmon->sel && ev->window != selmon->sel->win)
+ if (selmon->sel && ev->window != selmon->sel->win && wintoclient(ev->window))
setfocus(selmon->sel);
}
--
2.19.1