退出时如何设置 GTK 应用程序的状态代码?

How can I set the status code of the GTK app upon quitting?

我正在编写一个利用 GTK 创建 GUI 的应用程序。

在下面的示例代码中,函数 run_gui 启动 GTK 应用程序。

当其中一个事件处理程序出现问题时,我希望 GTK 应用程序关闭,并且我希望 run_gui 知道该应用程序因故障而关闭。一种自然的方法似乎是在 returning 时使 g_application_run return 成为特定的状态代码。

我了解到关闭应用程序的合适方法是从事件处理程序调用 g_quit_application(如果不是这样,请更正)。但是,我想知道如何设置 return 从 g_application_run 编辑的状态代码,以便 run_gui 可以检查它并采取相应的行动。

说明我想做什么的代码:

#include <gtk/gtk.h>

static void activate(GtkApplication* app, gpointer user_data) {
    GtkWidget* window = gtk_application_window_new (app);
    gtk_window_set_title(GTK_WINDOW(window), "Window");
    gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
    gtk_widget_show_all(window);

    bool success = do_something();

    if (!success) {
        /* How do I set the exit status of the GTK app? */
        g_application_quit(G_APPLICATION(app));
    }
}

void run_gui(void) {
    GtkApplication* app = gtk_application_new("my.app", G_APPLICATION_FLAGS_NONE);
    g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);

    int status = g_application_run(G_APPLICATION(app), 0, NULL);
    g_object_unref(app);

    if (status == 0) {
        /* Do something about success */
    } else {
        /* Do something about failure */
    }
}

GApplication 中唯一允许您 return 退出代码的部分是 GApplication::local_command_line();否则,GApplication 将 return 1 表示任何内部失败,或 0 表示成功。

如果激活后出现退出状态,需要您自行处理。

记住:激活是在当前 运行 实例上执行的。只有当前的 运行 进程会发出激活——任何额外的实例都会立即终止。