[gnome-system-tools] Update users list after changing Real name



commit 2f4c4ea281cd984631d56fbe87d07ef0d3dc7e03
Author: Milan Bouchet-Valat <nalimilan club fr>
Date:   Sun Jan 17 21:51:18 2010 +0100

    Update users list after changing Real name
    
    We need to update the Real name shown in the list. Add a more generic function users_table_update_current() that simply resets all settings for the current user.

 src/users/user-settings.c |    6 ++++++
 src/users/users-table.c   |   34 +++++++++++++++++++++++++++++++---
 src/users/users-table.h   |    2 ++
 3 files changed, 39 insertions(+), 3 deletions(-)
---
diff --git a/src/users/user-settings.c b/src/users/user-settings.c
index f9ab4cb..723ef7a 100644
--- a/src/users/user-settings.c
+++ b/src/users/user-settings.c
@@ -1038,6 +1038,7 @@ on_edit_user_name (GtkButton *button, gpointer user_data)
 	GtkWidget *user_name_entry;
 	GtkWidget *face_image;
 	GtkWidget *name_label;
+	GtkWidget *user_settings_real_name;
 	OobsUser *user;
 	const char *fullname;
 	gboolean is_self;
@@ -1060,6 +1061,8 @@ on_edit_user_name (GtkButton *button, gpointer user_data)
 	user_name_entry = gst_dialog_get_widget (tool->main_dialog, "user_name_entry");
 	face_image = gst_dialog_get_widget (tool->main_dialog, "user_name_face");
 	name_label = gst_dialog_get_widget (tool->main_dialog, "user_name_name");
+	user_settings_real_name = gst_dialog_get_widget (tool->main_dialog,
+	                                                 "user_settings_real_name");
 
 	fullname = oobs_user_get_full_name (user);
 	gtk_entry_set_text (GTK_ENTRY (user_name_entry), fullname);
@@ -1079,6 +1082,9 @@ on_edit_user_name (GtkButton *button, gpointer user_data)
 			gst_tool_commit (tool, GST_USERS_TOOL (tool)->self_config);
 		else
 			gst_tool_commit (tool, OOBS_OBJECT (user));
+
+		gtk_label_set_text (GTK_LABEL (user_settings_real_name), fullname);
+		users_table_update_current ();
 	}
 
 	g_object_unref (user);
diff --git a/src/users/users-table.c b/src/users/users-table.c
index f39c5ff..f5d0540 100644
--- a/src/users/users-table.c
+++ b/src/users/users-table.c
@@ -237,6 +237,36 @@ users_table_select_first (void)
 	gtk_tree_selection_select_path (selection, first_user);
 }
 
+void
+users_table_update_current ()
+{
+	GtkWidget *users_table = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "users_table");
+	GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (users_table));
+	GtkTreeModel *filter_model;
+	GList *selected;
+	GtkTreePath *path;
+	GtkTreeIter iter;
+	GtkTreeIter filter_iter;
+	OobsUser *user;
+
+	selected = gtk_tree_selection_get_selected_rows (selection, &filter_model);
+	g_assert (selected != NULL);
+
+	/* Only choose the first selected user */
+	path = (GtkTreePath *) selected->data;
+
+	gtk_tree_model_get_iter (filter_model, &filter_iter, path);
+	g_list_foreach (selected, (GFunc) gtk_tree_path_free, NULL);
+	g_list_free (selected);
+
+	gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (filter_model),
+	                                                  &iter, &filter_iter);
+
+	user = users_table_get_current ();
+	users_table_set_user (user, &iter);
+	g_object_unref (user);
+}
+
 /*
  * Convenience function to get the first selected user of the table,
  * i.e. the one whose settings are currently shown.
@@ -255,8 +285,7 @@ users_table_get_current (void)
 
 	selected = gtk_tree_selection_get_selected_rows (selection, &model);
 
-	if (selected == NULL)
-		return NULL;
+	g_return_val_if_fail (selected != NULL, NULL);
 
 	/* Only choose the first selected user */
 	path = (GtkTreePath *) selected->data;
@@ -264,7 +293,6 @@ users_table_get_current (void)
 	gtk_tree_model_get_iter (model, &iter, path);
 	g_list_foreach (selected, (GFunc) gtk_tree_path_free, NULL);
 	g_list_free (selected);
-
 	gtk_tree_model_get (model, &iter, COL_USER_OBJECT, &user, -1);
 	return user;
 }
diff --git a/src/users/users-table.h b/src/users/users-table.h
index 5ae45d7..b49884d 100644
--- a/src/users/users-table.h
+++ b/src/users/users-table.h
@@ -53,6 +53,8 @@ void         users_table_select_first          (void);
 
 OobsUser    *users_table_get_current           (void);
 
+void         users_table_update_current        (void);
+
 void         users_table_actions_set_sensitive (gint      table,
                                                 gint      count,
                                                 OobsUser *user);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]