diff --git a/src/ewmh.c b/src/ewmh.c index 1c52c13..226a921 100644 --- a/src/ewmh.c +++ b/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 diff --git a/src/screen.c b/src/screen.c index 2dd0851..dac84e9 100644 --- a/src/screen.c +++ b/src/screen.c @@ -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; } diff --git a/src/structs.h b/src/structs.h index 6f37bea..d4d23b1 100644 --- a/src/structs.h +++ b/src/structs.h @@ -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, diff --git a/src/wmfs.h b/src/wmfs.h index 9e405e4..7ebf1d5 100644 --- a/src/wmfs.h +++ b/src/wmfs.h @@ -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);