2 #include "extensions.h"
8 void dispatch_startup()
19 funcs
= g_new(GSList
*, i
);
21 for (i
= 0, j
= 1; j
< EVENT_RANGE
; ++i
, j
<<= 1)
25 void dispatch_shutdown()
30 for (i
= 0, j
= 1; j
< EVENT_RANGE
; ++i
, j
<<= 1) {
31 g_slist_free(funcs
[i
]);
38 void dispatch_register(EventHandler h
, EventMask mask
)
44 for (i
= 0, j
= 1; j
< EVENT_RANGE
; ++i
, j
<<= 1)
46 funcs
[i
] = g_slist_append(funcs
[i
], h
);
47 mask
^= j
; /* remove from the mask */
49 g_assert(j
>= EVENT_RANGE
); /* an invalid event is in the mask */
53 void dispatch_x(XEvent
*xe
, Client
*c
)
62 e
= Event_X_EnterNotify
;
65 e
= Event_X_LeaveNotify
;
71 e
= Event_X_KeyRelease
;
74 e
= Event_X_ButtonPress
;
77 e
= Event_X_ButtonRelease
;
80 e
= Event_X_MotionNotify
;
84 if (xe
->type
== extensions_xkb_event_basep
) {
85 switch (((XkbAnyEvent
*)&e
)->xkb_type
) {
96 obe
.data
.x
.client
= c
;
104 for (it
= funcs
[i
]; it
!= NULL
; it
= it
->next
)
105 ((EventHandler
)it
->data
)(&obe
);
108 void dispatch_client(EventType e
, Client
*c
)
125 for (it
= funcs
[i
]; it
!= NULL
; it
= it
->next
)
126 ((EventHandler
)it
->data
)(&obe
);
129 void dispatch_ob(EventType e
)
143 for (it
= funcs
[i
]; it
!= NULL
; it
= it
->next
)
144 ((EventHandler
)it
->data
)(&obe
);
147 void dispatch_signal(int signal
)
150 EventType e
= Event_Signal
;
155 obe
.data
.signal
= signal
;
163 for (it
= funcs
[i
]; it
!= NULL
; it
= it
->next
)
164 ((EventHandler
)it
->data
)(&obe
);