user-accounts: Use GtkTemplate

Switch from GtkBuilder to using GtkTemplate.
Rename .[ch] and .ui files to standard names.
Rename widget IDs to be more readable.
Drop widget IDs that are not used.
Move code into the .ui file that can be.
Connect signals in swapped form.
This commit is contained in:
Robert Ancell 2018-10-16 11:23:40 +13:00 committed by Ondrej Holy
parent aa073b1e4b
commit ec529e8566
9 changed files with 763 additions and 784 deletions

View file

@ -20,7 +20,7 @@
#include "config.h"
#include "um-user-panel.h"
#include "cc-user-panel.h"
#include <stdlib.h>
#include <string.h>
@ -62,14 +62,39 @@ struct _CcUserPanel {
ActUserManager *um;
GCancellable *cancellable;
GtkBuilder *builder;
GtkWidget *notification;
GSettings *login_screen_settings;
GtkWidget *headerbar_buttons;
GtkWidget *stack;
GtkWidget *main_box;
UmCarousel *carousel;
GtkBox *accounts_box;
GtkRadioButton *account_type_admin_button;
GtkBox *account_type_box;
GtkLabel *account_type_label;
GtkRadioButton *account_type_standard_button;
GtkButton *add_user_button;
GtkBox *autologin_box;
GtkLabel *autologin_label;
GtkSwitch *autologin_switch;
UmCarousel *carousel;
GtkButton *fingerprint_button;
GtkLabel *fingerprint_label;
GtkEntry *full_name_entry;
GtkStack *headerbar_button_stack;
GtkButton *language_button;
GtkLabel *language_button_label;
GtkLabel *language_label;
GtkButton *last_login_button;
GtkLabel *last_login_button_label;
GtkLabel *last_login_label;
GtkLockButton *lock_button;
GtkRevealer *notification_revealer;
GtkButton *password_button;
GtkLabel *password_button_label;
GtkButton *remove_user_button;
GtkStack *stack;
GtkToggleButton *user_icon_button;
UmUserImage *user_icon_image;
UmUserImage *user_icon_image2;
GtkStack *user_icon_stack;
ActUser *selected_user;
GPermission *permission;
CcLanguageChooser *language_chooser;
@ -85,12 +110,6 @@ struct _CcUserPanel {
CC_PANEL_REGISTER (CcUserPanel, cc_user_panel)
static GtkWidget *
get_widget (CcUserPanel *self, const char *name)
{
return (GtkWidget *)gtk_builder_get_object (self->builder, name);
}
/* Headerbar button states. */
#define PAGE_LOCK "_lock"
#define PAGE_ADDUSER "_adduser"
@ -124,7 +143,7 @@ show_error_dialog (CcUserPanel *self,
{
GtkWidget *dialog;
dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (self->main_box)),
dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))),
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_USE_HEADER_BAR,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
@ -161,7 +180,7 @@ get_real_or_user_name (ActUser *user)
static void show_user (ActUser *user, CcUserPanel *self);
static void
set_selected_user (UmCarousel *carousel, UmCarouselItem *item, CcUserPanel *self)
set_selected_user (CcUserPanel *self, UmCarouselItem *item)
{
uid_t uid;
@ -238,7 +257,7 @@ user_added (CcUserPanel *self, ActUser *user)
show_carousel = (self->other_accounts > 0);
gtk_revealer_set_reveal_child (GTK_REVEALER (self->carousel), show_carousel);
gtk_stack_set_visible_child_name (GTK_STACK (self->stack), PAGE_USERS);
gtk_stack_set_visible_child_name (self->stack, PAGE_USERS);
}
static gint
@ -300,7 +319,7 @@ reload_users (CcUserPanel *self, ActUser *selected_user)
g_slist_free (list);
if (um_carousel_get_item_count (self->carousel) == 0)
gtk_stack_set_visible_child_name (GTK_STACK (self->stack), PAGE_NO_USERS);
gtk_stack_set_visible_child_name (self->stack, PAGE_NO_USERS);
if (self->other_accounts == 0)
gtk_revealer_set_reveal_child (GTK_REVEALER (self->carousel), FALSE);
@ -358,10 +377,10 @@ select_created_user (GObject *object,
}
static void
add_user (GtkButton *button, CcUserPanel *self)
add_user (CcUserPanel *self)
{
self->account_dialog = um_account_dialog_new ();
um_account_dialog_show (self->account_dialog, GTK_WINDOW (gtk_widget_get_toplevel (self->main_box)),
um_account_dialog_show (self->account_dialog, GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))),
self->permission, select_created_user, self);
}
@ -583,7 +602,7 @@ delete_enterprise_user_response (GtkWidget *dialog,
}
static void
delete_user (GtkButton *button, CcUserPanel *self)
delete_user (CcUserPanel *self)
{
ActUser *user;
GtkWidget *dialog;
@ -593,7 +612,7 @@ delete_user (GtkButton *button, CcUserPanel *self)
return;
}
else if (act_user_get_uid (user) == getuid ()) {
dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (self->main_box)),
dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))),
0,
GTK_MESSAGE_INFO,
GTK_BUTTONS_CLOSE,
@ -602,7 +621,7 @@ delete_user (GtkButton *button, CcUserPanel *self)
G_CALLBACK (gtk_widget_destroy), NULL);
}
else if (act_user_is_logged_in_anywhere (user)) {
dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (self->main_box)),
dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))),
0,
GTK_MESSAGE_INFO,
GTK_BUTTONS_CLOSE,
@ -615,7 +634,7 @@ delete_user (GtkButton *button, CcUserPanel *self)
G_CALLBACK (gtk_widget_destroy), NULL);
}
else if (act_user_is_local_account (user)) {
dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (self->main_box)),
dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))),
0,
GTK_MESSAGE_QUESTION,
GTK_BUTTONS_NONE,
@ -637,7 +656,7 @@ delete_user (GtkButton *button, CcUserPanel *self)
G_CALLBACK (delete_user_response), self);
}
else {
dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (self->main_box)),
dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))),
0,
GTK_MESSAGE_QUESTION,
GTK_BUTTONS_NONE,
@ -717,14 +736,12 @@ get_password_mode_text (ActUser *user)
}
static void
autologin_changed (GObject *object,
GParamSpec *pspec,
CcUserPanel *self)
autologin_changed (CcUserPanel *self)
{
gboolean active;
ActUser *user;
active = gtk_switch_get_active (GTK_SWITCH (object));
active = gtk_switch_get_active (self->autologin_switch);
user = get_selected_user (self);
if (active != act_user_get_automatic_login (user)) {
@ -789,51 +806,43 @@ get_autologin_possible (ActUser *user)
return !(locked || set_password_at_login);
}
static void on_permission_changed (GPermission *permission, GParamSpec *pspec, gpointer data);
static void on_permission_changed (CcUserPanel *self);
static void
show_user (ActUser *user, CcUserPanel *self)
{
GtkWidget *image;
GtkWidget *label;
gchar *lang, *text, *name;
GtkWidget *widget;
gboolean show, enable;
ActUser *current;
self->selected_user = user;
image = get_widget (self, "user-icon-image");
um_user_image_set_user (UM_USER_IMAGE (image), user);
image = get_widget (self, "user-icon-image2");
um_user_image_set_user (UM_USER_IMAGE (image), user);
um_user_image_set_user (self->user_icon_image, user);
um_user_image_set_user (self->user_icon_image2, user);
um_photo_dialog_set_user (self->photo_dialog, user);
widget = get_widget (self, "full-name-entry");
gtk_entry_set_text (GTK_ENTRY (widget), act_user_get_real_name (user));
gtk_widget_set_tooltip_text (widget, act_user_get_user_name (user));
gtk_entry_set_text (self->full_name_entry, act_user_get_real_name (user));
gtk_widget_set_tooltip_text (GTK_WIDGET (self->full_name_entry), act_user_get_user_name (user));
widget = get_widget (self, act_user_get_account_type (user) ? "account-type-admin" : "account-type-standard");
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
if (act_user_get_account_type (user) == ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR)
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->account_type_admin_button), TRUE);
else
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->account_type_standard_button), TRUE);
/* Do not show the "Account Type" option when there's a single user account. */
show = (self->other_accounts != 0);
gtk_widget_set_visible (get_widget (self, "account-type-label"), show);
gtk_widget_set_visible (get_widget (self, "account-type-box"), show);
gtk_widget_set_visible (GTK_WIDGET (self->account_type_label), show);
gtk_widget_set_visible (GTK_WIDGET (self->account_type_box), show);
widget = get_widget (self, "account-password-button-label");
gtk_label_set_label (GTK_LABEL (widget), get_password_mode_text (user));
gtk_label_set_label (self->password_button_label, get_password_mode_text (user));
enable = act_user_is_local_account (user);
gtk_widget_set_sensitive (widget, enable);
gtk_widget_set_sensitive (GTK_WIDGET (self->password_button_label), enable);
widget = get_widget (self, "autologin-switch");
g_signal_handlers_block_by_func (widget, autologin_changed, self);
gtk_switch_set_active (GTK_SWITCH (widget), act_user_get_automatic_login (user));
g_signal_handlers_unblock_by_func (widget, autologin_changed, self);
gtk_widget_set_sensitive (widget, get_autologin_possible (user));
widget = get_widget (self, "account-language-button-label");
g_signal_handlers_block_by_func (self->autologin_switch, autologin_changed, self);
gtk_switch_set_active (self->autologin_switch, act_user_get_automatic_login (user));
g_signal_handlers_unblock_by_func (self->autologin_switch, autologin_changed, self);
gtk_widget_set_sensitive (GTK_WIDGET (self->autologin_switch), get_autologin_possible (user));
name = NULL;
lang = g_strdup (act_user_get_language (user));
@ -844,68 +853,57 @@ show_user (ActUser *user, CcUserPanel *self)
name = g_strdup ("");
}
gtk_label_set_label (GTK_LABEL (widget), name);
gtk_label_set_label (self->language_button_label, name);
g_free (lang);
g_free (name);
/* Fingerprint: show when self, local, enabled, and possible */
widget = get_widget (self, "account-fingerprint-button");
label = get_widget (self, "account-fingerprint-label");
show = (act_user_get_uid (user) == getuid() &&
act_user_is_local_account (user) &&
(self->login_screen_settings &&
g_settings_get_boolean (self->login_screen_settings, "enable-fingerprint-authentication")) &&
set_fingerprint_label (widget));
gtk_widget_set_visible (label, show);
gtk_widget_set_visible (widget, show);
set_fingerprint_label (self->fingerprint_button));
gtk_widget_set_visible (GTK_WIDGET (self->fingerprint_label), show);
gtk_widget_set_visible (GTK_WIDGET (self->fingerprint_button), show);
/* Autologin: show when local account */
widget = get_widget (self, "autologin-box");
label = get_widget (self, "autologin-label");
show = act_user_is_local_account (user);
gtk_widget_set_visible (widget, show);
gtk_widget_set_visible (label, show);
gtk_widget_set_visible (GTK_WIDGET (self->autologin_box), show);
gtk_widget_set_visible (GTK_WIDGET (self->autologin_label), show);
/* Language: do not show for current user */
widget = get_widget (self, "account-language-button");
label = get_widget (self, "language-label");
show = act_user_get_uid (user) != getuid();
gtk_widget_set_visible (widget, show);
gtk_widget_set_visible (label, show);
gtk_widget_set_visible (GTK_WIDGET (self->language_button), show);
gtk_widget_set_visible (GTK_WIDGET (self->language_label), show);
/* Last login: show when administrator or current user */
widget = get_widget (self, "last-login-button");
label = get_widget (self, "last-login-button-label");
current = act_user_manager_get_user_by_id (self->um, getuid ());
show = act_user_get_uid (user) == getuid () ||
act_user_get_account_type (current) == ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR;
if (show) {
text = get_login_time_text (user);
gtk_label_set_label (GTK_LABEL (label), text);
gtk_label_set_label (self->last_login_button_label, text);
g_free (text);
}
label = get_widget (self, "last-login-label");
gtk_widget_set_visible (widget, show);
gtk_widget_set_visible (label, show);
gtk_widget_set_visible (GTK_WIDGET (self->last_login_button), show);
gtk_widget_set_visible (GTK_WIDGET (self->last_login_label), show);
enable = act_user_get_login_history (user) != NULL;
gtk_widget_set_sensitive (widget, enable);
gtk_widget_set_sensitive (GTK_WIDGET (self->last_login_button), enable);
if (self->permission != NULL)
on_permission_changed (self->permission, NULL, self);
on_permission_changed (self);
}
static void
change_name_done (GtkWidget *entry,
CcUserPanel *self)
change_name_done (CcUserPanel *self)
{
const gchar *text;
ActUser *user;
user = get_selected_user (self);
text = gtk_entry_get_text (GTK_ENTRY (entry));
text = gtk_entry_get_text (self->full_name_entry);
if (g_strcmp0 (text, act_user_get_real_name (user)) != 0 &&
is_valid_name (text)) {
act_user_set_real_name (user, text);
@ -913,16 +911,13 @@ change_name_done (GtkWidget *entry,
}
static void
change_name_focus_out (GtkWidget *entry,
GdkEvent *event,
CcUserPanel *self)
change_name_focus_out (CcUserPanel *self)
{
change_name_done (entry, self);
change_name_done (self);
}
static void
account_type_changed (GtkToggleButton *button,
CcUserPanel *self)
account_type_changed (CcUserPanel *self)
{
ActUser *user;
gint account_type;
@ -931,7 +926,7 @@ account_type_changed (GtkToggleButton *button,
user = get_selected_user (self);
self_selected = act_user_get_uid (user) == geteuid ();
account_type = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)) ? ACT_USER_ACCOUNT_TYPE_STANDARD : ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR;
account_type = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->account_type_standard_button)) ? ACT_USER_ACCOUNT_TYPE_STANDARD : ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR;
if (account_type != act_user_get_account_type (user)) {
act_user_set_account_type (user, account_type);
@ -944,7 +939,7 @@ account_type_changed (GtkToggleButton *button,
static void
dismiss_notification (CcUserPanel *self)
{
gtk_revealer_set_reveal_child (GTK_REVEALER (self->notification), FALSE);
gtk_revealer_set_reveal_child (self->notification_revealer, FALSE);
}
static void
@ -952,7 +947,7 @@ restart_now (CcUserPanel *self)
{
GDBusConnection *bus;
gtk_revealer_set_reveal_child (GTK_REVEALER (self->notification), FALSE);
gtk_revealer_set_reveal_child (self->notification_revealer, FALSE);
bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
g_dbus_connection_call (bus,
@ -976,7 +971,7 @@ show_restart_notification (CcUserPanel *self, const gchar *locale)
setlocale (LC_MESSAGES, locale);
}
gtk_revealer_set_reveal_child (GTK_REVEALER (self->notification), TRUE);
gtk_revealer_set_reveal_child (self->notification_revealer, TRUE);
if (locale) {
setlocale (LC_MESSAGES, current_locale);
@ -989,10 +984,8 @@ language_response (GtkDialog *dialog,
gint response_id,
CcUserPanel *self)
{
GtkWidget *button;
ActUser *user;
const gchar *lang, *account_language;
gchar *name = NULL;
if (response_id != GTK_RESPONSE_OK) {
gtk_widget_hide (GTK_WIDGET (dialog));
@ -1004,22 +997,20 @@ language_response (GtkDialog *dialog,
lang = cc_language_chooser_get_language (CC_LANGUAGE_CHOOSER (dialog));
if (lang) {
g_autofree gchar *name = NULL;
if (g_strcmp0 (lang, account_language) != 0) {
act_user_set_language (user, lang);
}
button = get_widget (self, "account-language-button-label");
name = gnome_get_language_from_locale (lang, NULL);
gtk_label_set_label (GTK_LABEL (button), name);
g_free (name);
gtk_label_set_label (self->language_button_label, name);
}
gtk_widget_hide (GTK_WIDGET (dialog));
}
static void
change_language (GtkButton *button,
CcUserPanel *self)
change_language (CcUserPanel *self)
{
const gchar *current_language;
ActUser *user;
@ -1034,14 +1025,14 @@ change_language (GtkButton *button,
else {
self->language_chooser = cc_language_chooser_new ();
gtk_window_set_transient_for (GTK_WINDOW (self->language_chooser),
GTK_WINDOW (gtk_widget_get_toplevel (self->main_box)));
GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))));
g_signal_connect (self->language_chooser, "response",
G_CALLBACK (language_response), self);
g_signal_connect (self->language_chooser, "delete-event",
G_CALLBACK (gtk_widget_hide_on_delete), NULL);
gdk_window_set_cursor (gtk_widget_get_window (gtk_widget_get_toplevel (self->main_box)), NULL);
gdk_window_set_cursor (gtk_widget_get_window (gtk_widget_get_toplevel (GTK_WIDGET (self))), NULL);
}
if (current_language && *current_language != '\0')
@ -1050,7 +1041,7 @@ change_language (GtkButton *button,
}
static void
change_password (GtkButton *button, CcUserPanel *self)
change_password (CcUserPanel *self)
{
ActUser *user;
@ -1058,32 +1049,30 @@ change_password (GtkButton *button, CcUserPanel *self)
um_password_dialog_set_user (self->password_dialog, user);
um_password_dialog_show (self->password_dialog,
GTK_WINDOW (gtk_widget_get_toplevel (self->main_box)));
GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))));
}
static void
change_fingerprint (GtkButton *button, CcUserPanel *self)
change_fingerprint (CcUserPanel *self)
{
GtkWidget *widget;
ActUser *user;
user = get_selected_user (self);
g_assert (g_strcmp0 (g_get_user_name (), act_user_get_user_name (user)) == 0);
widget = get_widget (self, "account-fingerprint-button");
fingerprint_button_clicked (GTK_WINDOW (gtk_widget_get_toplevel (self->main_box)), widget, user);
fingerprint_button_clicked (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))), self->fingerprint_button, user);
}
static void
show_history (GtkButton *button, CcUserPanel *self)
show_history (CcUserPanel *self)
{
ActUser *user;
user = get_selected_user (self);
um_history_dialog_set_user (self->history_dialog, user);
um_history_dialog_show (self->history_dialog, GTK_WINDOW (gtk_widget_get_toplevel (self->main_box)));
um_history_dialog_show (self->history_dialog, GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))));
}
static void
@ -1092,7 +1081,7 @@ users_loaded (CcUserPanel *self)
GtkWidget *dialog;
if (act_user_manager_no_service (self->um)) {
dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (self->main_box)),
dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))),
GTK_DIALOG_MODAL,
GTK_MESSAGE_OTHER,
GTK_BUTTONS_CLOSE,
@ -1104,7 +1093,7 @@ users_loaded (CcUserPanel *self)
dialog);
gtk_widget_show (dialog);
gtk_widget_set_sensitive (self->main_box, FALSE);
gtk_widget_set_sensitive (GTK_WIDGET (self->accounts_box), FALSE);
}
g_signal_connect_object (self->um, "user-changed", G_CALLBACK (user_changed), self, G_CONNECT_SWAPPED);
@ -1116,7 +1105,7 @@ users_loaded (CcUserPanel *self)
}
static void
add_unlock_tooltip (GtkWidget *button)
add_unlock_tooltip (GtkWidget *widget)
{
gchar *names[3];
GIcon *icon;
@ -1125,7 +1114,7 @@ add_unlock_tooltip (GtkWidget *button)
names[1] = "changes-allow";
names[2] = NULL;
icon = (GIcon *)g_themed_icon_new_from_names (names, -1);
setup_tooltip_with_embedded_icon (button,
setup_tooltip_with_embedded_icon (widget,
/* Translator comments:
* We split the line in 2 here to "make it look good", as there's
* no good way to do this in GTK+ for tooltips. See:
@ -1134,28 +1123,24 @@ add_unlock_tooltip (GtkWidget *button)
"*",
icon);
g_object_unref (icon);
g_signal_connect (button, "button-release-event",
g_signal_connect (widget, "button-release-event",
G_CALLBACK (show_tooltip_now), NULL);
}
static void
remove_unlock_tooltip (GtkWidget *button)
remove_unlock_tooltip (GtkWidget *widget)
{
setup_tooltip_with_embedded_icon (button, NULL, NULL, NULL);
g_signal_handlers_disconnect_by_func (button,
setup_tooltip_with_embedded_icon (widget, NULL, NULL, NULL);
g_signal_handlers_disconnect_by_func (widget,
G_CALLBACK (show_tooltip_now), NULL);
}
static void
on_permission_changed (GPermission *permission,
GParamSpec *pspec,
gpointer data)
on_permission_changed (CcUserPanel *self)
{
CcUserPanel *self = data;
gboolean is_authorized;
gboolean self_selected;
ActUser *user;
GtkWidget *widget;
user = get_selected_user (self);
if (!user) {
@ -1165,12 +1150,11 @@ on_permission_changed (GPermission *permission,
is_authorized = g_permission_get_allowed (G_PERMISSION (self->permission));
self_selected = act_user_get_uid (user) == geteuid ();
gtk_stack_set_visible_child_name (GTK_STACK (self->headerbar_buttons), is_authorized ? PAGE_ADDUSER : PAGE_LOCK);
gtk_stack_set_visible_child_name (self->headerbar_button_stack, is_authorized ? PAGE_ADDUSER : PAGE_LOCK);
widget = get_widget (self, "add-user-toolbutton");
gtk_widget_set_sensitive (widget, is_authorized);
gtk_widget_set_sensitive (GTK_WIDGET (self->add_user_button), is_authorized);
if (is_authorized) {
setup_tooltip_with_embedded_icon (widget, _("Create a user account"), NULL, NULL);
setup_tooltip_with_embedded_icon (GTK_WIDGET (self->add_user_button), _("Create a user account"), NULL, NULL);
}
else {
gchar *names[3];
@ -1180,18 +1164,17 @@ on_permission_changed (GPermission *permission,
names[1] = "changes-allow";
names[2] = NULL;
icon = (GIcon *)g_themed_icon_new_from_names (names, -1);
setup_tooltip_with_embedded_icon (widget,
setup_tooltip_with_embedded_icon (GTK_WIDGET (self->add_user_button),
_("To create a user account,\nclick the * icon first"),
"*",
icon);
g_object_unref (icon);
}
widget = get_widget (self, "remove-user-toolbutton");
gtk_widget_set_sensitive (widget, is_authorized && !self_selected
gtk_widget_set_sensitive (GTK_WIDGET (self->remove_user_button), is_authorized && !self_selected
&& !would_demote_only_admin (user));
if (is_authorized) {
setup_tooltip_with_embedded_icon (widget, _("Delete the selected user account"), NULL, NULL);
setup_tooltip_with_embedded_icon (GTK_WIDGET (self->remove_user_button), _("Delete the selected user account"), NULL, NULL);
}
else {
gchar *names[3];
@ -1202,7 +1185,7 @@ on_permission_changed (GPermission *permission,
names[2] = NULL;
icon = (GIcon *)g_themed_icon_new_from_names (names, -1);
setup_tooltip_with_embedded_icon (widget,
setup_tooltip_with_embedded_icon (GTK_WIDGET (self->remove_user_button),
_("To delete the selected user account,\nclick the * icon first"),
"*",
icon);
@ -1210,158 +1193,110 @@ on_permission_changed (GPermission *permission,
}
if (!act_user_is_local_account (user)) {
gtk_widget_set_sensitive (get_widget (self, "account-type-box"), FALSE);
remove_unlock_tooltip (get_widget (self, "account-type-box"));
gtk_widget_set_sensitive (GTK_WIDGET (get_widget (self, "autologin-switch")), FALSE);
remove_unlock_tooltip (get_widget (self, "autologin-switch"));
gtk_widget_set_sensitive (GTK_WIDGET (self->account_type_box), FALSE);
remove_unlock_tooltip (GTK_WIDGET (self->account_type_box));
gtk_widget_set_sensitive (GTK_WIDGET (self->autologin_switch), FALSE);
remove_unlock_tooltip (GTK_WIDGET (self->autologin_switch));
} else if (is_authorized && act_user_is_local_account (user)) {
if (would_demote_only_admin (user)) {
gtk_widget_set_sensitive (get_widget (self, "account-type-box"), FALSE);
gtk_widget_set_sensitive (GTK_WIDGET (self->account_type_box), FALSE);
} else {
gtk_widget_set_sensitive (get_widget (self, "account-type-box"), TRUE);
gtk_widget_set_sensitive (GTK_WIDGET (self->account_type_box), TRUE);
}
remove_unlock_tooltip (get_widget (self, "account-type-box"));
remove_unlock_tooltip (GTK_WIDGET (self->account_type_box));
gtk_widget_set_sensitive (GTK_WIDGET (get_widget (self, "autologin-switch")), get_autologin_possible (user));
remove_unlock_tooltip (get_widget (self, "autologin-switch"));
gtk_widget_set_sensitive (GTK_WIDGET (self->autologin_switch), get_autologin_possible (user));
remove_unlock_tooltip (GTK_WIDGET (self->autologin_switch));
}
else {
gtk_widget_set_sensitive (get_widget (self, "account-type-box"), FALSE);
gtk_widget_set_sensitive (GTK_WIDGET (self->account_type_box), FALSE);
if (would_demote_only_admin (user)) {
remove_unlock_tooltip (get_widget (self, "account-type-box"));
remove_unlock_tooltip (GTK_WIDGET (self->account_type_box));
} else {
add_unlock_tooltip (get_widget (self, "account-type-box"));
add_unlock_tooltip (GTK_WIDGET (self->account_type_box));
}
gtk_widget_set_sensitive (GTK_WIDGET (get_widget (self, "autologin-switch")), FALSE);
add_unlock_tooltip (get_widget (self, "autologin-switch"));
gtk_widget_set_sensitive (GTK_WIDGET (self->autologin_switch), FALSE);
add_unlock_tooltip (GTK_WIDGET (self->autologin_switch));
}
/* The full name entry: insensitive if remote or not authorized and not self */
widget = get_widget (self, "full-name-entry");
if (!act_user_is_local_account (user)) {
gtk_widget_set_sensitive (widget, FALSE);
remove_unlock_tooltip (widget);
gtk_widget_set_sensitive (GTK_WIDGET (self->full_name_entry), FALSE);
remove_unlock_tooltip (GTK_WIDGET (self->full_name_entry));
} else if (is_authorized || self_selected) {
gtk_widget_set_sensitive (widget, TRUE);
remove_unlock_tooltip (widget);
gtk_widget_set_sensitive (GTK_WIDGET (self->full_name_entry), TRUE);
remove_unlock_tooltip (GTK_WIDGET (self->full_name_entry));
} else {
gtk_widget_set_sensitive (widget, FALSE);
add_unlock_tooltip (widget);
gtk_widget_set_sensitive (GTK_WIDGET (self->full_name_entry), FALSE);
add_unlock_tooltip (GTK_WIDGET (self->full_name_entry));
}
if (is_authorized || self_selected) {
gtk_stack_set_visible_child (GTK_STACK (get_widget (self, "user-icon")),
get_widget (self, "user-icon-button"));
gtk_stack_set_visible_child (self->user_icon_stack, GTK_WIDGET (self->user_icon_button));
gtk_widget_set_sensitive (get_widget (self, "account-language-button"), TRUE);
remove_unlock_tooltip (get_widget (self, "account-language-button"));
gtk_widget_set_sensitive (GTK_WIDGET (self->language_button), TRUE);
remove_unlock_tooltip (GTK_WIDGET (self->language_button));
gtk_widget_set_sensitive (get_widget (self, "account-password-button"), TRUE);
remove_unlock_tooltip (get_widget (self, "account-password-button"));
gtk_widget_set_sensitive (GTK_WIDGET (self->password_button), TRUE);
remove_unlock_tooltip (GTK_WIDGET (self->password_button));
gtk_widget_set_sensitive (get_widget (self, "account-fingerprint-button"), TRUE);
remove_unlock_tooltip (get_widget (self, "account-fingerprint-button"));
gtk_widget_set_sensitive (GTK_WIDGET (self->fingerprint_button), TRUE);
remove_unlock_tooltip (GTK_WIDGET (self->fingerprint_button));
gtk_widget_set_sensitive (get_widget (self, "last-login-button"), TRUE);
remove_unlock_tooltip (get_widget (self, "last-login-button"));
gtk_widget_set_sensitive (GTK_WIDGET (self->last_login_button), TRUE);
remove_unlock_tooltip (GTK_WIDGET (self->last_login_button));
}
else {
gtk_stack_set_visible_child (GTK_STACK (get_widget (self, "user-icon")),
get_widget (self, "user-icon-image"));
gtk_stack_set_visible_child (self->user_icon_stack, GTK_WIDGET (self->user_icon_image));
gtk_widget_set_sensitive (get_widget (self, "account-language-button"), FALSE);
add_unlock_tooltip (get_widget (self, "account-language-button"));
gtk_widget_set_sensitive (GTK_WIDGET (self->language_button), FALSE);
add_unlock_tooltip (GTK_WIDGET (self->language_button));
gtk_widget_set_sensitive (get_widget (self, "account-password-button"), FALSE);
add_unlock_tooltip (get_widget (self, "account-password-button"));
gtk_widget_set_sensitive (GTK_WIDGET (self->password_button), FALSE);
add_unlock_tooltip (GTK_WIDGET (self->password_button));
gtk_widget_set_sensitive (get_widget (self, "account-fingerprint-button"), FALSE);
add_unlock_tooltip (get_widget (self, "account-fingerprint-button"));
gtk_widget_set_sensitive (GTK_WIDGET (self->fingerprint_button), FALSE);
add_unlock_tooltip (GTK_WIDGET (self->fingerprint_button));
gtk_widget_set_sensitive (get_widget (self, "last-login-button"), FALSE);
add_unlock_tooltip (get_widget (self, "last-login-button"));
gtk_widget_set_sensitive (GTK_WIDGET (self->last_login_button), FALSE);
add_unlock_tooltip (GTK_WIDGET (self->last_login_button));
}
}
static void
setup_main_window (CcUserPanel *self)
{
GtkWidget *button;
GIcon *icon;
GError *error = NULL;
gchar *names[3];
gboolean loaded;
self->notification = get_widget (self, "notification");
button = get_widget (self, "restart-button");
g_signal_connect_swapped (button, "clicked", G_CALLBACK (restart_now), self);
button = get_widget (self, "dismiss-button");
g_signal_connect_swapped (button, "clicked", G_CALLBACK (dismiss_notification), self);
self->other_accounts = 0;
self->carousel = UM_CAROUSEL (get_widget (self, "carousel"));
g_signal_connect (self->carousel, "item-activated", G_CALLBACK (set_selected_user), self);
button = get_widget (self, "add-user-toolbutton");
g_signal_connect (button, "clicked", G_CALLBACK (add_user), self);
button = get_widget (self, "remove-user-toolbutton");
g_signal_connect (button, "clicked", G_CALLBACK (delete_user), self);
button = get_widget (self, "user-icon-image");
add_unlock_tooltip (button);
button = get_widget (self, "full-name-entry");
g_signal_connect (button, "activate", G_CALLBACK (change_name_done), self);
g_signal_connect (button, "focus-out-event", G_CALLBACK (change_name_focus_out), self);
button = get_widget (self, "account-type-standard");
g_signal_connect (button, "toggled", G_CALLBACK (account_type_changed), self);
button = get_widget (self, "account-password-button");
g_signal_connect (button, "clicked", G_CALLBACK (change_password), self);
button = get_widget (self, "account-language-button");
g_signal_connect (button, "clicked", G_CALLBACK (change_language), self);
button = get_widget (self, "autologin-switch");
g_signal_connect (button, "notify::active", G_CALLBACK (autologin_changed), self);
button = get_widget (self, "account-fingerprint-button");
g_signal_connect (button, "clicked",
G_CALLBACK (change_fingerprint), self);
button = get_widget (self, "last-login-button");
g_signal_connect (button, "clicked",
G_CALLBACK (show_history), self);
add_unlock_tooltip (GTK_WIDGET (self->user_icon_image));
self->permission = (GPermission *)polkit_permission_new_sync (USER_ACCOUNTS_PERMISSION, NULL, NULL, &error);
if (self->permission != NULL) {
g_signal_connect (self->permission, "notify",
G_CALLBACK (on_permission_changed), self);
on_permission_changed (self->permission, NULL, self);
g_signal_connect_object (self->permission, "notify",
G_CALLBACK (on_permission_changed), self, G_CONNECT_SWAPPED);
on_permission_changed (self);
} else {
g_warning ("Cannot create '%s' permission: %s", USER_ACCOUNTS_PERMISSION, error->message);
g_error_free (error);
}
button = get_widget (self, "add-user-toolbutton");
names[0] = "changes-allow-symbolic";
names[1] = "changes-allow";
names[2] = NULL;
icon = (GIcon *)g_themed_icon_new_from_names (names, -1);
setup_tooltip_with_embedded_icon (button,
setup_tooltip_with_embedded_icon (GTK_WIDGET (self->add_user_button),
_("To create a user account,\nclick the * icon first"),
"*",
icon);
button = get_widget (self, "remove-user-toolbutton");
setup_tooltip_with_embedded_icon (button,
setup_tooltip_with_embedded_icon (GTK_WIDGET (self->remove_user_button),
_("To delete the selected user account,\nclick the * icon first"),
"*",
icon);
@ -1401,24 +1336,20 @@ static void
cc_user_panel_constructed (GObject *object)
{
CcUserPanel *self = UM_USER_PANEL (object);
GtkWidget *button;
CcShell *shell;
G_OBJECT_CLASS (cc_user_panel_parent_class)->constructed (object);
shell = cc_panel_get_shell (CC_PANEL (self));
cc_shell_embed_widget_in_header (shell, self->headerbar_buttons);
cc_shell_embed_widget_in_header (shell, GTK_WIDGET (self->headerbar_button_stack));
button = get_widget (self, "lock-button");
gtk_lock_button_set_permission (GTK_LOCK_BUTTON (button), self->permission);
gtk_lock_button_set_permission (self->lock_button, self->permission);
}
static void
cc_user_panel_init (CcUserPanel *self)
{
GError *error;
volatile GType type G_GNUC_UNUSED;
GtkWidget *button;
GtkCssProvider *provider;
g_resources_register (um_get_resource ());
@ -1427,19 +1358,11 @@ cc_user_panel_init (CcUserPanel *self)
type = um_user_image_get_type ();
type = um_carousel_get_type ();
self->builder = gtk_builder_new ();
gtk_widget_init_template (GTK_WIDGET (self));
self->um = act_user_manager_get_default ();
self->cancellable = g_cancellable_new ();
error = NULL;
if (!gtk_builder_add_from_resource (self->builder,
"/org/gnome/control-center/user-accounts/user-accounts-dialog.ui",
&error)) {
g_error ("%s", error->message);
g_error_free (error);
return;
}
provider = gtk_css_provider_new ();
gtk_css_provider_load_from_resource (provider, "/org/gnome/control-center/user-accounts/user-accounts-dialog.css");
gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
@ -1447,15 +1370,10 @@ cc_user_panel_init (CcUserPanel *self)
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
g_object_unref (provider);
self->headerbar_buttons = get_widget (self, "headerbar-buttons");
self->stack = get_widget (self, "stack");
self->login_screen_settings = settings_or_null ("org.gnome.login-screen");
self->password_dialog = um_password_dialog_new ();
button = get_widget (self, "user-icon-button");
self->photo_dialog = um_photo_dialog_new (button);
self->main_box = get_widget (self, "accounts-vbox");
gtk_container_add (GTK_CONTAINER (self), self->stack);
self->photo_dialog = um_photo_dialog_new (GTK_WIDGET (self->user_icon_button));
self->history_dialog = um_history_dialog_new ();
setup_main_window (self);
}
@ -1470,7 +1388,6 @@ cc_user_panel_dispose (GObject *object)
g_clear_object (&self->login_screen_settings);
g_clear_object (&self->builder);
g_clear_pointer (&self->password_dialog, um_password_dialog_free);
g_clear_pointer (&self->history_dialog, um_history_dialog_free);
if (self->account_dialog) {
@ -1491,11 +1408,59 @@ cc_user_panel_get_help_uri (CcPanel *panel)
static void
cc_user_panel_class_init (CcUserPanelClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
CcPanelClass *panel_class = CC_PANEL_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
CcPanelClass *panel_class = CC_PANEL_CLASS (klass);
object_class->dispose = cc_user_panel_dispose;
object_class->constructed = cc_user_panel_constructed;
panel_class->get_help_uri = cc_user_panel_get_help_uri;
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/user-accounts/cc-user-panel.ui");
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, accounts_box);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, account_type_admin_button);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, account_type_box);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, account_type_label);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, account_type_standard_button);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, add_user_button);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, autologin_box);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, autologin_label);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, autologin_switch);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, carousel);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, fingerprint_button);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, fingerprint_label);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, full_name_entry);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, headerbar_button_stack);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, language_button);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, language_button_label);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, language_label);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, last_login_button);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, last_login_button_label);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, last_login_label);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, lock_button);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, notification_revealer);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, password_button);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, password_button_label);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, remove_user_button);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, stack);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, user_icon_button);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, user_icon_image);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, user_icon_image2);
gtk_widget_class_bind_template_child (widget_class, CcUserPanel, user_icon_stack);
gtk_widget_class_bind_template_callback (widget_class, account_type_changed);
gtk_widget_class_bind_template_callback (widget_class, add_user);
gtk_widget_class_bind_template_callback (widget_class, autologin_changed);
gtk_widget_class_bind_template_callback (widget_class, change_fingerprint);
gtk_widget_class_bind_template_callback (widget_class, change_language);
gtk_widget_class_bind_template_callback (widget_class, change_name_done);
gtk_widget_class_bind_template_callback (widget_class, change_name_focus_out);
gtk_widget_class_bind_template_callback (widget_class, change_password);
gtk_widget_class_bind_template_callback (widget_class, delete_user);
gtk_widget_class_bind_template_callback (widget_class, dismiss_notification);
gtk_widget_class_bind_template_callback (widget_class, restart_now);
gtk_widget_class_bind_template_callback (widget_class, set_selected_user);
gtk_widget_class_bind_template_callback (widget_class, show_history);
}

View file

@ -24,7 +24,6 @@
G_BEGIN_DECLS
#define UM_TYPE_USER_PANEL (cc_user_panel_get_type ())
G_DECLARE_FINAL_TYPE (CcUserPanel, cc_user_panel, UM, USER_PANEL, CcPanel)
G_END_DECLS

View file

@ -0,0 +1,537 @@
<interface>
<object class="GtkStack" id="headerbar_button_stack">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLockButton" id="lock_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
<packing>
<property name="name">_lock</property>
</packing>
</child>
<child>
<object class="GtkButton" id="add_user_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">_Add User…</property>
<property name="use_underline">True</property>
<signal name="clicked" handler="add_user" object="CcUserPanel" swapped="yes"/>
<style>
<class name="suggested-action"/>
</style>
</object>
<packing>
<property name="name">_adduser</property>
</packing>
</child>
</object>
<object class="GtkListStore" id="shortname-model">
<columns>
<!-- column-name gchararray -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkListStore" id="language-model">
<columns>
<!-- column-name gchararray -->
<column type="gchararray"/>
<!-- column-name gchararray1 -->
<column type="gchararray"/>
</columns>
</object>
<template class="CcUserPanel" parent="CcPanel">
<property name="visible">True</property>
<child>
<object class="GtkStack" id="stack">
<property name="visible">True</property>
<property name="visible-child">empty-state</property>
<child>
<object class="GtkOverlay" id="overlay">
<property name="visible">True</property>
<child type="overlay">
<object class="GtkRevealer" id="notification_revealer">
<property name="visible">True</property>
<property name="halign">GTK_ALIGN_CENTER</property>
<property name="valign">GTK_ALIGN_START</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="spacing">6</property>
<style>
<class name="app-notification"/>
</style>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="wrap">True</property>
<property name="max_width_chars">30</property>
<property name="label" translatable="yes">Your session needs to be restarted for changes to take effect</property>
</object>
</child>
<child>
<object class="GtkButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="valign">GTK_ALIGN_CENTER</property>
<property name="label" translatable="yes">Restart Now</property>
<signal name="clicked" handler="restart_now" object="CcUserPanel" swapped="yes"/>
</object>
</child>
<child>
<object class="GtkButton" id="dismiss_button">
<property name="visible">True</property>
<property name="valign">GTK_ALIGN_CENTER</property>
<signal name="clicked" handler="dismiss_notification" object="CcUserPanel" swapped="yes"/>
<style>
<class name="flat"/>
</style>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon_name">window-close-symbolic</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="accounts_box">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="border_width">0</property>
<child>
<object class="UmCarousel" id="carousel">
<property name="visible">True</property>
<signal name="item-activated" handler="set_selected_user" object="CcUserPanel" swapped="yes"/>
</object>
<packing>
<property name="fill">False</property>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="column_spacing">10</property>
<property name="row_spacing">10</property>
<property name="margin_top">40</property>
<property name="halign">GTK_ALIGN_CENTER</property>
<property name="height_request">300</property>
<child>
<object class="GtkButton" id="fingerprint_button">
<property name="visible">True</property>
<property name="hexpand">True</property>
<signal name="clicked" handler="change_fingerprint" object="CcUserPanel" swapped="yes"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">5</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="account_type_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="sensitive">False</property>
<style>
<class name="linked"/>
</style>
<child>
<object class="GtkRadioButton" id="account_type_standard_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Standard</property>
<property name="draw_indicator">False</property>
<property name="hexpand">True</property>
<signal name="toggled" handler="account_type_changed" object="CcUserPanel" swapped="yes"/>
</object>
</child>
<child>
<object class="GtkRadioButton" id="account_type_admin_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Administrator</property>
<property name="draw_indicator">False</property>
<property name="group">account_type_standard_button</property>
<property name="hexpand">True</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="account_type_label">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">Account _Type</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">account_type_box</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="full_name_entry">
<property name="visible">True</property>
<property name="width-chars">30</property>
<property name="max-width-chars">30</property>
<property name="valign">GTK_ALIGN_CENTER</property>
<signal name="activate" handler="change_name_done" object="CcUserPanel" swapped="yes"/>
<signal name="focus-out-event" handler="change_name_focus_out" object="CcUserPanel" swapped="yes"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="password_label">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">_Password</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">password_button</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">3</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="password_button">
<property name="visible">True</property>
<property name="hexpand">True</property>
<signal name="clicked" handler="change_password" object="CcUserPanel" swapped="yes"/>
<style>
<class name="text-button"/>
</style>
<child>
<object class="GtkLabel" id="password_button_label">
<property name="visible">True</property>
<property name="halign">GTK_ALIGN_START</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">3</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="autologin_label">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">A_utomatic Login</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">autologin_switch</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">4</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="autologin_box">
<property name="visible">True</property>
<property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
<child>
<object class="GtkSwitch" id="autologin_switch">
<property name="visible">True</property>
<property name="valign">GTK_ALIGN_CENTER</property>
<signal name="notify::active" handler="autologin_changed" object="CcUserPanel" swapped="yes"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">4</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="fingerprint_label">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">_Fingerprint Login</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">fingerprint_button</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">5</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkStack" id="user_icon_stack">
<property name="visible">True</property>
<property name="halign">GTK_ALIGN_END</property>
<child>
<object class="UmUserImage" id="user_icon_image">
<property name="visible">True</property>
<property name="icon_name">avatar-default</property>
<property name="pixel_size">96</property>
<property name="halign">GTK_ALIGN_END</property>
<child internal-child="accessible">
<object class="AtkObject">
<property name="accessible-name" translatable="yes">User Icon</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkToggleButton" id="user_icon_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<child internal-child="accessible">
<object class="AtkObject">
<property name="accessible-name" translatable="yes">User Icon</property>
</object>
</child>
<child>
<object class="UmUserImage" id="user_icon_image2">
<property name="visible">True</property>
<property name="icon_name">avatar-default</property>
<property name="pixel_size">96</property>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="language_label">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">_Language</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">language_button</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="language_button">
<property name="visible">True</property>
<property name="hexpand">True</property>
<signal name="clicked" handler="change_language" object="CcUserPanel" swapped="yes"/>
<style>
<class name="text-button"/>
</style>
<child>
<object class="GtkLabel" id="language_button_label">
<property name="visible">True</property>
<property name="halign">GTK_ALIGN_START</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">2</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="last_login_label">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">Last Login</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">last_login_button</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">6</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="last_login_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="show_history" object="CcUserPanel" swapped="yes"/>
<style>
<class name="text-button"/>
</style>
<child>
<object class="GtkLabel" id="last_login_button_label">
<property name="visible">True</property>
<property name="halign">GTK_ALIGN_START</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">6</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="remove_user_button">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="vexpand">True</property>
<property name="halign">GTK_ALIGN_END</property>
<property name="valign">GTK_ALIGN_END</property>
<property name="margin_bottom">20</property>
<property name="margin_top">20</property>
<property name="margin_end">20</property>
<property name="label" translatable="yes">Remove User…</property>
<signal name="clicked" handler="delete_user" object="CcUserPanel" swapped="yes"/>
<style>
<class name="destructive-action"/>
</style>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="name">_users</property>
</packing>
</child>
<child>
<object class="GtkBox" id="empty-state">
<property name="visible">True</property>
<property name="orientation">GTK_ORIENTATION_VERTICAL</property>
<property name="valign">GTK_ALIGN_CENTER</property>
<property name="spacing">12</property>
<style>
<class name="dim-label"/>
</style>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon_name">avatar-default-symbolic</property>
<property name="pixel_size">192</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label" translatable="yes" comments="Translators: This is the empty state page label which states that there are no users to show in the panel.">No Users Found</property>
<attributes>
<attribute name="weight" value="bold"/>
<attribute name="scale" value="1.6"/>
</attributes>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label" translatable="yes">Unlock to add a user account.</property>
</object>
</child>
</object>
<packing>
<property name="name">_empty_state</property>
</packing>
</child>
</object>
</child>
</template>
<object class="GtkSizeGroup">
<property name="mode">both</property>
<widgets>
<widget name="user_icon_button"/>
<widget name="user_icon_image"/>
</widgets>
</object>
<object class="GtkSizeGroup">
<property name="mode">both</property>
<widgets>
<widget name="fingerprint_label"/>
<widget name="language_label"/>
<widget name="password_label"/>
<widget name="account_type_label"/>
<widget name="autologin_label"/>
<widget name="last_login_label"/>
</widgets>
</object>
<object class="GtkSizeGroup">
<property name="mode">both</property>
<widgets>
<widget name="fingerprint_button"/>
<widget name="language_button"/>
<widget name="password_button"/>
<widget name="account_type_box"/>
<widget name="autologin_box"/>
<widget name="last_login_button"/>
</widgets>
</object>
<object class="GtkSizeGroup">
<property name="mode">both</property>
<widgets>
<widget name="account_type_standard_button"/>
<widget name="account_type_admin_button"/>
</widgets>
</object>
</interface>

