]> Dogcows Code - chaz/openbox/blobdiff - openbox/dispatch.c
prefixing and capitalizing the StackLayer -> ObStackingLayer enum.
[chaz/openbox] / openbox / dispatch.c
index 7b71369d226d6200f9699bd4624165e27cc15d84..291e9580803c878603585d8921b670d86b67dba8 100644 (file)
@@ -1,5 +1,6 @@
 #include "dispatch.h"
 #include "extensions.h"
+#include "client.h"
 
 #include <glib.h>
 
@@ -8,6 +9,7 @@ typedef struct {
     void *data;
 } Func;
 
+/* an array of GSList*s of Func*s */
 static GSList **funcs;
 
 void dispatch_startup()
@@ -21,10 +23,7 @@ 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()
@@ -86,7 +85,7 @@ void dispatch_register(EventMask mask, EventHandler h, void *data)
     }
 }
 
-void dispatch_x(XEvent *xe, Client *c)
+void dispatch_x(XEvent *xe, ObClient *c)
 {
     EventType e;
     guint i;
@@ -143,7 +142,7 @@ void dispatch_x(XEvent *xe, Client *c)
     }
 }
 
-void dispatch_client(EventType e, Client *c)
+void dispatch_client(EventType e, ObClient *c, int num0, int num1)
 {
     guint i;
     GSList *it;
@@ -152,7 +151,10 @@ void dispatch_client(EventType e, Client *c)
     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) {
@@ -166,13 +168,15 @@ void dispatch_client(EventType e, Client *c)
     }
 }
 
-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) {
@@ -194,7 +198,31 @@ void dispatch_signal(int signal)
     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(ObClient *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) {
@@ -206,4 +234,35 @@ void dispatch_signal(int signal)
         Func *f = it->data;
         f->h(&obe, f->data);
     }
+
+    *x = obe.data.c.num[0];
+    *y = obe.data.c.num[1];
+}
+
+void dispatch_resize(ObClient *c, int *w, int *h, ObCorner 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];
 }
This page took 0.023818 seconds and 4 git commands to generate.