let you make an xevent listener for all windows
This commit is contained in:
parent
03f45e79b8
commit
8439c393d8
2 changed files with 8 additions and 2 deletions
|
@ -85,7 +85,6 @@ void xevent_set_handler(ObtXEventHandler *h, gint type, Window win,
|
||||||
{
|
{
|
||||||
ObtXEventBinding *b;
|
ObtXEventBinding *b;
|
||||||
|
|
||||||
g_assert(win);
|
|
||||||
g_assert(func);
|
g_assert(func);
|
||||||
|
|
||||||
/* make sure we have a spot for the event */
|
/* make sure we have a spot for the event */
|
||||||
|
@ -119,8 +118,14 @@ static void xevent_handler(const XEvent *e, gpointer data)
|
||||||
ObtXEventHandler *h;
|
ObtXEventHandler *h;
|
||||||
ObtXEventBinding *b;
|
ObtXEventBinding *b;
|
||||||
|
|
||||||
if (e->type < h->num_event_types) {
|
|
||||||
h = data;
|
h = data;
|
||||||
|
|
||||||
|
if (e->type < h->num_event_types) {
|
||||||
|
const gint all = OBT_XEVENT_ALL_WINDOWS;
|
||||||
|
/* run the all_windows handler first */
|
||||||
|
b = g_hash_table_lookup(h->bindings[e->xany.type], &all);
|
||||||
|
if (b) b->func(e, b->data);
|
||||||
|
/* then run the per-window handler */
|
||||||
b = g_hash_table_lookup(h->bindings[e->xany.type], &e->xany.window);
|
b = g_hash_table_lookup(h->bindings[e->xany.type], &e->xany.window);
|
||||||
if (b) b->func(e, b->data);
|
if (b) b->func(e, b->data);
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ void xevent_unref(ObtXEventHandler *h);
|
||||||
void xevent_register(ObtXEventHandler *h,
|
void xevent_register(ObtXEventHandler *h,
|
||||||
struct _ObtMainLoop *loop);
|
struct _ObtMainLoop *loop);
|
||||||
|
|
||||||
|
#define OBT_XEVENT_ALL_WINDOWS None
|
||||||
|
|
||||||
void xevent_set_handler(ObtXEventHandler *h, gint type, Window win,
|
void xevent_set_handler(ObtXEventHandler *h, gint type, Window win,
|
||||||
ObtXEventCallback func, gpointer data);
|
ObtXEventCallback func, gpointer data);
|
||||||
|
|
Loading…
Reference in a new issue