Какой GVariantType мне нужен для активации функции с параметром GtkApplication? - PullRequest
0 голосов
/ 07 ноября 2019

Я пытался включить действие, то есть функцию с параметром GtkApplication, используя g_simple_action_new и эту ссылку GVariantType, потому что я хочу использовать действие, которое вызывает функциюс параметром.

Когда я добавляю NULL в параметр GVariantType (например, g_simple_action_new("sair", NULL)), меню показывает, что элементы активны:

* Примечание: каждый элемент выполняет одно и то же действие.

activated_menu

Если я добавлю параметр, используя ссылку GVariantType (например, g_simple_action("sair", g_variant_type_new("o"))), я не смогу нажать:

disabled_menu

И если я использую параметр 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 функция.

...