# HG changeset patch # User Tim Ringenbach # Date 1131853516 0 # Node ID e4666705944bc125046bed75c8672ed953ab54e6 # Parent 1019f1d510d66d6de97dc813f40a873c842abad5 [gaim-migrate @ 14365] patches [ 1353462 ] account-disabled/enabled signals, use them in account dialog and [ 1355690 ] Add/remove statusbox when accounts are enabled/disabled some parts of the first one didn't apply, but they were doc changes, so i figured charkins could diff them. committer: Tailor Script diff -r 1019f1d510d6 -r e4666705944b doc/account-signals.dox --- a/doc/account-signals.dox Sun Nov 13 03:39:06 2005 +0000 +++ b/doc/account-signals.dox Sun Nov 13 03:45:16 2005 +0000 @@ -38,6 +38,24 @@ @param account The account that was removed. @endsignaldef + @signaldef account-disabled + @signalproto +void (*account_disabled)(GaimAccount *account); + @endsignalproto + @signaldesc + Emitted when an account is disabled. + @param account The account that was disabled. + @endsignaldef + + @signaldef account-enabled + @signalproto +void (*account_enabled)(GaimAccount *account); + @endsignalproto + @signaldesc + Emitted when an account is enabled. + @param account The account that was enabled. + @endsignaldef + @signaldef account-setting-info @signalproto void (*account_setting_info)(GaimAccount *account, const char *new_info); diff -r 1019f1d510d6 -r e4666705944b src/account.c --- a/src/account.c Sun Nov 13 03:39:06 2005 +0000 +++ b/src/account.c Sun Nov 13 03:45:16 2005 +0000 @@ -1292,13 +1292,21 @@ gboolean value) { GaimConnection *gc; + gboolean was_enabled = FALSE; g_return_if_fail(account != NULL); g_return_if_fail(ui != NULL); + was_enabled = gaim_account_get_enabled(account, ui); + gaim_account_set_ui_bool(account, ui, "auto-login", value); gc = gaim_account_get_connection(account); + if(was_enabled && !value) + gaim_signal_emit(gaim_accounts_get_handle(), "account-disabled", account); + else if(!was_enabled && value) + gaim_signal_emit(gaim_accounts_get_handle(), "account-enabled", account); + if ((gc != NULL) && (gc->wants_to_die == TRUE)) return; @@ -2252,6 +2260,16 @@ gaim_value_new(GAIM_TYPE_SUBTYPE, GAIM_SUBTYPE_ACCOUNT)); + gaim_signal_register(handle, "account-disabled", + gaim_marshal_VOID__POINTER, NULL, 1, + gaim_value_new(GAIM_TYPE_SUBTYPE, + GAIM_SUBTYPE_ACCOUNT)); + + gaim_signal_register(handle, "account-enabled", + gaim_marshal_VOID__POINTER, NULL, 1, + gaim_value_new(GAIM_TYPE_SUBTYPE, + GAIM_SUBTYPE_ACCOUNT)); + gaim_signal_register(handle, "account-setting-info", gaim_marshal_VOID__POINTER_POINTER, NULL, 2, gaim_value_new(GAIM_TYPE_SUBTYPE, diff -r 1019f1d510d6 -r e4666705944b src/gtkaccount.c --- a/src/gtkaccount.c Sun Nov 13 03:39:06 2005 +0000 +++ b/src/gtkaccount.c Sun Nov 13 03:45:16 2005 +0000 @@ -1904,6 +1904,21 @@ } static void +account_abled_cb(GaimAccount *account, gpointer user_data) +{ + GtkTreeIter iter; + + if (accounts_window == NULL) + return; + + /* update the account in the GtkListStore */ + if (accounts_window_find_account_in_treemodel(&iter, account)) + gtk_list_store_set(accounts_window->model, &iter, + COLUMN_ENABLED, GPOINTER_TO_INT(user_data), + -1); +} + +static void drag_data_get_cb(GtkWidget *widget, GdkDragContext *ctx, GtkSelectionData *data, guint info, guint time, AccountsWindow *dialog) @@ -2167,10 +2182,6 @@ gaim_savedstatus_activate_for_account(saved_status, account); gaim_account_set_enabled(account, GAIM_GTK_UI, !enabled); - - gtk_list_store_set(dialog->model, &iter, - COLUMN_ENABLED, !enabled, - -1); } static void @@ -2620,6 +2631,12 @@ gaim_signal_connect(gaim_accounts_get_handle(), "account-removed", gaim_gtk_account_get_handle(), GAIM_CALLBACK(account_removed_cb), NULL); + gaim_signal_connect(gaim_accounts_get_handle(), "account-disabled", + gaim_gtk_account_get_handle(), + GAIM_CALLBACK(account_abled_cb), GINT_TO_POINTER(FALSE)); + gaim_signal_connect(gaim_accounts_get_handle(), "account-enabled", + gaim_gtk_account_get_handle(), + GAIM_CALLBACK(account_abled_cb), GINT_TO_POINTER(TRUE)); account_pref_wins = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, NULL); diff -r 1019f1d510d6 -r e4666705944b src/gtkblist.c --- a/src/gtkblist.c Sun Nov 13 03:39:06 2005 +0000 +++ b/src/gtkblist.c Sun Nov 13 03:45:16 2005 +0000 @@ -3247,6 +3247,41 @@ return result; } +static void account_enabled(GaimAccount *account, GaimGtkBuddyList *gtkblist) +{ + GtkWidget *box; + + if (!gtkblist) + return; + + box = gtk_gaim_status_box_new_with_account(account); + gtkblist->statusboxes = g_list_append(gtkblist->statusboxes, box); + gtk_box_pack_start(GTK_BOX(gtkblist->statusboxbox), box, FALSE, TRUE, 0); + gtk_widget_show(box); +} + +static void account_disabled(GaimAccount *account, GaimGtkBuddyList *gtkblist) +{ + GList *iter; + + if (!gtkblist) + return; + + for (iter = gtkblist->statusboxes; iter; iter = iter->next) + { + GtkWidget *box = iter->data; + GaimAccount *ac = NULL; + + g_object_get(G_OBJECT(box), "account", &ac, NULL); + if (ac == account) + { + gtkblist->statusboxes = g_list_remove_link(gtkblist->statusboxes, iter); + gtk_widget_destroy(box); + break; + } + } +} + static void gaim_gtk_blist_show(GaimBuddyList *list) { void *handle; @@ -3480,6 +3515,11 @@ gaim_gtk_blist_sound_method_pref_cb, NULL); /* Setup some gaim signal handlers. */ + gaim_signal_connect(gaim_accounts_get_handle(), "account-disabled", + gtkblist, GAIM_CALLBACK(account_disabled), gtkblist); + gaim_signal_connect(gaim_accounts_get_handle(), "account-enabled", + gtkblist, GAIM_CALLBACK(account_enabled), gtkblist); + gaim_signal_connect(gaim_connections_get_handle(), "signed-on", gtkblist, GAIM_CALLBACK(sign_on_off_cb), list); gaim_signal_connect(gaim_connections_get_handle(), "signed-off",