LINUX.ORG.RU

[GTK+, Glade] Сигнал edited у GtkCellRendererSpin, как получить GtkTreeView?


0

1

В library.gnome.org написано, что смотреть часть сигналов для GtkCellRendererSpin у GtkCellEditable. Мне нужно получить GtkTreeView, которому принадлежит GtkCellRendererSpin, когда закончилось редактирование

The edited signal описывается здесь

extern "C" void cellrenderer1_edited  (GtkCellRendererText *renderer,
                            gchar               *path,
                            gchar               *new_text,
                            gpointer             user_data) 

В книжке Krause - Foundations of GTK Development для моей задачи приводится другой код функции:

extern "C" void cellrenderer1_edited(GtkCellRendererText *render, gchar *path, gchar *new_text, GtkTreeView *treeview)
но к сожалению treeview получается неверный и получить из него его GtkListStore не представляется возможным. Поидее можно использовать первый вариант функции и из user_data получать необходимый GtkListStore, но хотелось бы всё-таки получить из параметров функции edited - это возможно?


передавать GtkTreeView при привязке сигнала (g_signal_connect) как последний аргумент. но в случае glade и gtk_builder_connect_signals() это проблематично.

как вариант - или использовать глобальную переменную, или прицепить ссылку на GtkTreeView к соответствующемму рендереру через g_object_set_data() и выдергивать в обработчике при помощи g_object_get_data(). последний способ предпочтительнее

ananas ★★★★★
()
Ответ на: комментарий от ananas

Нее, это-то понятно, через gpointer user_data всё отлично работает и никаких проблем нет. я сделал пример

просто я думал можно явно получить из сигнатуры обработчика события

g-71
() автор топика
Ответ на: комментарий от ananas

ты имеешь ввиду передаёшь структуру своих виджетов gtk_builder_connect_signals, я как раз через и не передаю. Вообще этот вовопрос был задан к тому, чтобы сделать универсальную функцию возможно для нескольких TreeView в проекте, а тут получается если брать GtkTreeView из user_data данная функция привязывается к конкретному TreeView

g-71
() автор топика
Ответ на: комментарий от g-71

цепляй модель к рендереру через g_object_set_data() - будет тебе универсальность

void cellrenderer1_edited  (GtkCellRendererText *renderer,
                            gchar               *path,
                            gchar               *new_text,
                            gpointer             user_data) 
{
  GtkTreeModel *model;
  GtkTreeIter iter;
  gint col;

  model = GTK_TREE_MODEL (g_object_get_data (G_OBJECT (renderer), "model"));
  col = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (renderer), "column"));
  gtk_tree_model_get_iter_at_path (model, &iter, path);
  gtk_list_store_set (GTK_LIST_STORE (model), &iter, col, new_text, -1);
}

соответсвенно ключи model и column добавляешь для нужных рендереров после загрузки интерфейса в GtkBuilder

ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.