ewmh: Add _NET_DESKTOP_GEOMETRY & _NET_WORKAREA ewmh support

This commit is contained in:
Martin Duquesnoy 2008-12-15 02:12:18 +01:00
parent 1976a13a2d
commit a0c857602f
4 changed files with 51 additions and 3 deletions

View File

@ -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

View File

@ -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;
}

View File

@ -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,

View File

@ -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);