summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorbakkeby <[email protected]>2020-08-20 15:31:09 +0200
committerbakkeby <[email protected]>2020-08-20 15:31:09 +0200
commitef287c46cdceac27614a1b117f80a140ecafc40d (patch)
tree591eac39b4a144fb505da07ab683bdd3e03bf2a6
parenta085c788e313db693d35feefe1f6dfa1e5daf440 (diff)
downloaddwm-flexipatch-ef287c46cdceac27614a1b117f80a140ecafc40d.tar.gz
dwm-flexipatch-ef287c46cdceac27614a1b117f80a140ecafc40d.zip
losefullscreen: minor improvements to keep fullscreen while moving focus to another monitor
-rw-r--r--dwm.c31
1 files changed, 29 insertions, 2 deletions
diff --git a/dwm.c b/dwm.c
index e64f1f0..827ed2a 100644
--- a/dwm.c
+++ b/dwm.c
@@ -1647,6 +1647,9 @@ void
enternotify(XEvent *e)
{
Client *c;
+ #if LOSEFULLSCREEN_PATCH
+ Client *sel;
+ #endif // LOSEFULLSCREEN_PATCH
Monitor *m;
XCrossingEvent *ev = &e->xcrossing;
@@ -1655,8 +1658,14 @@ enternotify(XEvent *e)
c = wintoclient(ev->window);
m = c ? c->mon : wintomon(ev->window);
if (m != selmon) {
+ #if LOSEFULLSCREEN_PATCH
+ sel = selmon->sel;
+ selmon = m;
+ unfocus(sel, 1);
+ #else
unfocus(selmon->sel, 1);
selmon = m;
+ #endif // LOSEFULLSCREEN_PATCH
} else if (!c || c == selmon->sel)
return;
focus(c);
@@ -1719,13 +1728,22 @@ void
focusmon(const Arg *arg)
{
Monitor *m;
+ #if LOSEFULLSCREEN_PATCH
+ Client *sel;
+ #endif // LOSEFULLSCREEN_PATCH
if (!mons->next)
return;
if ((m = dirtomon(arg->i)) == selmon)
return;
+ #if LOSEFULLSCREEN_PATCH
+ sel = selmon->sel;
+ selmon = m;
+ unfocus(sel, 0);
+ #else
unfocus(selmon->sel, 0);
selmon = m;
+ #endif // LOSEFULLSCREEN_PATCH
focus(NULL);
#if WARP_PATCH
warp(selmon->sel);
@@ -2173,13 +2191,22 @@ motionnotify(XEvent *e)
{
static Monitor *mon = NULL;
Monitor *m;
+ #if LOSEFULLSCREEN_PATCH
+ Client *sel;
+ #endif // LOSEFULLSCREEN_PATCH
XMotionEvent *ev = &e->xmotion;
if (ev->window != root)
return;
if ((m = recttomon(ev->x_root, ev->y_root, 1, 1)) != mon && mon) {
+ #if LOSEFULLSCREEN_PATCH
+ sel = selmon->sel;
+ selmon = m;
+ unfocus(sel, 1);
+ #else
unfocus(selmon->sel, 1);
selmon = m;
+ #endif // LOSEFULLSCREEN_PATCH
focus(NULL);
}
mon = m;
@@ -3462,10 +3489,10 @@ unfocus(Client *c, int setfocus)
#endif // SWAPFOCUS_PATCH
#if LOSEFULLSCREEN_PATCH
#if !FAKEFULLSCREEN_PATCH && FAKEFULLSCREEN_CLIENT_PATCH
- if (c->isfullscreen && !c->fakefullscreen && ISVISIBLE(c))
+ if (c->isfullscreen && !c->fakefullscreen && ISVISIBLE(c) && c->mon == selmon)
setfullscreen(c, 0);
#else
- if (c->isfullscreen && ISVISIBLE(c))
+ if (c->isfullscreen && ISVISIBLE(c) && c->mon == selmon)
setfullscreen(c, 0);
#endif // FAKEFULLSCREEN_CLIENT_PATCH
#endif // LOSEFULLSCREEN_PATCH