Меняю строки в моделе местами:
next_iter = gtk_tree_iter_copy(¤t_iter);
gtk_tree_model_iter_next(model, next_iter);
gtk_list_store_swap(GTK_LIST_STORE(model), ¤t_iter, next_iter);
И хочу, что бы выделение перемещалось вместе с перемещенной на
позицию вниз строкой.
GtkTreeSelection* selection = gtk_tree_view_get_selection(
GTK_TREE_VIEW(tree_view));
gtk_tree_selection_select_iter(selection, next_iter);
Но проблема в том, что выделение как оставалось на одном месте,
так и остается. Вместо next_iter пробовал ¤t_iter --
но результат один и тот же. Что я делаю не так?
Спасибо.
P.S. Данные действия производятся в обработчике сигнала 'activate'
наследника GtkCellRendererPixbuf.
Мне тоже кажется, что здесь что-то неправильно :). Смотрел в Google CodeSearch аналогичный функционал -- сделано всё так же.
Сейчас для разнообразия сделал обработчик cursor-changed для GtkTreeView и он честно вызывается на функции, которая должна менять, но не меняет, курсорную позицию. Даже если swap() не делать, то позиция все равно не меняется.
Поставил вызов модального message-box'а, после того как сделается set cursor: курсорная позиция действительно меняется. После закрытия message-box'а, позиция снова меняется на прежнюю. Какое-то странное поведение.
мне кажется ты там с наследованием чет намутил :) попробуй на простых вещах этот трюк сделать, а после уже проверяй со своим рендерером (или что ты там унаследовал).
Пример полностью демонстрирует непонятное мне поведение (при клике на любой, НЕ первый, элемент в списке, курсор должен переместиться на первый). Уже вроде бы изучил, что такое G_SIGNAL_RUN_LAST/FIRST/etc, g_signal_connect_after() etc, поэкспериментировал с ними, но желаемого результата не достиг.