Mercurial > pidgin
comparison src/notify.c @ 12242:976677e67239
[gaim-migrate @ 14544]
Rework the notify API close callbacks. They are now called by the core, instead of the UI. Prior to a couple days ago, they weren't actually implemented in the UI at all.
As a side note, if anyone knows why gpointer is declared as a T_GaimObj instead of a T_PTR, please let me know. That seems wrong, especially since void * is a T_PTR and gconstpointer is a T_PTR. This may or may not cause problems for the notify change (void * -> gpointer) to user_data. NOTE: I did not change this, even though I think it's wrong.
committer: Tailor Script <tailor@pidgin.im>
| author | Richard Laager <rlaager@wiktel.com> |
|---|---|
| date | Mon, 28 Nov 2005 01:50:56 +0000 |
| parents | 64254fbabc7b |
| children | ca27de274225 |
comparison
equal
deleted
inserted
replaced
| 12241:4777c5912068 | 12242:976677e67239 |
|---|---|
| 30 typedef struct | 30 typedef struct |
| 31 { | 31 { |
| 32 GaimNotifyType type; | 32 GaimNotifyType type; |
| 33 void *handle; | 33 void *handle; |
| 34 void *ui_handle; | 34 void *ui_handle; |
| 35 | 35 GaimNotifyCloseCallback cb; |
| 36 gpointer cb_user_data; | |
| 36 } GaimNotifyInfo; | 37 } GaimNotifyInfo; |
| 37 | 38 |
| 38 void * | 39 void * |
| 39 gaim_notify_message(void *handle, GaimNotifyMsgType type, | 40 gaim_notify_message(void *handle, GaimNotifyMsgType type, |
| 40 const char *title, const char *primary, | 41 const char *title, const char *primary, |
| 41 const char *secondary, GHookFunc cb, gpointer user_data) | 42 const char *secondary, GaimNotifyCloseCallback cb, gpointer user_data) |
| 42 { | 43 { |
| 43 GaimNotifyUiOps *ops; | 44 GaimNotifyUiOps *ops; |
| 44 | 45 |
| 45 g_return_val_if_fail(primary != NULL, NULL); | 46 g_return_val_if_fail(primary != NULL, NULL); |
| 46 | 47 |
| 51 | 52 |
| 52 info = g_new0(GaimNotifyInfo, 1); | 53 info = g_new0(GaimNotifyInfo, 1); |
| 53 info->type = GAIM_NOTIFY_MESSAGE; | 54 info->type = GAIM_NOTIFY_MESSAGE; |
| 54 info->handle = handle; | 55 info->handle = handle; |
| 55 info->ui_handle = ops->notify_message(type, title, primary, | 56 info->ui_handle = ops->notify_message(type, title, primary, |
| 56 secondary, cb, user_data); | 57 secondary); |
| 58 info->cb = cb; | |
| 59 info->cb_user_data = user_data; | |
| 57 | 60 |
| 58 handles = g_list_append(handles, info); | 61 handles = g_list_append(handles, info); |
| 59 | 62 |
| 60 return info->ui_handle; | 63 return info->ui_handle; |
| 61 } | 64 } |
| 63 return NULL; | 66 return NULL; |
| 64 } | 67 } |
| 65 | 68 |
| 66 void * | 69 void * |
| 67 gaim_notify_email(void *handle, const char *subject, const char *from, | 70 gaim_notify_email(void *handle, const char *subject, const char *from, |
| 68 const char *to, const char *url, GHookFunc cb, | 71 const char *to, const char *url, GaimNotifyCloseCallback cb, |
| 69 gpointer user_data) | 72 gpointer user_data) |
| 70 { | 73 { |
| 71 GaimNotifyUiOps *ops; | 74 GaimNotifyUiOps *ops; |
| 72 | 75 |
| 73 ops = gaim_notify_get_ui_ops(); | 76 ops = gaim_notify_get_ui_ops(); |
| 76 GaimNotifyInfo *info; | 79 GaimNotifyInfo *info; |
| 77 | 80 |
| 78 info = g_new0(GaimNotifyInfo, 1); | 81 info = g_new0(GaimNotifyInfo, 1); |
| 79 info->type = GAIM_NOTIFY_EMAIL; | 82 info->type = GAIM_NOTIFY_EMAIL; |
| 80 info->handle = handle; | 83 info->handle = handle; |
| 81 info->ui_handle = ops->notify_email(subject, from, to, url, cb, | 84 info->ui_handle = ops->notify_email(subject, from, to, url); |
| 82 user_data); | 85 info->cb = cb; |
| 86 info->cb_user_data = user_data; | |
| 83 | 87 |
| 84 handles = g_list_append(handles, info); | 88 handles = g_list_append(handles, info); |
| 85 | 89 |
| 86 return info->ui_handle; | 90 return info->ui_handle; |
| 87 } | 91 } |
| 91 | 95 |
| 92 void * | 96 void * |
| 93 gaim_notify_emails(void *handle, size_t count, gboolean detailed, | 97 gaim_notify_emails(void *handle, size_t count, gboolean detailed, |
| 94 const char **subjects, const char **froms, | 98 const char **subjects, const char **froms, |
| 95 const char **tos, const char **urls, | 99 const char **tos, const char **urls, |
| 96 GHookFunc cb, gpointer user_data) | 100 GaimNotifyCloseCallback cb, gpointer user_data) |
| 97 { | 101 { |
| 98 GaimNotifyUiOps *ops; | 102 GaimNotifyUiOps *ops; |
| 99 | 103 |
| 100 g_return_val_if_fail(count != 0, NULL); | 104 g_return_val_if_fail(count != 0, NULL); |
| 101 | 105 |
| 115 | 119 |
| 116 info = g_new0(GaimNotifyInfo, 1); | 120 info = g_new0(GaimNotifyInfo, 1); |
| 117 info->type = GAIM_NOTIFY_EMAILS; | 121 info->type = GAIM_NOTIFY_EMAILS; |
| 118 info->handle = handle; | 122 info->handle = handle; |
| 119 info->ui_handle = ops->notify_emails(count, detailed, subjects, | 123 info->ui_handle = ops->notify_emails(count, detailed, subjects, |
| 120 froms, tos, urls, cb, user_data); | 124 froms, tos, urls); |
| 125 info->cb = cb; | |
| 126 info->cb_user_data = user_data; | |
| 121 | 127 |
| 122 handles = g_list_append(handles, info); | 128 handles = g_list_append(handles, info); |
| 123 | 129 |
| 124 return info->ui_handle; | 130 return info->ui_handle; |
| 125 } | 131 } |
| 128 } | 134 } |
| 129 | 135 |
| 130 void * | 136 void * |
| 131 gaim_notify_formatted(void *handle, const char *title, const char *primary, | 137 gaim_notify_formatted(void *handle, const char *title, const char *primary, |
| 132 const char *secondary, const char *text, | 138 const char *secondary, const char *text, |
| 133 GHookFunc cb, gpointer user_data) | 139 GaimNotifyCloseCallback cb, gpointer user_data) |
| 134 { | 140 { |
| 135 GaimNotifyUiOps *ops; | 141 GaimNotifyUiOps *ops; |
| 136 | 142 |
| 137 g_return_val_if_fail(primary != NULL, NULL); | 143 g_return_val_if_fail(primary != NULL, NULL); |
| 138 | 144 |
| 142 GaimNotifyInfo *info; | 148 GaimNotifyInfo *info; |
| 143 | 149 |
| 144 info = g_new0(GaimNotifyInfo, 1); | 150 info = g_new0(GaimNotifyInfo, 1); |
| 145 info->type = GAIM_NOTIFY_FORMATTED; | 151 info->type = GAIM_NOTIFY_FORMATTED; |
| 146 info->handle = handle; | 152 info->handle = handle; |
| 147 info->ui_handle = ops->notify_formatted(title, primary, secondary, | 153 info->ui_handle = ops->notify_formatted(title, primary, secondary, text); |
| 148 text, cb, user_data); | 154 info->cb = cb; |
| 155 info->cb_user_data = user_data; | |
| 149 | 156 |
| 150 handles = g_list_append(handles, info); | 157 handles = g_list_append(handles, info); |
| 151 | 158 |
| 152 return info->ui_handle; | 159 return info->ui_handle; |
| 153 } | 160 } |
| 156 } | 163 } |
| 157 | 164 |
| 158 void * | 165 void * |
| 159 gaim_notify_searchresults(GaimConnection *gc, const char *title, | 166 gaim_notify_searchresults(GaimConnection *gc, const char *title, |
| 160 const char *primary, const char *secondary, | 167 const char *primary, const char *secondary, |
| 161 GaimNotifySearchResults *results, GHookFunc cb, gpointer user_data) | 168 GaimNotifySearchResults *results, GaimNotifyCloseCallback cb, gpointer user_data) |
| 162 { | 169 { |
| 163 GaimNotifyUiOps *ops; | 170 GaimNotifyUiOps *ops; |
| 164 | 171 |
| 165 ops = gaim_notify_get_ui_ops(); | 172 ops = gaim_notify_get_ui_ops(); |
| 166 | 173 |
| 169 | 176 |
| 170 info = g_new0(GaimNotifyInfo, 1); | 177 info = g_new0(GaimNotifyInfo, 1); |
| 171 info->type = GAIM_NOTIFY_SEARCHRESULTS; | 178 info->type = GAIM_NOTIFY_SEARCHRESULTS; |
| 172 info->handle = gc; | 179 info->handle = gc; |
| 173 info->ui_handle = ops->notify_searchresults(gc, title, primary, | 180 info->ui_handle = ops->notify_searchresults(gc, title, primary, |
| 174 secondary, results, | 181 secondary, results); |
| 175 cb, user_data); | 182 info->cb = cb; |
| 183 info->cb_user_data = user_data; | |
| 176 | 184 |
| 177 handles = g_list_append(handles, info); | 185 handles = g_list_append(handles, info); |
| 178 | 186 |
| 179 return info->ui_handle; | 187 return info->ui_handle; |
| 180 } | 188 } |
| 327 return g_list_nth_data(results->rows, row_id); | 335 return g_list_nth_data(results->rows, row_id); |
| 328 } | 336 } |
| 329 | 337 |
| 330 void * | 338 void * |
| 331 gaim_notify_userinfo(GaimConnection *gc, const char *who, | 339 gaim_notify_userinfo(GaimConnection *gc, const char *who, |
| 332 const char *text, GHookFunc cb, gpointer user_data) | 340 const char *text, GaimNotifyCloseCallback cb, gpointer user_data) |
| 333 { | 341 { |
| 334 GaimNotifyUiOps *ops; | 342 GaimNotifyUiOps *ops; |
| 335 | 343 |
| 336 g_return_val_if_fail(who != NULL, NULL); | 344 g_return_val_if_fail(who != NULL, NULL); |
| 337 | 345 |
| 346 info->handle = gc; | 354 info->handle = gc; |
| 347 | 355 |
| 348 gaim_signal_emit(gaim_notify_get_handle(), "displaying-userinfo", | 356 gaim_signal_emit(gaim_notify_get_handle(), "displaying-userinfo", |
| 349 gaim_connection_get_account(gc), who, &infotext); | 357 gaim_connection_get_account(gc), who, &infotext); |
| 350 | 358 |
| 351 info->ui_handle = ops->notify_userinfo(gc, who, | 359 info->ui_handle = ops->notify_userinfo(gc, who, infotext); |
| 352 infotext, cb, user_data); | 360 info->cb = cb; |
| 361 info->cb_user_data = user_data; | |
| 353 | 362 |
| 354 handles = g_list_append(handles, info); | 363 handles = g_list_append(handles, info); |
| 355 | 364 |
| 356 g_free(infotext); | 365 g_free(infotext); |
| 357 return info->ui_handle; | 366 return info->ui_handle; |
| 402 handles = g_list_remove(handles, info); | 411 handles = g_list_remove(handles, info); |
| 403 | 412 |
| 404 if (ops != NULL && ops->close_notify != NULL) | 413 if (ops != NULL && ops->close_notify != NULL) |
| 405 ops->close_notify(info->type, ui_handle); | 414 ops->close_notify(info->type, ui_handle); |
| 406 | 415 |
| 416 if (info->cb != NULL) | |
| 417 info->cb(info->cb_user_data); | |
| 418 | |
| 407 g_free(info); | 419 g_free(info); |
| 408 | 420 |
| 409 break; | 421 break; |
| 410 } | 422 } |
| 411 } | 423 } |
| 429 if (info->handle == handle) { | 441 if (info->handle == handle) { |
| 430 handles = g_list_remove(handles, info); | 442 handles = g_list_remove(handles, info); |
| 431 | 443 |
| 432 if (ops != NULL && ops->close_notify != NULL) | 444 if (ops != NULL && ops->close_notify != NULL) |
| 433 ops->close_notify(info->type, info->ui_handle); | 445 ops->close_notify(info->type, info->ui_handle); |
| 446 | |
| 447 if (info->cb != NULL) | |
| 448 info->cb(info->cb_user_data); | |
| 434 | 449 |
| 435 g_free(info); | 450 g_free(info); |
| 436 } | 451 } |
| 437 } | 452 } |
| 438 } | 453 } |
