diff --git a/gnoemoe/dialogs/gm-worlds-list-dialog.c b/gnoemoe/dialogs/gm-worlds-list-dialog.c index afe8a23..d08f178 100644 --- a/gnoemoe/dialogs/gm-worlds-list-dialog.c +++ b/gnoemoe/dialogs/gm-worlds-list-dialog.c @@ -55,6 +55,7 @@ enum { LOGO_COLUMN, NAME_COLUMN, WORLD_COLUMN, + SORT_COLUMN, N_COLUMNS }; @@ -66,17 +67,21 @@ gm_worlds_list_dialog_widget(gchar *name) { gchar * gm_worlds_list_dialog_world_text(GmWorld *world) { gchar *text; - const gchar *player, *server; + gchar const *player, *server, *mooname; GmOptions *options = gm_world_options(world); player = gm_options_get(options, "player_name"); server = gm_options_get(options, "host"); + mooname = gm_options_get(options, "mooname"); text = g_strconcat("", gm_options_get(options, "name"), - _("\nServer: "), + _("\nMOO: "), + ((mooname && *mooname != '\0') ? mooname : _("unspecified")), + _("\nServer: "), ((server && server[0] != '\0') ? server : _("unspecified")), _("\nPlayer: "), ((player && player[0] != '\0') ? player : _("unspecified")), + "", NULL); return text; @@ -99,7 +104,8 @@ gm_worlds_list_dialog_add_world(GmWorld *world) { gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, LOGO_COLUMN, pix_logo, NAME_COLUMN, - name, WORLD_COLUMN, world, -1); + name, WORLD_COLUMN, world, SORT_COLUMN, + gm_world_name(world), -1); g_signal_connect(gm_world_options(world), "option_changed", G_CALLBACK(on_gm_worlds_list_dialog_world_option_changed), world); @@ -131,11 +137,14 @@ gm_worlds_list_dialog_create_tree_view_worlds() { GtkTreeViewColumn *column; GtkTreeView *tree_view; GtkTreeModel *model; + GtkTreeModel *sorted; model = GTK_TREE_MODEL(gtk_list_store_new(N_COLUMNS, GDK_TYPE_PIXBUF, - G_TYPE_STRING, G_TYPE_POINTER)); + G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_STRING)); + sorted = gtk_tree_model_sort_new_with_model(model); + tree_view = GTK_TREE_VIEW(gm_worlds_list_dialog_widget("tree_view_worlds")); - gtk_tree_view_set_model(tree_view, model); + gtk_tree_view_set_model(tree_view, sorted); gtk_tree_selection_set_mode(gtk_tree_view_get_selection(tree_view), GTK_SELECTION_MULTIPLE); @@ -152,6 +161,9 @@ gm_worlds_list_dialog_create_tree_view_worlds() { gm_worlds_list_dialog_instance->tree_view_worlds = tree_view; gm_worlds_list_dialog_instance->model_worlds = model; + + gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(sorted), + SORT_COLUMN, GTK_SORT_ASCENDING); gm_worlds_list_dialog_populate_worlds(); } @@ -328,6 +340,19 @@ gm_worlds_list_dialog_find(GmWorld *world, GtkTreeIter *iter) { void on_gm_worlds_list_dialog_response(GtkDialog *dialog, gint response, gpointer user_data) { + GList *worlds = gm_app_worlds(gm_app_instance()); + GList *item; + GmWorld *world; + + for (item = worlds; item; item = item->next) { + world = (GmWorld *)(item->data); + + g_signal_handlers_disconnect_by_func(gm_world_options(world), + G_CALLBACK(on_gm_worlds_list_dialog_world_option_changed), world); + } + + g_list_free(worlds); + g_object_unref(gm_worlds_list_dialog_instance->xml); gtk_widget_destroy(gm_worlds_list_dialog_instance->dialog); g_free(gm_worlds_list_dialog_instance);