add support for _NET_WM_STATE_FULLSCREEN
This commit also drop the handle_event_configurerequest() because it seems totally unuseful now. This can cause problem, and if so, report it.
This commit is contained in:
parent
88ee1e037e
commit
f37c71c162
6
event.c
6
event.c
|
@ -135,6 +135,7 @@ handle_event_configurerequest(XEvent * e)
|
||||||
XWindowChanges wc;
|
XWindowChanges wc;
|
||||||
int old_screen;
|
int old_screen;
|
||||||
Tag **curtags;
|
Tag **curtags;
|
||||||
|
return;
|
||||||
|
|
||||||
if((c = get_client_bywin(globalconf.clients, ev->window)))
|
if((c = get_client_bywin(globalconf.clients, ev->window)))
|
||||||
{
|
{
|
||||||
|
@ -146,9 +147,9 @@ handle_event_configurerequest(XEvent * e)
|
||||||
|| curtags[0]->layout->arrange == layout_floating)
|
|| curtags[0]->layout->arrange == layout_floating)
|
||||||
{
|
{
|
||||||
if(ev->value_mask & CWX)
|
if(ev->value_mask & CWX)
|
||||||
c->rx = c->x = ev->x;
|
c->rx = c->x = ev->x - c->border;
|
||||||
if(ev->value_mask & CWY)
|
if(ev->value_mask & CWY)
|
||||||
c->ry = c->y = ev->y;
|
c->ry = c->y = ev->y - c->border;
|
||||||
if(ev->value_mask & CWWidth)
|
if(ev->value_mask & CWWidth)
|
||||||
c->rw = c->w = ev->width;
|
c->rw = c->w = ev->width;
|
||||||
if(ev->value_mask & CWHeight)
|
if(ev->value_mask & CWHeight)
|
||||||
|
@ -165,6 +166,7 @@ handle_event_configurerequest(XEvent * e)
|
||||||
statusbar_draw(c->screen);
|
statusbar_draw(c->screen);
|
||||||
}
|
}
|
||||||
tag_client_with_rules(c);
|
tag_client_with_rules(c);
|
||||||
|
c->isfloating = True;
|
||||||
XMoveResizeWindow(e->xany.display, c->win, c->rx, c->ry, c->rw, c->rh);
|
XMoveResizeWindow(e->xany.display, c->win, c->rx, c->ry, c->rw, c->rh);
|
||||||
arrange(c->screen);
|
arrange(c->screen);
|
||||||
}
|
}
|
||||||
|
|
27
ewmh.c
27
ewmh.c
|
@ -26,6 +26,8 @@
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "tag.h"
|
#include "tag.h"
|
||||||
#include "focus.h"
|
#include "focus.h"
|
||||||
|
#include "screen.h"
|
||||||
|
#include "layout.h"
|
||||||
|
|
||||||
extern AwesomeConf globalconf;
|
extern AwesomeConf globalconf;
|
||||||
|
|
||||||
|
@ -42,6 +44,7 @@ static Atom net_wm_name;
|
||||||
static Atom net_wm_icon;
|
static Atom net_wm_icon;
|
||||||
static Atom net_wm_state;
|
static Atom net_wm_state;
|
||||||
static Atom net_wm_state_sticky;
|
static Atom net_wm_state_sticky;
|
||||||
|
static Atom net_wm_state_fullscreen;
|
||||||
|
|
||||||
static Atom utf8_string;
|
static Atom utf8_string;
|
||||||
|
|
||||||
|
@ -66,12 +69,17 @@ static AtomItem AtomNames[] =
|
||||||
{ "_NET_WM_ICON", &net_wm_icon },
|
{ "_NET_WM_ICON", &net_wm_icon },
|
||||||
{ "_NET_WM_STATE", &net_wm_state },
|
{ "_NET_WM_STATE", &net_wm_state },
|
||||||
{ "_NET_WM_STATE_STICKY", &net_wm_state_sticky },
|
{ "_NET_WM_STATE_STICKY", &net_wm_state_sticky },
|
||||||
|
{ "_NET_WM_STATE_FULLSCREEN", &net_wm_state_fullscreen },
|
||||||
|
|
||||||
{ "UTF8_STRING", &utf8_string },
|
{ "UTF8_STRING", &utf8_string },
|
||||||
};
|
};
|
||||||
|
|
||||||
#define ATOM_NUMBER (sizeof(AtomNames)/sizeof(AtomItem))
|
#define ATOM_NUMBER (sizeof(AtomNames)/sizeof(AtomItem))
|
||||||
|
|
||||||
|
#define _NET_WM_STATE_REMOVE 0
|
||||||
|
#define _NET_WM_STATE_ADD 1
|
||||||
|
#define _NET_WM_STATE_TOGGLE 2
|
||||||
|
|
||||||
void
|
void
|
||||||
ewmh_init_atoms(void)
|
ewmh_init_atoms(void)
|
||||||
{
|
{
|
||||||
|
@ -105,6 +113,7 @@ ewmh_set_supported_hints(int phys_screen)
|
||||||
atom[i++] = net_wm_icon;
|
atom[i++] = net_wm_icon;
|
||||||
atom[i++] = net_wm_state;
|
atom[i++] = net_wm_state;
|
||||||
atom[i++] = net_wm_state_sticky;
|
atom[i++] = net_wm_state_sticky;
|
||||||
|
atom[i++] = net_wm_state_fullscreen;
|
||||||
|
|
||||||
XChangeProperty(globalconf.display, RootWindow(globalconf.display, phys_screen),
|
XChangeProperty(globalconf.display, RootWindow(globalconf.display, phys_screen),
|
||||||
net_supported, XA_ATOM, 32,
|
net_supported, XA_ATOM, 32,
|
||||||
|
@ -197,7 +206,7 @@ ewmh_update_net_active_window(int phys_screen)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ewmh_process_state_atom(Client *c, Atom state)
|
ewmh_process_state_atom(Client *c, Atom state, int set)
|
||||||
{
|
{
|
||||||
if(state == net_wm_state_sticky)
|
if(state == net_wm_state_sticky)
|
||||||
{
|
{
|
||||||
|
@ -205,6 +214,16 @@ ewmh_process_state_atom(Client *c, Atom state)
|
||||||
for(tag = globalconf.screens[c->screen].tags; tag; tag = tag->next)
|
for(tag = globalconf.screens[c->screen].tags; tag; tag = tag->next)
|
||||||
tag_client(c, tag);
|
tag_client(c, tag);
|
||||||
}
|
}
|
||||||
|
else if(state == net_wm_state_fullscreen)
|
||||||
|
{
|
||||||
|
Area area = get_screen_area(c->screen, NULL, NULL);
|
||||||
|
/* reset max attribute */
|
||||||
|
if(set == _NET_WM_STATE_REMOVE)
|
||||||
|
c->ismax = True;
|
||||||
|
else if(set == _NET_WM_STATE_ADD)
|
||||||
|
c->ismax = False;
|
||||||
|
client_maximize(c, area.x, area.y, area.width, area.height);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -221,9 +240,9 @@ ewmh_process_client_message(XClientMessageEvent *ev)
|
||||||
{
|
{
|
||||||
if((c = get_client_bywin(globalconf.clients, ev->window)))
|
if((c = get_client_bywin(globalconf.clients, ev->window)))
|
||||||
{
|
{
|
||||||
ewmh_process_state_atom(c, (Atom) ev->data.l[1]);
|
ewmh_process_state_atom(c, (Atom) ev->data.l[1], ev->data.l[0]);
|
||||||
if(ev->data.l[2])
|
if(ev->data.l[2])
|
||||||
ewmh_process_state_atom(c, (Atom) ev->data.l[2]);
|
ewmh_process_state_atom(c, (Atom) ev->data.l[2], ev->data.l[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -243,7 +262,7 @@ ewmh_check_client_hints(Client *c)
|
||||||
|
|
||||||
state = (Atom *) data;
|
state = (Atom *) data;
|
||||||
for(i = 0; i < n; i++)
|
for(i = 0; i < n; i++)
|
||||||
ewmh_process_state_atom(c, state[i]);
|
ewmh_process_state_atom(c, state[i], _NET_WM_STATE_ADD);
|
||||||
|
|
||||||
XFree(data);
|
XFree(data);
|
||||||
}
|
}
|
||||||
|
|
54
layout.c
54
layout.c
|
@ -252,26 +252,25 @@ uicb_tag_setlayout(int screen, char *arg)
|
||||||
saveawesomeprops(screen);
|
saveawesomeprops(screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
void
|
||||||
maximize(int x, int y, int w, int h, int screen)
|
client_maximize(Client *c, int x, int y, int w, int h)
|
||||||
{
|
{
|
||||||
Client *sel = globalconf.focus->client;
|
if((c->ismax = !c->ismax))
|
||||||
|
|
||||||
if(!sel)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if((sel->ismax = !sel->ismax))
|
|
||||||
{
|
{
|
||||||
sel->wasfloating = sel->isfloating;
|
c->oldborder = c->border;
|
||||||
sel->isfloating = True;
|
c->border = 0;
|
||||||
client_resize(sel, x, y, w, h, True, True);
|
c->wasfloating = c->isfloating;
|
||||||
|
c->isfloating = True;
|
||||||
|
client_resize(c, x, y, w, h, False, True);
|
||||||
}
|
}
|
||||||
else if(sel->wasfloating)
|
else if(c->wasfloating)
|
||||||
client_resize(sel, sel->rx, sel->ry, sel->rw, sel->rh, True, False);
|
client_resize(c, c->rx, c->ry, c->rw, c->rh, True, False);
|
||||||
else
|
else
|
||||||
sel->isfloating = False;
|
c->isfloating = False;
|
||||||
|
|
||||||
arrange(screen);
|
c->border = c->oldborder;
|
||||||
|
|
||||||
|
arrange(c->screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Toggle maximize for client
|
/** Toggle maximize for client
|
||||||
|
@ -282,13 +281,14 @@ maximize(int x, int y, int w, int h, int screen)
|
||||||
void
|
void
|
||||||
uicb_client_togglemax(int screen, char *arg __attribute__ ((unused)))
|
uicb_client_togglemax(int screen, char *arg __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
|
Client *sel = globalconf.focus->client;
|
||||||
Area area = get_screen_area(screen,
|
Area area = get_screen_area(screen,
|
||||||
globalconf.screens[screen].statusbar,
|
globalconf.screens[screen].statusbar,
|
||||||
&globalconf.screens[screen].padding);
|
&globalconf.screens[screen].padding);
|
||||||
maximize(area.x, area.y,
|
if(sel)
|
||||||
area.width - 2 * globalconf.screens[screen].borderpx,
|
client_maximize(sel, area.x, area.y,
|
||||||
area.height - 2 * globalconf.screens[screen].borderpx,
|
area.width - 2 * globalconf.screens[screen].borderpx,
|
||||||
screen);
|
area.height - 2 * globalconf.screens[screen].borderpx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Toggle vertical maximize for client
|
/** Toggle vertical maximize for client
|
||||||
|
@ -305,11 +305,9 @@ uicb_client_toggleverticalmax(int screen, char *arg __attribute__ ((unused)))
|
||||||
&globalconf.screens[screen].padding);
|
&globalconf.screens[screen].padding);
|
||||||
|
|
||||||
if(sel)
|
if(sel)
|
||||||
maximize(sel->x,
|
client_maximize(sel, sel->x, area.y,
|
||||||
area.y,
|
sel->w,
|
||||||
sel->w,
|
area.height - 2 * globalconf.screens[screen].borderpx);
|
||||||
area.height - 2 * globalconf.screens[screen].borderpx,
|
|
||||||
screen);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -327,11 +325,9 @@ uicb_client_togglehorizontalmax(int screen, char *arg __attribute__ ((unused)))
|
||||||
&globalconf.screens[screen].padding);
|
&globalconf.screens[screen].padding);
|
||||||
|
|
||||||
if(sel)
|
if(sel)
|
||||||
maximize(area.x,
|
client_maximize(sel, area.x, sel->y,
|
||||||
sel->y,
|
area.height - 2 * globalconf.screens[screen].borderpx,
|
||||||
area.height - 2 * globalconf.screens[screen].borderpx,
|
sel->h);
|
||||||
sel->h,
|
|
||||||
screen);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Zoom client
|
/** Zoom client
|
||||||
|
|
1
layout.h
1
layout.h
|
@ -30,6 +30,7 @@ void arrange(int);
|
||||||
void restack(int);
|
void restack(int);
|
||||||
void loadawesomeprops(int);
|
void loadawesomeprops(int);
|
||||||
void saveawesomeprops(int);
|
void saveawesomeprops(int);
|
||||||
|
void client_maximize(Client *c, int, int, int, int);
|
||||||
|
|
||||||
UICB_PROTO(uicb_client_focusnext);
|
UICB_PROTO(uicb_client_focusnext);
|
||||||
UICB_PROTO(uicb_client_focusprev);
|
UICB_PROTO(uicb_client_focusprev);
|
||||||
|
|
Loading…
Reference in New Issue