[gnome-system-tools] Fix handling of GtkTreeModel references



commit 237e7469dcc4e379f58c82c90b6fe7748fdc70eb
Author: Milan Bouchet-Valat <nalimilan club fr>
Date:   Sat Feb 6 12:44:20 2010 +0100

    Fix handling of GtkTreeModel references
    
    A few mistakes when getting the model had broken users and groups deletion (introduced by 2c9725a). group_members_table had not been updated to work with sorting, which is now fixed.

 src/users/group-members-table.c |   19 ++++++++++++-------
 src/users/groups-table.c        |    3 ++-
 src/users/users-table.c         |    3 ++-
 3 files changed, 16 insertions(+), 9 deletions(-)
---
diff --git a/src/users/group-members-table.c b/src/users/group-members-table.c
index 5dc238b..69b35ac 100644
--- a/src/users/group-members-table.c
+++ b/src/users/group-members-table.c
@@ -41,17 +41,20 @@ get_model (void)
 static void
 on_group_member_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer data)
 {
-	GtkTreeModel *model, *filter_model;
-	GtkTreePath *filter_path, *path;
+	GtkTreeModel *model, *sort_model, *filter_model;
+	GtkTreePath *sort_path, *filter_path, *path;
 	GtkTreeIter iter;
 	gboolean value;
 
-	filter_model = (GtkTreeModel*) data;
+	sort_model = (GtkTreeModel*) data;
+	filter_model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (sort_model));
 	model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (filter_model));
 
-	filter_path = gtk_tree_path_new_from_string (path_str);
+	sort_path = gtk_tree_path_new_from_string (path_str);
+	filter_path = gtk_tree_model_sort_convert_path_to_child_path (GTK_TREE_MODEL_SORT (sort_model),
+	                                                              sort_path);
 	path = gtk_tree_model_filter_convert_path_to_child_path (GTK_TREE_MODEL_FILTER (filter_model),
-								 filter_path);
+	                                                         filter_path);
 
 	if (gtk_tree_model_get_iter (GTK_TREE_MODEL (model), &iter, path)) {
 		gtk_tree_model_get (model, &iter, COL_USER_MEMBER, &value, -1);
@@ -60,6 +63,7 @@ on_group_member_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer
 				    -1);
 	}
 
+	gtk_tree_path_free (sort_path);
 	gtk_tree_path_free (filter_path);
 	gtk_tree_path_free (path);
 }
@@ -122,14 +126,15 @@ void
 group_members_table_set_from_group (OobsGroup *group)
 {
 	GtkWidget *table;
-	GtkTreeModel *filter_model, *model;
+	GtkTreeModel *sort_model, *filter_model, *model;
 	GtkTreeIter iter;
 	GList *users;
 	gboolean valid;
 	OobsUser *user;
 
 	table = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "group_settings_members");
-	filter_model = gtk_tree_view_get_model (GTK_TREE_VIEW (table));
+	sort_model = gtk_tree_view_get_model (GTK_TREE_VIEW (table));
+	filter_model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (sort_model));
 	model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (filter_model));
 	users = oobs_group_get_users (group);
 
diff --git a/src/users/groups-table.c b/src/users/groups-table.c
index efb6542..d48979b 100644
--- a/src/users/groups-table.c
+++ b/src/users/groups-table.c
@@ -167,9 +167,10 @@ groups_table_get_row_references ()
 
 	groups_table = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "groups_table");
 	sort_model = gtk_tree_view_get_model (GTK_TREE_VIEW (groups_table));
+	model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (sort_model));
 
 	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (groups_table));
-	paths = elem = gtk_tree_selection_get_selected_rows (selection, &model);
+	paths = elem = gtk_tree_selection_get_selected_rows (selection, NULL);
 
 	if (!paths)
 		return NULL;
diff --git a/src/users/users-table.c b/src/users/users-table.c
index 71fa6d6..df41cad 100644
--- a/src/users/users-table.c
+++ b/src/users/users-table.c
@@ -248,9 +248,10 @@ users_table_get_row_references ()
 	users_table = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "users_table");
 	sort_model = gtk_tree_view_get_model (GTK_TREE_VIEW (users_table));
 	filter_model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (sort_model));
+	model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (filter_model));
 
 	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (users_table));
-	paths = elem = gtk_tree_selection_get_selected_rows (selection, &model);
+	paths = elem = gtk_tree_selection_get_selected_rows (selection, NULL);
 
 	if (!paths)
 		return NULL;



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