diff options
author | Felipe Borges <felipeborges@gnome.org> | 2020-01-13 15:35:09 +0100 |
---|---|---|
committer | Ondrej Holy <oholy@redhat.com> | 2020-01-30 08:04:09 +0000 |
commit | 05313d35e2ce3a0458312927a80bc12159dac307 (patch) | |
tree | 6765f61552ffecedce99bd7b50e0863eed5ab1ed | |
parent | 43b41cb1faf73e291b0743485df457cc07504e57 (diff) | |
download | gnome-control-center-05313d35e2ce3a0458312927a80bc12159dac307.tar.gz |
user-accounts: UI style improvements
According to the mockups at
https://gitlab.gnome.org/Teams/Design/settings-mockups/raw/master/users/users.png
Fixes #771
-rw-r--r-- | panels/user-accounts/cc-user-panel.c | 169 | ||||
-rw-r--r-- | panels/user-accounts/cc-user-panel.ui | 770 | ||||
-rw-r--r-- | panels/user-accounts/um-fingerprint-dialog.c | 27 | ||||
-rw-r--r-- | panels/user-accounts/um-fingerprint-dialog.h | 4 |
4 files changed, 512 insertions, 458 deletions
diff --git a/panels/user-accounts/cc-user-panel.c b/panels/user-accounts/cc-user-panel.c index 248920e96..49eea54bf 100644 --- a/panels/user-accounts/cc-user-panel.c +++ b/panels/user-accounts/cc-user-panel.c @@ -54,6 +54,7 @@ #include "cc-common-language.h" #include "cc-permission-infobar.h" #include "cc-util.h" +#include "list-box-helper.h" #define USER_ACCOUNTS_PERMISSION "org.gnome.controlcenter.user-accounts.administration" @@ -65,31 +66,29 @@ struct _CcUserPanel { GSettings *login_screen_settings; GtkBox *accounts_box; - GtkRadioButton *account_type_admin_button; - GtkBox *account_type_box; - GtkLabel *account_type_label; - GtkRadioButton *account_type_standard_button; + GtkBox *account_settings_box; + GtkListBox *account_settings_listbox; + GtkListBox *authentication_and_login_listbox; + GtkListBoxRow *account_type_row; + GtkSwitch *account_type_switch; GtkButton *add_user_button; - GtkBox *autologin_box; - GtkLabel *autologin_label; + GtkListBoxRow *autologin_row; GtkSwitch *autologin_switch; CcCarousel *carousel; - GtkButton *fingerprint_button; - GtkLabel *fingerprint_label; + GtkLabel *fingerprint_state_label; + GtkListBoxRow *fingerprint_row; GtkStack *full_name_stack; GtkLabel *full_name_label; GtkToggleButton *full_name_edit_button; GtkEntry *full_name_entry; - GtkButton *language_button; GtkLabel *language_button_label; - GtkLabel *language_label; - GtkButton *last_login_button; + GtkListBoxRow *language_row; GtkLabel *last_login_button_label; - GtkLabel *last_login_label; + GtkListBoxRow *last_login_row; GtkBox *no_users_box; GtkRevealer *notification_revealer; - GtkButton *password_button; GtkLabel *password_button_label; + GtkListBoxRow *password_row; CcPermissionInfobar *permission_infobar; GtkButton *remove_user_button; GtkStack *stack; @@ -820,15 +819,12 @@ show_user (ActUser *user, CcUserPanel *self) gtk_toggle_button_set_active (self->full_name_edit_button, FALSE); g_signal_handlers_unblock_by_func (self->full_name_edit_button, full_name_edit_button_toggled, self); - 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); + enable = (act_user_get_account_type (user) == ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR); + gtk_switch_set_active (self->account_type_switch, enable); /* Do not show the "Account Type" option when there's a single user account. */ show = (self->other_accounts != 0); - gtk_widget_set_visible (GTK_WIDGET (self->account_type_label), show); - gtk_widget_set_visible (GTK_WIDGET (self->account_type_box), show); + gtk_widget_set_visible (GTK_WIDGET (self->account_settings_box), show); gtk_label_set_label (self->password_button_label, get_password_mode_text (user)); enable = act_user_is_local_account (user); @@ -857,19 +853,16 @@ show_user (ActUser *user, CcUserPanel *self) act_user_is_local_account (user) && (self->login_screen_settings && g_settings_get_boolean (self->login_screen_settings, "enable-fingerprint-authentication")) && - 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); + set_fingerprint_label (self->fingerprint_state_label)); + gtk_widget_set_visible (GTK_WIDGET (self->fingerprint_row), show); /* Autologin: show when local account */ show = act_user_is_local_account (user); - gtk_widget_set_visible (GTK_WIDGET (self->autologin_box), show); - gtk_widget_set_visible (GTK_WIDGET (self->autologin_label), show); + gtk_widget_set_visible (GTK_WIDGET (self->autologin_row), show); /* Language: do not show for current user */ show = act_user_get_uid (user) != getuid(); - gtk_widget_set_visible (GTK_WIDGET (self->language_button), show); - gtk_widget_set_visible (GTK_WIDGET (self->language_label), show); + gtk_widget_set_visible (GTK_WIDGET (self->language_row), show); /* Last login: show when administrator or current user */ current = act_user_manager_get_user_by_id (self->um, getuid ()); @@ -880,11 +873,10 @@ show_user (ActUser *user, CcUserPanel *self) gtk_label_set_label (self->last_login_button_label, text); g_free (text); } - gtk_widget_set_visible (GTK_WIDGET (self->last_login_button), show); - gtk_widget_set_visible (GTK_WIDGET (self->last_login_label), show); + gtk_widget_set_visible (GTK_WIDGET (self->last_login_row), show); enable = act_user_get_login_history (user) != NULL; - gtk_widget_set_sensitive (GTK_WIDGET (self->last_login_button), enable); + gtk_widget_set_sensitive (GTK_WIDGET (self->last_login_row), enable); if (self->permission != NULL) on_permission_changed (self); @@ -941,14 +933,15 @@ static void account_type_changed (CcUserPanel *self) { ActUser *user; - gint account_type; gboolean self_selected; + gboolean is_admin; + ActUserAccountType account_type; user = get_selected_user (self); self_selected = act_user_get_uid (user) == geteuid (); + is_admin = gtk_switch_get_active (self->account_type_switch); - 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; - + account_type = is_admin ? ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR : ACT_USER_ACCOUNT_TYPE_STANDARD; if (account_type != act_user_get_account_type (user)) { act_user_set_account_type (user, account_type); @@ -1091,7 +1084,7 @@ change_fingerprint (CcUserPanel *self) g_assert (g_strcmp0 (g_get_user_name (), act_user_get_user_name (user)) == 0); - fingerprint_button_clicked (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))), self->fingerprint_button, user); + fingerprint_button_clicked (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))), self->fingerprint_state_label, user); } static void @@ -1116,6 +1109,23 @@ show_history (CcUserPanel *self) } static void +activate_row (GtkListBox *box, GtkListBoxRow *row, CcUserPanel *self) +{ + if (!gtk_widget_get_sensitive (GTK_WIDGET (row))) + return; + + if (row == self->language_row) { + change_language (self); + } else if (row == self->password_row) { + change_password (self); + } else if (row == self->fingerprint_row) { + change_fingerprint (self); + } else if (row == self->last_login_row) { + show_history (self); + } +} + +static void users_loaded (CcUserPanel *self) { GtkWidget *dialog; @@ -1271,31 +1281,31 @@ on_permission_changed (CcUserPanel *self) } if (!act_user_is_local_account (user)) { - 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)); + gtk_widget_set_sensitive (GTK_WIDGET (self->account_type_row), FALSE); + remove_unlock_tooltip (GTK_WIDGET (self->account_type_row)); + gtk_widget_set_sensitive (GTK_WIDGET (self->autologin_row), FALSE); + remove_unlock_tooltip (GTK_WIDGET (self->autologin_row)); } else if (is_authorized && act_user_is_local_account (user)) { if (would_demote_only_admin (user)) { - gtk_widget_set_sensitive (GTK_WIDGET (self->account_type_box), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (self->account_type_row), FALSE); } else { - gtk_widget_set_sensitive (GTK_WIDGET (self->account_type_box), TRUE); + gtk_widget_set_sensitive (GTK_WIDGET (self->account_type_row), TRUE); } - remove_unlock_tooltip (GTK_WIDGET (self->account_type_box)); + remove_unlock_tooltip (GTK_WIDGET (self->account_type_row)); - gtk_widget_set_sensitive (GTK_WIDGET (self->autologin_switch), get_autologin_possible (user)); - remove_unlock_tooltip (GTK_WIDGET (self->autologin_switch)); + gtk_widget_set_sensitive (GTK_WIDGET (self->autologin_row), get_autologin_possible (user)); + remove_unlock_tooltip (GTK_WIDGET (self->autologin_row)); } else { - gtk_widget_set_sensitive (GTK_WIDGET (self->account_type_box), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (self->account_type_row), FALSE); if (would_demote_only_admin (user)) { - remove_unlock_tooltip (GTK_WIDGET (self->account_type_box)); + remove_unlock_tooltip (GTK_WIDGET (self->account_type_row)); } else { - add_unlock_tooltip (GTK_WIDGET (self->account_type_box)); + add_unlock_tooltip (GTK_WIDGET (self->account_type_row)); } - gtk_widget_set_sensitive (GTK_WIDGET (self->autologin_switch), FALSE); - add_unlock_tooltip (GTK_WIDGET (self->autologin_switch)); + gtk_widget_set_sensitive (GTK_WIDGET (self->autologin_row), FALSE); + add_unlock_tooltip (GTK_WIDGET (self->autologin_row)); } /* The full name entry: insensitive if remote or not authorized and not self */ @@ -1315,32 +1325,32 @@ on_permission_changed (CcUserPanel *self) if (is_authorized || self_selected) { gtk_stack_set_visible_child (self->user_icon_stack, GTK_WIDGET (self->user_icon_button)); - gtk_widget_set_sensitive (GTK_WIDGET (self->language_button), TRUE); - remove_unlock_tooltip (GTK_WIDGET (self->language_button)); + gtk_widget_set_sensitive (GTK_WIDGET (self->language_row), TRUE); + remove_unlock_tooltip (GTK_WIDGET (self->language_row)); - gtk_widget_set_sensitive (GTK_WIDGET (self->password_button), TRUE); - remove_unlock_tooltip (GTK_WIDGET (self->password_button)); + gtk_widget_set_sensitive (GTK_WIDGET (self->password_row), TRUE); + remove_unlock_tooltip (GTK_WIDGET (self->password_row)); - gtk_widget_set_sensitive (GTK_WIDGET (self->fingerprint_button), TRUE); - remove_unlock_tooltip (GTK_WIDGET (self->fingerprint_button)); + gtk_widget_set_sensitive (GTK_WIDGET (self->fingerprint_row), TRUE); + remove_unlock_tooltip (GTK_WIDGET (self->fingerprint_row)); - gtk_widget_set_sensitive (GTK_WIDGET (self->last_login_button), TRUE); - remove_unlock_tooltip (GTK_WIDGET (self->last_login_button)); + gtk_widget_set_sensitive (GTK_WIDGET (self->last_login_row), TRUE); + remove_unlock_tooltip (GTK_WIDGET (self->last_login_row)); } else { gtk_stack_set_visible_child (self->user_icon_stack, GTK_WIDGET (self->user_icon_image)); - gtk_widget_set_sensitive (GTK_WIDGET (self->language_button), FALSE); - add_unlock_tooltip (GTK_WIDGET (self->language_button)); + gtk_widget_set_sensitive (GTK_WIDGET (self->language_row), FALSE); + add_unlock_tooltip (GTK_WIDGET (self->language_row)); - gtk_widget_set_sensitive (GTK_WIDGET (self->password_button), FALSE); - add_unlock_tooltip (GTK_WIDGET (self->password_button)); + gtk_widget_set_sensitive (GTK_WIDGET (self->password_row), FALSE); + add_unlock_tooltip (GTK_WIDGET (self->password_row)); - gtk_widget_set_sensitive (GTK_WIDGET (self->fingerprint_button), FALSE); - add_unlock_tooltip (GTK_WIDGET (self->fingerprint_button)); + gtk_widget_set_sensitive (GTK_WIDGET (self->fingerprint_row), FALSE); + add_unlock_tooltip (GTK_WIDGET (self->fingerprint_row)); - gtk_widget_set_sensitive (GTK_WIDGET (self->last_login_button), FALSE); - add_unlock_tooltip (GTK_WIDGET (self->last_login_button)); + gtk_widget_set_sensitive (GTK_WIDGET (self->last_login_row), FALSE); + add_unlock_tooltip (GTK_WIDGET (self->last_login_row)); } } @@ -1385,6 +1395,13 @@ setup_main_window (CcUserPanel *self) users_loaded (self); else g_signal_connect_object (self->um, "notify::is-loaded", G_CALLBACK (users_loaded), self, G_CONNECT_SWAPPED); + + gtk_list_box_set_header_func (self->account_settings_listbox, + cc_list_box_update_header_func, + NULL, NULL); + gtk_list_box_set_header_func (self->authentication_and_login_listbox, + cc_list_box_update_header_func, + NULL, NULL); } static GSettings * @@ -1491,31 +1508,29 @@ cc_user_panel_class_init (CcUserPanelClass *klass) 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, account_settings_box); + gtk_widget_class_bind_template_child (widget_class, CcUserPanel, account_settings_listbox); + gtk_widget_class_bind_template_child (widget_class, CcUserPanel, authentication_and_login_listbox); + gtk_widget_class_bind_template_child (widget_class, CcUserPanel, account_type_row); + gtk_widget_class_bind_template_child (widget_class, CcUserPanel, account_type_switch); 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_row); 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, fingerprint_state_label); + gtk_widget_class_bind_template_child (widget_class, CcUserPanel, fingerprint_row); gtk_widget_class_bind_template_child (widget_class, CcUserPanel, full_name_stack); gtk_widget_class_bind_template_child (widget_class, CcUserPanel, full_name_label); gtk_widget_class_bind_template_child (widget_class, CcUserPanel, full_name_edit_button); gtk_widget_class_bind_template_child (widget_class, CcUserPanel, full_name_entry); - 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, language_row); 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, last_login_row); gtk_widget_class_bind_template_child (widget_class, CcUserPanel, no_users_box); 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, password_row); gtk_widget_class_bind_template_child (widget_class, CcUserPanel, permission_infobar); gtk_widget_class_bind_template_child (widget_class, CcUserPanel, remove_user_button); gtk_widget_class_bind_template_child (widget_class, CcUserPanel, stack); @@ -1526,6 +1541,7 @@ cc_user_panel_class_init (CcUserPanelClass *klass) gtk_widget_class_bind_template_child (widget_class, CcUserPanel, users_overlay); gtk_widget_class_bind_template_callback (widget_class, account_type_changed); + gtk_widget_class_bind_template_callback (widget_class, activate_row); 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); @@ -1538,5 +1554,4 @@ cc_user_panel_class_init (CcUserPanelClass *klass) 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); } diff --git a/panels/user-accounts/cc-user-panel.ui b/panels/user-accounts/cc-user-panel.ui index e9fa0ccf8..4fa5fe0eb 100644 --- a/panels/user-accounts/cc-user-panel.ui +++ b/panels/user-accounts/cc-user-panel.ui @@ -102,393 +102,452 @@ <property name="expand">False</property> </packing> </child> + <child> - <object class="GtkGrid"> + <object class="GtkScrolledWindow"> <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="margin-start">12</property> - <property name="margin-end">12</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> + <property name="expand">True</property> + <property name="hscrollbar-policy">GTK_POLICY_NEVER</property> + <child> <object class="GtkBox"> <property name="visible">True</property> - <property name="valign">GTK_ALIGN_CENTER</property> - <property name="spacing">10</property> + <property name="halign">GTK_ALIGN_CENTER</property> + <property name="orientation">GTK_ORIENTATION_VERTICAL</property> + <property name="spacing">20</property> + <property name="margin-top">30</property> + <property name="margin-bottom">30</property> + <child> - <object class="GtkStack" id="full_name_stack"> + <object class="GtkBox"> <property name="visible">True</property> + <property name="valign">GTK_ALIGN_CENTER</property> + <property name="spacing">10</property> + <property name="margin-top">10</property> + <property name="margin-bottom">10</property> <child> - <object class="GtkLabel" id="full_name_label"> + <object class="GtkStack" id="user_icon_stack"> <property name="visible">True</property> - <property name="halign">GTK_ALIGN_START</property> - <property name="ellipsize">PANGO_ELLIPSIZE_END</property> - <property name="width-chars">18</property> - <property name="max-width-chars">30</property> - <attributes> - <attribute name="scale" value="1.2"/> - <attribute name="weight" value="bold"/> - </attributes> + <property name="halign">GTK_ALIGN_END</property> + <child> + <object class="CcUserImage" 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> + <style> + <class name="user-icon-button"/> + </style> + <child internal-child="accessible"> + <object class="AtkObject"> + <property name="accessible-name" translatable="yes">User Icon</property> + </object> + </child> + <child> + <object class="CcUserImage" 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> + </child> + + <child> + <object class="GtkStack" id="full_name_stack"> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="full_name_label"> + <property name="visible">True</property> + <property name="halign">GTK_ALIGN_START</property> + <property name="ellipsize">PANGO_ELLIPSIZE_END</property> + <property name="width-chars">18</property> + <property name="max-width-chars">30</property> + <property name="xalign">0</property> + <attributes> + <attribute name="scale" value="1.2"/> + <attribute name="weight" value="bold"/> + </attributes> + </object> + </child> + <child> + <object class="GtkEntry" id="full_name_entry"> + <property name="visible">True</property> + <property name="max-length">255</property> + <property name="width-chars">18</property> + <property name="max-width-chars">30</property> + <property name="valign">GTK_ALIGN_CENTER</property> + <signal name="activate" handler="full_name_entry_activate" object="CcUserPanel" swapped="yes"/> + <signal name="key-press-event" handler="full_name_entry_key_press_cb" object="CcUserPanel" swapped="yes"/> + </object> + </child> </object> </child> <child> - <object class="GtkEntry" id="full_name_entry"> + <object class="GtkToggleButton" id="full_name_edit_button"> <property name="visible">True</property> - <property name="max-length">255</property> - <property name="width-chars">18</property> - <property name="max-width-chars">30</property> + <signal name="toggled" handler="full_name_edit_button_toggled" object="CcUserPanel" swapped="yes"/> <property name="valign">GTK_ALIGN_CENTER</property> - <signal name="activate" handler="full_name_entry_activate" object="CcUserPanel" swapped="yes"/> - <signal name="key-press-event" handler="full_name_entry_key_press_cb" object="CcUserPanel" swapped="yes"/> + <style> + <class name="circular"/> + </style> + <child> + <object class="GtkImage"> + <property name="visible">True</property> + <property name="margin">5</property> + <property name="icon-name">document-edit-symbolic</property> + </object> + </child> </object> + <packing> + <property name="pack_type">end</property> + </packing> </child> </object> </child> + <child> - <object class="GtkToggleButton" id="full_name_edit_button"> + <object class="GtkBox" id="account_settings_box"> <property name="visible">True</property> - <signal name="toggled" handler="full_name_edit_button_toggled" object="CcUserPanel" swapped="yes"/> - <style> - <class name="circular"/> - </style> + <property name="orientation">GTK_ORIENTATION_VERTICAL</property> + <property name="spacing">10</property> <child> - <object class="GtkImage"> + <object class="GtkLabel"> <property name="visible">True</property> - <property name="margin">5</property> - <property name="icon-name">document-edit-symbolic</property> + <property name="label" translatable="yes">Account Settings</property> + <property name="halign">GTK_ALIGN_START</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> </object> </child> - </object> - <packing> - <property name="pack_type">end</property> - </packing> - </child> - </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="CcUserImage" 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> + <child> + <object class="GtkListBox" id="account_settings_listbox"> + <property name="visible">True</property> + <property name="selection-mode">GTK_SELECTION_NONE</property> + <signal name="row-activated" handler="activate_row"/> + <style> + <class name="frame"/> + </style> + <child> + <object class="GtkListBoxRow" id="account_type_row"> + <property name="visible">True</property> + <child> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="border-width">10</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="halign">GTK_ALIGN_START</property> + <property name="label" translatable="yes">_Administrator</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">account_type_switch</property> + </object> + </child> + <child> + <object class="GtkSwitch" id="account_type_switch"> + <property name="visible">True</property> + <signal name="notify::active" handler="account_type_changed" object="CcUserPanel" swapped="yes"/> + </object> + <packing> + <property name="left_attach">1</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="wrap">True</property> + <property name="xalign">0</property> + <property name="max-width-chars">48</property> + <property name="label" translatable="yes">Administrators can add and remove other users, and can change settings for all users.</property> + <style> + <class name="dim-label"/> + </style> + <attributes> + <attribute name="scale" value="0.9"/> + </attributes> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child> + <object class="GtkListBoxRow" id="language_row"> + <property name="visible">True</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="border-width">10</property> + <property name="spacing">10</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Language</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">language_button_label</property> + </object> + </child> + <child> + <object class="GtkImage"> + <property name="visible">True</property> + <property name="icon-name">go-next-symbolic</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="pack_type">end</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="language_button_label"> + <property name="visible">True</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="pack_type">end</property> + </packing> + </child> + </object> + </child> + </object> + </child> </object> </child> </object> </child> + <child> - <object class="GtkToggleButton" id="user_icon_button"> + <object class="GtkBox" id="authentication_and_login_box"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <style> - <class name="user-icon-button"/> - </style> - <child internal-child="accessible"> - <object class="AtkObject"> - <property name="accessible-name" translatable="yes">User Icon</property> + <property name="orientation">GTK_ORIENTATION_VERTICAL</property> + <property name="spacing">10</property> + <property name="margin-top">10</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="label" translatable="yes">Authentication & Login</property> + <property name="halign">GTK_ALIGN_START</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> </object> </child> <child> - <object class="CcUserImage" id="user_icon_image2"> + <object class="GtkListBox" id="authentication_and_login_listbox"> <property name="visible">True</property> - <property name="icon_name">avatar-default</property> - <property name="pixel_size">96</property> + <property name="selection-mode">GTK_SELECTION_NONE</property> + <signal name="row-activated" handler="activate_row"/> + <style> + <class name="frame"/> + </style> + <child> + <object class="GtkListBoxRow" id="password_row"> + <property name="visible">True</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="border-width">10</property> + <property name="spacing">10</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Password</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">password_button_label</property> + </object> + </child> + <child> + <object class="GtkImage"> + <property name="visible">True</property> + <property name="icon-name">go-next-symbolic</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="pack_type">end</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="password_button_label"> + <property name="visible">True</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="pack_type">end</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child> + <object class="GtkListBoxRow" id="fingerprint_row"> + <property name="visible">True</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="border-width">10</property> + <property name="spacing">10</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Fingerprint Login</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">fingerprint_state_label</property> + </object> + </child> + <child> + <object class="GtkImage"> + <property name="visible">True</property> + <property name="icon-name">go-next-symbolic</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="pack_type">end</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="fingerprint_state_label"> + <property name="visible">True</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="pack_type">end</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child> + <object class="GtkListBoxRow" id="autologin_row"> + <property name="visible">True</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="border-width">10</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="label" translatable="yes">A_utomatic Login</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">autologin_switch</property> + </object> + </child> + <child> + <object class="GtkSwitch" id="autologin_switch"> + <property name="visible">True</property> + <signal name="notify::active" handler="autologin_changed" object="CcUserPanel" swapped="yes"/> + </object> + <packing> + <property name="pack_type">end</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child> + <object class="GtkListBoxRow" id="last_login_row"> + <property name="visible">True</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="border-width">10</property> + <property name="spacing">10</property> + <child> + <object class="GtkLabel"> + <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_label</property> + </object> + </child> + <child> + <object class="GtkImage"> + <property name="visible">True</property> + <property name="icon-name">go-next-symbolic</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="pack_type">end</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="last_login_button_label"> + <property name="visible">True</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="pack_type">end</property> + </packing> + </child> + </object> + </child> + </object> + </child> </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"> + <object class="GtkButton" id="remove_user_button"> <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> + <property name="can_focus">True</property> + <property name="halign">GTK_ALIGN_END</property> + <property name="label" translatable="yes">Remove User…</property> + <property name="margin-top">10</property> + <property name="margin-bottom">10</property> + <signal name="clicked" handler="delete_user" object="CcUserPanel" swapped="yes"/> + <style> + <class name="destructive-action"/> + </style> </object> + <packing> + <property name="pack_type">end</property> + </packing> </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">True</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> @@ -540,30 +599,11 @@ <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"/> + <widget name="language_row"/> + <widget name="password_row"/> + <widget name="fingerprint_row"/> + <widget name="autologin_row"/> + <widget name="last_login_row"/> </widgets> </object> </interface> diff --git a/panels/user-accounts/um-fingerprint-dialog.c b/panels/user-accounts/um-fingerprint-dialog.c index f3903cb9d..ccbec54b4 100644 --- a/panels/user-accounts/um-fingerprint-dialog.c +++ b/panels/user-accounts/um-fingerprint-dialog.c @@ -45,7 +45,7 @@ enum { }; typedef struct { - GtkButton *editable_button; + GtkLabel *state_label; GtkWidget *ass; GtkBuilder *dialog; @@ -177,7 +177,7 @@ get_error_dialog (const char *title, } gboolean -set_fingerprint_label (GtkButton *editable_button) +set_fingerprint_label (GtkLabel *state_label) { GDBusProxy *device; GVariant *result; @@ -208,12 +208,11 @@ set_fingerprint_label (GtkButton *editable_button) if (fingers == NULL || g_variant_iter_n_children (fingers) == 0) { is_disable = FALSE; - gtk_button_set_label (editable_button, _("Disabled")); + gtk_label_set_text (state_label, _("Disabled")); } else { is_disable = TRUE; - gtk_button_set_label (editable_button, _("Enabled")); + gtk_label_set_text (state_label, _("Enabled")); } - gtk_widget_set_halign (gtk_bin_get_child (GTK_BIN (editable_button)), GTK_ALIGN_START); if (result != NULL) g_variant_unref (result); @@ -247,7 +246,7 @@ delete_fingerprints (void) static void delete_fingerprints_question (GtkWindow *parent, - GtkButton *editable_button, + GtkLabel *state_label, ActUser *user) { GtkWidget *question; @@ -272,7 +271,7 @@ delete_fingerprints_question (GtkWindow *parent, if (gtk_dialog_run (GTK_DIALOG (question)) == GTK_RESPONSE_OK) { delete_fingerprints (); - set_fingerprint_label (editable_button); + set_fingerprint_label (state_label); } gtk_widget_destroy (question); @@ -414,10 +413,10 @@ finger_combobox_changed (GtkComboBox *combobox, EnrollData *data) static void assistant_cancelled (GtkAssistant *ass, EnrollData *data) { - GtkButton *editable_button = data->editable_button; + GtkLabel *state_label = data->state_label; enroll_data_destroy (data); - set_fingerprint_label (editable_button); + set_fingerprint_label (state_label); } static void @@ -607,7 +606,7 @@ assistant_prepare (GtkAssistant *ass, GtkWidget *page, EnrollData *data) static void enroll_fingerprints (GtkWindow *parent, - GtkButton *editable_button, + GtkLabel *state_label, ActUser *user) { GDBusProxy *device = NULL; @@ -635,7 +634,7 @@ enroll_fingerprints (GtkWindow *parent, data = g_new0 (EnrollData, 1); data->device = device; - data->editable_button = editable_button; + data->state_label = state_label; /* Get some details about the device */ result = g_dbus_connection_call_sync (connection, @@ -735,16 +734,16 @@ enroll_fingerprints (GtkWindow *parent, void fingerprint_button_clicked (GtkWindow *parent, - GtkButton *editable_button, + GtkLabel *state_label, ActUser *user) { bindtextdomain ("fprintd", GNOMELOCALEDIR); bind_textdomain_codeset ("fprintd", "UTF-8"); if (is_disable != FALSE) { - delete_fingerprints_question (parent, editable_button, user); + delete_fingerprints_question (parent, state_label, user); } else { - enroll_fingerprints (parent, editable_button, user); + enroll_fingerprints (parent, state_label, user); } } diff --git a/panels/user-accounts/um-fingerprint-dialog.h b/panels/user-accounts/um-fingerprint-dialog.h index 83015c331..a1f6afc8b 100644 --- a/panels/user-accounts/um-fingerprint-dialog.h +++ b/panels/user-accounts/um-fingerprint-dialog.h @@ -20,7 +20,7 @@ #include <gtk/gtk.h> #include <act/act.h> -gboolean set_fingerprint_label (GtkButton *editable_button); +gboolean set_fingerprint_label (GtkLabel *state_label); void fingerprint_button_clicked (GtkWindow *parent, - GtkButton *editable_button, + GtkLabel *state_label, ActUser *user); |