ewmh: Add _NET_DESKTOP_GEOMETRY & _NET_WORKAREA ewmh support
This commit is contained in:
parent
1976a13a2d
commit
a0c857602f
43
src/ewmh.c
43
src/ewmh.c
@ -47,6 +47,8 @@ ewmh_init_hints(void)
|
||||
net_atom[net_number_of_desktops] = ATOM("_NET_NUMBER_OF_DESKTOPS");
|
||||
net_atom[net_current_desktop] = ATOM("_NET_CURRENT_DESKTOP");
|
||||
net_atom[net_desktop_names] = ATOM("_NET_DESKTOP_NAMES");
|
||||
net_atom[net_desktop_geometry] = ATOM("_NET_DESKTOP_GEOMETRY");
|
||||
net_atom[net_workarea] = ATOM("_NET_WORKAREA");
|
||||
net_atom[net_active_window] = ATOM("_NET_ACTIVE_WINDOW");
|
||||
net_atom[net_close_window] = ATOM("_NET_CLOSE_WINDOW");
|
||||
net_atom[net_wm_name] = ATOM("_NET_WM_NAME");
|
||||
@ -156,6 +158,47 @@ ewmh_get_desktop_names(void)
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/** Manage _NET_DESKTOP_GEOMETRY
|
||||
*/
|
||||
void
|
||||
ewmh_set_desktop_geometry(void)
|
||||
{
|
||||
long data[2] = { MAXW, MAXH };
|
||||
|
||||
XChangeProperty(dpy, ROOT, net_atom[net_desktop_geometry], XA_CARDINAL, 32,
|
||||
PropModeReplace, (uchar*)&data, 2);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/** Manage _NET_WORKAREA
|
||||
*/
|
||||
void
|
||||
ewmh_set_workarea(void)
|
||||
{
|
||||
long data[4 * 1024] = { 0 }; /* Array [] because dynamic alloc seems doesn't work */
|
||||
int i, j, tag_c = 0, pos = 0;
|
||||
|
||||
for(i = 0; i < screen_count(); ++i)
|
||||
tag_c += conf.ntag[i];
|
||||
|
||||
for(i = 0; i < screen_count(); ++i)
|
||||
for(j = 0; j < conf.ntag[i]; ++j)
|
||||
{
|
||||
data[pos++] = sgeo[i].x - BORDH;
|
||||
data[pos++] = sgeo[i].y;
|
||||
data[pos++] = sgeo[i].width;
|
||||
data[pos++] = sgeo[i].height;
|
||||
}
|
||||
|
||||
XChangeProperty(dpy, ROOT, net_atom[net_workarea], XA_CARDINAL, 32,
|
||||
PropModeReplace, (uchar*)&data, 4 * tag_c);
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/** Manage _NET_WM_STATE_* ewmh
|
||||
*/
|
||||
void
|
||||
|
||||
@ -152,6 +152,9 @@ screen_init_geo(void)
|
||||
for(i = 0; i < screen_count(); ++i)
|
||||
sgeo[i] = screen_get_geo(i);
|
||||
|
||||
ewmh_set_desktop_geometry();
|
||||
ewmh_set_workarea();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -161,9 +164,7 @@ screen_init_geo(void)
|
||||
void
|
||||
uicb_screen_select(uicb_t cmd)
|
||||
{
|
||||
int s = atoi(cmd);
|
||||
|
||||
screen_set_sel(s);
|
||||
screen_set_sel(atoi(cmd));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -57,6 +57,8 @@ enum
|
||||
net_number_of_desktops,
|
||||
net_current_desktop,
|
||||
net_desktop_names,
|
||||
net_desktop_geometry,
|
||||
net_workarea,
|
||||
net_active_window,
|
||||
net_close_window,
|
||||
net_wm_icon_name,
|
||||
|
||||
@ -146,6 +146,8 @@ void ewmh_get_number_of_desktop(void);
|
||||
void ewmh_get_current_desktop(void);
|
||||
void ewmh_get_client_list(void);
|
||||
void ewmh_get_desktop_names(void);
|
||||
void ewmh_set_desktop_geometry(void);
|
||||
void ewmh_set_workarea(void);
|
||||
void ewmh_manage_net_wm_state(long data_l[], Client *c);
|
||||
void ewmh_manage_window_type(Client *c);
|
||||
long ewmh_get_wm_state(Window win);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user