static bool region_set_fullscreen(WRegion *reg, int sp) { bool set=REGION_IS_FULLSCREEN(reg); bool nset=libtu_do_setparam(sp, set); if(!XOR(nset, set)) return set; if(nset) region_enter_fullscreen(reg, TRUE); else region_leave_fullscreen(reg, TRUE); return REGION_IS_FULLSCREEN(reg); }
static void netwm_state_change_rq(WClientWin *cwin, const XClientMessageEvent *ev) { if((ev->data.l[1]==0 || ev->data.l[1]!=(long)atom_net_wm_state_fullscreen) && (ev->data.l[2]==0 || ev->data.l[2]!=(long)atom_net_wm_state_fullscreen)){ return; } /* Ok, full screen add/remove/toggle */ if(!REGION_IS_FULLSCREEN(cwin)){ if(ev->data.l[0]==_NET_WM_STATE_ADD || ev->data.l[0]==_NET_WM_STATE_TOGGLE){ WRegion *grp=region_groupleader_of((WRegion*)cwin); bool sw=clientwin_fullscreen_may_switchto(cwin); cwin->flags|=CLIENTWIN_FS_RQ; if(!region_enter_fullscreen(grp, sw)) cwin->flags&=~CLIENTWIN_FS_RQ; }else{ /* Should not be set.. */ cwin->flags&=~CLIENTWIN_FS_RQ; } }else{ if(ev->data.l[0]==_NET_WM_STATE_REMOVE || ev->data.l[0]==_NET_WM_STATE_TOGGLE){ WRegion *grp=region_groupleader_of((WRegion*)cwin); bool sw=clientwin_fullscreen_may_switchto(cwin); cwin->flags&=~CLIENTWIN_FS_RQ; region_leave_fullscreen(grp, sw); }else{ /* Set the flag */ cwin->flags|=CLIENTWIN_FS_RQ; } } }