user-accounts: Use g_autoptr/g_autofree
This commit is contained in:
parent
2dbab9d4fa
commit
c690e921ca
9 changed files with 194 additions and 382 deletions
|
@ -191,11 +191,10 @@ create_user_done (ActUserManager *manager,
|
|||
CcAddUserDialog *self)
|
||||
{
|
||||
ActUser *user;
|
||||
GError *error;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
/* Note that user is returned without an extra reference */
|
||||
|
||||
error = NULL;
|
||||
user = act_user_manager_create_user_finish (manager, res, &error);
|
||||
|
||||
if (user == NULL) {
|
||||
|
@ -203,7 +202,6 @@ create_user_done (ActUserManager *manager,
|
|||
g_debug ("Failed to create user: %s", error->message);
|
||||
if (!g_error_matches (error, ACT_USER_MANAGER_ERROR, ACT_USER_MANAGER_ERROR_PERMISSION_DENIED))
|
||||
show_error_dialog (self, _("Failed to add account"), error);
|
||||
g_error_free (error);
|
||||
gtk_widget_grab_focus (GTK_WIDGET (self->local_name_entry));
|
||||
} else {
|
||||
g_debug ("Created user: %s", act_user_get_user_name (user));
|
||||
|
@ -311,7 +309,7 @@ static void local_username_is_valid_cb (GObject *source_object,
|
|||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
CcAddUserDialog *self = CC_ADD_USER_DIALOG (user_data);
|
||||
g_autoptr(CcAddUserDialog) self = CC_ADD_USER_DIALOG (user_data);
|
||||
g_autoptr(GError) error = NULL;
|
||||
g_autofree gchar *tip = NULL;
|
||||
g_autofree gchar *name = NULL;
|
||||
|
@ -330,8 +328,6 @@ static void local_username_is_valid_cb (GObject *source_object,
|
|||
gtk_label_set_label (self->local_username_hint_label, tip);
|
||||
dialog_validate (self);
|
||||
}
|
||||
|
||||
g_object_unref (self);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@ -412,17 +408,23 @@ generate_username_choices (const gchar *name,
|
|||
GtkListStore *store)
|
||||
{
|
||||
gboolean in_use, same_as_initial;
|
||||
char *lc_name, *ascii_name, *stripped_name;
|
||||
char **words1;
|
||||
char **words2 = NULL;
|
||||
g_autofree gchar *lc_name = NULL;
|
||||
g_autofree gchar *ascii_name = NULL;
|
||||
g_autofree gchar *stripped_name = NULL;
|
||||
g_auto(GStrv) words1 = NULL;
|
||||
char **w1, **w2;
|
||||
char *c;
|
||||
char *unicode_fallback = "?";
|
||||
GString *first_word, *last_word;
|
||||
GString *item0, *item1, *item2, *item3, *item4;
|
||||
g_autoptr(GString) first_word = NULL;
|
||||
g_autoptr(GString) last_word = NULL;
|
||||
g_autoptr(GString) item0 = NULL;
|
||||
g_autoptr(GString) item1 = NULL;
|
||||
g_autoptr(GString) item2 = NULL;
|
||||
g_autoptr(GString) item3 = NULL;
|
||||
g_autoptr(GString) item4 = NULL;
|
||||
int len;
|
||||
int nwords1, nwords2, i;
|
||||
GHashTable *items;
|
||||
g_autoptr(GHashTable) items = NULL;
|
||||
GtkTreeIter iter;
|
||||
gsize max_name_length;
|
||||
|
||||
|
@ -454,9 +456,6 @@ generate_username_choices (const gchar *name,
|
|||
}
|
||||
|
||||
if (strlen (stripped_name) == 0) {
|
||||
g_free (ascii_name);
|
||||
g_free (lc_name);
|
||||
g_free (stripped_name);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -470,10 +469,6 @@ generate_username_choices (const gchar *name,
|
|||
/* The default item is a concatenation of all words without ? */
|
||||
item0 = g_string_sized_new (strlen (stripped_name));
|
||||
|
||||
g_free (ascii_name);
|
||||
g_free (lc_name);
|
||||
g_free (stripped_name);
|
||||
|
||||
/* Concatenate the whole first word with the first letter of each
|
||||
* word (item1), and the last word with the first letter of each
|
||||
* word (item2). item3 and item4 are symmetrical respectively to
|
||||
|
@ -496,6 +491,8 @@ generate_username_choices (const gchar *name,
|
|||
nwords1 = 0;
|
||||
nwords2 = 0;
|
||||
for (w1 = words1; *w1; w1++) {
|
||||
g_auto(GStrv) words2 = NULL;
|
||||
|
||||
if (strlen (*w1) == 0)
|
||||
continue;
|
||||
|
||||
|
@ -543,8 +540,6 @@ generate_username_choices (const gchar *name,
|
|||
/* always save current word so that we have it if last one reveals empty */
|
||||
last_word = g_string_append (last_word, *w2);
|
||||
}
|
||||
|
||||
g_strfreev (words2);
|
||||
}
|
||||
item2 = g_string_append (item2, last_word->str);
|
||||
item3 = g_string_append (item3, first_word->str);
|
||||
|
@ -623,16 +618,6 @@ generate_username_choices (const gchar *name,
|
|||
g_hash_table_insert (items, first_word->str, first_word->str);
|
||||
}
|
||||
}
|
||||
|
||||
g_hash_table_destroy (items);
|
||||
g_strfreev (words1);
|
||||
g_string_free (first_word, TRUE);
|
||||
g_string_free (last_word, TRUE);
|
||||
g_string_free (item0, TRUE);
|
||||
g_string_free (item1, TRUE);
|
||||
g_string_free (item2, TRUE);
|
||||
g_string_free (item3, TRUE);
|
||||
g_string_free (item4, TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -684,7 +669,7 @@ update_password_match (CcAddUserDialog *self)
|
|||
static void
|
||||
local_password_entry_icon_press_cb (CcAddUserDialog *self)
|
||||
{
|
||||
gchar *pwd;
|
||||
g_autofree gchar *pwd = NULL;
|
||||
|
||||
pwd = pw_generate ();
|
||||
if (pwd == NULL)
|
||||
|
@ -694,8 +679,6 @@ local_password_entry_icon_press_cb (CcAddUserDialog *self)
|
|||
gtk_entry_set_text (self->local_verify_entry, pwd);
|
||||
gtk_entry_set_visibility (self->local_password_entry, TRUE);
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (self->local_verify_entry), TRUE);
|
||||
|
||||
g_free (pwd);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@ -813,11 +796,10 @@ enterprise_add_realm (CcAddUserDialog *self,
|
|||
{
|
||||
GtkTreeModel *model;
|
||||
GtkTreeIter iter;
|
||||
CcRealmCommon *common;
|
||||
g_autoptr(CcRealmCommon) common = NULL;
|
||||
const gchar *realm_name;
|
||||
gboolean match;
|
||||
gboolean ret;
|
||||
gchar *name;
|
||||
|
||||
common = cc_realm_object_get_common (realm);
|
||||
g_return_if_fail (common != NULL);
|
||||
|
@ -834,12 +816,12 @@ enterprise_add_realm (CcAddUserDialog *self,
|
|||
model = GTK_TREE_MODEL (self->enterprise_realm_model);
|
||||
ret = gtk_tree_model_get_iter_first (model, &iter);
|
||||
while (ret) {
|
||||
g_autofree gchar *name = NULL;
|
||||
|
||||
gtk_tree_model_get (model, &iter, 0, &name, -1);
|
||||
match = (g_strcmp0 (name, realm_name) == 0);
|
||||
g_free (name);
|
||||
if (match) {
|
||||
g_debug ("ignoring duplicate realm: %s", realm_name);
|
||||
g_object_unref (common);
|
||||
return;
|
||||
}
|
||||
ret = gtk_tree_model_iter_next (model, &iter);
|
||||
|
@ -858,8 +840,6 @@ enterprise_add_realm (CcAddUserDialog *self,
|
|||
|
||||
g_debug ("added realm to drop down: %s %s", realm_name,
|
||||
g_dbus_object_get_object_path (G_DBUS_OBJECT (realm)));
|
||||
|
||||
g_object_unref (common);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -875,12 +855,11 @@ on_register_user (GObject *source,
|
|||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
CcAddUserDialog *self = CC_ADD_USER_DIALOG (user_data);
|
||||
GError *error = NULL;
|
||||
g_autoptr(CcAddUserDialog) self = CC_ADD_USER_DIALOG (user_data);
|
||||
g_autoptr(GError) error = NULL;
|
||||
ActUser *user;
|
||||
|
||||
if (g_cancellable_is_cancelled (self->cancellable)) {
|
||||
g_object_unref (self);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -896,10 +875,7 @@ on_register_user (GObject *source,
|
|||
show_error_dialog (self, _("Failed to register account"), error);
|
||||
g_message ("Couldn't cache user account: %s", error->message);
|
||||
finish_action (self);
|
||||
g_error_free (error);
|
||||
}
|
||||
|
||||
g_object_unref (self);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -907,20 +883,18 @@ on_permit_user_login (GObject *source,
|
|||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
CcAddUserDialog *self = CC_ADD_USER_DIALOG (user_data);
|
||||
g_autoptr(CcAddUserDialog) self = CC_ADD_USER_DIALOG (user_data);
|
||||
CcRealmCommon *common;
|
||||
ActUserManager *manager;
|
||||
GError *error = NULL;
|
||||
gchar *login;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
if (g_cancellable_is_cancelled (self->cancellable)) {
|
||||
g_object_unref (self);
|
||||
return;
|
||||
}
|
||||
|
||||
common = CC_REALM_COMMON (source);
|
||||
cc_realm_common_call_change_login_policy_finish (common, result, &error);
|
||||
if (error == NULL) {
|
||||
if (cc_realm_common_call_change_login_policy_finish (common, result, &error)) {
|
||||
g_autofree gchar *login = NULL;
|
||||
|
||||
/*
|
||||
* Now tell the account service about this user. The account service
|
||||
|
@ -936,23 +910,18 @@ on_permit_user_login (GObject *source,
|
|||
act_user_manager_cache_user_async (manager, login, self->cancellable,
|
||||
on_register_user, g_object_ref (self));
|
||||
|
||||
g_free (login);
|
||||
|
||||
} else {
|
||||
show_error_dialog (self, _("Failed to register account"), error);
|
||||
g_message ("Couldn't permit logins on account: %s", error->message);
|
||||
finish_action (self);
|
||||
g_error_free (error);
|
||||
}
|
||||
|
||||
g_object_unref (self);
|
||||
}
|
||||
|
||||
static void
|
||||
enterprise_permit_user_login (CcAddUserDialog *self)
|
||||
{
|
||||
CcRealmCommon *common;
|
||||
gchar *login;
|
||||
g_autoptr(CcRealmCommon) common = NULL;
|
||||
g_autofree gchar *login = NULL;
|
||||
const gchar *add[2];
|
||||
const gchar *remove[1];
|
||||
GVariant *options;
|
||||
|
@ -980,9 +949,6 @@ enterprise_permit_user_login (CcAddUserDialog *self)
|
|||
self->cancellable,
|
||||
on_permit_user_login,
|
||||
g_object_ref (self));
|
||||
|
||||
g_object_unref (common);
|
||||
g_free (login);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1011,8 +977,8 @@ static void
|
|||
join_show_prompt (CcAddUserDialog *self,
|
||||
GError *error)
|
||||
{
|
||||
CcRealmKerberosMembership *membership;
|
||||
CcRealmKerberos *kerberos;
|
||||
g_autoptr(CcRealmKerberosMembership) membership = NULL;
|
||||
g_autoptr(CcRealmKerberos) kerberos = NULL;
|
||||
const gchar *name;
|
||||
|
||||
gtk_entry_set_text (self->join_password, "");
|
||||
|
@ -1052,8 +1018,6 @@ join_show_prompt (CcAddUserDialog *self,
|
|||
gtk_window_present (GTK_WINDOW (self->join_dialog));
|
||||
|
||||
self->join_prompted = TRUE;
|
||||
g_object_unref (kerberos);
|
||||
g_object_unref (membership);
|
||||
|
||||
/* And now we wait for on_join_response() */
|
||||
}
|
||||
|
@ -1063,19 +1027,18 @@ on_join_login (GObject *source,
|
|||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
CcAddUserDialog *self = CC_ADD_USER_DIALOG (user_data);
|
||||
GError *error = NULL;
|
||||
GBytes *creds;
|
||||
g_autoptr(CcAddUserDialog) self = CC_ADD_USER_DIALOG (user_data);
|
||||
g_autoptr(GError) error = NULL;
|
||||
g_autoptr(GBytes) creds = NULL;
|
||||
|
||||
if (g_cancellable_is_cancelled (self->cancellable)) {
|
||||
g_object_unref (self);
|
||||
return;
|
||||
}
|
||||
|
||||
creds = cc_realm_login_finish (result, &error);
|
||||
|
||||
/* Logged in as admin successfully, use creds to join domain */
|
||||
if (error == NULL) {
|
||||
if (creds != NULL) {
|
||||
if (!cc_realm_join_as_admin (self->selected_realm,
|
||||
gtk_entry_get_text (self->join_name),
|
||||
gtk_entry_get_text (self->join_password),
|
||||
|
@ -1086,23 +1049,18 @@ on_join_login (GObject *source,
|
|||
finish_action (self);
|
||||
}
|
||||
|
||||
g_bytes_unref (creds);
|
||||
|
||||
/* Couldn't login as admin, show prompt again */
|
||||
} else {
|
||||
join_show_prompt (self, error);
|
||||
g_message ("Couldn't log in as admin to join domain: %s", error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
|
||||
g_object_unref (self);
|
||||
}
|
||||
|
||||
static void
|
||||
join_init (CcAddUserDialog *self)
|
||||
{
|
||||
GtkBuilder *builder;
|
||||
GError *error = NULL;
|
||||
g_autoptr(GtkBuilder) builder = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
builder = gtk_builder_new ();
|
||||
|
||||
|
@ -1110,7 +1068,6 @@ join_init (CcAddUserDialog *self)
|
|||
"/org/gnome/control-center/user-accounts/join-dialog.ui",
|
||||
&error)) {
|
||||
g_error ("%s", error->message);
|
||||
g_error_free (error);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1121,8 +1078,6 @@ join_init (CcAddUserDialog *self)
|
|||
|
||||
g_signal_connect_object (self->join_dialog, "response",
|
||||
G_CALLBACK (on_join_response), self, G_CONNECT_SWAPPED);
|
||||
|
||||
g_object_unref (builder);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1130,11 +1085,10 @@ on_realm_joined (GObject *source,
|
|||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
CcAddUserDialog *self = CC_ADD_USER_DIALOG (user_data);
|
||||
GError *error = NULL;
|
||||
g_autoptr(CcAddUserDialog) self = CC_ADD_USER_DIALOG (user_data);
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
if (g_cancellable_is_cancelled (self->cancellable)) {
|
||||
g_object_unref (self);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1158,9 +1112,6 @@ on_realm_joined (GObject *source,
|
|||
g_message ("Failed to join the domain: %s", error->message);
|
||||
finish_action (self);
|
||||
}
|
||||
|
||||
g_clear_error (&error);
|
||||
g_object_unref (self);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1168,13 +1119,12 @@ on_realm_login (GObject *source,
|
|||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
CcAddUserDialog *self = CC_ADD_USER_DIALOG (user_data);
|
||||
GError *error = NULL;
|
||||
GBytes *creds = NULL;
|
||||
g_autoptr(CcAddUserDialog) self = CC_ADD_USER_DIALOG (user_data);
|
||||
g_autoptr(GError) error = NULL;
|
||||
g_autoptr(GBytes) creds = NULL;
|
||||
const gchar *message;
|
||||
|
||||
if (g_cancellable_is_cancelled (self->cancellable)) {
|
||||
g_object_unref (self);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1210,8 +1160,6 @@ on_realm_login (GObject *source,
|
|||
join_show_prompt (self, NULL);
|
||||
}
|
||||
|
||||
g_bytes_unref (creds);
|
||||
|
||||
/* A problem with the user's login name or password */
|
||||
} else if (g_error_matches (error, CC_REALM_ERROR, CC_REALM_ERROR_BAD_LOGIN)) {
|
||||
g_debug ("Problem with the user's login: %s", error->message);
|
||||
|
@ -1234,9 +1182,6 @@ on_realm_login (GObject *source,
|
|||
g_message ("Couldn't log in as user: %s", error->message);
|
||||
finish_action (self);
|
||||
}
|
||||
|
||||
g_clear_error (&error);
|
||||
g_object_unref (self);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1257,13 +1202,11 @@ on_realm_discover_input (GObject *source,
|
|||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
CcAddUserDialog *self = CC_ADD_USER_DIALOG (user_data);
|
||||
GError *error = NULL;
|
||||
g_autoptr(CcAddUserDialog) self = CC_ADD_USER_DIALOG (user_data);
|
||||
g_autoptr(GError) error = NULL;
|
||||
GList *realms;
|
||||
gchar *message;
|
||||
|
||||
if (g_cancellable_is_cancelled (self->cancellable)) {
|
||||
g_object_unref (self);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1284,6 +1227,8 @@ on_realm_discover_input (GObject *source,
|
|||
|
||||
/* The domain is likely invalid*/
|
||||
} else {
|
||||
g_autofree gchar *message = NULL;
|
||||
|
||||
g_message ("Couldn't discover domain: %s", error->message);
|
||||
g_dbus_error_strip_remote_error (error);
|
||||
|
||||
|
@ -1294,9 +1239,6 @@ on_realm_discover_input (GObject *source,
|
|||
}
|
||||
gtk_label_set_text (self->enterprise_domain_hint_label, message);
|
||||
|
||||
g_free (message);
|
||||
g_error_free (error);
|
||||
|
||||
if (self->enterprise_check_credentials) {
|
||||
finish_action (self);
|
||||
self->enterprise_check_credentials = FALSE;
|
||||
|
@ -1307,8 +1249,6 @@ on_realm_discover_input (GObject *source,
|
|||
finish_action (self);
|
||||
dialog_validate (self);
|
||||
}
|
||||
|
||||
g_object_unref (self);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1349,8 +1289,7 @@ clear_realm_manager (CcAddUserDialog *self)
|
|||
g_signal_handlers_disconnect_by_func (self->realm_manager,
|
||||
on_manager_realm_added,
|
||||
self);
|
||||
g_object_unref (self->realm_manager);
|
||||
self->realm_manager = NULL;
|
||||
g_clear_object (&self->realm_manager);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1359,8 +1298,8 @@ on_realm_manager_created (GObject *source,
|
|||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
CcAddUserDialog *self = CC_ADD_USER_DIALOG (user_data);
|
||||
GError *error = NULL;
|
||||
g_autoptr(CcAddUserDialog) self = CC_ADD_USER_DIALOG (user_data);
|
||||
g_autoptr(GError) error = NULL;
|
||||
GList *realms, *l;
|
||||
|
||||
clear_realm_manager (self);
|
||||
|
@ -1368,13 +1307,10 @@ on_realm_manager_created (GObject *source,
|
|||
self->realm_manager = cc_realm_manager_new_finish (result, &error);
|
||||
if (error != NULL) {
|
||||
g_warning ("Couldn't contact realmd service: %s", error->message);
|
||||
g_object_unref (self);
|
||||
g_error_free (error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (g_cancellable_is_cancelled (self->cancellable)) {
|
||||
g_object_unref (self);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1393,7 +1329,6 @@ on_realm_manager_created (GObject *source,
|
|||
/* Show the 'Enterprise Login' stuff, and update mode */
|
||||
gtk_widget_show (GTK_WIDGET (self->enterprise_button));
|
||||
mode_change (self, self->mode);
|
||||
g_object_unref (self);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1595,8 +1530,8 @@ on_permission_acquired (GObject *source_object,
|
|||
GAsyncResult *res,
|
||||
gpointer user_data)
|
||||
{
|
||||
CcAddUserDialog *self = CC_ADD_USER_DIALOG (user_data);
|
||||
GError *error = NULL;
|
||||
g_autoptr(CcAddUserDialog) self = CC_ADD_USER_DIALOG (user_data);
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
/* Paired with begin_action in cc_add_user_dialog_response () */
|
||||
finish_action (self);
|
||||
|
@ -1607,9 +1542,6 @@ on_permission_acquired (GObject *source_object,
|
|||
} else if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
|
||||
g_warning ("Failed to acquire permission: %s", error->message);
|
||||
}
|
||||
|
||||
g_clear_error (&error);
|
||||
g_object_unref (self);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1653,8 +1585,7 @@ cc_add_user_dialog_dispose (GObject *obj)
|
|||
g_signal_handlers_disconnect_by_func (self->realm_manager,
|
||||
on_manager_realm_added,
|
||||
self);
|
||||
g_object_unref (self->realm_manager);
|
||||
self->realm_manager = NULL;
|
||||
g_clear_object (&self->realm_manager);
|
||||
}
|
||||
|
||||
if (self->local_password_timeout_id != 0) {
|
||||
|
@ -1687,8 +1618,7 @@ cc_add_user_dialog_finalize (GObject *obj)
|
|||
{
|
||||
CcAddUserDialog *self = CC_ADD_USER_DIALOG (obj);
|
||||
|
||||
if (self->cancellable)
|
||||
g_object_unref (self->cancellable);
|
||||
g_clear_object (&self->cancellable);
|
||||
g_clear_object (&self->permission);
|
||||
|
||||
G_OBJECT_CLASS (cc_add_user_dialog_parent_class)->finalize (obj);
|
||||
|
|
|
@ -73,7 +73,8 @@ crop_dialog_response (CcAvatarChooser *self,
|
|||
gint response_id,
|
||||
GtkWidget *dialog)
|
||||
{
|
||||
GdkPixbuf *pb, *pb2;
|
||||
g_autoptr(GdkPixbuf) pb = NULL;
|
||||
g_autoptr(GdkPixbuf) pb2 = NULL;
|
||||
|
||||
if (response_id != GTK_RESPONSE_ACCEPT) {
|
||||
self->crop_area = NULL;
|
||||
|
@ -86,9 +87,6 @@ crop_dialog_response (CcAvatarChooser *self,
|
|||
|
||||
set_user_icon_data (self->user, pb2);
|
||||
|
||||
g_object_unref (pb2);
|
||||
g_object_unref (pb);
|
||||
|
||||
self->crop_area = NULL;
|
||||
gtk_widget_destroy (dialog);
|
||||
|
||||
|
@ -136,9 +134,10 @@ file_chooser_response (CcAvatarChooser *self,
|
|||
gint response,
|
||||
GtkDialog *chooser)
|
||||
{
|
||||
gchar *filename;
|
||||
GError *error;
|
||||
GdkPixbuf *pixbuf, *pixbuf2;
|
||||
g_autofree gchar *filename = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
g_autoptr(GdkPixbuf) pixbuf = NULL;
|
||||
g_autoptr(GdkPixbuf) pixbuf2 = NULL;
|
||||
|
||||
if (response != GTK_RESPONSE_ACCEPT) {
|
||||
gtk_widget_destroy (GTK_WIDGET (chooser));
|
||||
|
@ -147,36 +146,31 @@ file_chooser_response (CcAvatarChooser *self,
|
|||
|
||||
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));
|
||||
|
||||
error = NULL;
|
||||
pixbuf = gdk_pixbuf_new_from_file (filename, &error);
|
||||
if (pixbuf == NULL) {
|
||||
g_warning ("Failed to load %s: %s", filename, error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
g_free (filename);
|
||||
|
||||
pixbuf2 = gdk_pixbuf_apply_embedded_orientation (pixbuf);
|
||||
g_object_unref (pixbuf);
|
||||
|
||||
gtk_widget_destroy (GTK_WIDGET (chooser));
|
||||
|
||||
cc_avatar_chooser_crop (self, pixbuf2);
|
||||
g_object_unref (pixbuf2);
|
||||
}
|
||||
|
||||
static void
|
||||
update_preview (GtkFileChooser *chooser,
|
||||
GnomeDesktopThumbnailFactory *thumb_factory)
|
||||
{
|
||||
gchar *uri;
|
||||
g_autofree gchar *uri = NULL;
|
||||
|
||||
uri = gtk_file_chooser_get_uri (chooser);
|
||||
|
||||
if (uri) {
|
||||
GdkPixbuf *pixbuf = NULL;
|
||||
char *mime_type = NULL;
|
||||
GFile *file;
|
||||
GFileInfo *file_info;
|
||||
g_autoptr(GdkPixbuf) pixbuf = NULL;
|
||||
g_autofree char *mime_type = NULL;
|
||||
g_autoptr(GFile) file = NULL;
|
||||
g_autoptr(GFileInfo) file_info = NULL;
|
||||
GtkWidget *preview;
|
||||
|
||||
preview = gtk_file_chooser_get_preview_widget (chooser);
|
||||
|
@ -186,19 +180,16 @@ update_preview (GtkFileChooser *chooser,
|
|||
"standard::*",
|
||||
G_FILE_QUERY_INFO_NONE,
|
||||
NULL, NULL);
|
||||
g_object_unref (file);
|
||||
|
||||
if (file_info != NULL &&
|
||||
g_file_info_get_file_type (file_info) != G_FILE_TYPE_DIRECTORY) {
|
||||
mime_type = g_strdup (g_file_info_get_content_type (file_info));
|
||||
g_object_unref (file_info);
|
||||
}
|
||||
|
||||
if (mime_type) {
|
||||
pixbuf = gnome_desktop_thumbnail_factory_generate_thumbnail (thumb_factory,
|
||||
uri,
|
||||
mime_type);
|
||||
g_free (mime_type);
|
||||
}
|
||||
|
||||
gtk_dialog_set_response_sensitive (GTK_DIALOG (chooser),
|
||||
|
@ -207,15 +198,12 @@ update_preview (GtkFileChooser *chooser,
|
|||
|
||||
if (pixbuf != NULL) {
|
||||
gtk_image_set_from_pixbuf (GTK_IMAGE (preview), pixbuf);
|
||||
g_object_unref (pixbuf);
|
||||
}
|
||||
else {
|
||||
gtk_image_set_from_icon_name (GTK_IMAGE (preview),
|
||||
"dialog-question",
|
||||
GTK_ICON_SIZE_DIALOG);
|
||||
}
|
||||
|
||||
g_free (uri);
|
||||
}
|
||||
|
||||
gtk_file_chooser_set_preview_widget_active (chooser, TRUE);
|
||||
|
@ -280,15 +268,13 @@ webcam_response_cb (CcAvatarChooser *self,
|
|||
GtkDialog *dialog)
|
||||
{
|
||||
if (response == GTK_RESPONSE_ACCEPT) {
|
||||
GdkPixbuf *pb, *pb2;
|
||||
g_autoptr(GdkPixbuf) pb = NULL;
|
||||
g_autoptr(GdkPixbuf) pb2 = NULL;
|
||||
|
||||
g_object_get (G_OBJECT (dialog), "pixbuf", &pb, NULL);
|
||||
pb2 = gdk_pixbuf_scale_simple (pb, PIXEL_SIZE, PIXEL_SIZE, GDK_INTERP_BILINEAR);
|
||||
|
||||
set_user_icon_data (self->user, pb2);
|
||||
|
||||
g_object_unref (pb2);
|
||||
g_object_unref (pb);
|
||||
}
|
||||
if (response != GTK_RESPONSE_DELETE_EVENT &&
|
||||
response != GTK_RESPONSE_NONE)
|
||||
|
@ -448,15 +434,16 @@ get_system_facesdirs (void)
|
|||
static gboolean
|
||||
add_faces_from_dirs (GListStore *faces, GStrv facesdirs, gboolean add_all)
|
||||
{
|
||||
GFile *file, *dir;
|
||||
GFileInfo *info;
|
||||
GFileEnumerator *enumerator;
|
||||
GFile *file;
|
||||
GFileType type;
|
||||
const gchar *target;
|
||||
guint i;
|
||||
gboolean added_faces = FALSE;
|
||||
|
||||
for (i = 0; facesdirs[i] != NULL; i++) {
|
||||
g_autoptr(GFile) dir = NULL;
|
||||
g_autoptr(GFileEnumerator) enumerator = NULL;
|
||||
|
||||
dir = g_file_new_for_path (facesdirs[i]);
|
||||
|
||||
enumerator = g_file_enumerate_children (dir,
|
||||
|
@ -467,34 +454,33 @@ add_faces_from_dirs (GListStore *faces, GStrv facesdirs, gboolean add_all)
|
|||
G_FILE_QUERY_INFO_NONE,
|
||||
NULL, NULL);
|
||||
if (enumerator == NULL) {
|
||||
g_object_unref (dir);
|
||||
continue;
|
||||
}
|
||||
|
||||
while ((info = g_file_enumerator_next_file (enumerator, NULL, NULL)) != NULL) {
|
||||
while (TRUE) {
|
||||
g_autoptr(GFileInfo) info = g_file_enumerator_next_file (enumerator, NULL, NULL);
|
||||
if (info == NULL) {
|
||||
break;
|
||||
}
|
||||
|
||||
type = g_file_info_get_file_type (info);
|
||||
if (type != G_FILE_TYPE_REGULAR &&
|
||||
type != G_FILE_TYPE_SYMBOLIC_LINK) {
|
||||
g_object_unref (info);
|
||||
continue;
|
||||
}
|
||||
|
||||
target = g_file_info_get_symlink_target (info);
|
||||
if (target != NULL && g_str_has_prefix (target , "legacy/")) {
|
||||
g_object_unref (info);
|
||||
continue;
|
||||
}
|
||||
|
||||
file = g_file_get_child (dir, g_file_info_get_name (info));
|
||||
g_list_store_append (faces, file);
|
||||
|
||||
g_object_unref (info);
|
||||
added_faces = TRUE;
|
||||
}
|
||||
|
||||
g_file_enumerator_close (enumerator, NULL, NULL);
|
||||
g_object_unref (enumerator);
|
||||
g_object_unref (dir);
|
||||
|
||||
if (added_faces && !add_all)
|
||||
break;
|
||||
|
@ -647,8 +633,7 @@ cc_avatar_chooser_set_user (CcAvatarChooser *self,
|
|||
|
||||
if (self->user) {
|
||||
gtk_container_foreach (GTK_CONTAINER (self->user_flowbox), (GtkCallback) gtk_widget_destroy, NULL);
|
||||
g_object_unref (self->user);
|
||||
self->user = NULL;
|
||||
g_clear_object (&self->user);
|
||||
}
|
||||
self->user = g_object_ref (user);
|
||||
|
||||
|
|
|
@ -110,7 +110,7 @@ static void
|
|||
cc_carousel_move_arrow (CcCarousel *self)
|
||||
{
|
||||
GtkStyleContext *context;
|
||||
gchar *css;
|
||||
g_autofree gchar *css = NULL;
|
||||
gint end_x;
|
||||
GtkSettings *settings;
|
||||
gboolean animations;
|
||||
|
@ -149,8 +149,6 @@ cc_carousel_move_arrow (CcCarousel *self)
|
|||
self->provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ());
|
||||
gtk_css_provider_load_from_data (GTK_CSS_PROVIDER (self->provider), css, -1, NULL);
|
||||
gtk_style_context_add_provider (context, self->provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||
|
||||
g_free (css);
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -413,7 +411,7 @@ on_transition_running (CcCarousel *self)
|
|||
static void
|
||||
cc_carousel_init (CcCarousel *self)
|
||||
{
|
||||
GtkStyleProvider *provider;
|
||||
g_autoptr(GtkStyleProvider) provider = NULL;
|
||||
|
||||
gtk_widget_init_template (GTK_WIDGET (self));
|
||||
|
||||
|
@ -425,8 +423,6 @@ cc_carousel_init (CcCarousel *self)
|
|||
provider,
|
||||
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||
|
||||
g_object_unref (provider);
|
||||
|
||||
g_signal_connect_object (self->stack, "size-allocate", G_CALLBACK (on_size_allocate), self, G_CONNECT_SWAPPED);
|
||||
g_signal_connect_object (self->stack, "notify::transition-running", G_CALLBACK (on_transition_running), self, G_CONNECT_SWAPPED);
|
||||
}
|
||||
|
|
|
@ -763,10 +763,7 @@ cc_crop_area_set_picture (CcCropArea *area,
|
|||
int width;
|
||||
int height;
|
||||
|
||||
if (area->browse_pixbuf) {
|
||||
g_object_unref (area->browse_pixbuf);
|
||||
area->browse_pixbuf = NULL;
|
||||
}
|
||||
g_clear_object (&area->browse_pixbuf);
|
||||
if (pixbuf) {
|
||||
area->browse_pixbuf = g_object_ref (pixbuf);
|
||||
width = gdk_pixbuf_get_width (pixbuf);
|
||||
|
|
|
@ -62,20 +62,19 @@ cc_realm_error_get_quark (void)
|
|||
static gboolean
|
||||
is_realm_with_kerberos_and_membership (gpointer object)
|
||||
{
|
||||
GDBusInterface *interface;
|
||||
g_autoptr(GDBusInterface) kerberos_interface = NULL;
|
||||
g_autoptr(GDBusInterface) kerberos_membership_interface = NULL;
|
||||
|
||||
if (!G_IS_DBUS_OBJECT (object))
|
||||
return FALSE;
|
||||
|
||||
interface = g_dbus_object_get_interface (object, "org.freedesktop.realmd.Kerberos");
|
||||
if (interface == NULL)
|
||||
kerberos_interface = g_dbus_object_get_interface (object, "org.freedesktop.realmd.Kerberos");
|
||||
if (kerberos_interface == NULL)
|
||||
return FALSE;
|
||||
g_object_unref (interface);
|
||||
|
||||
interface = g_dbus_object_get_interface (object, "org.freedesktop.realmd.KerberosMembership");
|
||||
if (interface == NULL)
|
||||
kerberos_membership_interface = g_dbus_object_get_interface (object, "org.freedesktop.realmd.KerberosMembership");
|
||||
if (kerberos_membership_interface == NULL)
|
||||
return FALSE;
|
||||
g_object_unref (interface);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -167,7 +166,7 @@ on_provider_new (GObject *source,
|
|||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
GTask *task = G_TASK (user_data);
|
||||
g_autoptr(GTask) task = G_TASK (user_data);
|
||||
CcRealmManager *manager = g_task_get_task_data (task);
|
||||
GError *error = NULL;
|
||||
|
||||
|
@ -179,8 +178,6 @@ on_provider_new (GObject *source,
|
|||
} else {
|
||||
g_task_return_error (task, error);
|
||||
}
|
||||
|
||||
g_object_unref (task);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -188,7 +185,7 @@ on_manager_new (GObject *source,
|
|||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
GTask *task = G_TASK (user_data);
|
||||
g_autoptr(GTask) task = G_TASK (user_data);
|
||||
CcRealmManager *manager;
|
||||
GDBusConnection *connection;
|
||||
GError *error = NULL;
|
||||
|
@ -222,9 +219,9 @@ on_manager_new (GObject *source,
|
|||
"/org/freedesktop/realmd",
|
||||
g_task_get_cancellable (task),
|
||||
on_provider_new, task);
|
||||
g_steal_pointer (&task);
|
||||
} else {
|
||||
g_task_return_error (task, error);
|
||||
g_object_unref (task);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -271,9 +268,8 @@ on_provider_discover (GObject *source,
|
|||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
GTask *task = G_TASK (user_data);
|
||||
g_autoptr(GTask) task = G_TASK (user_data);
|
||||
CcRealmManager *manager = g_task_get_source_object (task);
|
||||
GDBusObject *object;
|
||||
GError *error = NULL;
|
||||
gboolean no_membership = FALSE;
|
||||
gchar **realms;
|
||||
|
@ -285,17 +281,18 @@ on_provider_discover (GObject *source,
|
|||
&realms, result, &error);
|
||||
if (error == NULL) {
|
||||
for (i = 0; realms[i]; i++) {
|
||||
g_autoptr(GDBusObject) object = NULL;
|
||||
|
||||
object = g_dbus_object_manager_get_object (G_DBUS_OBJECT_MANAGER (manager), realms[i]);
|
||||
if (object == NULL) {
|
||||
g_warning ("Realm is not in object manager: %s", realms[i]);
|
||||
} else {
|
||||
if (is_realm_with_kerberos_and_membership (object)) {
|
||||
g_debug ("Discovered realm: %s", realms[i]);
|
||||
kerberos_realms = g_list_prepend (kerberos_realms, object);
|
||||
kerberos_realms = g_list_prepend (kerberos_realms, g_steal_pointer (&object));
|
||||
} else {
|
||||
g_debug ("Realm does not support kerberos membership: %s", realms[i]);
|
||||
no_membership = TRUE;
|
||||
g_object_unref (object);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -314,8 +311,6 @@ on_provider_discover (GObject *source,
|
|||
} else {
|
||||
g_task_return_error (task, error);
|
||||
}
|
||||
|
||||
g_object_unref (task);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -395,26 +390,23 @@ gchar *
|
|||
cc_realm_calculate_login (CcRealmCommon *realm,
|
||||
const gchar *username)
|
||||
{
|
||||
GString *string;
|
||||
const gchar *const *formats;
|
||||
gchar *login = NULL;
|
||||
|
||||
formats = cc_realm_common_get_login_formats (realm);
|
||||
if (formats[0] != NULL) {
|
||||
string = g_string_new (formats[0]);
|
||||
GString *string = g_string_new (formats[0]);
|
||||
string_replace (string, "%U", username);
|
||||
string_replace (string, "%D", cc_realm_common_get_name (realm));
|
||||
login = g_string_free (string, FALSE);
|
||||
return g_string_free (string, FALSE);
|
||||
}
|
||||
|
||||
return login;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gboolean
|
||||
cc_realm_is_configured (CcRealmObject *realm)
|
||||
{
|
||||
CcRealmCommon *common;
|
||||
g_autoptr(CcRealmCommon) common = NULL;
|
||||
const gchar *configured;
|
||||
gboolean is = FALSE;
|
||||
|
||||
|
@ -422,7 +414,6 @@ cc_realm_is_configured (CcRealmObject *realm)
|
|||
if (common != NULL) {
|
||||
configured = cc_realm_common_get_configured (common);
|
||||
is = configured != NULL && !g_str_equal (configured, "");
|
||||
g_object_unref (common);
|
||||
}
|
||||
|
||||
return is;
|
||||
|
@ -463,7 +454,7 @@ realm_join_as_owner (CcRealmObject *realm,
|
|||
GAsyncReadyCallback callback,
|
||||
gpointer user_data)
|
||||
{
|
||||
CcRealmKerberosMembership *membership;
|
||||
g_autoptr(CcRealmKerberosMembership) membership = NULL;
|
||||
GVariant *contents;
|
||||
GVariant *options;
|
||||
GVariant *option;
|
||||
|
@ -476,7 +467,6 @@ realm_join_as_owner (CcRealmObject *realm,
|
|||
type = find_supported_credentials (membership, owner);
|
||||
if (type == NULL) {
|
||||
g_debug ("Couldn't find supported credential type for owner: %s", owner);
|
||||
g_object_unref (membership);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -503,7 +493,6 @@ realm_join_as_owner (CcRealmObject *realm,
|
|||
|
||||
cc_realm_kerberos_membership_call_join (membership, creds, options,
|
||||
cancellable, callback, user_data);
|
||||
g_object_unref (membership);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -553,9 +542,9 @@ cc_realm_join_finish (CcRealmObject *realm,
|
|||
GAsyncResult *result,
|
||||
GError **error)
|
||||
{
|
||||
CcRealmKerberosMembership *membership;
|
||||
GError *call_error = NULL;
|
||||
gchar *dbus_error;
|
||||
g_autoptr(CcRealmKerberosMembership) membership = NULL;
|
||||
g_autoptr(GError) call_error = NULL;
|
||||
g_autofree gchar *dbus_error = NULL;
|
||||
|
||||
g_return_val_if_fail (CC_REALM_IS_OBJECT (realm), FALSE);
|
||||
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
||||
|
@ -563,10 +552,7 @@ cc_realm_join_finish (CcRealmObject *realm,
|
|||
membership = cc_realm_object_get_kerberos_membership (realm);
|
||||
g_return_val_if_fail (membership != NULL, FALSE);
|
||||
|
||||
cc_realm_kerberos_membership_call_join_finish (membership, result, &call_error);
|
||||
g_object_unref (membership);
|
||||
|
||||
if (call_error == NULL) {
|
||||
if (cc_realm_kerberos_membership_call_join_finish (membership, result, &call_error)) {
|
||||
g_debug ("Completed Join() method call");
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -574,7 +560,7 @@ cc_realm_join_finish (CcRealmObject *realm,
|
|||
dbus_error = g_dbus_error_get_remote_error (call_error);
|
||||
if (dbus_error == NULL) {
|
||||
g_debug ("Join() failed because of %s", call_error->message);
|
||||
g_propagate_error (error, call_error);
|
||||
g_propagate_error (error, g_steal_pointer (&call_error));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -584,13 +570,11 @@ cc_realm_join_finish (CcRealmObject *realm,
|
|||
g_debug ("Join() failed because of invalid/insufficient credentials");
|
||||
g_set_error (error, CC_REALM_ERROR, CC_REALM_ERROR_BAD_LOGIN,
|
||||
"%s", call_error->message);
|
||||
g_error_free (call_error);
|
||||
} else {
|
||||
g_debug ("Join() failed because of %s", call_error->message);
|
||||
g_propagate_error (error, call_error);
|
||||
g_propagate_error (error, g_steal_pointer (&call_error));
|
||||
}
|
||||
|
||||
g_free (dbus_error);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -605,10 +589,10 @@ static void
|
|||
login_closure_free (gpointer data)
|
||||
{
|
||||
LoginClosure *login = data;
|
||||
g_free (login->domain);
|
||||
g_free (login->realm);
|
||||
g_free (login->user);
|
||||
g_free (login->password);
|
||||
g_clear_pointer (&login->domain, g_free);
|
||||
g_clear_pointer (&login->realm, g_free);
|
||||
g_clear_pointer (&login->user, g_free);
|
||||
g_clear_pointer (&login->password, g_free);
|
||||
g_slice_free (LoginClosure, login);
|
||||
}
|
||||
|
||||
|
@ -624,7 +608,7 @@ login_perform_kinit (krb5_context k5,
|
|||
krb5_principal principal;
|
||||
krb5_ccache ccache;
|
||||
krb5_creds creds;
|
||||
gchar *name;
|
||||
g_autofree gchar *name = NULL;
|
||||
|
||||
name = g_strdup_printf ("%s@%s", login, realm);
|
||||
code = krb5_parse_name (k5, name, &principal);
|
||||
|
@ -632,12 +616,10 @@ login_perform_kinit (krb5_context k5,
|
|||
if (code != 0) {
|
||||
g_debug ("Couldn't parse principal name: %s: %s",
|
||||
name, krb5_get_error_message (k5, code));
|
||||
g_free (name);
|
||||
return code;
|
||||
}
|
||||
|
||||
g_debug ("Using principal name to kinit: %s", name);
|
||||
g_free (name);
|
||||
|
||||
if (filename == NULL)
|
||||
code = krb5_cc_default (k5, &ccache);
|
||||
|
@ -677,16 +659,16 @@ login_perform_kinit (krb5_context k5,
|
|||
}
|
||||
|
||||
static void
|
||||
kinit_thread_func (GTask *task,
|
||||
kinit_thread_func (GTask *t,
|
||||
gpointer object,
|
||||
gpointer task_data,
|
||||
GCancellable *cancellable)
|
||||
{
|
||||
g_autoptr(GTask) task = t;
|
||||
LoginClosure *login = task_data;
|
||||
krb5_context k5 = NULL;
|
||||
krb5_error_code code;
|
||||
GError *error = NULL;
|
||||
gchar *filename = NULL;
|
||||
g_autofree gchar *filename = NULL;
|
||||
gchar *contents;
|
||||
gsize length;
|
||||
gint temp_fd;
|
||||
|
@ -697,8 +679,7 @@ kinit_thread_func (GTask *task,
|
|||
if (temp_fd == -1) {
|
||||
g_warning ("Couldn't create credential cache file: %s: %s",
|
||||
filename, g_strerror (errno));
|
||||
g_free (filename);
|
||||
filename = NULL;
|
||||
g_clear_pointer (&filename, g_free);
|
||||
} else {
|
||||
close (temp_fd);
|
||||
}
|
||||
|
@ -712,13 +693,13 @@ kinit_thread_func (GTask *task,
|
|||
switch (code) {
|
||||
case 0:
|
||||
if (filename != NULL) {
|
||||
g_file_get_contents (filename, &contents, &length, &error);
|
||||
if (error == NULL) {
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
if (g_file_get_contents (filename, &contents, &length, &error)) {
|
||||
g_debug ("Read in credential cache: %s", filename);
|
||||
} else {
|
||||
g_warning ("Couldn't read credential cache: %s: %s",
|
||||
filename, error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
|
||||
g_task_return_pointer (task, g_bytes_new_take (contents, length), (GDestroyNotify) g_bytes_unref);
|
||||
|
@ -755,13 +736,10 @@ kinit_thread_func (GTask *task,
|
|||
if (filename) {
|
||||
g_unlink (filename);
|
||||
g_debug ("Deleted credential cache: %s", filename);
|
||||
g_free (filename);
|
||||
}
|
||||
|
||||
if (k5)
|
||||
krb5_free_context (k5);
|
||||
|
||||
g_object_unref (task);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -774,7 +752,7 @@ cc_realm_login (CcRealmObject *realm,
|
|||
{
|
||||
GTask *task;
|
||||
LoginClosure *login;
|
||||
CcRealmKerberos *kerberos;
|
||||
g_autoptr(CcRealmKerberos) kerberos = NULL;
|
||||
|
||||
g_return_if_fail (CC_REALM_IS_OBJECT (realm));
|
||||
g_return_if_fail (user != NULL);
|
||||
|
@ -796,8 +774,6 @@ cc_realm_login (CcRealmObject *realm,
|
|||
|
||||
g_task_set_return_on_cancel (task, TRUE);
|
||||
g_task_run_in_thread (task, kinit_thread_func);
|
||||
|
||||
g_object_unref (kerberos);
|
||||
}
|
||||
|
||||
GBytes *
|
||||
|
|
|
@ -38,7 +38,8 @@ render_user_icon (ActUser *user,
|
|||
gint scale)
|
||||
{
|
||||
g_autoptr(GdkPixbuf) source_pixbuf = NULL;
|
||||
GdkPixbuf *pixbuf = NULL;
|
||||
g_autoptr(GdkPixbuf) avatar_pixbuf = NULL;
|
||||
g_autoptr(GdkPixbuf) pixbuf = NULL;
|
||||
const gchar *icon_file;
|
||||
cairo_surface_t *surface = NULL;
|
||||
|
||||
|
@ -46,7 +47,6 @@ render_user_icon (ActUser *user,
|
|||
g_return_val_if_fail (icon_size > 12, NULL);
|
||||
|
||||
icon_file = act_user_get_icon_file (user);
|
||||
pixbuf = NULL;
|
||||
if (icon_file) {
|
||||
source_pixbuf = gdk_pixbuf_new_from_file_at_size (icon_file,
|
||||
icon_size * scale,
|
||||
|
@ -60,18 +60,13 @@ render_user_icon (ActUser *user,
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (source_pixbuf != NULL) {
|
||||
g_object_unref (source_pixbuf);
|
||||
}
|
||||
|
||||
source_pixbuf = generate_default_avatar (user, icon_size * scale);
|
||||
if (source_pixbuf)
|
||||
pixbuf = round_image (source_pixbuf);
|
||||
avatar_pixbuf = generate_default_avatar (user, icon_size * scale);
|
||||
if (avatar_pixbuf)
|
||||
pixbuf = round_image (avatar_pixbuf);
|
||||
out:
|
||||
|
||||
if (pixbuf != NULL) {
|
||||
surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, scale, NULL);
|
||||
g_object_unref (pixbuf);
|
||||
}
|
||||
|
||||
return surface;
|
||||
|
|
|
@ -132,12 +132,14 @@ typedef struct {
|
|||
static void
|
||||
async_delete_data_free (AsyncDeleteData *data)
|
||||
{
|
||||
g_object_unref (data->self);
|
||||
g_object_unref (data->cancellable);
|
||||
g_free (data->login);
|
||||
g_clear_object (&data->self);
|
||||
g_clear_object (&data->cancellable);
|
||||
g_clear_pointer (&data->login, g_free);
|
||||
g_slice_free (AsyncDeleteData, data);
|
||||
}
|
||||
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (AsyncDeleteData, async_delete_data_free)
|
||||
|
||||
static void
|
||||
show_error_dialog (CcUserPanel *self,
|
||||
const gchar *message,
|
||||
|
@ -199,7 +201,8 @@ static GtkWidget *
|
|||
create_carousel_entry (CcUserPanel *self, ActUser *user)
|
||||
{
|
||||
GtkWidget *box, *widget;
|
||||
gchar *label;
|
||||
g_autofree gchar *label = NULL;
|
||||
g_autofree gchar *subtitle_label = NULL;
|
||||
|
||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
|
||||
|
||||
|
@ -214,16 +217,14 @@ create_carousel_entry (CcUserPanel *self, ActUser *user)
|
|||
gtk_label_set_ellipsize (GTK_LABEL (widget), PANGO_ELLIPSIZE_END);
|
||||
gtk_widget_set_margin_top (widget, 5);
|
||||
gtk_box_pack_start (GTK_BOX (box), widget, FALSE, TRUE, 0);
|
||||
g_free (label);
|
||||
|
||||
if (act_user_get_uid (user) == getuid ())
|
||||
label = g_strdup_printf ("<small>%s</small>", _("Your account"));
|
||||
subtitle_label = g_strdup_printf ("<small>%s</small>", _("Your account"));
|
||||
else
|
||||
label = g_strdup (" ");
|
||||
subtitle_label = g_strdup (" ");
|
||||
|
||||
widget = gtk_label_new (label);
|
||||
widget = gtk_label_new (subtitle_label);
|
||||
gtk_label_set_use_markup (GTK_LABEL (widget), TRUE);
|
||||
g_free (label);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (box), widget, FALSE, TRUE, 0);
|
||||
gtk_style_context_add_class (gtk_widget_get_style_context (widget),
|
||||
|
@ -266,30 +267,26 @@ static gint
|
|||
sort_users (gconstpointer a, gconstpointer b)
|
||||
{
|
||||
ActUser *ua, *ub;
|
||||
gchar *name1, *name2;
|
||||
gint result;
|
||||
|
||||
ua = ACT_USER (a);
|
||||
ub = ACT_USER (b);
|
||||
|
||||
/* Make sure the current user is shown first */
|
||||
if (act_user_get_uid (ua) == getuid ()) {
|
||||
result = -G_MAXINT32;
|
||||
return -G_MAXINT32;
|
||||
}
|
||||
else if (act_user_get_uid (ub) == getuid ()) {
|
||||
result = G_MAXINT32;
|
||||
return G_MAXINT32;
|
||||
}
|
||||
else {
|
||||
g_autofree gchar *name1 = NULL;
|
||||
g_autofree gchar *name2 = NULL;
|
||||
|
||||
name1 = g_utf8_collate_key (get_real_or_user_name (ua), -1);
|
||||
name2 = g_utf8_collate_key (get_real_or_user_name (ub), -1);
|
||||
|
||||
result = strcmp (name1, name2);
|
||||
|
||||
g_free (name1);
|
||||
g_free (name2);
|
||||
return strcmp (name1, name2);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -392,15 +389,12 @@ delete_user_done (ActUserManager *manager,
|
|||
GAsyncResult *res,
|
||||
CcUserPanel *self)
|
||||
{
|
||||
GError *error;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
error = NULL;
|
||||
if (!act_user_manager_delete_user_finish (manager, res, &error)) {
|
||||
if (!g_error_matches (error, ACT_USER_MANAGER_ERROR,
|
||||
ACT_USER_MANAGER_ERROR_PERMISSION_DENIED))
|
||||
show_error_dialog (self, _("Failed to delete user"), error);
|
||||
|
||||
g_error_free (error);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -444,33 +438,29 @@ enterprise_user_revoked (GObject *source,
|
|||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
AsyncDeleteData *data = user_data;
|
||||
g_autoptr(AsyncDeleteData) data = user_data;
|
||||
CcUserPanel *self = data->self;
|
||||
CcRealmCommon *common = CC_REALM_COMMON (source);
|
||||
GError *error = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
if (g_cancellable_is_cancelled (data->cancellable)) {
|
||||
async_delete_data_free (data);
|
||||
return;
|
||||
}
|
||||
|
||||
cc_realm_common_call_change_login_policy_finish (common, result, &error);
|
||||
if (error != NULL) {
|
||||
show_error_dialog (self, _("Failed to revoke remotely managed user"), error);
|
||||
g_error_free (error);
|
||||
}
|
||||
|
||||
async_delete_data_free (data);
|
||||
}
|
||||
|
||||
static CcRealmCommon *
|
||||
find_matching_realm (CcRealmManager *realm_manager, const gchar *login)
|
||||
{
|
||||
CcRealmCommon *common = NULL;
|
||||
GList *realms, *l;
|
||||
GList *realms;
|
||||
|
||||
realms = cc_realm_manager_get_realms (realm_manager);
|
||||
for (l = realms; l != NULL; l = g_list_next (l)) {
|
||||
for (GList *l = realms; l != NULL; l = g_list_next (l)) {
|
||||
const gchar * const *permitted_logins;
|
||||
gint i;
|
||||
|
||||
|
@ -499,25 +489,22 @@ realm_manager_found (GObject *source,
|
|||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
AsyncDeleteData *data = user_data;
|
||||
g_autoptr(AsyncDeleteData) data = user_data;
|
||||
CcUserPanel *self = data->self;
|
||||
CcRealmCommon *common;
|
||||
g_autoptr(CcRealmCommon) common = NULL;
|
||||
CcRealmManager *realm_manager;
|
||||
const gchar *add[1];
|
||||
const gchar *remove[2];
|
||||
GVariant *options;
|
||||
GError *error = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
if (g_cancellable_is_cancelled (data->cancellable)) {
|
||||
async_delete_data_free (data);
|
||||
return;
|
||||
}
|
||||
|
||||
realm_manager = cc_realm_manager_new_finish (result, &error);
|
||||
if (error != NULL) {
|
||||
show_error_dialog (self, _("Failed to revoke remotely managed user"), error);
|
||||
g_error_free (error);
|
||||
async_delete_data_free (data);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -525,7 +512,6 @@ realm_manager_found (GObject *source,
|
|||
common = find_matching_realm (realm_manager, data->login);
|
||||
if (common == NULL) {
|
||||
/* The realm was probably left */
|
||||
async_delete_data_free (data);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -541,9 +527,7 @@ realm_manager_found (GObject *source,
|
|||
add, remove, options,
|
||||
data->cancellable,
|
||||
enterprise_user_revoked,
|
||||
data);
|
||||
|
||||
g_object_unref (common);
|
||||
g_steal_pointer (&data));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -551,25 +535,22 @@ enterprise_user_uncached (GObject *source,
|
|||
GAsyncResult *res,
|
||||
gpointer user_data)
|
||||
{
|
||||
AsyncDeleteData *data = user_data;
|
||||
g_autoptr(AsyncDeleteData) data = user_data;
|
||||
CcUserPanel *self = data->self;
|
||||
ActUserManager *manager = ACT_USER_MANAGER (source);
|
||||
GError *error = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
if (g_cancellable_is_cancelled (data->cancellable)) {
|
||||
async_delete_data_free (data);
|
||||
return;
|
||||
}
|
||||
|
||||
act_user_manager_uncache_user_finish (manager, res, &error);
|
||||
if (error == NULL) {
|
||||
/* Find realm manager */
|
||||
cc_realm_manager_new (cc_panel_get_cancellable (CC_PANEL (self)), realm_manager_found, data);
|
||||
cc_realm_manager_new (cc_panel_get_cancellable (CC_PANEL (self)), realm_manager_found, g_steal_pointer (&data));
|
||||
}
|
||||
else {
|
||||
show_error_dialog (self, _("Failed to revoke remotely managed user"), error);
|
||||
g_error_free (error);
|
||||
async_delete_data_free (data);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -766,34 +747,31 @@ autologin_changed (CcUserPanel *self)
|
|||
static gchar *
|
||||
get_login_time_text (ActUser *user)
|
||||
{
|
||||
gchar *text, *date_str, *time_str;
|
||||
GDateTime *date_time;
|
||||
gint64 time;
|
||||
|
||||
time = act_user_get_login_time (user);
|
||||
if (act_user_is_logged_in (user)) {
|
||||
text = g_strdup (_("Logged in"));
|
||||
return g_strdup (_("Logged in"));
|
||||
}
|
||||
else if (time > 0) {
|
||||
g_autoptr(GDateTime) date_time = NULL;
|
||||
g_autofree gchar *date_str = NULL;
|
||||
g_autofree gchar *time_str = NULL;
|
||||
|
||||
date_time = g_date_time_new_from_unix_local (time);
|
||||
date_str = cc_util_get_smart_date (date_time);
|
||||
|
||||
/* Translators: This is a time format string in the style of "22:58".
|
||||
It indicates a login time which follows a date. */
|
||||
time_str = g_date_time_format (date_time, C_("login date-time", "%k:%M"));
|
||||
|
||||
/* Translators: This indicates a login date-time.
|
||||
The first %s is a date, and the second %s a time. */
|
||||
text = g_strdup_printf(C_("login date-time", "%s, %s"), date_str, time_str);
|
||||
|
||||
g_date_time_unref (date_time);
|
||||
g_free (date_str);
|
||||
g_free (time_str);
|
||||
return g_strdup_printf(C_("login date-time", "%s, %s"), date_str, time_str);
|
||||
}
|
||||
else {
|
||||
text = g_strdup ("—");
|
||||
return g_strdup ("—");
|
||||
}
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@ -868,7 +846,8 @@ update_fingerprint_row_state (CcUserPanel *self, GParamSpec *spec, CcFingerprint
|
|||
static void
|
||||
show_user (ActUser *user, CcUserPanel *self)
|
||||
{
|
||||
gchar *lang, *text, *name;
|
||||
g_autofree gchar *lang = NULL;
|
||||
g_autofree gchar *name = NULL;
|
||||
gboolean show, enable;
|
||||
ActUser *current;
|
||||
|
||||
|
@ -904,7 +883,6 @@ show_user (ActUser *user, CcUserPanel *self)
|
|||
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));
|
||||
|
||||
if (lang && *lang != '\0') {
|
||||
|
@ -914,8 +892,6 @@ show_user (ActUser *user, CcUserPanel *self)
|
|||
}
|
||||
|
||||
gtk_label_set_label (self->language_button_label, name);
|
||||
g_free (lang);
|
||||
g_free (name);
|
||||
|
||||
/* Fingerprint: show when self, local, enabled, and possible */
|
||||
show = (act_user_get_uid (user) == getuid() &&
|
||||
|
@ -969,9 +945,10 @@ show_user (ActUser *user, CcUserPanel *self)
|
|||
show = act_user_get_uid (user) == getuid () ||
|
||||
act_user_get_account_type (current) == ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR;
|
||||
if (show) {
|
||||
g_autofree gchar *text = NULL;
|
||||
|
||||
text = get_login_time_text (user);
|
||||
gtk_label_set_label (self->last_login_button_label, text);
|
||||
g_free (text);
|
||||
}
|
||||
gtk_widget_set_visible (GTK_WIDGET (self->last_login_row), show);
|
||||
|
||||
|
@ -1059,7 +1036,7 @@ dismiss_notification (CcUserPanel *self)
|
|||
static void
|
||||
restart_now (CcUserPanel *self)
|
||||
{
|
||||
GDBusConnection *bus;
|
||||
g_autoptr(GDBusConnection) bus = NULL;
|
||||
|
||||
gtk_revealer_set_reveal_child (self->notification_revealer, FALSE);
|
||||
|
||||
|
@ -1072,7 +1049,6 @@ restart_now (CcUserPanel *self)
|
|||
g_variant_new ("(u)", 0),
|
||||
NULL, 0, G_MAXINT,
|
||||
NULL, NULL, NULL);
|
||||
g_object_unref (bus);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1292,7 +1268,7 @@ static void
|
|||
add_unlock_tooltip (GtkWidget *widget)
|
||||
{
|
||||
gchar *names[3];
|
||||
GIcon *icon;
|
||||
g_autoptr(GIcon) icon;
|
||||
|
||||
names[0] = "changes-allow-symbolic";
|
||||
names[1] = "changes-allow";
|
||||
|
@ -1306,7 +1282,6 @@ add_unlock_tooltip (GtkWidget *widget)
|
|||
_("To make changes,\nclick the * icon first"),
|
||||
"*",
|
||||
icon);
|
||||
g_object_unref (icon);
|
||||
g_signal_connect (widget, "button-release-event",
|
||||
G_CALLBACK (show_tooltip_now), NULL);
|
||||
}
|
||||
|
@ -1381,7 +1356,7 @@ on_permission_changed (CcUserPanel *self)
|
|||
}
|
||||
else {
|
||||
gchar *names[3];
|
||||
GIcon *icon;
|
||||
g_autoptr(GIcon) icon = NULL;
|
||||
|
||||
names[0] = "changes-allow-symbolic";
|
||||
names[1] = "changes-allow";
|
||||
|
@ -1392,7 +1367,6 @@ on_permission_changed (CcUserPanel *self)
|
|||
_("To delete the selected user account,\nclick the * icon first"),
|
||||
"*",
|
||||
icon);
|
||||
g_object_unref (icon);
|
||||
}
|
||||
|
||||
if (!act_user_is_local_account (user)) {
|
||||
|
@ -1486,8 +1460,8 @@ on_permission_changed (CcUserPanel *self)
|
|||
static void
|
||||
setup_main_window (CcUserPanel *self)
|
||||
{
|
||||
GIcon *icon;
|
||||
GError *error = NULL;
|
||||
g_autoptr(GIcon) icon = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
gchar *names[3];
|
||||
gboolean loaded;
|
||||
|
||||
|
@ -1502,7 +1476,6 @@ setup_main_window (CcUserPanel *self)
|
|||
on_permission_changed (self);
|
||||
} else {
|
||||
g_warning ("Cannot create '%s' permission: %s", USER_ACCOUNTS_PERMISSION, error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
|
||||
names[0] = "changes-allow-symbolic";
|
||||
|
@ -1513,7 +1486,6 @@ setup_main_window (CcUserPanel *self)
|
|||
_("To delete the selected user account,\nclick the * icon first"),
|
||||
"*",
|
||||
icon);
|
||||
g_object_unref (icon);
|
||||
|
||||
g_object_get (self->um, "is-loaded", &loaded, NULL);
|
||||
if (loaded)
|
||||
|
@ -1571,7 +1543,7 @@ static void
|
|||
cc_user_panel_init (CcUserPanel *self)
|
||||
{
|
||||
volatile GType type G_GNUC_UNUSED;
|
||||
GtkCssProvider *provider;
|
||||
g_autoptr(GtkCssProvider) provider = NULL;
|
||||
|
||||
g_resources_register (cc_user_accounts_get_resource ());
|
||||
|
||||
|
@ -1589,7 +1561,6 @@ cc_user_panel_init (CcUserPanel *self)
|
|||
gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
|
||||
GTK_STYLE_PROVIDER (provider),
|
||||
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||
g_object_unref (provider);
|
||||
|
||||
self->login_screen_settings = settings_or_null ("org.gnome.login-screen");
|
||||
|
||||
|
|
|
@ -252,8 +252,6 @@ stop_passwd (PasswdHandler *passwd_handler)
|
|||
static void
|
||||
free_passwd_resources (PasswdHandler *passwd_handler)
|
||||
{
|
||||
GError *error = NULL;
|
||||
|
||||
/* Remove the child watcher */
|
||||
if (passwd_handler->backend_child_watch_id != 0) {
|
||||
|
||||
|
@ -265,28 +263,23 @@ free_passwd_resources (PasswdHandler *passwd_handler)
|
|||
|
||||
/* Close IO channels (internal file descriptors are automatically closed) */
|
||||
if (passwd_handler->backend_stdin != NULL) {
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
if (g_io_channel_shutdown (passwd_handler->backend_stdin, TRUE, &error) != G_IO_STATUS_NORMAL) {
|
||||
g_warning ("Could not shutdown backend_stdin IO channel: %s", error->message);
|
||||
g_error_free (error);
|
||||
error = NULL;
|
||||
}
|
||||
|
||||
g_io_channel_unref (passwd_handler->backend_stdin);
|
||||
passwd_handler->backend_stdin = NULL;
|
||||
g_clear_pointer (&passwd_handler->backend_stdin, g_io_channel_unref);
|
||||
}
|
||||
|
||||
if (passwd_handler->backend_stdout != NULL) {
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
if (g_io_channel_shutdown (passwd_handler->backend_stdout, TRUE, &error) != G_IO_STATUS_NORMAL) {
|
||||
g_warning ("Could not shutdown backend_stdout IO channel: %s", error->message);
|
||||
g_error_free (error);
|
||||
error = NULL;
|
||||
}
|
||||
|
||||
g_io_channel_unref (passwd_handler->backend_stdout);
|
||||
|
||||
passwd_handler->backend_stdout = NULL;
|
||||
g_clear_pointer (&passwd_handler->backend_stdout, g_io_channel_unref);
|
||||
}
|
||||
|
||||
/* Remove IO watcher */
|
||||
|
@ -321,9 +314,9 @@ free_passwd_resources (PasswdHandler *passwd_handler)
|
|||
static void
|
||||
io_queue_pop (GQueue *queue, GIOChannel *channel)
|
||||
{
|
||||
gchar *buf;
|
||||
g_autofree gchar *buf = NULL;
|
||||
gsize bytes_written;
|
||||
GError *error = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
buf = g_queue_pop_head (queue);
|
||||
|
||||
|
@ -331,12 +324,10 @@ io_queue_pop (GQueue *queue, GIOChannel *channel)
|
|||
|
||||
if (g_io_channel_write_chars (channel, buf, -1, &bytes_written, &error) != G_IO_STATUS_NORMAL) {
|
||||
g_warning ("Could not write queue element \"%s\" to channel: %s", buf, error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
|
||||
/* Ensure passwords are cleared from memory */
|
||||
memset (buf, 0, strlen (buf));
|
||||
g_free (buf);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -377,8 +368,7 @@ io_watch_stdout (GIOChannel *source, GIOCondition condition, PasswdHandler *pass
|
|||
|
||||
gchar buf[BUFSIZE]; /* Temporary buffer */
|
||||
gsize bytes_read;
|
||||
GError *gio_error = NULL; /* Error returned by functions */
|
||||
GError *error = NULL; /* Error sent to callbacks */
|
||||
g_autoptr(GError) gio_error = NULL;
|
||||
|
||||
gboolean reinit = FALSE;
|
||||
|
||||
|
@ -390,8 +380,6 @@ io_watch_stdout (GIOChannel *source, GIOCondition condition, PasswdHandler *pass
|
|||
if (g_io_channel_read_chars (source, buf, BUFSIZE, &bytes_read, &gio_error)
|
||||
!= G_IO_STATUS_NORMAL) {
|
||||
g_warning ("IO Channel read error: %s", gio_error->message);
|
||||
g_error_free (gio_error);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -419,6 +407,7 @@ io_watch_stdout (GIOChannel *source, GIOCondition condition, PasswdHandler *pass
|
|||
|
||||
} else {
|
||||
/* Authentication failed */
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
error = g_error_new_literal (PASSWD_ERROR, PASSWD_ERROR_AUTH_FAILED,
|
||||
_("Authentication failed"));
|
||||
|
@ -435,8 +424,6 @@ io_watch_stdout (GIOChannel *source, GIOCondition condition, PasswdHandler *pass
|
|||
passwd_handler->auth_cb (passwd_handler,
|
||||
error,
|
||||
passwd_handler->auth_cb_data);
|
||||
|
||||
g_error_free (error);
|
||||
}
|
||||
|
||||
reinit = TRUE;
|
||||
|
@ -492,6 +479,7 @@ io_watch_stdout (GIOChannel *source, GIOCondition condition, PasswdHandler *pass
|
|||
}
|
||||
else {
|
||||
/* Ohnoes! */
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
if (strstr (str->str, "recovered") != NULL) {
|
||||
/* What does this indicate?
|
||||
|
@ -551,9 +539,6 @@ io_watch_stdout (GIOChannel *source, GIOCondition condition, PasswdHandler *pass
|
|||
passwd_handler->chpasswd_cb (passwd_handler,
|
||||
error,
|
||||
passwd_handler->chpasswd_cb_data);
|
||||
|
||||
g_error_free (error);
|
||||
|
||||
}
|
||||
|
||||
reinit = TRUE;
|
||||
|
@ -569,14 +554,13 @@ io_watch_stdout (GIOChannel *source, GIOCondition condition, PasswdHandler *pass
|
|||
* passwd will immediately ask for the new password,
|
||||
* so skip the AUTH phase */
|
||||
if (is_string_complete (str->str, "new", "New", NULL)) {
|
||||
gchar *pw;
|
||||
g_autofree gchar *pw = NULL;
|
||||
|
||||
passwd_handler->backend_state = PASSWD_STATE_NEW;
|
||||
|
||||
/* since passwd didn't ask for our old password
|
||||
* in this case, simply remove it from the queue */
|
||||
pw = g_queue_pop_head (passwd_handler->backend_stdin_queue);
|
||||
g_free (pw);
|
||||
|
||||
/* Pop the IO queue, i.e. send new password */
|
||||
io_queue_pop (passwd_handler->backend_stdin_queue, passwd_handler->backend_stdin);
|
||||
|
@ -679,7 +663,7 @@ passwd_authenticate (PasswdHandler *passwd_handler,
|
|||
PasswdCallback cb,
|
||||
const gpointer user_data)
|
||||
{
|
||||
GError *error = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
/* Don't stop if we've already started changing password */
|
||||
if (passwd_handler->changing_password)
|
||||
|
@ -701,8 +685,6 @@ passwd_authenticate (PasswdHandler *passwd_handler,
|
|||
|
||||
if (!spawn_passwd (passwd_handler, &error)) {
|
||||
g_warning ("%s", error->message);
|
||||
g_error_free (error);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -717,8 +699,6 @@ passwd_change_password (PasswdHandler *passwd_handler,
|
|||
PasswdCallback cb,
|
||||
const gpointer user_data)
|
||||
{
|
||||
GError *error = NULL;
|
||||
|
||||
passwd_handler->changing_password = TRUE;
|
||||
|
||||
passwd_handler->new_password = new_password;
|
||||
|
@ -736,14 +716,13 @@ passwd_change_password (PasswdHandler *passwd_handler,
|
|||
* has occurred but it has not yet exited */
|
||||
if (passwd_handler->backend_pid == -1) {
|
||||
/* If it is not, re-run authentication */
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
/* Spawn backend */
|
||||
stop_passwd (passwd_handler);
|
||||
|
||||
if (!spawn_passwd (passwd_handler, &error)) {
|
||||
g_warning ("%s", error->message);
|
||||
g_error_free (error);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
|
@ -72,9 +72,9 @@ icon_shape_data_free (gpointer user_data)
|
|||
{
|
||||
IconShapeData *data = user_data;
|
||||
|
||||
g_free (data->text);
|
||||
g_free (data->placeholder_str);
|
||||
g_object_unref (data->icon);
|
||||
g_clear_pointer (&data->text, g_free);
|
||||
g_clear_pointer (&data->placeholder_str, g_free);
|
||||
g_clear_object (&data->icon);
|
||||
g_free (data);
|
||||
}
|
||||
|
||||
|
@ -91,8 +91,8 @@ icon_shape_renderer (cairo_t *cr,
|
|||
if (GPOINTER_TO_UINT (attr->data) == data->placeholder) {
|
||||
gdouble ascent;
|
||||
gdouble height;
|
||||
GdkPixbuf *pixbuf;
|
||||
GtkIconInfo *info;
|
||||
g_autoptr(GdkPixbuf) pixbuf = NULL;
|
||||
g_autoptr(GtkIconInfo) info = NULL;
|
||||
|
||||
ascent = pango_units_to_double (attr->ink_rect.y);
|
||||
height = pango_units_to_double (attr->ink_rect.height);
|
||||
|
@ -101,13 +101,11 @@ icon_shape_renderer (cairo_t *cr,
|
|||
(gint)height,
|
||||
GTK_ICON_LOOKUP_FORCE_SIZE | GTK_ICON_LOOKUP_USE_BUILTIN);
|
||||
pixbuf = gtk_icon_info_load_icon (info, NULL);
|
||||
g_object_unref (info);
|
||||
|
||||
cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
|
||||
cairo_reset_clip (cr);
|
||||
gdk_cairo_set_source_pixbuf (cr, pixbuf, x, y + ascent);
|
||||
cairo_paint (cr);
|
||||
g_object_unref (pixbuf);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -251,13 +249,12 @@ query_tooltip (GtkWidget *widget,
|
|||
GtkTooltip *tooltip,
|
||||
gpointer user_data)
|
||||
{
|
||||
gchar *tip;
|
||||
|
||||
if (GTK_ENTRY_ICON_SECONDARY == gtk_entry_get_icon_at_pos (GTK_ENTRY (widget), x, y)) {
|
||||
g_autofree gchar *tip = NULL;
|
||||
|
||||
tip = gtk_entry_get_icon_tooltip_text (GTK_ENTRY (widget),
|
||||
GTK_ENTRY_ICON_SECONDARY);
|
||||
gtk_tooltip_set_text (tooltip, tip);
|
||||
g_free (tip);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -398,8 +395,8 @@ typedef struct {
|
|||
static void
|
||||
is_valid_username_data_free (isValidUsernameData *data)
|
||||
{
|
||||
g_free (data->username);
|
||||
g_free (data->tip);
|
||||
g_clear_pointer (&data->username, g_free);
|
||||
g_clear_pointer (&data->tip, g_free);
|
||||
g_free (data);
|
||||
}
|
||||
|
||||
|
@ -420,7 +417,7 @@ is_valid_username_child_watch_cb (GPid pid,
|
|||
gint status,
|
||||
gpointer user_data)
|
||||
{
|
||||
GTask *task = G_TASK (user_data);
|
||||
g_autoptr(GTask) task = G_TASK (user_data);
|
||||
isValidUsernameData *data = g_task_get_task_data (task);
|
||||
GError *error = NULL;
|
||||
gboolean valid = FALSE;
|
||||
|
@ -452,7 +449,6 @@ is_valid_username_child_watch_cb (GPid pid,
|
|||
}
|
||||
|
||||
g_spawn_close_pid (pid);
|
||||
g_object_unref (task);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -461,7 +457,7 @@ is_valid_username_async (const gchar *username,
|
|||
GAsyncReadyCallback callback,
|
||||
gpointer callback_data)
|
||||
{
|
||||
GTask *task;
|
||||
g_autoptr(GTask) task = NULL;
|
||||
isValidUsernameData *data;
|
||||
gchar *argv[6];
|
||||
GPid pid;
|
||||
|
@ -476,15 +472,11 @@ is_valid_username_async (const gchar *username,
|
|||
|
||||
if (username == NULL || username[0] == '\0') {
|
||||
g_task_return_boolean (task, FALSE);
|
||||
g_object_unref (task);
|
||||
|
||||
return;
|
||||
}
|
||||
else if (strlen (username) > get_username_max_length ()) {
|
||||
data->tip = g_strdup (_("The username is too long."));
|
||||
g_task_return_boolean (task, FALSE);
|
||||
g_object_unref (task);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -518,12 +510,11 @@ is_valid_username_async (const gchar *username,
|
|||
G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL,
|
||||
NULL, NULL, &pid, &error)) {
|
||||
g_task_return_error (task, error);
|
||||
g_object_unref (task);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
g_child_watch_add (pid, (GChildWatchFunc) is_valid_username_child_watch_cb, task);
|
||||
g_steal_pointer (&task);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -707,40 +698,32 @@ void
|
|||
set_user_icon_data (ActUser *user,
|
||||
GdkPixbuf *pixbuf)
|
||||
{
|
||||
gchar *path;
|
||||
g_autofree gchar *path = NULL;
|
||||
gint fd;
|
||||
GOutputStream *stream;
|
||||
GError *error;
|
||||
g_autoptr(GOutputStream) stream = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
path = g_build_filename (g_get_tmp_dir (), "gnome-control-center-user-icon-XXXXXX", NULL);
|
||||
fd = g_mkstemp (path);
|
||||
|
||||
if (fd == -1) {
|
||||
g_warning ("failed to create temporary file for image data");
|
||||
g_free (path);
|
||||
return;
|
||||
}
|
||||
|
||||
stream = g_unix_output_stream_new (fd, TRUE);
|
||||
|
||||
error = NULL;
|
||||
if (!gdk_pixbuf_save_to_stream (pixbuf, stream, "png", NULL, &error, NULL)) {
|
||||
g_warning ("failed to save image: %s", error->message);
|
||||
g_error_free (error);
|
||||
g_object_unref (stream);
|
||||
return;
|
||||
}
|
||||
|
||||
g_object_unref (stream);
|
||||
|
||||
act_user_set_icon_file (user, path);
|
||||
|
||||
/* if we ever make the dbus call async, the g_remove call needs
|
||||
* to wait for its completion
|
||||
*/
|
||||
g_remove (path);
|
||||
|
||||
g_free (path);
|
||||
}
|
||||
|
||||
GdkPixbuf *
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue