aboutsummaryrefslogtreecommitdiff
path: root/src/application.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/application.c')
-rw-r--r--src/application.c62
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
177static gboolean 175static 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
192void 187void
193application_call_event(MESSENGER_Application *app, 188application_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++) { 203typedef 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
212static 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
224void
225application_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
221void 245void