diff options
Diffstat (limited to 'src/application.c')
-rw-r--r-- | src/application.c | 62 |
1 files changed, 43 insertions, 19 deletions
diff --git a/src/application.c b/src/application.c index 7cb827b..dfb214a 100644 --- a/src/application.c +++ b/src/application.c | |||
@@ -170,8 +170,6 @@ typedef struct MESSENGER_ApplicationEventCall | |||
170 | { | 170 | { |
171 | MESSENGER_Application *app; | 171 | MESSENGER_Application *app; |
172 | MESSENGER_ApplicationEvent event; | 172 | MESSENGER_ApplicationEvent event; |
173 | int argc; | ||
174 | void **argv; | ||
175 | } MESSENGER_ApplicationEventCall; | 173 | } MESSENGER_ApplicationEventCall; |
176 | 174 | ||
177 | static gboolean | 175 | static gboolean |
@@ -180,10 +178,7 @@ _application_event_call(gpointer user_data) | |||
180 | MESSENGER_ApplicationEventCall *call; | 178 | MESSENGER_ApplicationEventCall *call; |
181 | 179 | ||
182 | call = (MESSENGER_ApplicationEventCall*) user_data; | 180 | call = (MESSENGER_ApplicationEventCall*) user_data; |
183 | call->event(call->app, call->argc, call->argv); | 181 | call->event(call->app); |
184 | |||
185 | if (call->argc > 0) | ||
186 | GNUNET_free(call->argv); | ||
187 | 182 | ||
188 | GNUNET_free(call); | 183 | GNUNET_free(call); |
189 | return FALSE; | 184 | return FALSE; |
@@ -191,9 +186,7 @@ _application_event_call(gpointer user_data) | |||
191 | 186 | ||
192 | void | 187 | void |
193 | application_call_event(MESSENGER_Application *app, | 188 | application_call_event(MESSENGER_Application *app, |
194 | MESSENGER_ApplicationEvent event, | 189 | MESSENGER_ApplicationEvent event) |
195 | int argc, | ||
196 | void **argv) | ||
197 | { | 190 | { |
198 | MESSENGER_ApplicationEventCall *call; | 191 | MESSENGER_ApplicationEventCall *call; |
199 | 192 | ||
@@ -203,19 +196,50 @@ application_call_event(MESSENGER_Application *app, | |||
203 | 196 | ||
204 | call->app = app; | 197 | call->app = app; |
205 | call->event = event; | 198 | call->event = event; |
206 | call->argc = argc; | ||
207 | call->argv = NULL; | ||
208 | 199 | ||
209 | if (call->argc > 0) | 200 | g_idle_add(G_SOURCE_FUNC(_application_event_call), call); |
210 | { | 201 | } |
211 | call->argv = GNUNET_new_array(call->argc, void*); | ||
212 | 202 | ||
213 | for (int i = 0; i < call->argc; i++) { | 203 | typedef struct MESSENGER_ApplicationMessageEventCall |
214 | call->argv[i] = argv[i]; | 204 | { |
215 | } | 205 | MESSENGER_Application *app; |
216 | } | 206 | MESSENGER_ApplicationMessageEvent event; |
217 | 207 | ||
218 | g_idle_add(G_SOURCE_FUNC(_application_event_call), call); | 208 | struct GNUNET_CHAT_Context *context; |
209 | const struct GNUNET_CHAT_Message *message; | ||
210 | } MESSENGER_ApplicationMessageEventCall; | ||
211 | |||
212 | static gboolean | ||
213 | _application_message_event_call(gpointer user_data) | ||
214 | { | ||
215 | MESSENGER_ApplicationMessageEventCall *call; | ||
216 | |||
217 | call = (MESSENGER_ApplicationMessageEventCall*) user_data; | ||
218 | call->event(call->app, call->context, call->message); | ||
219 | |||
220 | GNUNET_free(call); | ||
221 | return FALSE; | ||
222 | } | ||
223 | |||
224 | void | ||
225 | application_call_message_event(MESSENGER_Application *app, | ||
226 | MESSENGER_ApplicationMessageEvent event, | ||
227 | struct GNUNET_CHAT_Context *context, | ||
228 | const struct GNUNET_CHAT_Message *message) | ||
229 | { | ||
230 | MESSENGER_ApplicationMessageEventCall *call; | ||
231 | |||
232 | call = (MESSENGER_ApplicationMessageEventCall*) GNUNET_malloc( | ||
233 | sizeof(MESSENGER_ApplicationMessageEventCall) | ||
234 | ); | ||
235 | |||
236 | call->app = app; | ||
237 | call->event = event; | ||
238 | |||
239 | call->context = context; | ||
240 | call->message = message; | ||
241 | |||
242 | g_idle_add(G_SOURCE_FUNC(_application_message_event_call), call); | ||
219 | } | 243 | } |
220 | 244 | ||
221 | void | 245 | void |