[gnome-control-center] fingerprint-dialog: Use fingerprint manager to notify state changes
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] fingerprint-dialog: Use fingerprint manager to notify state changes
- Date: Fri, 26 Jun 2020 01:59:18 +0000 (UTC)
commit e935cb9d74538bbbca3ff5f13b92c9616bf92c20
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date: Mon Apr 6 23:08:38 2020 +0200
fingerprint-dialog: Use fingerprint manager to notify state changes
panels/user-accounts/cc-user-panel.c | 5 +-
panels/user-accounts/um-fingerprint-dialog.c | 141 +++++----------------------
panels/user-accounts/um-fingerprint-dialog.h | 7 +-
3 files changed, 27 insertions(+), 126 deletions(-)
---
diff --git a/panels/user-accounts/cc-user-panel.c b/panels/user-accounts/cc-user-panel.c
index a5c876693..b52839e17 100644
--- a/panels/user-accounts/cc-user-panel.c
+++ b/panels/user-accounts/cc-user-panel.c
@@ -859,8 +859,6 @@ update_fingerprint_row_state (CcUserPanel *self, GParamSpec *spec, CcFingerprint
gtk_label_set_text (self->fingerprint_state_label, _("Enabled"));
else if (state == CC_FINGERPRINT_STATE_DISABLED)
gtk_label_set_text (self->fingerprint_state_label, _("Disabled"));
-
- fingerprint_set_enabled (state == CC_FINGERPRINT_STATE_ENABLED);
}
static void
@@ -925,6 +923,7 @@ show_user (ActUser *user, CcUserPanel *self)
if (show) {
if (!self->fingerprint_manager) {
self->fingerprint_manager = cc_fingerprint_manager_new (user);
+ fingerprint_set_manager (self->fingerprint_manager);
g_signal_connect_object (self->fingerprint_manager,
"notify::state",
G_CALLBACK (update_fingerprint_row_state),
@@ -1189,8 +1188,6 @@ change_fingerprint (CcUserPanel *self)
fingerprint_button_clicked (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))),
GTK_WIDGET (self->fingerprint_row),
- self->fingerprint_state_label,
- user,
self->fingerprint_cancellable);
}
diff --git a/panels/user-accounts/um-fingerprint-dialog.c b/panels/user-accounts/um-fingerprint-dialog.c
index 200c0d4a8..68b645d2a 100644
--- a/panels/user-accounts/um-fingerprint-dialog.c
+++ b/panels/user-accounts/um-fingerprint-dialog.c
@@ -15,6 +15,7 @@
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
+#include "cc-fingerprint-manager.h"
#include "config.h"
#include <stdlib.h>
@@ -33,7 +34,7 @@
static GDBusProxy *manager = NULL;
static GDBusConnection *connection = NULL;
-static gboolean is_disable = FALSE;
+static CcFingerprintManager *fingerprint_manager = NULL;
enum {
STATE_NONE,
@@ -42,9 +43,6 @@ enum {
};
typedef struct {
- GtkWidget *fingerprint_row;
- GtkLabel *state_label;
-
GtkWidget *ass;
GtkBuilder *dialog;
@@ -189,106 +187,22 @@ set_fingerprint_row_cb (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
{
- GTask *task;
- GtkWidget *fingerprint_row;
- g_autoptr(GtkLabel) state_label = NULL;
+ GTask *task = G_TASK (res);
+ GtkWidget *fingerprint_row = GTK_WIDGET (source_object);
g_autoptr(GError) error = NULL;
- gboolean enabled;
- gboolean visible;
- task = G_TASK (res);
- fingerprint_row = GTK_WIDGET (source_object);
- state_label = user_data;
- enabled = g_task_propagate_boolean (task, &error);
- visible = TRUE;
+ g_task_propagate_boolean (task, &error);
if (error) {
- visible = FALSE;
-
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
- g_warning ("Fingerprint row not available: %s",
+ g_message ("Fingerprint operation failed: %s",
error->message);
}
}
- if (enabled) {
- is_disable = TRUE;
- gtk_label_set_text (state_label, _("Enabled"));
- } else {
- is_disable = FALSE;
- gtk_label_set_text (state_label, _("Disabled"));
- }
-
gtk_widget_set_sensitive (fingerprint_row, TRUE);
- gtk_widget_set_visible (fingerprint_row, visible);
-}
-
-static void
-set_fingerprint_task_func (GTask *task,
- gpointer source_object,
- gpointer task_data,
- GCancellable *cancellable)
-{
- GDBusProxy *device;
- GVariant *result;
- GVariantIter *fingers;
- GError *error = NULL;
-
- ensure_manager (cancellable);
- if (manager == NULL) {
- g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Impossible to get fprintd manager");
- return;
- }
-
- device = get_first_device (cancellable);
- if (device == NULL) {
- g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Impossible to get fprintd device");
- return;
- }
-
- result = g_dbus_proxy_call_sync (device, "ListEnrolledFingers", g_variant_new ("(s)", ""),
G_DBUS_CALL_FLAGS_NONE, -1, cancellable, &error);
- if (!result) {
- if (!g_dbus_error_is_remote_error (error) ||
- strcmp (g_dbus_error_get_remote_error(error),
"net.reactivated.Fprint.Error.NoEnrolledPrints") != 0) {
- g_object_unref (device);
- g_task_return_error (task, error);
- return;
- }
- }
-
- if (result && g_variant_is_of_type (result, G_VARIANT_TYPE ("(as)")))
- g_variant_get (result, "(as)", &fingers);
- else
- fingers = NULL;
-
- if (g_task_return_error_if_cancelled (task))
- return;
-
- if (fingers == NULL || g_variant_iter_n_children (fingers) == 0) {
- g_task_return_boolean (task, FALSE);
- } else {
- g_task_return_boolean (task, TRUE);
- }
-
- if (result != NULL)
- g_variant_unref (result);
- if (fingers != NULL)
- g_variant_iter_free (fingers);
- g_object_unref (device);
-}
-
-void
-set_fingerprint_row (GtkWidget *row,
- GtkLabel *state_label,
- GCancellable *cancellable)
-{
- g_autoptr(GTask) task = NULL;
- task = g_task_new (row, cancellable, set_fingerprint_row_cb,
- g_object_ref (state_label));
- g_task_run_in_thread (task, set_fingerprint_task_func);
+ cc_fingerprint_manager_update_state (fingerprint_manager);
}
static void
@@ -299,6 +213,7 @@ delete_fingerprint_task_func (GTask *task,
{
GDBusProxy *device;
GVariant *result;
+ g_autoptr(GError) error = NULL;
ensure_manager (cancellable);
if (manager == NULL)
@@ -308,19 +223,21 @@ delete_fingerprint_task_func (GTask *task,
if (device == NULL)
return;
- result = g_dbus_proxy_call_sync (device, "DeleteEnrolledFingers", g_variant_new ("(s)", ""),
G_DBUS_CALL_FLAGS_NONE, -1, cancellable, NULL);
+ result = g_dbus_proxy_call_sync (device, "DeleteEnrolledFingers", g_variant_new ("(s)", ""),
G_DBUS_CALL_FLAGS_NONE, -1, cancellable, &error);
if (result)
g_variant_unref (result);
g_object_unref (device);
- set_fingerprint_task_func (task, source_object, task_data, cancellable);
+ if (error)
+ g_task_return_error (task, g_steal_pointer (&error));
+ else
+ g_task_return_boolean (task, TRUE);
}
static void
delete_fingerprints_question (GtkWindow *parent,
GtkWidget *fingerprint_row,
- GtkLabel *state_label,
ActUser *user,
GCancellable *cancellable)
{
@@ -350,8 +267,7 @@ delete_fingerprints_question (GtkWindow *parent,
gtk_widget_set_sensitive (fingerprint_row, FALSE);
task = g_task_new (fingerprint_row, cancellable,
- set_fingerprint_row_cb,
- g_object_ref (state_label));
+ set_fingerprint_row_cb, NULL);
g_task_run_in_thread (task, delete_fingerprint_task_func);
}
@@ -495,12 +411,8 @@ finger_combobox_changed (GtkComboBox *combobox, EnrollData *data)
static void
assistant_cancelled (GtkAssistant *ass, EnrollData *data)
{
- GtkWidget *fingerprint_row = data->fingerprint_row;
- GtkLabel *state_label = data->state_label;
- GCancellable *cancellable = data->cancellable;
-
enroll_data_destroy (data);
- set_fingerprint_row (fingerprint_row, state_label, cancellable);
+ cc_fingerprint_manager_update_state (fingerprint_manager);
}
static void
@@ -701,8 +613,6 @@ assistant_prepare (GtkAssistant *ass, GtkWidget *page, EnrollData *data)
static void
enroll_fingerprints (GtkWindow *parent,
- GtkWidget *fingerprint_row,
- GtkLabel *state_label,
ActUser *user,
GCancellable *cancellable)
{
@@ -732,8 +642,6 @@ enroll_fingerprints (GtkWindow *parent,
data = g_new0 (EnrollData, 1);
data->device = device;
data->cancellable = g_object_ref (cancellable);
- data->fingerprint_row = fingerprint_row;
- data->state_label = state_label;
/* Get some details about the device */
result = g_dbus_connection_call_sync (connection,
@@ -834,26 +742,27 @@ enroll_fingerprints (GtkWindow *parent,
void
fingerprint_button_clicked (GtkWindow *parent,
GtkWidget *fingerprint_row,
- GtkLabel *state_label,
- ActUser *user,
GCancellable *cancellable)
{
+ ActUser *user;
bindtextdomain ("fprintd", GNOMELOCALEDIR);
bind_textdomain_codeset ("fprintd", "UTF-8");
- if (is_disable != FALSE) {
- delete_fingerprints_question (parent, fingerprint_row,
- state_label, user, cancellable);
+ g_object_get (fingerprint_manager, "user", &user, NULL);
+
+ if (cc_fingerprint_manager_get_state (fingerprint_manager) == CC_FINGERPRINT_STATE_ENABLED) {
+ delete_fingerprints_question (parent, fingerprint_row, user, cancellable);
} else {
- enroll_fingerprints (parent, fingerprint_row, state_label, user,
- cancellable);
+ enroll_fingerprints (parent, user, cancellable);
}
+
+ g_object_unref (user);
}
void
-fingerprint_set_enabled (gboolean enabled)
+fingerprint_set_manager (CcFingerprintManager *manager)
{
- is_disable = enabled;
+ fingerprint_manager = manager;
}
#pragma GCC diagnostic pop
diff --git a/panels/user-accounts/um-fingerprint-dialog.h b/panels/user-accounts/um-fingerprint-dialog.h
index dea120f7c..1eeb4f8ca 100644
--- a/panels/user-accounts/um-fingerprint-dialog.h
+++ b/panels/user-accounts/um-fingerprint-dialog.h
@@ -20,13 +20,8 @@
#include <gtk/gtk.h>
#include <act/act.h>
-void fingerprint_set_enabled (gboolean enabled);
+void fingerprint_set_manager (CcFingerprintManager *manager);
-void set_fingerprint_row (GtkWidget *fingerprint_row,
- GtkLabel *state_label,
- GCancellable *cancellable);
void fingerprint_button_clicked (GtkWindow *parent,
GtkWidget *fingerprint_row,
- GtkLabel *state_label,
- ActUser *user,
GCancellable *cancellable);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]