mirror of
https://github.com/mintycube/dwm.git
synced 2024-10-22 14:05:45 +02:00
Adding focusfollowmouse patch ref. #364
This commit is contained in:
parent
1a1ce47917
commit
99f6f1b52c
@ -19,6 +19,8 @@ Browsing patches? There is a [map of patches](https://coggle.it/diagram/X9IiSSM6
|
||||
|
||||
### Changelog:
|
||||
|
||||
2023-06-27 - Added the focusfollowmouse patch
|
||||
|
||||
2023-06-25 - Added the toggletopbar patch
|
||||
|
||||
2023-01-18 - Added the view history patch
|
||||
@ -433,6 +435,10 @@ Browsing patches? There is a [map of patches](https://coggle.it/diagram/X9IiSSM6
|
||||
- allows focusing on clients based on direction (up, down, left, right) instead of client
|
||||
order
|
||||
|
||||
- [focusfollowmouse](https://github.com/bakkeby/patches/wiki/focusfollowmouse)
|
||||
- the window under the mouse cursor will receive focus when changing tags, closing windows or
|
||||
moving client out of view (as opposed to the most recently focused client)
|
||||
|
||||
- [focusmaster](https://dwm.suckless.org/patches/focusmaster/)
|
||||
- a simple patch that just puts focus back to the master client
|
||||
|
||||
|
23
dwm.c
23
dwm.c
@ -1489,8 +1489,8 @@ configurenotify(XEvent *e)
|
||||
createpreview(m);
|
||||
#endif // BAR_TAGPREVIEW_PATCH
|
||||
}
|
||||
focus(NULL);
|
||||
arrange(NULL);
|
||||
focus(NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2037,6 +2037,10 @@ expose(XEvent *e)
|
||||
void
|
||||
focus(Client *c)
|
||||
{
|
||||
#if FOCUSFOLLOWMOUSE_PATCH
|
||||
if (!c || !ISVISIBLE(c))
|
||||
c = getpointerclient();
|
||||
#endif // FOCUSFOLLOWMOUSE_PATCH
|
||||
if (!c || !ISVISIBLE(c))
|
||||
for (c = selmon->stack; c && !ISVISIBLE(c); c = c->snext);
|
||||
if (selmon->sel && selmon->sel != c)
|
||||
@ -3347,11 +3351,12 @@ sendmon(Client *c, Monitor *m)
|
||||
if (hadfocus) {
|
||||
focus(c);
|
||||
restack(m);
|
||||
} else
|
||||
} else {
|
||||
focus(NULL);
|
||||
}
|
||||
#else
|
||||
focus(NULL);
|
||||
arrange(NULL);
|
||||
focus(NULL);
|
||||
#endif // EXRESIZE_PATCH / SENDMON_KEEPFOCUS_PATCH
|
||||
#if SWITCHTAG_PATCH
|
||||
if (c->switchtag)
|
||||
@ -4074,6 +4079,7 @@ tag(const Arg *arg)
|
||||
if (selmon->sel->switchtag)
|
||||
selmon->sel->switchtag = 0;
|
||||
#endif // SWITCHTAG_PATCH
|
||||
arrange(selmon);
|
||||
focus(NULL);
|
||||
#if SWAPFOCUS_PATCH && PERTAG_PATCH
|
||||
selmon->pertag->prevclient[selmon->pertag->curtag] = NULL;
|
||||
@ -4081,7 +4087,6 @@ tag(const Arg *arg)
|
||||
if (tagmask & 1)
|
||||
selmon->pertag->prevclient[tagindex] = NULL;
|
||||
#endif // SWAPFOCUS_PATCH
|
||||
arrange(selmon);
|
||||
#if VIEWONTAG_PATCH
|
||||
if ((arg->ui & TAGMASK) != selmon->tagset[selmon->seltags])
|
||||
view(arg);
|
||||
@ -4213,13 +4218,13 @@ toggletag(const Arg *arg)
|
||||
newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
|
||||
if (newtags) {
|
||||
selmon->sel->tags = newtags;
|
||||
arrange(selmon);
|
||||
focus(NULL);
|
||||
#if SWAPFOCUS_PATCH && PERTAG_PATCH
|
||||
for (tagmask = arg->ui & TAGMASK, tagindex = 1; tagmask!=0; tagmask >>= 1, tagindex++)
|
||||
if (tagmask & 1)
|
||||
selmon->pertag->prevclient[tagindex] = NULL;
|
||||
#endif // SWAPFOCUS_PATCH
|
||||
arrange(selmon);
|
||||
}
|
||||
#if BAR_EWMHTAGS_PATCH
|
||||
updatecurrentdesktop();
|
||||
@ -4306,8 +4311,8 @@ toggleview(const Arg *arg)
|
||||
#endif // PERTAGBAR_PATCH
|
||||
#endif // PERTAG_PATCH
|
||||
#if !TAGSYNC_PATCH
|
||||
focus(NULL);
|
||||
arrange(selmon);
|
||||
focus(NULL);
|
||||
#endif // TAGSYNC_PATCH
|
||||
#if !EMPTYVIEW_PATCH
|
||||
}
|
||||
@ -4318,8 +4323,8 @@ toggleview(const Arg *arg)
|
||||
#if !EMPTYVIEW_PATCH
|
||||
if (newtagset) {
|
||||
#endif // EMPTYVIEW_PATCH
|
||||
focus(NULL);
|
||||
arrange(NULL);
|
||||
focus(NULL);
|
||||
#if !EMPTYVIEW_PATCH
|
||||
}
|
||||
#endif // EMPTYVIEW_PATCH
|
||||
@ -4456,9 +4461,9 @@ unmanage(Client *c, int destroyed)
|
||||
if (s)
|
||||
return;
|
||||
#endif // SWALLOW_PATCH
|
||||
arrange(m);
|
||||
focus(NULL);
|
||||
updateclientlist();
|
||||
arrange(m);
|
||||
#if SWITCHTAG_PATCH
|
||||
if (switchtag && ((switchtag & TAGMASK) != selmon->tagset[selmon->seltags]))
|
||||
view(&((Arg) { .ui = switchtag }));
|
||||
@ -4953,12 +4958,12 @@ view(const Arg *arg)
|
||||
}
|
||||
selmon = origselmon;
|
||||
#endif // TAGSYNC_PATCH
|
||||
focus(NULL);
|
||||
#if TAGSYNC_PATCH
|
||||
arrange(NULL);
|
||||
#else
|
||||
arrange(selmon);
|
||||
#endif // TAGSYNC_PATCH
|
||||
focus(NULL);
|
||||
#if BAR_EWMHTAGS_PATCH
|
||||
updatecurrentdesktop();
|
||||
#endif // BAR_EWMHTAGS_PATCH
|
||||
|
@ -22,8 +22,8 @@ combotag(const Arg *arg)
|
||||
combo = 1;
|
||||
selmon->sel->tags = arg->ui & TAGMASK;
|
||||
}
|
||||
focus(NULL);
|
||||
arrange(selmon);
|
||||
focus(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,10 +22,10 @@ distributetags(const Arg *arg)
|
||||
#if TAGSYNC_PATCH
|
||||
}
|
||||
selmon = origselmon;
|
||||
focus(NULL);
|
||||
arrange(NULL);
|
||||
#else
|
||||
focus(NULL);
|
||||
#else
|
||||
arrange(selmon);
|
||||
focus(NULL);
|
||||
#endif // TAGSYNC_PATCH
|
||||
}
|
||||
|
@ -6,8 +6,8 @@ tagtoleft(const Arg *arg)
|
||||
&& __builtin_popcount(selmon->tagset[selmon->seltags] & MASK) == 1
|
||||
&& selmon->tagset[selmon->seltags] > 1) {
|
||||
selmon->sel->tags >>= 1;
|
||||
focus(NULL);
|
||||
arrange(selmon);
|
||||
focus(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,8 +19,8 @@ tagtoright(const Arg *arg)
|
||||
&& __builtin_popcount(selmon->tagset[selmon->seltags] & MASK) == 1
|
||||
&& selmon->tagset[selmon->seltags] & (MASK >> 1)) {
|
||||
selmon->sel->tags <<= 1;
|
||||
focus(NULL);
|
||||
arrange(selmon);
|
||||
focus(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
9
patch/focusfollowmouse.c
Normal file
9
patch/focusfollowmouse.c
Normal file
@ -0,0 +1,9 @@
|
||||
Client *
|
||||
getpointerclient(void)
|
||||
{
|
||||
Window dummy, win;
|
||||
int di;
|
||||
unsigned int dui;
|
||||
XQueryPointer(dpy, root, &dummy, &win, &di, &di, &di, &di, &dui);
|
||||
return wintoclient(win);
|
||||
}
|
1
patch/focusfollowmouse.h
Normal file
1
patch/focusfollowmouse.h
Normal file
@ -0,0 +1 @@
|
||||
static Client *getpointerclient(void);
|
@ -151,6 +151,9 @@
|
||||
#if FOCUSDIR_PATCH
|
||||
#include "focusdir.c"
|
||||
#endif
|
||||
#if FOCUSFOLLOWMOUSE_PATCH
|
||||
#include "focusfollowmouse.c"
|
||||
#endif
|
||||
#if FOCUSMASTER_PATCH
|
||||
#include "focusmaster.c"
|
||||
#endif
|
||||
|
@ -154,6 +154,9 @@
|
||||
#if FOCUSADJACENTTAG_PATCH
|
||||
#include "focusadjacenttag.h"
|
||||
#endif
|
||||
#if FOCUSFOLLOWMOUSE_PATCH
|
||||
#include "focusfollowmouse.h"
|
||||
#endif
|
||||
#if FOCUSMASTER_PATCH
|
||||
#include "focusmaster.h"
|
||||
#endif
|
||||
|
@ -62,8 +62,8 @@ togglescratch(const Arg *arg)
|
||||
if (found) {
|
||||
if (newtagset) {
|
||||
selmon->tagset[selmon->seltags] = newtagset;
|
||||
focus(NULL);
|
||||
arrange(selmon);
|
||||
focus(NULL);
|
||||
}
|
||||
if (ISVISIBLE(found)) {
|
||||
focus(found);
|
||||
|
@ -6,8 +6,8 @@ scratchpad_hide()
|
||||
if (selmon->sel) {
|
||||
selmon->sel->tags = SCRATCHPAD_MASK;
|
||||
selmon->sel->isfloating = 1;
|
||||
focus(NULL);
|
||||
arrange(selmon);
|
||||
focus(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@ -36,8 +36,8 @@ scratchpad_show()
|
||||
|
||||
if (scratchpad_last_showed->tags != SCRATCHPAD_MASK) {
|
||||
scratchpad_last_showed->tags = SCRATCHPAD_MASK;
|
||||
focus(NULL);
|
||||
arrange(selmon);
|
||||
focus(NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -91,8 +91,8 @@ unswallow(Client *c)
|
||||
setfloatinghint(c);
|
||||
#endif // BAR_EWMHTAGS_PATCH
|
||||
setclientstate(c, NormalState);
|
||||
focus(NULL);
|
||||
arrange(c->mon);
|
||||
focus(NULL);
|
||||
}
|
||||
|
||||
pid_t
|
||||
|
@ -43,7 +43,7 @@ tagallmon(const Arg *arg)
|
||||
}
|
||||
}
|
||||
|
||||
focus(NULL);
|
||||
arrange(NULL);
|
||||
focus(NULL);
|
||||
}
|
||||
|
||||
|
@ -37,8 +37,8 @@ tagothermon(const Arg *arg, int dir)
|
||||
sendmon(sel, newmon);
|
||||
if (arg->ui & TAGMASK) {
|
||||
sel->tags = arg->ui & TAGMASK;
|
||||
focus(NULL);
|
||||
arrange(newmon);
|
||||
focus(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -69,7 +69,7 @@ tagswapmon(const Arg *arg)
|
||||
}
|
||||
}
|
||||
|
||||
focus(NULL);
|
||||
arrange(NULL);
|
||||
focus(NULL);
|
||||
}
|
||||
|
||||
|
@ -132,7 +132,6 @@ xrdb(const Arg *arg)
|
||||
#endif // BAR_ALPHA_PATCH
|
||||
ColCount
|
||||
);
|
||||
focus(NULL);
|
||||
arrange(NULL);
|
||||
focus(NULL);
|
||||
}
|
||||
|
||||
|
@ -646,6 +646,12 @@
|
||||
*/
|
||||
#define FOCUSDIR_PATCH 0
|
||||
|
||||
/* When changing tags, closing windows or moving clients out of view then focus will revert to the
|
||||
* client window that remains under the mouse cursor rather than the most recently focused window.
|
||||
* https://github.com/bakkeby/patches/wiki/focusfollowmouse
|
||||
*/
|
||||
#define FOCUSFOLLOWMOUSE_PATCH 0
|
||||
|
||||
/* A simple patch that just puts focus back to the master client.
|
||||
* https://dwm.suckless.org/patches/focusmaster/
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user