Я создаю контекстное меню всплывающих окон с правой кнопкой мыши во время выполнения, из древовидной структуры, на основе слов в выбранном предложении. Код:Gtk, передавая строки с user_data
//---- inpropper ------------
gboolean
menu_RELEASE(GtkWidget *menu, gpointer *user_data)
{
printf("released at %s\n", (char*)user_data);
return FALSE;
}
//---------------------------
//---- propper [SOLVED] -----
gboolean
menu_RELEASE(GtkWidget *widget, GdkEvent *event, gpointer user_data)
{
gtk_entry_set_text(GTK_ENTRY(entry1), (char*)user_data);
gtk_widget_grab_focus(entry1);
return FALSE;
}
//--------------------------
GtkWidget *create_art_menu(GtkWidget *button)
{
char *ntext;
treesel = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
if (gtk_tree_selection_get_selected(treesel, &model ,&iter))
{
gtk_tree_model_get(model, &iter, cNaziv, &ntext, -1);
GtkWidget *menu, *menu_item;
menu = gtk_menu_new();
char *sresult = NULL;
sresult = strtok(ntext, " ");
while(sresult != NULL)
{
if (strlen(sresult)>1)
{
menu_item = gtk_menu_item_new_with_label(sresult);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
g_signal_connect(G_OBJECT(menu_item), "button-release-event", G_CALLBACK(menu_RELEASE), (gpointer)sresult);
}
sresult = strtok(NULL, " ");
}
gtk_menu_attach_to_widget(GTK_MENU(menu), button, NULL);
gtk_widget_show_all(menu);
return menu;
}
return 0;
}
Сигналов инициируются и проходит нормально, но я не могу получить строку щелкнули пункт меню в menu_RELEASE обработчик из user_data который мне нужно для дальнейших действий.
В: Как получить строку выделенного пункта меню в обработчике menu_RELEASE на основе показанного кода.
Большое спасибо. Все, что мне нужно сделать, это объявление изменений в вашем первом совете, и теперь мой код работает так, как ожидалось. Теперь я выбрал текст в своем gtkentry! –