void *data;
} Func;
+/* an array of GSList*s of Func*s */
static GSList **funcs;
void dispatch_startup()
j >>= 1;
++i;
}
- funcs = g_new(GSList*, i);
-
- for (i = 0, j = 1; j < EVENT_RANGE; ++i, j <<= 1)
- funcs[i] = NULL;
+ funcs = g_new0(GSList*, i);
}
void dispatch_shutdown()
}
}
-void dispatch_client(EventType e, Client *c)
+void dispatch_client(EventType e, Client *c, int num0, int num1)
{
guint i;
GSList *it;
g_assert(c != NULL);
obe.type = e;
- obe.data.client = c;
+ obe.data.c.client = c;
+ obe.data.c.num[0] = num0;
+ obe.data.c.num[1] = num1;
+ obe.data.c.num[2] = 0;
i = 0;
while (e > 1) {
}
}
-void dispatch_ob(EventType e)
+void dispatch_ob(EventType e, int num0, int num1)
{
guint i;
GSList *it;
ObEvent obe;
obe.type = e;
+ obe.data.o.num[0] = num0;
+ obe.data.o.num[1] = num1;
i = 0;
while (e > 1) {
ObEvent obe;
obe.type = e;
- obe.data.signal = signal;
+ obe.data.s.signal = signal;
+
+ i = 0;
+ while (e > 1) {
+ e >>= 1;
+ ++i;
+ }
+
+ for (it = funcs[i]; it != NULL; it = it->next) {
+ Func *f = it->data;
+ f->h(&obe, f->data);
+ }
+}
+
+void dispatch_move(Client *c, int *x, int *y)
+{
+ guint i;
+ GSList *it;
+ EventType e = Event_Client_Moving;
+ ObEvent obe;
+
+ obe.type = e;
+ obe.data.c.client = c;
+ obe.data.c.num[0] = *x;
+ obe.data.c.num[1] = *y;
i = 0;
while (e > 1) {
Func *f = it->data;
f->h(&obe, f->data);
}
+
+ *x = obe.data.c.num[0];
+ *y = obe.data.c.num[1];
+}
+
+void dispatch_resize(Client *c, int *w, int *h, Corner corner)
+{
+ guint i;
+ GSList *it;
+ EventType e = Event_Client_Resizing;
+ ObEvent obe;
+
+ obe.type = e;
+ obe.data.c.client = c;
+ obe.data.c.num[0] = *w;
+ obe.data.c.num[1] = *h;
+ obe.data.c.num[2] = corner;
+
+ i = 0;
+ while (e > 1) {
+ e >>= 1;
+ ++i;
+ }
+
+ for (it = funcs[i]; it != NULL; it = it->next) {
+ Func *f = it->data;
+ f->h(&obe, f->data);
+ }
+
+ *w = obe.data.c.num[0];
+ *h = obe.data.c.num[1];
}