| 362 } |
362 } |
| 363 } |
363 } |
| 364 } |
364 } |
| 365 |
365 |
| 366 static void |
366 static void |
| |
367 repopulate_autocomplete(gpointer something, gpointer data) |
| |
368 { |
| |
369 add_completion_list(data); |
| |
370 } |
| |
371 |
| |
372 static void |
| |
373 autocomplete_account_added_cb(G_GNUC_UNUSED PurpleAccountManager *manager, |
| |
374 G_GNUC_UNUSED PurpleAccount *account, |
| |
375 gpointer data) |
| |
376 { |
| |
377 add_completion_list(data); |
| |
378 } |
| |
379 |
| |
380 static void |
| |
381 autocomplete_account_removed_cb(G_GNUC_UNUSED PurpleAccountManager *manager, |
| |
382 G_GNUC_UNUSED PurpleAccount *account, |
| |
383 gpointer data) |
| |
384 { |
| |
385 add_completion_list(data); |
| |
386 } |
| |
387 |
| |
388 static void |
| 367 buddyname_autocomplete_destroyed_cb(GtkWidget *widget, gpointer data) |
389 buddyname_autocomplete_destroyed_cb(GtkWidget *widget, gpointer data) |
| 368 { |
390 { |
| |
391 PurpleAccountManager *manager = purple_account_manager_get_default(); |
| |
392 |
| |
393 purple_signals_disconnect_by_handle(widget); |
| |
394 |
| |
395 g_signal_handlers_disconnect_by_func(manager, |
| |
396 G_CALLBACK(autocomplete_account_added_cb), data); |
| |
397 g_signal_handlers_disconnect_by_func(manager, |
| |
398 G_CALLBACK(autocomplete_account_removed_cb), data); |
| |
399 |
| 369 g_free(data); |
400 g_free(data); |
| 370 purple_signals_disconnect_by_handle(widget); |
|
| 371 } |
|
| 372 |
|
| 373 static void |
|
| 374 repopulate_autocomplete(gpointer something, gpointer data) |
|
| 375 { |
|
| 376 add_completion_list(data); |
|
| 377 } |
401 } |
| 378 |
402 |
| 379 void |
403 void |
| 380 pidgin_setup_screenname_autocomplete( |
404 pidgin_setup_screenname_autocomplete( |
| 381 GtkWidget *entry, GtkWidget *chooser, |
405 GtkWidget *entry, GtkWidget *chooser, |
| 382 PidginFilterBuddyCompletionEntryFunc filter_func, gpointer user_data) |
406 PidginFilterBuddyCompletionEntryFunc filter_func, gpointer user_data) |
| 383 { |
407 { |
| 384 PidginCompletionData *data; |
408 PidginCompletionData *data; |
| |
409 PurpleAccountManager *manager = NULL; |
| 385 |
410 |
| 386 /* |
411 /* |
| 387 * Store the displayed completion value, the buddy name, the UTF-8 |
412 * Store the displayed completion value, the buddy name, the UTF-8 |
| 388 * normalized & casefolded buddy name, the UTF-8 normalized & |
413 * normalized & casefolded buddy name, the UTF-8 normalized & |
| 389 * casefolded value for comparison, and the account. |
414 * casefolded value for comparison, and the account. |
| 432 purple_signal_connect(purple_connections_get_handle(), "signed-on", entry, |
457 purple_signal_connect(purple_connections_get_handle(), "signed-on", entry, |
| 433 G_CALLBACK(repopulate_autocomplete), data); |
458 G_CALLBACK(repopulate_autocomplete), data); |
| 434 purple_signal_connect(purple_connections_get_handle(), "signed-off", entry, |
459 purple_signal_connect(purple_connections_get_handle(), "signed-off", entry, |
| 435 G_CALLBACK(repopulate_autocomplete), data); |
460 G_CALLBACK(repopulate_autocomplete), data); |
| 436 |
461 |
| 437 purple_signal_connect(purple_accounts_get_handle(), "account-added", entry, |
462 manager = purple_account_manager_get_default(); |
| 438 G_CALLBACK(repopulate_autocomplete), data); |
463 g_signal_connect(manager, "added", |
| 439 purple_signal_connect(purple_accounts_get_handle(), "account-removed", entry, |
464 G_CALLBACK(autocomplete_account_added_cb), data); |
| 440 G_CALLBACK(repopulate_autocomplete), data); |
465 g_signal_connect(manager, "removed", |
| |
466 G_CALLBACK(autocomplete_account_removed_cb), data); |
| 441 |
467 |
| 442 g_signal_connect(G_OBJECT(entry), "destroy", G_CALLBACK(buddyname_autocomplete_destroyed_cb), data); |
468 g_signal_connect(G_OBJECT(entry), "destroy", G_CALLBACK(buddyname_autocomplete_destroyed_cb), data); |
| 443 } |
469 } |
| 444 |
470 |
| 445 gboolean |
471 gboolean |