commit dce4fb373757727374d00c857ec0dfd225bbeafd
Author:     Quentin Rameau <[email protected]>
AuthorDate: Sat Nov 7 14:09:08 2015 +0100
Commit:     Hiltjo Posthuma <[email protected]>
CommitDate: Sat Nov 7 14:31:21 2015 +0100

    setfullscreen: don't process the property twice
    
    Some clients try to set _NET_WM_STATE_FULLSCREEN even when the window is
    already in fullscreen.
    For example, c->oldstate was set two times in a raw and window would
    then always be floating.
    We must check that it's not the case before processing it.
    (original patch modified with suggestion from Markus Teich
    <[email protected]>)

diff --git a/dwm.c b/dwm.c
index 96b43f7..3639165 100644
--- a/dwm.c
+++ b/dwm.c
@@ -1441,7 +1441,7 @@ setfocus(Client *c) {
 
 void
 setfullscreen(Client *c, Bool fullscreen) {
-       if(fullscreen) {
+       if(fullscreen && !c->isfullscreen) {
                XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32,
                                PropModeReplace, (unsigned 
char*)&netatom[NetWMFullscreen], 1);
                c->isfullscreen = True;
@@ -1452,7 +1452,7 @@ setfullscreen(Client *c, Bool fullscreen) {
                resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh);
                XRaiseWindow(dpy, c->win);
        }
-       else {
+       else if(!fullscreen && c->isfullscreen){
                XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32,
                                PropModeReplace, (unsigned char*)0, 0);
                c->isfullscreen = False;

Reply via email to