Самый простой способ - использовать аргумент gpointer user_data
для обратного вызова, чтобы как-то его кодировать.
Вы можете, например, передать enum, используя макросы GINT_TO_POINTER()
и GPOINTER_TO_INT()
для преобразования туда и обратно. Перечисление может быть что-то вроде
enum { FILE_NEW, FILE_OPEN, FILE_SAVE, FILE_SAVEAS, FILE_QUIT };
или аналогичный. Соединение (при условии недавнего GTK + 2.x) должно выглядеть так:
g_signal_connect(G_OBJECT(item_saveas), "activate", G_CALLBACK(on_option_selected), GINT_TO_POINTER(FILE_SAVEAS));
Или вы можете использовать все возможности и использовать <a href="http://library.gnome.org/devel/gtk/stable/GtkAction.html" rel="nofollow noreferrer">GtkAction</a>
s, но это может показаться слишком сложным, зависит от количества команд, с которыми вам нужно работать.