]> cgit.babelmonkeys.de Git - jubjub.git/blob - src/gui/gtk/OFObject+GLibThread.m
4fe6bcec9b272e788f3a950d2dec8b0e1b95d294
[jubjub.git] / src / gui / gtk / OFObject+GLibThread.m
1 #include <gtk/gtk.h>
2
3 #import "OFObject+GLibThread.h"
4
5 int _OFObject_JubGlibThread_reference;
6
7 struct params0 {
8         id object;
9         SEL selector;
10 };
11
12 struct params1 {
13         id object;
14         SEL selector;
15         id param;
16 };
17
18 struct params2 {
19         id object;
20         SEL selector;
21         id param1;
22         id param2;
23 };
24
25 static gboolean callback0(gpointer object)
26 {
27         struct params0 *parm = object;
28         [parm->object performSelector: parm->selector];
29         [parm->object freeMemory: parm];
30         return FALSE;
31 }
32
33 static gboolean callback1(gpointer object)
34 {
35         struct params1 *parm = object;
36         [parm->object performSelector: parm->selector
37                            withObject: parm->param];
38         [parm->object freeMemory: parm];
39         return FALSE;
40 }
41
42 static gboolean callback2(gpointer object)
43 {
44         struct params2 *parm = object;
45         [parm->object performSelector: parm->selector
46                            withObject: parm->param1
47                            withObject: parm->param2];
48         [parm->object freeMemory: parm];
49         return FALSE;
50 }
51
52 @implementation OFObject (JubGlibThread)
53 - (void)performSelectorOnGLibThread: (SEL)selector
54 {
55         struct params0 *parm = [self allocMemoryWithSize: sizeof(*parm)];
56         parm->object = self;
57         parm->selector = selector;
58         g_idle_add(callback0, parm);
59 }
60
61 - (void)performSelectorOnGLibThread: (SEL)selector
62                          withObject: (id)object
63 {
64         struct params1 *parm = [self allocMemoryWithSize: sizeof(*parm)];
65         parm->object = self;
66         parm->selector = selector;
67         parm->param = object;
68         g_idle_add(callback1, parm);
69 }
70
71 - (void)performSelectorOnGLibThread: (SEL)selector
72                          withObject: (id)object1
73                          withObject: (id)object2
74 {
75         struct params2 *parm = [self allocMemoryWithSize: sizeof(*parm)];
76         parm->object = self;
77         parm->selector = selector;
78         parm->param1 = object1;
79         parm->param2 = object2;
80         g_idle_add(callback2, parm);
81 }
82 @end