View file

@ -1,522 +0,0 @@
<interface>
<!-- interface-requires gtk+ 3.8 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkStack" id="headerbar-buttons">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLockButton" id="lock-button">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
<packing>
<property name="name">_lock</property>
</packing>
</child>
<child>
<object class="GtkButton" id="add-user-toolbutton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">_Add User…</property>
<property name="use_underline">True</property>
<style>
<class name="suggested-action"/>
</style>
</object>
<packing>
<property name="name">_adduser</property>
</packing>
</child>
</object>
<object class="GtkListStore" id="shortname-model">
<columns>
<!-- column-name gchararray -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkListStore" id="language-model">
<columns>
<!-- column-name gchararray -->
<column type="gchararray"/>
<!-- column-name gchararray1 -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkStack" id="stack">
<property name="visible">True</property>
<property name="visible-child">empty-state</property>
<child>
<object class="GtkOverlay" id="overlay">
<property name="visible">True</property>
<child type="overlay">
<object class="GtkRevealer" id="notification">
<property name="visible">True</property>
<property name="halign">GTK_ALIGN_CENTER</property>
<property name="valign">GTK_ALIGN_START</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="spacing">6</property>
<style>
<class name="app-notification"/>
</style>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="wrap">True</property>
<property name="max_width_chars">30</property>
<property name="label" translatable="yes">Your session needs to be restarted for changes to take effect</property>
</object>
</child>
<child>
<object class="GtkButton" id="restart-button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="valign">GTK_ALIGN_CENTER</property>
<property name="label" translatable="yes">Restart Now</property>
</object>
</child>
<child>
<object class="GtkButton" id="dismiss-button">
<property name="visible">True</property>
<property name="valign">GTK_ALIGN_CENTER</property>
<style>
<class name="flat"/>
</style>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon_name">window-close-symbolic</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkVBox" id="accounts-vbox">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="border_width">0</property>
<child>
<object class="UmCarousel" id="carousel">
<property name="visible">True</property>
</object>
<packing>
<property name="fill">False</property>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkGrid" id="user-options">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="column_spacing">10</property>
<property name="row_spacing">10</property>
<property name="margin_top">40</property>
<property name="halign">GTK_ALIGN_CENTER</property>
<property name="height_request">300</property>
<child>
<object class="GtkButton" id="account-fingerprint-button">
<property name="visible">True</property>
<property name="hexpand">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">5</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="account-type-box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="sensitive">False</property>
<style>
<class name="linked"/>
</style>
<child>
<object class="GtkRadioButton" id="account-type-standard">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Standard</property>
<property name="draw_indicator">False</property>
<property name="hexpand">True</property>
</object>
</child>
<child>
<object class="GtkRadioButton" id="account-type-admin">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Administrator</property>
<property name="draw_indicator">False</property>
<property name="group">account-type-standard</property>
<property name="hexpand">True</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="account-type-label">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">Account _Type</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">account-type-box</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="full-name-entry">
<property name="visible">True</property>
<property name="width-chars">30</property>
<property name="max-width-chars">30</property>
<property name="valign">GTK_ALIGN_CENTER</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="password-label">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">_Password</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">account-password-button</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">3</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="account-password-button">
<property name="visible">True</property>
<property name="hexpand">True</property>
<style>
<class name="text-button"/>
</style>
<child>
<object class="GtkLabel" id="account-password-button-label">
<property name="visible">True</property>
<property name="halign">GTK_ALIGN_START</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">3</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="autologin-label">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">A_utomatic Login</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">autologin-switch</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">4</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="autologin-box">
<property name="visible">True</property>
<property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
<child>
<object class="GtkSwitch" id="autologin-switch">
<property name="visible">True</property>
<property name="valign">GTK_ALIGN_CENTER</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">4</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="account-fingerprint-label">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">_Fingerprint Login</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">account-fingerprint-button</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">5</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkStack" id="user-icon">
<property name="visible">True</property>
<property name="halign">GTK_ALIGN_END</property>
<child>
<object class="UmUserImage" id="user-icon-image">
<property name="visible">True</property>
<property name="icon_name">avatar-default</property>
<property name="pixel_size">96</property>
<property name="halign">GTK_ALIGN_END</property>
<child internal-child="accessible">
<object class="AtkObject" id="user-icon-image-a11y">
<property name="accessible-name" translatable="yes">User Icon</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkToggleButton" id="user-icon-button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<child internal-child="accessible">
<object class="AtkObject" id="user-icon-image2-a11y">
<property name="accessible-name" translatable="yes">User Icon</property>
</object>
</child>
<child>
<object class="UmUserImage" id="user-icon-image2">
<property name="visible">True</property>
<property name="icon_name">avatar-default</property>
<property name="pixel_size">96</property>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="language-label">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">_Language</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">account-language-button</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="account-language-button">
<property name="visible">True</property>
<property name="hexpand">True</property>
<style>
<class name="text-button"/>
</style>
<child>
<object class="GtkLabel" id="account-language-button-label">
<property name="visible">True</property>
<property name="halign">GTK_ALIGN_START</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">2</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="last-login-label">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">Last Login</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">last-login-button</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">6</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="last-login-button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<style>
<class name="text-button"/>
</style>
<child>
<object class="GtkLabel" id="last-login-button-label">
<property name="visible">True</property>
<property name="halign">GTK_ALIGN_START</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">6</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="remove-user-toolbutton">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">GTK_ALIGN_END</property>
<property name="valign">GTK_ALIGN_END</property>
<property name="margin_bottom">20</property>
<property name="margin_top">20</property>
<property name="margin_end">20</property>
<property name="label" translatable="yes">Remove User…</property>
<style>
<class name="destructive-action"/>
</style>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="name">_users</property>
</packing>
</child>
<child>
<object class="GtkBox" id="empty-state">
<property name="visible">True</property>
<property name="orientation">GTK_ORIENTATION_VERTICAL</property>
<property name="valign">GTK_ALIGN_CENTER</property>
<property name="spacing">12</property>
<style>
<class name="dim-label"/>
</style>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon_name">avatar-default-symbolic</property>
<property name="pixel_size">192</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label" translatable="yes" comments="Translators: This is the empty state page label which states that there are no users to show in the panel.">No Users Found</property>
<attributes>
<attribute name="weight" value="bold"/>
<attribute name="scale" value="1.6"/>
</attributes>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label" translatable="yes">Unlock to add a user account.</property>
</object>
</child>
</object>
<packing>
<property name="name">_empty_state</property>
</packing>
</child>
</object>
<object class="GtkSizeGroup" id="user-icon-sizegroup">
<property name="mode">both</property>
<widgets>
<widget name="user-icon-button"/>
<widget name="user-icon-image"/>
</widgets>
</object>
<object class="GtkSizeGroup" id="label-sizegroup">
<property name="mode">both</property>
<widgets>
<widget name="account-fingerprint-label"/>
<widget name="language-label"/>
<widget name="password-label"/>
<widget name="account-type-label"/>
<widget name="autologin-label"/>
<widget name="last-login-label"/>
</widgets>
</object>
<object class="GtkSizeGroup" id="option-sizegroup">
<property name="mode">both</property>
<widgets>
<widget name="account-fingerprint-button"/>
<widget name="account-language-button"/>
<widget name="account-password-button"/>
<widget name="account-type-box"/>
<widget name="autologin-box"/>
<widget name="last-login-button"/>
</widgets>
</object>
<object class="GtkSizeGroup">
<property name="mode">both</property>
<widgets>
<widget name="account-type-standard"/>
<widget name="account-type-admin"/>
</widgets>
</object>
</interface>

