From 840b906efe7eedc84e07ff3b672063b38fbb7b61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Tue, 14 Apr 2020 00:51:05 +0200 Subject: [PATCH] fingerprint-manager: Add state for state updating Add add an "updating" state to the fingerprint manager so that the UI can adapt the widgets depending on it, as the dbus calls might be a bit slow at times. --- panels/user-accounts/cc-fingerprint-manager.c | 2 ++ panels/user-accounts/cc-fingerprint-manager.h | 2 ++ panels/user-accounts/cc-user-panel.c | 17 ++++++++++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/panels/user-accounts/cc-fingerprint-manager.c b/panels/user-accounts/cc-fingerprint-manager.c index 784ad1700..07a50e7b9 100644 --- a/panels/user-accounts/cc-fingerprint-manager.c +++ b/panels/user-accounts/cc-fingerprint-manager.c @@ -570,6 +570,8 @@ cc_fingerprint_manager_update_state (CcFingerprintManager *self, g_task_set_source_tag (priv->current_task, cc_fingerprint_manager_update_state); g_task_set_task_data (priv->current_task, data, g_free); + set_state (self, CC_FINGERPRINT_STATE_UPDATING); + cc_fingerprint_manager_get_devices (self, cancellable, on_manager_devices_list, priv->current_task); } diff --git a/panels/user-accounts/cc-fingerprint-manager.h b/panels/user-accounts/cc-fingerprint-manager.h index 20771ae6f..d12f52c1f 100644 --- a/panels/user-accounts/cc-fingerprint-manager.h +++ b/panels/user-accounts/cc-fingerprint-manager.h @@ -34,6 +34,7 @@ G_DECLARE_FINAL_TYPE (CcFingerprintManager, cc_fingerprint_manager, CC, FINGERPR /** * CcFingerprintManager: * @CC_FINGERPRINT_STATE_NONE: Fingerprint recognition is not available + * @CC_FINGERPRINT_STATE_UPDATING: Fingerprint recognition is being fetched * @CC_FINGERPRINT_STATE_ENABLED: Fingerprint recognition is enabled * @CC_FINGERPRINT_STATE_DISABLED: Fingerprint recognition is disabled * @@ -41,6 +42,7 @@ G_DECLARE_FINAL_TYPE (CcFingerprintManager, cc_fingerprint_manager, CC, FINGERPR */ typedef enum { CC_FINGERPRINT_STATE_NONE, + CC_FINGERPRINT_STATE_UPDATING, CC_FINGERPRINT_STATE_ENABLED, CC_FINGERPRINT_STATE_DISABLED, } CcFingerprintState; diff --git a/panels/user-accounts/cc-user-panel.c b/panels/user-accounts/cc-user-panel.c index b52839e17..81ad6825f 100644 --- a/panels/user-accounts/cc-user-panel.c +++ b/panels/user-accounts/cc-user-panel.c @@ -852,8 +852,13 @@ update_fingerprint_row_state (CcUserPanel *self, GParamSpec *spec, CcFingerprint { CcFingerprintState state = cc_fingerprint_manager_get_state (fingerprint_manager); - gtk_widget_set_visible (GTK_WIDGET (self->fingerprint_row), - state != CC_FINGERPRINT_STATE_NONE); + if (state != CC_FINGERPRINT_STATE_UPDATING) { + gtk_widget_set_visible (GTK_WIDGET (self->fingerprint_row), + state != CC_FINGERPRINT_STATE_NONE); + } + + gtk_widget_set_sensitive (GTK_WIDGET (self->fingerprint_row), + state != CC_FINGERPRINT_STATE_UPDATING); if (state == CC_FINGERPRINT_STATE_ENABLED) gtk_label_set_text (self->fingerprint_state_label, _("Enabled")); @@ -1430,6 +1435,11 @@ on_permission_changed (CcUserPanel *self) } if (is_authorized || self_selected) { + CcFingerprintState fingerprint_state = CC_FINGERPRINT_STATE_NONE; + + if (self->fingerprint_manager) + fingerprint_state = cc_fingerprint_manager_get_state (self->fingerprint_manager); + gtk_stack_set_visible_child (self->user_icon_stack, GTK_WIDGET (self->user_icon_button)); gtk_widget_set_sensitive (GTK_WIDGET (self->language_row), TRUE); @@ -1438,7 +1448,8 @@ on_permission_changed (CcUserPanel *self) gtk_widget_set_sensitive (GTK_WIDGET (self->password_row), TRUE); remove_unlock_tooltip (GTK_WIDGET (self->password_row)); - gtk_widget_set_sensitive (GTK_WIDGET (self->fingerprint_row), TRUE); + gtk_widget_set_sensitive (GTK_WIDGET (self->fingerprint_row), + fingerprint_state != CC_FINGERPRINT_STATE_UPDATING); remove_unlock_tooltip (GTK_WIDGET (self->fingerprint_row)); gtk_widget_set_sensitive (GTK_WIDGET (self->last_login_row), TRUE);