mirror of
https://github.com/leahneukirchen/cwm.git
synced 2023-08-10 21:13:12 +03:00
handle _NET_WM_STATE ClientMessage; from Alexander Polakov.
This commit is contained in:
parent
c2042cd523
commit
421bf22ac7
7
calmwm.h
7
calmwm.h
@ -482,6 +482,8 @@ void xu_ewmh_net_desktop_names(struct screen_ctx *, char *,
|
|||||||
|
|
||||||
void xu_ewmh_net_wm_desktop(struct client_ctx *);
|
void xu_ewmh_net_wm_desktop(struct client_ctx *);
|
||||||
Atom *xu_ewmh_get_net_wm_state(struct client_ctx *, int *);
|
Atom *xu_ewmh_get_net_wm_state(struct client_ctx *, int *);
|
||||||
|
void xu_ewmh_handle_net_wm_state_msg(struct client_ctx *,
|
||||||
|
int, Atom , Atom);
|
||||||
void xu_ewmh_set_net_wm_state(struct client_ctx *);
|
void xu_ewmh_set_net_wm_state(struct client_ctx *);
|
||||||
void xu_ewmh_restore_net_wm_state(struct client_ctx *);
|
void xu_ewmh_restore_net_wm_state(struct client_ctx *);
|
||||||
|
|
||||||
@ -543,6 +545,11 @@ enum {
|
|||||||
_NET_WM_STATE_MAXIMIZED_HORZ,
|
_NET_WM_STATE_MAXIMIZED_HORZ,
|
||||||
EWMH_NITEMS
|
EWMH_NITEMS
|
||||||
};
|
};
|
||||||
|
enum {
|
||||||
|
_NET_WM_STATE_REMOVE,
|
||||||
|
_NET_WM_STATE_ADD,
|
||||||
|
_NET_WM_STATE_TOGGLE
|
||||||
|
};
|
||||||
struct atom_ctx {
|
struct atom_ctx {
|
||||||
char *name;
|
char *name;
|
||||||
Atom atom;
|
Atom atom;
|
||||||
|
@ -359,6 +359,10 @@ xev_handle_clientmessage(XEvent *ee)
|
|||||||
client_ptrsave(old_cc);
|
client_ptrsave(old_cc);
|
||||||
client_ptrwarp(cc);
|
client_ptrwarp(cc);
|
||||||
}
|
}
|
||||||
|
if (e->message_type == ewmh[_NET_WM_STATE].atom &&
|
||||||
|
e->format == 32)
|
||||||
|
xu_ewmh_handle_net_wm_state_msg(cc,
|
||||||
|
e->data.l[0], e->data.l[1], e->data.l[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
37
xutil.c
37
xutil.c
@ -439,6 +439,43 @@ xu_ewmh_get_net_wm_state(struct client_ctx *cc, int *n)
|
|||||||
return (state);
|
return (state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
xu_ewmh_handle_net_wm_state_msg(struct client_ctx *cc, int action,
|
||||||
|
Atom first, Atom second)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
static struct handlers {
|
||||||
|
int atom;
|
||||||
|
int property;
|
||||||
|
void (*toggle)(struct client_ctx *);
|
||||||
|
} handlers[] = {
|
||||||
|
{ _NET_WM_STATE_MAXIMIZED_VERT,
|
||||||
|
CLIENT_VMAXIMIZED,
|
||||||
|
client_vmaximize },
|
||||||
|
{ _NET_WM_STATE_MAXIMIZED_HORZ,
|
||||||
|
CLIENT_HMAXIMIZED,
|
||||||
|
client_hmaximize },
|
||||||
|
};
|
||||||
|
|
||||||
|
for (i = 0; i < nitems(handlers); i++) {
|
||||||
|
if (first != ewmh[handlers[i].atom].atom &&
|
||||||
|
second != ewmh[handlers[i].atom].atom)
|
||||||
|
continue;
|
||||||
|
switch (action) {
|
||||||
|
case _NET_WM_STATE_ADD:
|
||||||
|
if ((cc->flags & handlers[i].property) == 0)
|
||||||
|
handlers[i].toggle(cc);
|
||||||
|
break;
|
||||||
|
case _NET_WM_STATE_REMOVE:
|
||||||
|
if (cc->flags & handlers[i].property)
|
||||||
|
handlers[i].toggle(cc);
|
||||||
|
break;
|
||||||
|
case _NET_WM_STATE_TOGGLE:
|
||||||
|
handlers[i].toggle(cc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
xu_ewmh_restore_net_wm_state(struct client_ctx *cc)
|
xu_ewmh_restore_net_wm_state(struct client_ctx *cc)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user