Проблема в том, что программа просто обрабатывает аргументы командной строки и завершает работу, а не отображает графический интерфейс.
Например:
#include <gtk/gtk.h>
static gint print_cmd_arg(GApplication *app, GApplicationCommandLine *app_cmd, int *argc)
{
if (*argc > 1)
{
char **argv = g_application_command_line_get_arguments(app_cmd, argc);
GFile *file = g_file_new_for_commandline_arg(argv[1]);
if (g_file_query_exists(file, NULL))
{
char *text;
g_file_load_contents(file, NULL, &text, NULL, NULL, NULL);
g_print("%s", text);
g_free(text);
g_object_unref(file);
return 0;
}
else
{
g_print("File \'%s\' does not exist.\n", argv[1]);
g_object_unref(file);
return 1;
}
}
return 2;
}
static void activation(GtkApplication *app, gpointer user_data)
{
GtkWidget *window = gtk_application_window_new(app);
gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER_ALWAYS);
gtk_window_set_title(GTK_WINDOW(window), "Test");
g_signal_connect(window, "delete-event", G_CALLBACK(gtk_widget_destroy), NULL);
GtkWidget *button = gtk_button_new_with_label("Quit");
g_signal_connect_swapped(button, "clicked", G_CALLBACK(gtk_widget_destroy), window);
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
gtk_container_add(GTK_CONTAINER(window), button);
gtk_widget_show_all(window);
}
int main(int argc, char **argv)
{
int status;
GtkApplication *test = gtk_application_new("this.is.only.a.test", G_APPLICATION_NON_UNIQUE | G_APPLICATION_HANDLES_COMMAND_LINE);
g_signal_connect(test, "activate", G_CALLBACK(activation), NULL);
g_signal_connect(G_APPLICATION(test), "command-line", G_CALLBACK(print_cmd_arg), &argc);
status = g_application_run(G_APPLICATION(test), argc, argv);
return status;
}
Попробуйте выполнить это, вы увидитечто эта программа полностью игнорирует функцию activation
.
. Я хочу, чтобы эта программа обрабатывала аргументы командной строки и отображала графический интерфейс пользователя.
Кроме того, я знаю, что должен использовать g_application_command_line_set_exit_status () в print_cmd_arg
вместо return
s, но я не знаю, как это сделать и получить предупреждения компилятора.