31 |
extern Display *g_display; |
extern Display *g_display; |
32 |
static Atom g_net_wm_state_maximized_vert_atom, g_net_wm_state_maximized_horz_atom, |
static Atom g_net_wm_state_maximized_vert_atom, g_net_wm_state_maximized_horz_atom, |
33 |
g_net_wm_state_hidden_atom; |
g_net_wm_state_hidden_atom; |
34 |
Atom g_net_wm_state_atom; |
Atom g_net_wm_state_atom, g_net_wm_desktop_atom; |
35 |
|
|
36 |
/* |
/* |
37 |
Get window property value (32 bit format) |
Get window property value (32 bit format) |
174 |
XInternAtom(g_display, "_NET_WM_STATE_MAXIMIZED_HORZ", False); |
XInternAtom(g_display, "_NET_WM_STATE_MAXIMIZED_HORZ", False); |
175 |
g_net_wm_state_hidden_atom = XInternAtom(g_display, "_NET_WM_STATE_HIDDEN", False); |
g_net_wm_state_hidden_atom = XInternAtom(g_display, "_NET_WM_STATE_HIDDEN", False); |
176 |
g_net_wm_state_atom = XInternAtom(g_display, "_NET_WM_STATE", False); |
g_net_wm_state_atom = XInternAtom(g_display, "_NET_WM_STATE", False); |
177 |
|
g_net_wm_desktop_atom = XInternAtom(g_display, "_NET_WM_DESKTOP", False); |
178 |
} |
} |
179 |
|
|
180 |
|
|
265 |
xevent.xclient.data.l[3] = 0; |
xevent.xclient.data.l[3] = 0; |
266 |
xevent.xclient.data.l[4] = 0; |
xevent.xclient.data.l[4] = 0; |
267 |
status = XSendEvent(g_display, DefaultRootWindow(g_display), False, |
status = XSendEvent(g_display, DefaultRootWindow(g_display), False, |
268 |
|
SubstructureNotifyMask | SubstructureRedirectMask, &xevent); |
269 |
|
if (!status) |
270 |
|
return -1; |
271 |
|
|
272 |
|
return 0; |
273 |
|
} |
274 |
|
|
275 |
|
|
276 |
|
int |
277 |
|
ewmh_get_window_desktop(Window wnd) |
278 |
|
{ |
279 |
|
unsigned long nitems_return; |
280 |
|
unsigned char *prop_return; |
281 |
|
int desktop; |
282 |
|
|
283 |
|
if (get_property_value(wnd, "_NET_WM_DESKTOP", 1, &nitems_return, &prop_return) < 0) |
284 |
|
return (-1); |
285 |
|
|
286 |
|
if (nitems_return != 1) |
287 |
|
{ |
288 |
|
fprintf(stderr, "_NET_WM_DESKTOP has bad length\n"); |
289 |
|
return (-1); |
290 |
|
} |
291 |
|
|
292 |
|
desktop = *prop_return; |
293 |
|
XFree(prop_return); |
294 |
|
return desktop; |
295 |
|
} |
296 |
|
|
297 |
|
|
298 |
|
int |
299 |
|
ewmh_move_to_desktop(Window wnd, unsigned int desktop) |
300 |
|
{ |
301 |
|
Status status; |
302 |
|
XEvent xevent; |
303 |
|
|
304 |
|
xevent.type = ClientMessage; |
305 |
|
xevent.xclient.window = wnd; |
306 |
|
xevent.xclient.message_type = g_net_wm_desktop_atom; |
307 |
|
xevent.xclient.format = 32; |
308 |
|
xevent.xclient.data.l[0] = desktop; |
309 |
|
xevent.xclient.data.l[1] = 0; |
310 |
|
xevent.xclient.data.l[2] = 0; |
311 |
|
xevent.xclient.data.l[3] = 0; |
312 |
|
xevent.xclient.data.l[4] = 0; |
313 |
|
status = XSendEvent(g_display, DefaultRootWindow(g_display), False, |
314 |
SubstructureNotifyMask | SubstructureRedirectMask, &xevent); |
SubstructureNotifyMask | SubstructureRedirectMask, &xevent); |
315 |
if (!status) |
if (!status) |
316 |
return -1; |
return -1; |