Index: message-table.c =================================================================== --- message-table.c (revision 3431) +++ message-table.c (working copy) @@ -214,6 +214,31 @@ return a_pos - b_pos; } +gint +list_compare_by_original (gconstpointer a, + gconstpointer b) +{ + const gchar *a_original, *b_original; + + a_original = gtranslator_msg_get_msgid(GTR_MSG(a)); + b_original = gtranslator_msg_get_msgid(GTR_MSG(b)); + + return g_utf8_collate(a_original, b_original); +} + +gint +list_compare_by_translation (gconstpointer a, + gconstpointer b) +{ + const gchar *a_original, *b_original; + + a_original = gtranslator_msg_get_msgstr(GTR_MSG(a)); + b_original = gtranslator_msg_get_msgstr(GTR_MSG(b)); + + return g_utf8_collate(a_original, b_original); +} + + static void sort_message_list (GtkTreeViewColumn *column, GtranslatorMessageTable *table) { @@ -232,13 +257,17 @@ case STATUS_COLUMN: messages = g_list_sort(messages, list_compare_by_status); break; + case ORIGINAL_COLUMN: + messages = g_list_sort(messages, list_compare_by_original); + case TRANSLATION_COLUMN: + messages = g_list_sort(messages, list_compare_by_translation); + } if (gtk_tree_view_column_get_sort_order(column) == GTK_SORT_DESCENDING) messages = g_list_reverse(messages); gtranslator_po_set_messages(po, messages); - gtranslator_message_table_populate(table, messages); } static void @@ -306,10 +335,12 @@ "text", ORIGINAL_COLUMN, NULL); + gtk_tree_view_column_set_sort_column_id(column, ORIGINAL_COLUMN); gtk_tree_view_column_set_expand(column, TRUE); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW(priv->treeview), column); + g_signal_connect(G_OBJECT(column), "clicked", G_CALLBACK(sort_message_list), table); renderer=gtk_cell_renderer_text_new(); g_object_set(renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL); @@ -318,10 +349,12 @@ "text", TRANSLATION_COLUMN, NULL); + gtk_tree_view_column_set_sort_column_id(column, TRANSLATION_COLUMN); gtk_tree_view_column_set_expand(column, TRUE); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW(priv->treeview), column); + g_signal_connect(G_OBJECT(column), "clicked", G_CALLBACK(sort_message_list), table); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(priv->treeview)); gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);