View file

@ -101,6 +101,7 @@ common_sources = files(
)
resource_data = files(
'cc-user-panel.ui',
'data/icons/left-index-finger.png',
'data/icons/left-little-finger.png',
'data/icons/left-middle-finger.png',
@ -121,7 +122,6 @@ resource_data = files(
'data/join-dialog.ui',
'data/password-dialog.ui',
'data/user-accounts-dialog.css',
'data/user-accounts-dialog.ui'
)
common_sources += gnome.compile_resources(
@ -145,6 +145,7 @@ common_sources += gnome.gdbus_codegen(
sources = common_sources + files(
'cc-crop-area.c',
'cc-user-panel.c',
'run-passwd.c',
'um-account-type.c',
'um-carousel.c',
@ -153,7 +154,6 @@ sources = common_sources + files(
'um-password-dialog.c',
'um-photo-dialog.c',
'um-user-image.c',
'um-user-panel.c'
)
# Kerberos support

View file

@ -45,7 +45,7 @@ enum {
};
typedef struct {
GtkWidget *editable_button;
GtkButton *editable_button;
GtkWidget *ass;
GtkBuilder *dialog;
@ -177,7 +177,7 @@ get_error_dialog (const char *title,
}
gboolean
set_fingerprint_label (GtkWidget *button)
set_fingerprint_label (GtkButton *editable_button)
{
GDBusProxy *device;
GVariant *result;
@ -208,12 +208,12 @@ set_fingerprint_label (GtkWidget *button)
if (fingers == NULL || g_variant_iter_n_children (fingers) == 0) {
is_disable = FALSE;
gtk_button_set_label (GTK_BUTTON (button), _("Disabled"));
gtk_button_set_label (editable_button, _("Disabled"));
} else {
is_disable = TRUE;
gtk_button_set_label (GTK_BUTTON (button), _("Enabled"));
gtk_button_set_label (editable_button, _("Enabled"));
}
gtk_widget_set_halign (gtk_bin_get_child (GTK_BIN (button)), GTK_ALIGN_START);
gtk_widget_set_halign (gtk_bin_get_child (GTK_BIN (editable_button)), GTK_ALIGN_START);
if (result != NULL)
g_variant_unref (result);
@ -247,7 +247,7 @@ delete_fingerprints (void)
static void
delete_fingerprints_question (GtkWindow *parent,
GtkWidget *editable_button,
GtkButton *editable_button,
ActUser *user)
{
GtkWidget *question;
@ -414,7 +414,7 @@ finger_combobox_changed (GtkComboBox *combobox, EnrollData *data)
static void
assistant_cancelled (GtkAssistant *ass, EnrollData *data)
{
GtkWidget *editable_button = data->editable_button;
GtkButton *editable_button = data->editable_button;
enroll_data_destroy (data);
set_fingerprint_label (editable_button);
@ -607,7 +607,7 @@ assistant_prepare (GtkAssistant *ass, GtkWidget *page, EnrollData *data)
static void
enroll_fingerprints (GtkWindow *parent,
GtkWidget *editable_button,
GtkButton *editable_button,
ActUser *user)
{
GDBusProxy *device = NULL;
@ -735,7 +735,7 @@ enroll_fingerprints (GtkWindow *parent,
void
fingerprint_button_clicked (GtkWindow *parent,
GtkWidget *editable_button,
GtkButton *editable_button,
ActUser *user)
{
bindtextdomain ("fprintd", GNOMELOCALEDIR);

View file

@ -20,7 +20,7 @@
#include <gtk/gtk.h>
#include <act/act.h>
gboolean set_fingerprint_label (GtkWidget *editable_button);
gboolean set_fingerprint_label (GtkButton *editable_button);
void fingerprint_button_clicked (GtkWindow *parent,
GtkWidget *editable_button,
GtkButton *editable_button,
ActUser *user);

View file

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/gnome/control-center/user-accounts">
<file preprocess="xml-stripblanks">cc-user-panel.ui</file>
<file alias="account-dialog.ui" preprocess="xml-stripblanks">data/account-dialog.ui</file>
<file alias="avatar-chooser.ui" preprocess="xml-stripblanks">data/avatar-chooser.ui</file>
<file alias="join-dialog.ui" preprocess="xml-stripblanks">data/join-dialog.ui</file>
<file alias="account-fingerprint.ui" preprocess="xml-stripblanks">data/account-fingerprint.ui</file>
<file alias="password-dialog.ui" preprocess="xml-stripblanks">data/password-dialog.ui</file>
<file alias="history-dialog.ui" preprocess="xml-stripblanks">data/history-dialog.ui</file>
<file alias="user-accounts-dialog.ui" preprocess="xml-stripblanks">data/user-accounts-dialog.ui</file>
<file alias="user-accounts-dialog.css">data/user-accounts-dialog.css</file>
<file alias="carousel.ui" preprocess="xml-stripblanks">data/carousel.ui</file>
<file alias="carousel.css">data/carousel.css</file>

View file

@ -193,6 +193,8 @@ panels/universal-access/gnome-universal-access-panel.desktop.in.in
panels/universal-access/uap.ui
panels/universal-access/zoom-options.c
panels/universal-access/zoom-options.ui
panels/user-accounts/cc-user-panel.c
panels/user-accounts/cc-user-panel.ui
panels/user-accounts/data/account-dialog.ui
panels/user-accounts/data/account-fingerprint.ui
panels/user-accounts/data/avatar-chooser.ui
@ -200,7 +202,6 @@ panels/user-accounts/data/gnome-user-accounts-panel.desktop.in.in
panels/user-accounts/data/history-dialog.ui
panels/user-accounts/data/join-dialog.ui
panels/user-accounts/data/password-dialog.ui
panels/user-accounts/data/user-accounts-dialog.ui
panels/user-accounts/org.gnome.controlcenter.user-accounts.policy.in
panels/user-accounts/pw-utils.c
panels/user-accounts/run-passwd.c
@ -211,7 +212,6 @@ panels/user-accounts/um-history-dialog.c
panels/user-accounts/um-password-dialog.c
panels/user-accounts/um-photo-dialog.c
panels/user-accounts/um-realm-manager.c
panels/user-accounts/um-user-panel.c
panels/user-accounts/um-utils.c
panels/wacom/button-mapping.ui
panels/wacom/calibrator/calibrator-gui.c