Я пытался включить действие, то есть функцию с параметром GtkApplication, используя g_simple_action_new и эту ссылку GVariantType, потому что я хочу использовать действие, которое вызывает функциюс параметром.
Когда я добавляю NULL в параметр GVariantType (например, g_simple_action_new("sair", NULL)
), меню показывает, что элементы активны:
* Примечание: каждый элемент выполняет одно и то же действие.
Если я добавлю параметр, используя ссылку GVariantType (например, g_simple_action("sair", g_variant_type_new("o"))
), я не смогу нажать:
И если я использую параметр NULL с функцией, которая не требует параметров, я могу выполнить действие в обычном режиме.
Вот код, который я пытался выполнить:
void adicionarFuncao(GApplication *app, gchar *nome, void (*funcao)(GtkApplication *)) {
GSimpleAction *acao;
const GVariantType *parametro;
parametro = g_variant_type_new((const gchar *) "o");
acao = g_simple_action_new(nome, parametro);
g_signal_connect(
G_OBJECT(acao), "activate", G_CALLBACK(funcao), GTK_APPLICATION(app));
g_simple_action_set_enabled(acao, TRUE);
g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(acao));
}
Я использовал как adicionarFuncao(G_APPLICATION(app), "sair", sair)
, где sair - это функция, которая убивает процесс.
void sair(GtkApplication *app) {
gtk_widget_destroy(GTK_WIDGET(gtk_application_get_active_window(app)));
}
В этом коде пункты меню активируются, но когда янажмите появляется ошибка:
(controle_estoque:6956): Gtk-CRITICAL **: 13:58:24.478: gtk_application_get_active_window: assertion 'GTK_IS_APPLICATION (application)' failed
(controle_estoque:6956): Gtk-CRITICAL **: 13:58:24.478: gtk_widget_destroy: assertion 'GTK_IS_WIDGET (widget)' failed
Я ожидаю выполнения sair функция.