diff --git a/src/client.c b/src/client.c index 6edf06b043b2de56dcbcdf6962081cd4704ff7d2..29b4a4511fabf9c31701e65194dfb64817addc56 100644 --- a/src/client.c +++ b/src/client.c @@ -600,7 +600,7 @@ static void clientWindowType (Client *c) } if ((old_type != c->type) || (layer != c->win_layer)) { - DBG("setting state and layer %i\n", layer); + DBG("setting layer %i\n", layer); clientSetNetState (c); clientSetLayer(c, layer); } diff --git a/src/hints.c b/src/hints.c index 7cf6220ee14ee15c4bd901e920ba89200decf0a2..4c500a2f20411afb974a08ebf0af79bf611b4b19 100644 --- a/src/hints.c +++ b/src/hints.c @@ -404,19 +404,35 @@ int get_cardinal_list (Display *dpy, Window w, Atom xatom, unsigned long **cardi return True; } -void set_net_workarea (Display * dpy, Window w, CARD32 *margins) +void set_net_workarea (Display * dpy, Window w, int nb_workspaces, CARD32 *margins) { - unsigned long data[4]; - data[0] = margins[MARGIN_LEFT]; - data[1] = margins[MARGIN_TOP]; - data[2] = XDisplayWidth(dpy, screen) - (margins[MARGIN_LEFT] + margins[MARGIN_RIGHT]); - data[3] = XDisplayHeight(dpy, screen) - (margins[MARGIN_TOP] + margins[MARGIN_BOTTOM]); - XChangeProperty (dpy, w, net_workarea, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) data, 4); + unsigned long *data, *ptr; + int i, j; + + DBG("entering set_net_workarea\n"); + j = (nb_workspaces ? nb_workspaces : 1); + data = (unsigned long *) malloc (sizeof (unsigned long) * j * 4); + if (!data) + { + gdk_beep(); + return; + } + ptr = data; + for (i = 0; i < j; i++) + { + *ptr++ = margins[MARGIN_LEFT]; + *ptr++ = margins[MARGIN_TOP]; + *ptr++ = XDisplayWidth(dpy, screen) - (margins[MARGIN_LEFT] + margins[MARGIN_RIGHT]); + *ptr++ = XDisplayHeight(dpy, screen) - (margins[MARGIN_TOP] + margins[MARGIN_BOTTOM]); + } + XChangeProperty (dpy, w, net_workarea, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) data, j * 4); + free (data); } void init_net_desktop_params (Display * dpy, Window w, int workspace) { unsigned long data[2]; + DBG("entering init_net_desktop_params\n"); data[0] = XDisplayWidth(dpy, screen); data[1] = XDisplayHeight(dpy, screen); XChangeProperty (dpy, w, net_desktop_geometry, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) data, 2); @@ -431,6 +447,8 @@ void init_net_desktop_params (Display * dpy, Window w, int workspace) void set_utf8_string_hint (Display *dpy, Window w, Atom atom, const char *val) { + DBG("entering set_utf8_string_hint\n"); + XChangeProperty (dpy, w, atom, utf8_string, 8, PropModeReplace, (unsigned char *) val, strlen (val) + 1); } diff --git a/src/hints.h b/src/hints.h index e2a99c9f2267ecb8615b133ddf78ce270860c682..2326f5a029eacdc17b54f1204165021fe47be823 100644 --- a/src/hints.h +++ b/src/hints.h @@ -144,7 +144,7 @@ int getNetHint(Display *, Window, Atom, long *); void set_net_supported_hint (Display *, Window, Window); int get_atom_list (Display *, Window, Atom, Atom **, int *); int get_cardinal_list (Display *, Window, Atom, unsigned long **, int *); -void set_net_workarea (Display *, Window, CARD32 *); +void set_net_workarea (Display *, Window, int, CARD32 *); void init_net_desktop_params (Display *, Window, int); void set_utf8_string_hint (Display *, Window, Atom, const char *); void getTransientFor(Display * dpy, Window w, Window *transient_for); diff --git a/src/main.c b/src/main.c index 7d0fcf9c7f473ea6e876285916ee70d4d730d9c7..837927218d58cb58e030d55ee33134f248b68adf 100644 --- a/src/main.c +++ b/src/main.c @@ -174,6 +174,7 @@ void initialize(int argc, char **argv) init_net_desktop_params (dpy, root, workspace); initSettings(); loadSettings(); + set_net_workarea (dpy, root, workspace_count, margins); XSetInputFocus(dpy, gnome_win, RevertToNone, CurrentTime); initGtkCallbacks (); clientFrameAll(); diff --git a/src/workspaces.c b/src/workspaces.c index 850ed63e542c04c673d110aecb5cf23839203c7c..a598c5b1d4bb413ee200d933f18c327aeda48c03 100644 --- a/src/workspaces.c +++ b/src/workspaces.c @@ -157,6 +157,7 @@ void workspaceSetCount(int count) { workspaceSwitch(count - 1, NULL); } + set_net_workarea (dpy, root, workspace_count, margins); } void workspaceUpdateArea(CARD32 *margins, CARD32 *gnome_margins) @@ -188,6 +189,6 @@ void workspaceUpdateArea(CARD32 *margins, CARD32 *gnome_margins) if ((prev_top != margins[MARGIN_TOP]) || (prev_left != margins[MARGIN_LEFT]) || (prev_right != margins[MARGIN_RIGHT]) || (prev_bottom != margins[MARGIN_BOTTOM])) { DBG("Margins have changed, updating net_workarea\n"); - set_net_workarea (dpy, root, margins); + set_net_workarea (dpy, root, workspace_count, margins); } }