From ee342d374b73b06ece11a7d9b657f8d0f9999dc8 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Tue, 28 Jan 2020 15:01:35 +0000 Subject: [PATCH] malcontent-control: Add MctUserSelector:show-administrators property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We don’t want to show administrators in the parental controls app, since child accounts are not administrators (if they are, they are too powerful to be constrained by parental controls). Signed-off-by: Philip Withnall --- malcontent-control/user-selector.c | 42 ++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/malcontent-control/user-selector.c b/malcontent-control/user-selector.c index 046fc93..8d7d80b 100644 --- a/malcontent-control/user-selector.c +++ b/malcontent-control/user-selector.c @@ -63,6 +63,7 @@ struct _MctUserSelector ActUserManager *user_manager; /* (owned) */ ActUser *user; /* (owned) */ + gboolean show_administrators; }; G_DEFINE_TYPE (MctUserSelector, mct_user_selector, GTK_TYPE_BOX) @@ -71,9 +72,10 @@ typedef enum { PROP_USER = 1, PROP_USER_MANAGER, + PROP_SHOW_ADMINISTRATORS, } MctUserSelectorProperty; -static GParamSpec *properties[PROP_USER_MANAGER + 1]; +static GParamSpec *properties[PROP_SHOW_ADMINISTRATORS + 1]; static void mct_user_selector_constructed (GObject *obj) @@ -117,6 +119,10 @@ mct_user_selector_get_property (GObject *object, g_value_set_object (value, self->user_manager); break; + case PROP_SHOW_ADMINISTRATORS: + g_value_set_boolean (value, self->show_administrators); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } @@ -142,6 +148,11 @@ mct_user_selector_set_property (GObject *object, self->user_manager = g_value_dup_object (value); break; + case PROP_SHOW_ADMINISTRATORS: + self->show_administrators = g_value_get_boolean (value); + reload_users (self, NULL); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } @@ -211,6 +222,21 @@ mct_user_selector_class_init (MctUserSelectorClass *klass) G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); + /** + * MctUserSelector:show-administrators: + * + * Whether to show administrators in the list, or hide them. + * + * Since: 0.5.0 + */ + properties[PROP_SHOW_ADMINISTRATORS] = + g_param_spec_boolean ("show-administrators", + "Show Administrators?", + "Whether to show administrators in the list, or hide them.", + TRUE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS); + g_object_class_install_properties (object_class, G_N_ELEMENTS (properties), properties); gtk_widget_class_set_template_from_resource (widget_class, "/org/freedesktop/MalcontentControl/ui/user-selector.ui"); @@ -223,6 +249,8 @@ mct_user_selector_class_init (MctUserSelectorClass *klass) static void mct_user_selector_init (MctUserSelector *self) { + self->show_administrators = TRUE; + /* Ensure the types used in the UI are registered. */ g_type_ensure (MCT_TYPE_CAROUSEL); @@ -351,6 +379,14 @@ reload_users (MctUserSelector *self, for (l = list; l; l = l->next) { user = l->data; + + if (act_user_get_account_type (user) == ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR && + !self->show_administrators) + { + g_debug ("Ignoring administrator %s", get_real_or_user_name (user)); + continue; + } + g_debug ("Adding user %s", get_real_or_user_name (user)); user_added_cb (self->user_manager, user, self); } @@ -410,7 +446,9 @@ user_added_cb (ActUserManager *user_manager, MctUserSelector *self = MCT_USER_SELECTOR (user_data); GtkWidget *item, *widget; - if (act_user_is_system_account (user)) + if (act_user_is_system_account (user) || + (act_user_get_account_type (user) == ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR && + !self->show_administrators)) return; g_debug ("User added: %u %s", (guint) act_user_get_uid (user), get_real_or_user_name (user));