Bug Summary

File:capplets/about-me/cafe-about-me-fingerprint.c
Warning:line 99, column 6
Null pointer passed to 1st parameter expecting 'nonnull'

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-pc-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name cafe-about-me-fingerprint.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/capplets/about-me -resource-dir /usr/lib/llvm-16/lib/clang/16 -D HAVE_CONFIG_H -I . -I ../.. -I ../../capplets/common -I /usr/include/ctk-3.0 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib/x86_64-linux-gnu/glib-2.0/include -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/x86_64-linux-gnu -I /usr/include/webp -I /usr/include/gio-unix-2.0 -I /usr/include/atk-1.0 -I /usr/include/at-spi2-atk/2.0 -I /usr/include/at-spi-2.0 -I /usr/include/dbus-1.0 -I /usr/lib/x86_64-linux-gnu/dbus-1.0/include -I /usr/include/libxml2 -I /usr/include/cafe-desktop-2.0 -I /usr/include/startup-notification-1.0 -I /usr/include/dconf -I ../../ -D G_LOG_DOMAIN="about-me-properties" -I /usr/include/dbus-1.0 -I /usr/lib/x86_64-linux-gnu/dbus-1.0/include -I /usr/include/glib-2.0 -I /usr/lib/x86_64-linux-gnu/glib-2.0/include -I /usr/include/polkit-1 -I /usr/include/glib-2.0 -I /usr/lib/x86_64-linux-gnu/glib-2.0/include -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/gio-unix-2.0 -D DATADIR="/usr/share" -D CAFECC_DATA_DIR="/usr/share/cafe-control-center" -D CAFECC_PIXMAP_DIR="/usr/share/cafe-control-center/pixmaps" -D CAFELOCALEDIR="/usr/share/locale" -internal-isystem /usr/lib/llvm-16/lib/clang/16/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdebug-compilation-dir=/rootdir/capplets/about-me -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2024-04-16-091552-112930-1 -x c cafe-about-me-fingerprint.c
1/* cafe-about-me-fingerprint.h
2 * Copyright (C) 2008 Bastien Nocera <hadess@hadess.net>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2, or (at your option)
7 * any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
17 * 02110-1301, USA.
18 */
19
20#include <glib/gi18n.h>
21#include <ctk/ctk.h>
22#include <dbus/dbus-glib-bindings.h>
23
24#include "fingerprint-strings.h"
25#include "capplet-util.h"
26
27/* This must match the number of images on the 2nd page in the UI file */
28#define MAX_ENROLL_STAGES5 5
29
30/* Translate fprintd strings */
31#define TR(s)dgettext("fprintd", s) dgettext("fprintd", s)
32
33static DBusGProxy *manager = NULL((void*)0);
34static DBusGConnection *connection = NULL((void*)0);
35static gboolean is_disable = FALSE(0);
36
37enum {
38 STATE_NONE,
39 STATE_CLAIMED,
40 STATE_ENROLLING
41};
42
43typedef struct {
44 CtkWidget *enable;
45 CtkWidget *disable;
46
47 CtkWidget *ass;
48 CtkBuilder *dialog;
49
50 DBusGProxy *device;
51 gboolean is_swipe;
52 int num_enroll_stages;
53 int num_stages_done;
54 char *name;
55 const char *finger;
56 gint state;
57} EnrollData;
58
59static void create_manager (void)
60{
61 GError *error = NULL((void*)0);
62
63 connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
64 if (connection == NULL((void*)0)) {
65 g_warning ("Failed to connect to session bus: %s", error->message);
66 return;
67 }
68
69 manager = dbus_g_proxy_new_for_name (connection,
70 "net.reactivated.Fprint",
71 "/net/reactivated/Fprint/Manager",
72 "net.reactivated.Fprint.Manager");
73}
74
75static DBusGProxy *
76get_first_device (void)
77{
78 DBusGProxy *device;
79 char *device_str;
80
81 if (!dbus_g_proxy_call (manager, "GetDefaultDevice", NULL((void*)0), G_TYPE_INVALID((GType) ((0) << (2))),
82 DBUS_TYPE_G_OBJECT_PATH(dbus_g_object_path_get_g_type ()), &device_str, G_TYPE_INVALID((GType) ((0) << (2))))) {
83 return NULL((void*)0);
84 }
85
86 device = dbus_g_proxy_new_for_name(connection,
87 "net.reactivated.Fprint",
88 device_str,
89 "net.reactivated.Fprint.Device");
90
91 g_free (device_str);
92
93 return device;
94}
95
96static const char *
97get_reason_for_error (const char *dbus_error)
98{
99 if (g_str_equal (dbus_error, "net.reactivated.Fprint.Error.PermissionDenied")(strcmp ((const char *) (dbus_error), (const char *) ("net.reactivated.Fprint.Error.PermissionDenied"
)) == 0)
)
12
Null pointer passed to 1st parameter expecting 'nonnull'
100 return N_("You are not allowed to access the device. Contact your system administrator.")("You are not allowed to access the device. Contact your system administrator."
)
;
101 if (g_str_equal (dbus_error, "net.reactivated.Fprint.Error.AlreadyInUse")(strcmp ((const char *) (dbus_error), (const char *) ("net.reactivated.Fprint.Error.AlreadyInUse"
)) == 0)
)
102 return N_("The device is already in use.")("The device is already in use.");
103 if (g_str_equal (dbus_error, "net.reactivated.Fprint.Error.Internal")(strcmp ((const char *) (dbus_error), (const char *) ("net.reactivated.Fprint.Error.Internal"
)) == 0)
)
104 return N_("An internal error occurred")("An internal error occurred");
105
106 return NULL((void*)0);
107}
108
109static CtkWidget *
110get_error_dialog (const char *title,
111 const char *dbus_error,
112 CtkWindow *parent)
113{
114 CtkWidget *error_dialog;
115 const char *reason;
116
117 if (dbus_error == NULL((void*)0))
8
Assuming 'dbus_error' is equal to NULL
9
Taking true branch
118 g_warning ("get_error_dialog called with reason == NULL");
119
120 error_dialog =
121 ctk_message_dialog_new (parent,
122 CTK_DIALOG_MODAL,
123 CTK_MESSAGE_ERROR,
124 CTK_BUTTONS_OK,
125 "%s", title);
126 reason = get_reason_for_error (dbus_error);
10
Passing null pointer value via 1st parameter 'dbus_error'
11
Calling 'get_reason_for_error'
127 ctk_message_dialog_format_secondary_text
128 (CTK_MESSAGE_DIALOG (error_dialog)((((CtkMessageDialog*) (void *) g_type_check_instance_cast ((
GTypeInstance*) ((error_dialog)), ((ctk_message_dialog_get_type
()))))))
, "%s", reason ? _(reason)gettext (reason) : _(dbus_error)gettext (dbus_error));
129
130 ctk_window_set_title (CTK_WINDOW (error_dialog)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((error_dialog)), ((ctk_window_get_type ()))))))
, ""); /* as per HIG */
131 ctk_container_set_border_width (CTK_CONTAINER (error_dialog)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((error_dialog)), ((ctk_container_get_type ()))))))
, 5);
132 ctk_dialog_set_default_response (CTK_DIALOG (error_dialog)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((error_dialog)), ((ctk_dialog_get_type ()))))))
,
133 CTK_RESPONSE_OK);
134 ctk_window_set_modal (CTK_WINDOW (error_dialog)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((error_dialog)), ((ctk_window_get_type ()))))))
, TRUE(!(0)));
135 ctk_window_set_position (CTK_WINDOW (error_dialog)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((error_dialog)), ((ctk_window_get_type ()))))))
, CTK_WIN_POS_CENTER_ON_PARENT);
136
137 return error_dialog;
138}
139
140void
141set_fingerprint_label (CtkWidget *enable, CtkWidget *disable)
142{
143 char **fingers;
144 DBusGProxy *device;
145 GError *error = NULL((void*)0);
146
147 ctk_widget_set_no_show_all (enable, TRUE(!(0)));
148 ctk_widget_set_no_show_all (disable, TRUE(!(0)));
149
150 if (manager == NULL((void*)0)) {
151 create_manager ();
152 if (manager == NULL((void*)0)) {
153 ctk_widget_hide (enable);
154 ctk_widget_hide (disable);
155 return;
156 }
157 }
158
159 device = get_first_device ();
160 if (device == NULL((void*)0)) {
161 ctk_widget_hide (enable);
162 ctk_widget_hide (disable);
163 return;
164 }
165
166 if (!dbus_g_proxy_call (device, "ListEnrolledFingers", &error, G_TYPE_STRING((GType) ((16) << (2))), "", G_TYPE_INVALID((GType) ((0) << (2))),
167 G_TYPE_STRV(g_strv_get_type ()), &fingers, G_TYPE_INVALID((GType) ((0) << (2))))) {
168 if (dbus_g_error_has_name (error, "net.reactivated.Fprint.Error.NoEnrolledPrints") == FALSE(0)) {
169 ctk_widget_hide (enable);
170 ctk_widget_hide (disable);
171 g_object_unref (device);
172 return;
173 }
174 fingers = NULL((void*)0);
175 }
176
177 if (fingers == NULL((void*)0) || g_strv_length (fingers) == 0) {
178 ctk_widget_hide (disable);
179 ctk_widget_show (enable);
180 is_disable = FALSE(0);
181 } else {
182 ctk_widget_hide (enable);
183 ctk_widget_show (disable);
184 is_disable = TRUE(!(0));
185 }
186
187 g_strfreev (fingers);
188 g_object_unref (device);
189}
190
191static void
192delete_fingerprints (void)
193{
194 DBusGProxy *device;
195
196 if (manager == NULL((void*)0)) {
197 create_manager ();
198 if (manager == NULL((void*)0))
199 return;
200 }
201
202 device = get_first_device ();
203 if (device == NULL((void*)0))
204 return;
205
206 dbus_g_proxy_call (device, "DeleteEnrolledFingers", NULL((void*)0), G_TYPE_STRING((GType) ((16) << (2))), "", G_TYPE_INVALID((GType) ((0) << (2))), G_TYPE_INVALID((GType) ((0) << (2))));
207
208 g_object_unref (device);
209}
210
211static void
212delete_fingerprints_question (CtkBuilder *dialog, CtkWidget *enable, CtkWidget *disable)
213{
214 CtkWidget *question;
215 CtkWidget *button;
216
217 question = ctk_message_dialog_new (CTK_WINDOW (WID ("about-me-dialog"))((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "about-me-dialog"))), ((
ctk_widget_get_type ())))))))), ((ctk_window_get_type ())))))
)
,
218 CTK_DIALOG_MODAL,
219 CTK_MESSAGE_QUESTION,
220 CTK_BUTTONS_NONE,
221 _("Delete registered fingerprints?")gettext ("Delete registered fingerprints?"));
222 ctk_dialog_add_button (CTK_DIALOG (question)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((question)), ((ctk_dialog_get_type ()))))))
, "ctk-cancel", CTK_RESPONSE_CANCEL);
223
224 button = ctk_button_new_with_mnemonic (_("_Delete Fingerprints")gettext ("_Delete Fingerprints"));
225 ctk_button_set_image (CTK_BUTTON (button)((((CtkButton*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((button)), ((ctk_button_get_type ()))))))
, ctk_image_new_from_icon_name ("edit-delete", CTK_ICON_SIZE_BUTTON));
226 ctk_widget_set_can_default (button, TRUE(!(0)));
227 ctk_widget_show (button);
228 ctk_dialog_add_action_widget (CTK_DIALOG (question)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((question)), ((ctk_dialog_get_type ()))))))
, button, CTK_RESPONSE_OK);
229
230 ctk_message_dialog_format_secondary_text (CTK_MESSAGE_DIALOG (question)((((CtkMessageDialog*) (void *) g_type_check_instance_cast ((
GTypeInstance*) ((question)), ((ctk_message_dialog_get_type (
)))))))
,
231 _("Do you want to delete your registered fingerprints so fingerprint login is disabled?")gettext ("Do you want to delete your registered fingerprints so fingerprint login is disabled?"
)
);
232 ctk_container_set_border_width (CTK_CONTAINER (question)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((question)), ((ctk_container_get_type ()))))))
, 5);
233 ctk_dialog_set_default_response (CTK_DIALOG (question)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((question)), ((ctk_dialog_get_type ()))))))
, CTK_RESPONSE_OK);
234 ctk_window_set_position (CTK_WINDOW (question)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((question)), ((ctk_window_get_type ()))))))
, CTK_WIN_POS_CENTER_ON_PARENT);
235 ctk_window_set_modal (CTK_WINDOW (question)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((question)), ((ctk_window_get_type ()))))))
, TRUE(!(0)));
236
237 if (ctk_dialog_run (CTK_DIALOG (question)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((question)), ((ctk_dialog_get_type ()))))))
) == CTK_RESPONSE_OK) {
238 delete_fingerprints ();
239 set_fingerprint_label (enable, disable);
240 }
241
242 ctk_widget_destroy (question);
243}
244
245static void
246enroll_data_destroy (EnrollData *data)
247{
248 switch (data->state) {
249 case STATE_ENROLLING:
250 dbus_g_proxy_call(data->device, "EnrollStop", NULL((void*)0), G_TYPE_INVALID((GType) ((0) << (2))), G_TYPE_INVALID((GType) ((0) << (2))));
251 /* fall-through */
252 case STATE_CLAIMED:
253 dbus_g_proxy_call(data->device, "Release", NULL((void*)0), G_TYPE_INVALID((GType) ((0) << (2))), G_TYPE_INVALID((GType) ((0) << (2))));
254 /* fall-through */
255 case STATE_NONE:
256 g_free (data->name);
257 g_object_unref (data->device);
258 g_object_unref (data->dialog);
259 ctk_widget_destroy (data->ass);
260
261 g_free (data);
262 }
263}
264
265static const char *
266selected_finger (CtkBuilder *dialog)
267{
268 int index;
269
270 if (ctk_toggle_button_get_active (CTK_TOGGLE_BUTTON (WID ("radiobutton1"))((((CtkToggleButton*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "radiobutton1"))), ((ctk_widget_get_type
())))))))), ((ctk_toggle_button_get_type ()))))))
)) {
271 ctk_widget_set_sensitive (WID ("finger_combobox")((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "finger_combobox"))), ((
ctk_widget_get_type ()))))))
, FALSE(0));
272 return "right-index-finger";
273 }
274 if (ctk_toggle_button_get_active (CTK_TOGGLE_BUTTON (WID ("radiobutton2"))((((CtkToggleButton*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "radiobutton2"))), ((ctk_widget_get_type
())))))))), ((ctk_toggle_button_get_type ()))))))
)) {
275 ctk_widget_set_sensitive (WID ("finger_combobox")((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "finger_combobox"))), ((
ctk_widget_get_type ()))))))
, FALSE(0));
276 return "left-index-finger";
277 }
278 ctk_widget_set_sensitive (WID ("finger_combobox")((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "finger_combobox"))), ((
ctk_widget_get_type ()))))))
, TRUE(!(0)));
279 index = ctk_combo_box_get_active (CTK_COMBO_BOX (WID ("finger_combobox"))((((CtkComboBox*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "finger_combobox"))), ((
ctk_widget_get_type ())))))))), ((ctk_combo_box_get_type ()))
))))
);
280 switch (index) {
281 case 0:
282 return "left-thumb";
283 case 1:
284 return "left-middle-finger";
285 case 2:
286 return "left-ring-finger";
287 case 3:
288 return "left-little-finger";
289 case 4:
290 return "right-thumb";
291 case 5:
292 return "right-middle-finger";
293 case 6:
294 return "right-ring-finger";
295 case 7:
296 return "right-little-finger";
297 default:
298 g_assert_not_reached ()do { g_assertion_message_expr ("about-me-properties", "cafe-about-me-fingerprint.c"
, 298, ((const char*) (__func__)), ((void*)0)); } while (0)
;
299 }
300
301 return NULL((void*)0);
302}
303
304static void
305finger_radio_button_toggled (CtkToggleButton *button, EnrollData *data)
306{
307 CtkBuilder *dialog = data->dialog;
308 char *msg;
309
310 data->finger = selected_finger (data->dialog);
311
312 msg = g_strdup_printf (TR(finger_str_to_msg (data->finger, data->is_swipe))dgettext("fprintd", finger_str_to_msg (data->finger, data->
is_swipe))
, data->name);
313 ctk_label_set_text (CTK_LABEL (WID("enroll-label"))((((CtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "enroll-label"))), ((ctk_widget_get_type
())))))))), ((ctk_label_get_type ()))))))
, msg);
314 g_free (msg);
315}
316
317static void
318finger_combobox_changed (CtkComboBox *combobox, EnrollData *data)
319{
320 CtkBuilder *dialog = data->dialog;
321 char *msg;
322
323 data->finger = selected_finger (data->dialog);
324
325 msg = g_strdup_printf (TR(finger_str_to_msg (data->finger, data->is_swipe))dgettext("fprintd", finger_str_to_msg (data->finger, data->
is_swipe))
, data->name);
326 ctk_label_set_text (CTK_LABEL (WID("enroll-label"))((((CtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "enroll-label"))), ((ctk_widget_get_type
())))))))), ((ctk_label_get_type ()))))))
, msg);
327 g_free (msg);
328}
329
330static void
331assistant_cancelled (CtkAssistant *ass, EnrollData *data)
332{
333 CtkWidget *enable, *disable;
334
335 enable = data->enable;
336 disable = data->disable;
337
338 enroll_data_destroy (data);
339 set_fingerprint_label (enable, disable);
340}
341
342static void
343enroll_result (GObject *object, const char *result, gboolean done, EnrollData *data)
344{
345 CtkBuilder *dialog = data->dialog;
346 char *msg;
347
348 if (g_str_equal (result, "enroll-completed")(strcmp ((const char *) (result), (const char *) ("enroll-completed"
)) == 0)
|| g_str_equal (result, "enroll-stage-passed")(strcmp ((const char *) (result), (const char *) ("enroll-stage-passed"
)) == 0)
) {
349 char *name, *path;
350
351 data->num_stages_done++;
352 name = g_strdup_printf ("image%d", data->num_stages_done);
353 path = g_build_filename (CAFECC_PIXMAP_DIR"/usr/share/cafe-control-center/pixmaps", "print_ok.png", NULL((void*)0));
354 ctk_image_set_from_file (CTK_IMAGE (WID (name))((((CtkImage*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, name))), ((ctk_widget_get_type
())))))))), ((ctk_image_get_type ()))))))
, path);
355 g_free (name);
356 g_free (path);
357 }
358 if (g_str_equal (result, "enroll-completed")(strcmp ((const char *) (result), (const char *) ("enroll-completed"
)) == 0)
) {
359 ctk_label_set_text (CTK_LABEL (WID ("status-label"))((((CtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "status-label"))), ((ctk_widget_get_type
())))))))), ((ctk_label_get_type ()))))))
, _("Done!")gettext ("Done!"));
360 ctk_assistant_set_page_complete (CTK_ASSISTANT (data->ass)((((CtkAssistant*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((data->ass)), ((ctk_assistant_get_type ()))))))
, WID ("page2")((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "page2"))), ((ctk_widget_get_type
()))))))
, TRUE(!(0)));
361 }
362
363 if (done != FALSE(0)) {
364 dbus_g_proxy_call(data->device, "EnrollStop", NULL((void*)0), G_TYPE_INVALID((GType) ((0) << (2))), G_TYPE_INVALID((GType) ((0) << (2))));
365 data->state = STATE_CLAIMED;
366 if (g_str_equal (result, "enroll-completed")(strcmp ((const char *) (result), (const char *) ("enroll-completed"
)) == 0)
== FALSE(0)) {
367 /* The enrollment failed, restart it */
368 dbus_g_proxy_call(data->device, "EnrollStart", NULL((void*)0), G_TYPE_STRING((GType) ((16) << (2))), data->finger, G_TYPE_INVALID((GType) ((0) << (2))), G_TYPE_INVALID((GType) ((0) << (2))));
369 data->state = STATE_ENROLLING;
370 result = "enroll-retry-scan";
371 } else {
372 return;
373 }
374 }
375
376 msg = g_strdup_printf (TR(enroll_result_str_to_msg (result, data->is_swipe))dgettext("fprintd", enroll_result_str_to_msg (result, data->
is_swipe))
, data->name);
377 ctk_label_set_text (CTK_LABEL (WID ("status-label"))((((CtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "status-label"))), ((ctk_widget_get_type
())))))))), ((ctk_label_get_type ()))))))
, msg);
378 g_free (msg);
379}
380
381static void
382assistant_prepare (CtkAssistant *ass, CtkWidget *page, EnrollData *data)
383{
384 const char *name;
385
386 name = g_object_get_data (G_OBJECT (page)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((page)), (((GType) ((20) << (2))))))))
, "name");
387 if (name == NULL((void*)0))
1
Assuming 'name' is not equal to NULL
2
Taking false branch
388 return;
389
390 if (g_str_equal (name, "enroll")(strcmp ((const char *) (name), (const char *) ("enroll")) ==
0)
) {
3
Taking true branch
391 DBusGProxy *p;
392 GError *error = NULL((void*)0);
393 CtkBuilder *dialog = data->dialog;
394 char *path;
395 guint i;
396 GValue value = { 0, };
397
398 if (!dbus_g_proxy_call (data->device, "Claim", &error, G_TYPE_STRING((GType) ((16) << (2))), "", G_TYPE_INVALID((GType) ((0) << (2))), G_TYPE_INVALID((GType) ((0) << (2))))) {
4
Assuming the condition is true
5
Taking true branch
399 CtkWidget *d;
400 char *msg;
401
402 /* translators:
403 * The variable is the name of the device, for example:
404 * "Could you not access "Digital Persona U.are.U 4000/4000B" device */
405 msg = g_strdup_printf (_("Could not access '%s' device")gettext ("Could not access '%s' device"), data->name);
406 d = get_error_dialog (msg, dbus_g_error_get_name (error), CTK_WINDOW (data->ass)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((data->ass)), ((ctk_window_get_type ()))))))
)
;
6
Passing value via 2nd parameter 'dbus_error'
7
Calling 'get_error_dialog'
407 g_error_free (error);
408 ctk_dialog_run (CTK_DIALOG (d)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((d)), ((ctk_dialog_get_type ()))))))
);
409 ctk_widget_destroy (d);
410 g_free (msg);
411
412 enroll_data_destroy (data);
413
414 return;
415 }
416 data->state = STATE_CLAIMED;
417
418 p = dbus_g_proxy_new_from_proxy (data->device, "org.freedesktop.DBus.Properties", NULL((void*)0));
419 if (!dbus_g_proxy_call (p, "Get", NULL((void*)0), G_TYPE_STRING((GType) ((16) << (2))), "net.reactivated.Fprint.Device", G_TYPE_STRING((GType) ((16) << (2))), "num-enroll-stages", G_TYPE_INVALID((GType) ((0) << (2))),
420 G_TYPE_VALUE(g_value_get_type ()), &value, G_TYPE_INVALID((GType) ((0) << (2)))) || g_value_get_int (&value) < 1) {
421 CtkWidget *d;
422 char *msg;
423
424 /* translators:
425 * The variable is the name of the device, for example:
426 * "Could you not access "Digital Persona U.are.U 4000/4000B" device */
427 msg = g_strdup_printf (_("Could not access '%s' device")gettext ("Could not access '%s' device"), data->name);
428 d = get_error_dialog (msg, "net.reactivated.Fprint.Error.Internal", CTK_WINDOW (data->ass)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((data->ass)), ((ctk_window_get_type ()))))))
);
429 ctk_dialog_run (CTK_DIALOG (d)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((d)), ((ctk_dialog_get_type ()))))))
);
430 ctk_widget_destroy (d);
431 g_free (msg);
432
433 enroll_data_destroy (data);
434
435 g_object_unref (p);
436 return;
437 }
438 g_object_unref (p);
439
440 data->num_enroll_stages = g_value_get_int (&value);
441
442 /* Hide the extra "bulbs" if not needed */
443 for (i = MAX_ENROLL_STAGES5; i > data->num_enroll_stages; i--) {
444 char *name;
445
446 name = g_strdup_printf ("image%d", i);
447 ctk_widget_hide (WID (name)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, name))), ((ctk_widget_get_type
()))))))
);
448 g_free (name);
449 }
450 /* And set the right image */
451 {
452 char *filename;
453
454 filename = g_strdup_printf ("%s.png", data->finger);
455 path = g_build_filename (CAFECC_PIXMAP_DIR"/usr/share/cafe-control-center/pixmaps", filename, NULL((void*)0));
456 g_free (filename);
457 }
458 for (i = 1; i <= data->num_enroll_stages; i++) {
459 char *name;
460 name = g_strdup_printf ("image%d", i);
461 ctk_image_set_from_file (CTK_IMAGE (WID (name))((((CtkImage*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, name))), ((ctk_widget_get_type
())))))))), ((ctk_image_get_type ()))))))
, path);
462 g_free (name);
463 }
464 g_free (path);
465
466 dbus_g_proxy_add_signal(data->device, "EnrollStatus", G_TYPE_STRING((GType) ((16) << (2))), G_TYPE_BOOLEAN((GType) ((5) << (2))), NULL((void*)0));
467 dbus_g_proxy_connect_signal(data->device, "EnrollStatus", G_CALLBACK(enroll_result)((GCallback) (enroll_result)), data, NULL((void*)0));
468
469 if (!dbus_g_proxy_call(data->device, "EnrollStart", &error, G_TYPE_STRING((GType) ((16) << (2))), data->finger, G_TYPE_INVALID((GType) ((0) << (2))), G_TYPE_INVALID((GType) ((0) << (2))))) {
470 CtkWidget *d;
471 char *msg;
472
473 /* translators:
474 * The variable is the name of the device, for example:
475 * "Could you not access "Digital Persona U.are.U 4000/4000B" device */
476 msg = g_strdup_printf (_("Could not start finger capture on '%s' device")gettext ("Could not start finger capture on '%s' device"), data->name);
477 d = get_error_dialog (msg, dbus_g_error_get_name (error), CTK_WINDOW (data->ass)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((data->ass)), ((ctk_window_get_type ()))))))
);
478 g_error_free (error);
479 ctk_dialog_run (CTK_DIALOG (d)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((d)), ((ctk_dialog_get_type ()))))))
);
480 ctk_widget_destroy (d);
481 g_free (msg);
482
483 enroll_data_destroy (data);
484
485 return;
486 }
487 data->state = STATE_ENROLLING;;
488 } else {
489 if (data->state == STATE_ENROLLING) {
490 dbus_g_proxy_call(data->device, "EnrollStop", NULL((void*)0), G_TYPE_INVALID((GType) ((0) << (2))), G_TYPE_INVALID((GType) ((0) << (2))));
491 data->state = STATE_CLAIMED;
492 }
493 if (data->state == STATE_CLAIMED) {
494 dbus_g_proxy_call(data->device, "Release", NULL((void*)0), G_TYPE_INVALID((GType) ((0) << (2))), G_TYPE_INVALID((GType) ((0) << (2))));
495 data->state = STATE_NONE;
496 }
497 }
498}
499
500static void
501enroll_fingerprints (CtkWindow *parent, CtkWidget *enable, CtkWidget *disable)
502{
503 DBusGProxy *device, *p;
504 GHashTable *props;
505 CtkBuilder *dialog;
506 EnrollData *data;
507 CtkWidget *ass;
508 char *msg;
509 GError *error = NULL((void*)0);
510
511 device = NULL((void*)0);
512
513 if (manager == NULL((void*)0)) {
514 create_manager ();
515 if (manager != NULL((void*)0))
516 device = get_first_device ();
517 } else {
518 device = get_first_device ();
519 }
520
521 if (manager == NULL((void*)0) || device == NULL((void*)0)) {
522 CtkWidget *d;
523
524 d = get_error_dialog (_("Could not access any fingerprint readers")gettext ("Could not access any fingerprint readers"),
525 _("Please contact your system administrator for help.")gettext ("Please contact your system administrator for help."
)
,
526 parent);
527 ctk_dialog_run (CTK_DIALOG (d)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((d)), ((ctk_dialog_get_type ()))))))
);
528 ctk_widget_destroy (d);
529 return;
530 }
531
532 data = g_new0 (EnrollData, 1)((EnrollData *) g_malloc0_n ((1), sizeof (EnrollData)));
533 data->device = device;
534 data->enable = enable;
535 data->disable = disable;
536
537 /* Get some details about the device */
538 p = dbus_g_proxy_new_from_proxy (device, "org.freedesktop.DBus.Properties", NULL((void*)0));
539 if (dbus_g_proxy_call (p, "GetAll", NULL((void*)0), G_TYPE_STRING((GType) ((16) << (2))), "net.reactivated.Fprint.Device", G_TYPE_INVALID((GType) ((0) << (2))),
540 dbus_g_type_get_map ("GHashTable", G_TYPE_STRING((GType) ((16) << (2))), G_TYPE_VALUE(g_value_get_type ())), &props, G_TYPE_INVALID((GType) ((0) << (2))))) {
541 const char *scan_type;
542 data->name = g_value_dup_string (g_hash_table_lookup (props, "name"));
543 scan_type = g_value_dup_string (g_hash_table_lookup (props, "scan-type"));
544 if (g_str_equal (scan_type, "swipe")(strcmp ((const char *) (scan_type), (const char *) ("swipe")
) == 0)
)
545 data->is_swipe = TRUE(!(0));
546 g_hash_table_destroy (props);
547 }
548 g_object_unref (p);
549
550 dialog = ctk_builder_new ();
551 if (ctk_builder_add_from_resource (dialog, "/org/cafe/ccc/am/cafe-about-me-fingerprint.ui", &error) == 0)
552 {
553 g_warning ("Could not parse UI definition: %s", error->message);
554 g_error_free (error);
555 }
556 data->dialog = dialog;
557
558 ass = WID ("assistant")((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "assistant"))), ((ctk_widget_get_type
()))))))
;
559 ctk_window_set_title (CTK_WINDOW (ass)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ass)), ((ctk_window_get_type ()))))))
, _("Enable Fingerprint Login")gettext ("Enable Fingerprint Login"));
560 ctk_window_set_transient_for (CTK_WINDOW (ass)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ass)), ((ctk_window_get_type ()))))))
, parent);
561 ctk_window_set_position (CTK_WINDOW (ass)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ass)), ((ctk_window_get_type ()))))))
, CTK_WIN_POS_CENTER_ON_PARENT);
562 g_signal_connect (G_OBJECT (ass), "cancel",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((ass)), (((GType) ((20) << (2))))))
))), ("cancel"), (((GCallback) (assistant_cancelled))), (data
), ((void*)0), (GConnectFlags) 0)
563 G_CALLBACK (assistant_cancelled), data)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((ass)), (((GType) ((20) << (2))))))
))), ("cancel"), (((GCallback) (assistant_cancelled))), (data
), ((void*)0), (GConnectFlags) 0)
;
564 g_signal_connect (G_OBJECT (ass), "close",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((ass)), (((GType) ((20) << (2))))))
))), ("close"), (((GCallback) (assistant_cancelled))), (data)
, ((void*)0), (GConnectFlags) 0)
565 G_CALLBACK (assistant_cancelled), data)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((ass)), (((GType) ((20) << (2))))))
))), ("close"), (((GCallback) (assistant_cancelled))), (data)
, ((void*)0), (GConnectFlags) 0)
;
566 g_signal_connect (G_OBJECT (ass), "prepare",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((ass)), (((GType) ((20) << (2))))))
))), ("prepare"), (((GCallback) (assistant_prepare))), (data)
, ((void*)0), (GConnectFlags) 0)
567 G_CALLBACK (assistant_prepare), data)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((ass)), (((GType) ((20) << (2))))))
))), ("prepare"), (((GCallback) (assistant_prepare))), (data)
, ((void*)0), (GConnectFlags) 0)
;
568
569 /* Page 1 */
570 ctk_combo_box_set_active (CTK_COMBO_BOX (WID ("finger_combobox"))((((CtkComboBox*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "finger_combobox"))), ((
ctk_widget_get_type ())))))))), ((ctk_combo_box_get_type ()))
))))
, 0);
571
572 g_signal_connect (G_OBJECT (WID ("radiobutton1")), "toggled",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((((((CtkWidget*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((ctk_builder_get_object (dialog, "radiobutton1"
))), ((ctk_widget_get_type ())))))))), (((GType) ((20) <<
(2))))))))), ("toggled"), (((GCallback) (finger_radio_button_toggled
))), (data), ((void*)0), (GConnectFlags) 0)
573 G_CALLBACK (finger_radio_button_toggled), data)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((((((CtkWidget*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((ctk_builder_get_object (dialog, "radiobutton1"
))), ((ctk_widget_get_type ())))))))), (((GType) ((20) <<
(2))))))))), ("toggled"), (((GCallback) (finger_radio_button_toggled
))), (data), ((void*)0), (GConnectFlags) 0)
;
574 g_signal_connect (G_OBJECT (WID ("radiobutton2")), "toggled",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((((((CtkWidget*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((ctk_builder_get_object (dialog, "radiobutton2"
))), ((ctk_widget_get_type ())))))))), (((GType) ((20) <<
(2))))))))), ("toggled"), (((GCallback) (finger_radio_button_toggled
))), (data), ((void*)0), (GConnectFlags) 0)
575 G_CALLBACK (finger_radio_button_toggled), data)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((((((CtkWidget*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((ctk_builder_get_object (dialog, "radiobutton2"
))), ((ctk_widget_get_type ())))))))), (((GType) ((20) <<
(2))))))))), ("toggled"), (((GCallback) (finger_radio_button_toggled
))), (data), ((void*)0), (GConnectFlags) 0)
;
576 g_signal_connect (G_OBJECT (WID ("radiobutton3")), "toggled",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((((((CtkWidget*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((ctk_builder_get_object (dialog, "radiobutton3"
))), ((ctk_widget_get_type ())))))))), (((GType) ((20) <<
(2))))))))), ("toggled"), (((GCallback) (finger_radio_button_toggled
))), (data), ((void*)0), (GConnectFlags) 0)
577 G_CALLBACK (finger_radio_button_toggled), data)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((((((CtkWidget*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((ctk_builder_get_object (dialog, "radiobutton3"
))), ((ctk_widget_get_type ())))))))), (((GType) ((20) <<
(2))))))))), ("toggled"), (((GCallback) (finger_radio_button_toggled
))), (data), ((void*)0), (GConnectFlags) 0)
;
578 g_signal_connect (G_OBJECT (WID ("finger_combobox")), "changed",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((((((CtkWidget*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((ctk_builder_get_object (dialog, "finger_combobox"
))), ((ctk_widget_get_type ())))))))), (((GType) ((20) <<
(2))))))))), ("changed"), (((GCallback) (finger_combobox_changed
))), (data), ((void*)0), (GConnectFlags) 0)
579 G_CALLBACK (finger_combobox_changed), data)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((((((CtkWidget*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((ctk_builder_get_object (dialog, "finger_combobox"
))), ((ctk_widget_get_type ())))))))), (((GType) ((20) <<
(2))))))))), ("changed"), (((GCallback) (finger_combobox_changed
))), (data), ((void*)0), (GConnectFlags) 0)
;
580
581 data->finger = selected_finger (dialog);
582
583 g_object_set_data (G_OBJECT (WID("page1"))((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "page1"))), ((ctk_widget_get_type
())))))))), (((GType) ((20) << (2))))))))
, "name", "intro");
584
585 /* translators:
586 * The variable is the name of the device, for example:
587 * "To enable fingerprint login, you need to save one of your fingerprints, using the
588 * 'Digital Persona U.are.U 4000/4000B' device." */
589 msg = g_strdup_printf (_("To enable fingerprint login, you need to save one of your fingerprints, using the '%s' device.")gettext ("To enable fingerprint login, you need to save one of your fingerprints, using the '%s' device."
)
,
590 data->name);
591 ctk_label_set_text (CTK_LABEL (WID("intro-label"))((((CtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "intro-label"))), ((ctk_widget_get_type
())))))))), ((ctk_label_get_type ()))))))
, msg);
592 g_free (msg);
593
594 ctk_assistant_set_page_complete (CTK_ASSISTANT (ass)((((CtkAssistant*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ass)), ((ctk_assistant_get_type ()))))))
, WID("page1")((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "page1"))), ((ctk_widget_get_type
()))))))
, TRUE(!(0)));
595
596 /* Page 2 */
597 if (data->is_swipe != FALSE(0))
598 ctk_assistant_set_page_title (CTK_ASSISTANT (ass)((((CtkAssistant*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ass)), ((ctk_assistant_get_type ()))))))
, WID("page2")((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "page2"))), ((ctk_widget_get_type
()))))))
, _("Swipe finger on reader")gettext ("Swipe finger on reader"));
599 else
600 ctk_assistant_set_page_title (CTK_ASSISTANT (ass)((((CtkAssistant*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ass)), ((ctk_assistant_get_type ()))))))
, WID("page2")((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "page2"))), ((ctk_widget_get_type
()))))))
, _("Place finger on reader")gettext ("Place finger on reader"));
601
602 g_object_set_data (G_OBJECT (WID("page2"))((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "page2"))), ((ctk_widget_get_type
())))))))), (((GType) ((20) << (2))))))))
, "name", "enroll");
603
604 msg = g_strdup_printf (TR(finger_str_to_msg (data->finger, data->is_swipe))dgettext("fprintd", finger_str_to_msg (data->finger, data->
is_swipe))
, data->name);
605 ctk_label_set_text (CTK_LABEL (WID("enroll-label"))((((CtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "enroll-label"))), ((ctk_widget_get_type
())))))))), ((ctk_label_get_type ()))))))
, msg);
606 g_free (msg);
607
608 /* Page 3 */
609 g_object_set_data (G_OBJECT (WID("page3"))((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "page3"))), ((ctk_widget_get_type
())))))))), (((GType) ((20) << (2))))))))
, "name", "summary");
610
611 data->ass = ass;
612 ctk_widget_show_all (ass);
613}
614
615void
616fingerprint_button_clicked (CtkBuilder *dialog,
617 CtkWidget *enable,
618 CtkWidget *disable)
619{
620 bindtextdomain ("fprintd", CAFELOCALEDIR"/usr/share/locale");
621 bind_textdomain_codeset ("fprintd", "UTF-8");
622
623 if (is_disable != FALSE(0)) {
624 delete_fingerprints_question (dialog, enable, disable);
625 } else {
626 enroll_fingerprints (CTK_WINDOW (WID ("about-me-dialog"))((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_builder_get_object (dialog, "about-me-dialog"))), ((
ctk_widget_get_type ())))))))), ((ctk_window_get_type ())))))
)
, enable, disable);
627 }
628}
629