diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2010-02-15 21:28:20 +0800 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2010-02-15 22:44:54 +0800 |
commit | 0e7074dbf801ca17ab88c15e9d261b244d2ecdd5 (patch) | |
tree | e9de8586adc8dee8b9a69a443d193f440b25ac4c /src/empathy-accounts-dialog.c | |
parent | 1f08efd25771856f49285ea26e8a5056ff86763f (diff) | |
download | gsoc2013-empathy-0e7074dbf801ca17ab88c15e9d261b244d2ecdd5.tar gsoc2013-empathy-0e7074dbf801ca17ab88c15e9d261b244d2ecdd5.tar.gz gsoc2013-empathy-0e7074dbf801ca17ab88c15e9d261b244d2ecdd5.tar.bz2 gsoc2013-empathy-0e7074dbf801ca17ab88c15e9d261b244d2ecdd5.tar.lz gsoc2013-empathy-0e7074dbf801ca17ab88c15e9d261b244d2ecdd5.tar.xz gsoc2013-empathy-0e7074dbf801ca17ab88c15e9d261b244d2ecdd5.tar.zst gsoc2013-empathy-0e7074dbf801ca17ab88c15e9d261b244d2ecdd5.zip |
accounts-dialog: block the selection 'changed' signal while removing a row
There is no need to call accounts_dialog_model_selection_changed while removing
as we are going to call accounts_dialog_model_select_first right after which
will update the selection.
This has the nice side effect of letting the "remove" button sensitive after
the account has been removed. The callback used to be called recursively twice:
once during the removal of the row and once when calling
accounts_dialog_model_select_first in accounts_dialog_update_settings.
As accounts_dialog_model_selection_changed is checking if a row is selected
*before* calling accounts_dialog_update_settings, the button was unsensitived
at the end of the first call of the callback. (#609575)
Diffstat (limited to 'src/empathy-accounts-dialog.c')
-rw-r--r-- | src/empathy-accounts-dialog.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/empathy-accounts-dialog.c b/src/empathy-accounts-dialog.c index 2770c7181..ca06e14a6 100644 --- a/src/empathy-accounts-dialog.c +++ b/src/empathy-accounts-dialog.c @@ -175,6 +175,10 @@ static void accounts_dialog_presence_changed_cb (TpAccount *account, gchar *status_message, EmpathyAccountsDialog *dialog); +static void accounts_dialog_model_selection_changed ( + GtkTreeSelection *selection, + EmpathyAccountsDialog *dialog); + static void accounts_dialog_update_name_label (EmpathyAccountsDialog *dialog, const gchar *display_name) @@ -1035,7 +1039,17 @@ accounts_dialog_delete_account_response_cb (GtkDialog *message_dialog, account = NULL; } + /* No need to call accounts_dialog_model_selection_changed while + * removing as we are going to call accounts_dialog_model_select_first + * right after which will update the selection. */ + g_signal_handlers_block_by_func (selection, + accounts_dialog_model_selection_changed, account_dialog); + gtk_list_store_remove (GTK_LIST_STORE (model), &iter); + + g_signal_handlers_unblock_by_func (selection, + accounts_dialog_model_selection_changed, account_dialog); + accounts_dialog_model_select_first (account_dialog); } |