diff options
-rw-r--r-- | ChangeLog.API | 15 | ||||
-rw-r--r-- | doc/reference/libpurple/signals_account.md | 28 | ||||
-rw-r--r-- | libpurple/account.c | 30 | ||||
-rw-r--r-- | libpurple/accounts.c | 11 | ||||
-rw-r--r-- | libpurple/protocols.c | 3 |
5 files changed, 30 insertions, 57 deletions
diff --git a/ChangeLog.API b/ChangeLog.API index b3ed229b60..9bf936e2c8 100644 --- a/ChangeLog.API +++ b/ChangeLog.API @@ -327,21 +327,24 @@ version 3.0.0 (??/??/????): * _PurpleSslConnection * _XMLNodeType * account-added signal. Use PurpleAccountManager::added instead. - * account-created signal. Use PurpleAccountManager::added instead. - * account-destroying signal. Use PurpleAccountManager::removed instead. - * account-disabled signal. Use - PurpleAccountManager::account-changed::enabled instead. - * account-enabled signal. Use - PurpleAccountManager::account-changed::enabled instead. * account-alias-changed signal * account-authorization-denied, account-authorization-granted, account-authorization-requested, account-authorization-requested-with-message signals * account-connecting signal * account-connection-error signal + * account-created signal. Use PurpleAccountManager::added instead. + * account-destroying signal. Use PurpleAccountManager::removed instead. + * account-disabled signal. Use + PurpleAccountManager::account-changed::enabled instead. + * account-enabled signal. Use + PurpleAccountManager::account-changed::enabled instead. + * account-error-changed signal. Use + PurpleAccountManager::account-changed::error instead. * account-removed signal. Use PurpleAccountManager::removed instead. * account-setting-info, account-set-info signals + * account-status-changing signal. * file-recv-accept, file-recv-cancel, file-recv-complete, file-recv-start, file-send-accept, file-send-cancel, file-send-complete, file-send-start signals. Use diff --git a/doc/reference/libpurple/signals_account.md b/doc/reference/libpurple/signals_account.md index e6af9d0257..1ef3265fc2 100644 --- a/doc/reference/libpurple/signals_account.md +++ b/doc/reference/libpurple/signals_account.md @@ -7,7 +7,6 @@ Slug: account-signals * [account-status-changed](#account-status-changed) * [account-actions-changed](#account-actions-changed) -* [account-error-changed](#account-error-changed) * [account-signed-on](#account-signed-on) * [account-signed-off](#account-signed-off) @@ -94,33 +93,6 @@ Emitted when the account actions are changed after initial connection. ---- -#### account-error-changed - -```c -void user_function(PurpleAccount *account, - const PurpleConnectionErrorInfo *old_error, - const PurpleConnectionErrorInfo *current_error, - gpointer user_data); -``` - -Emitted when `account`'s error changes. You should not call purple_account_clear_current_error() while this signal is being emitted. - -**Parameters:** - -**account** -: The account whose error has changed. - -**old_error** -: The account's previous error, or `NULL` if it had no error. After this signal is emitted, `old_error` is not guaranteed to be a valid pointer. - -**new_error** -: The account's new error, or `NULL` if it has no error. If not `NULL`, `new_error` will remain a valid until pointer just after the next time this signal is emitted for this `account`. See `purple_account_get_current_error()`. - -**user_data** -: User data set when the signal handler was connected. - ----- - #### account-signed-on ```c diff --git a/libpurple/account.c b/libpurple/account.c index b6bef602d6..ef06ceec66 100644 --- a/libpurple/account.c +++ b/libpurple/account.c @@ -127,6 +127,7 @@ enum PROP_BUDDY_ICON_PATH, PROP_REMEMBER_PASSWORD, PROP_PROXY_INFO, + PROP_ERROR, PROP_LAST }; @@ -508,16 +509,16 @@ void _purple_account_set_current_error(PurpleAccount *account, PurpleConnectionErrorInfo *new_err) { - PurpleConnectionErrorInfo *old_err; PurpleNotificationManager *manager = NULL; g_return_if_fail(PURPLE_IS_ACCOUNT(account)); - old_err = account->current_error; - - if(new_err == old_err) + if(new_err == account->current_error) { return; + } + g_clear_pointer(&account->current_error, + purple_connection_error_info_free); account->current_error = new_err; manager = purple_notification_manager_get_default(); @@ -535,12 +536,9 @@ _purple_account_set_current_error(PurpleAccount *account, purple_notification_manager_add(manager, account->error_notification); } - purple_signal_emit(purple_accounts_get_handle(), - "account-error-changed", - account, old_err, new_err); - purple_accounts_schedule_save(); + g_object_notify_by_pspec(G_OBJECT(account), properties[PROP_ERROR]); - g_clear_pointer(&old_err, purple_connection_error_info_free); + purple_accounts_schedule_save(); } /****************************************************************************** @@ -1042,6 +1040,20 @@ purple_account_class_init(PurpleAccountClass *klass) PURPLE_TYPE_PROXY_INFO, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + /** + * PurpleAccount:error: + * + * The [type@GLib.Error] of the account. This is set when an account enters + * an error state and is cleared when a connection attempt is made. + * + * Since: 3.0.0 + */ + properties[PROP_ERROR] = g_param_spec_boxed( + "error", "error", + "The connection error info of the account", + PURPLE_TYPE_CONNECTION_ERROR_INFO, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + g_object_class_install_properties(obj_class, PROP_LAST, properties); } diff --git a/libpurple/accounts.c b/libpurple/accounts.c index 6ee9c30b3f..4064bf1c1b 100644 --- a/libpurple/accounts.c +++ b/libpurple/accounts.c @@ -680,11 +680,6 @@ purple_accounts_init(void) void *handle = purple_accounts_get_handle(); void *conn_handle = purple_connections_get_handle(); - purple_signal_register(handle, "account-status-changing", - purple_marshal_VOID__POINTER_POINTER_POINTER, - G_TYPE_NONE, 3, PURPLE_TYPE_ACCOUNT, - PURPLE_TYPE_STATUS, PURPLE_TYPE_STATUS); - purple_signal_register(handle, "account-status-changed", purple_marshal_VOID__POINTER_POINTER_POINTER, G_TYPE_NONE, 3, PURPLE_TYPE_ACCOUNT, @@ -694,12 +689,6 @@ purple_accounts_init(void) purple_marshal_VOID__POINTER, G_TYPE_NONE, 1, PURPLE_TYPE_ACCOUNT); - purple_signal_register(handle, "account-error-changed", - purple_marshal_VOID__POINTER_POINTER_POINTER, - G_TYPE_NONE, 3, PURPLE_TYPE_ACCOUNT, - PURPLE_TYPE_CONNECTION_ERROR_INFO, - PURPLE_TYPE_CONNECTION_ERROR_INFO); - purple_signal_register(handle, "account-signed-on", purple_marshal_VOID__POINTER, G_TYPE_NONE, 1, PURPLE_TYPE_ACCOUNT); diff --git a/libpurple/protocols.c b/libpurple/protocols.c index 243f44077e..898ad50494 100644 --- a/libpurple/protocols.c +++ b/libpurple/protocols.c @@ -362,9 +362,6 @@ purple_protocol_change_account_status(PurpleAccount *account, g_return_if_fail(new_status != NULL); g_return_if_fail(!purple_status_is_exclusive(new_status) || old_status != NULL); - purple_signal_emit(purple_accounts_get_handle(), "account-status-changing", - account, old_status, new_status); - do_protocol_change_account_status(account, old_status, new_status); purple_signal_emit(purple_accounts_get_handle(), "account-status-changed", |