30 |
#define _NET_WM_STATE_TOGGLE 2 /* toggle property */ |
#define _NET_WM_STATE_TOGGLE 2 /* toggle property */ |
31 |
|
|
32 |
extern Display *g_display; |
extern Display *g_display; |
33 |
|
|
34 |
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, |
35 |
g_net_wm_state_hidden_atom, g_net_wm_state_skip_taskbar_atom, |
g_net_wm_state_hidden_atom, g_net_wm_name_atom, g_utf8_string_atom, |
36 |
g_net_wm_state_skip_pager_atom; |
g_net_wm_state_skip_taskbar_atom, g_net_wm_state_skip_pager_atom; |
37 |
|
|
38 |
Atom g_net_wm_state_atom, g_net_wm_desktop_atom; |
Atom g_net_wm_state_atom, g_net_wm_desktop_atom; |
39 |
|
|
40 |
/* |
/* |
172 |
void |
void |
173 |
ewmh_init() |
ewmh_init() |
174 |
{ |
{ |
175 |
|
/* FIXME: Use XInternAtoms */ |
176 |
g_net_wm_state_maximized_vert_atom = |
g_net_wm_state_maximized_vert_atom = |
177 |
XInternAtom(g_display, "_NET_WM_STATE_MAXIMIZED_VERT", False); |
XInternAtom(g_display, "_NET_WM_STATE_MAXIMIZED_VERT", False); |
178 |
g_net_wm_state_maximized_horz_atom = |
g_net_wm_state_maximized_horz_atom = |
183 |
g_net_wm_state_skip_pager_atom = XInternAtom(g_display, "_NET_WM_STATE_SKIP_PAGER", False); |
g_net_wm_state_skip_pager_atom = XInternAtom(g_display, "_NET_WM_STATE_SKIP_PAGER", False); |
184 |
g_net_wm_state_atom = XInternAtom(g_display, "_NET_WM_STATE", False); |
g_net_wm_state_atom = XInternAtom(g_display, "_NET_WM_STATE", False); |
185 |
g_net_wm_desktop_atom = XInternAtom(g_display, "_NET_WM_DESKTOP", False); |
g_net_wm_desktop_atom = XInternAtom(g_display, "_NET_WM_DESKTOP", False); |
186 |
|
g_net_wm_name_atom = XInternAtom(g_display, "_NET_WM_NAME", False); |
187 |
|
g_utf8_string_atom = XInternAtom(g_display, "UTF8_STRING", False); |
188 |
} |
} |
189 |
|
|
190 |
|
|
239 |
XEvent xevent; |
XEvent xevent; |
240 |
|
|
241 |
/* |
/* |
|
* Deal with the hidden atom |
|
|
*/ |
|
|
xevent.type = ClientMessage; |
|
|
xevent.xclient.window = wnd; |
|
|
xevent.xclient.message_type = g_net_wm_state_atom; |
|
|
xevent.xclient.format = 32; |
|
|
if (state == SEAMLESSRDP_MINIMIZED) |
|
|
xevent.xclient.data.l[0] = _NET_WM_STATE_ADD; |
|
|
else |
|
|
xevent.xclient.data.l[0] = _NET_WM_STATE_REMOVE; |
|
|
xevent.xclient.data.l[1] = g_net_wm_state_hidden_atom; |
|
|
xevent.xclient.data.l[2] = 0; |
|
|
xevent.xclient.data.l[3] = 0; |
|
|
xevent.xclient.data.l[4] = 0; |
|
|
status = XSendEvent(g_display, DefaultRootWindow(g_display), False, |
|
|
SubstructureNotifyMask | SubstructureRedirectMask, &xevent); |
|
|
if (!status) |
|
|
return -1; |
|
|
|
|
|
|
|
|
/* |
|
242 |
* Deal with the max atoms |
* Deal with the max atoms |
243 |
*/ |
*/ |
244 |
xevent.type = ClientMessage; |
xevent.type = ClientMessage; |
308 |
} |
} |
309 |
|
|
310 |
void |
void |
311 |
|
ewmh_set_wm_name(Window wnd, const char *title) |
312 |
|
{ |
313 |
|
int len; |
314 |
|
|
315 |
|
len = strlen(title); |
316 |
|
XChangeProperty(g_display, wnd, g_net_wm_name_atom, g_utf8_string_atom, |
317 |
|
8, PropModeReplace, (unsigned char *) title, len); |
318 |
|
} |
319 |
|
|
320 |
|
|
321 |
|
void |
322 |
ewmh_set_window_popup(Window wnd) |
ewmh_set_window_popup(Window wnd) |
323 |
{ |
{ |
324 |
Atom atoms[2] = { g_net_wm_state_skip_taskbar_atom, g_net_wm_state_skip_pager_atom }; |
Atom atoms[2] = { g_net_wm_state_skip_taskbar_atom, g_net_wm_state_skip_pager_atom }; |