Я пытаюсь создать панель заголовка, которая должна содержать кнопку с надписью «About» для отображения диалогового окна при нажатии.
#include <gtk/gtk.h>
static void activate_about(GtkWidget *window, gpointer data);
int main(int argc, char *argv[]) {
gtk_init(&argc, &argv);
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *about_button;
GtkWidget *headbar;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
headbar = gtk_header_bar_new();
gtk_header_bar_set_title (GTK_HEADER_BAR (headbar), "Welcome to GTK");
gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (headbar), TRUE);
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
about_button = gtk_button_new_with_mnemonic("_About");
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_container_add(GTK_CONTAINER(vbox), headbar);
gtk_container_add(GTK_CONTAINER(headbar), about_button);
g_signal_connect(about_button, "clicked",
G_CALLBACK(activate_about), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
static void activate_about(GtkWidget *window, gpointer data) {
const gchar *authors[] = {"ad Chi", NULL};
gtk_show_about_dialog(GTK_WINDOW(window),
"program-name", "jjkjk",
"version", "0.0.1",
"copyright", "(C) 2017 ad Chi",
"license-type", GTK_LICENSE_GPL_3_0,
"website", "https://github.com/kjk",
"comments", "Totally kj",
"authors", authors,
"documenters", NULL,
"logo-icon-name", "start-here",
"title", "About kj kj",
NULL);
return;
}
Первая проблема заключается в том, что теперь у меня два бара окно одно и то же из виджета на передней панели. Мне нужен только один. Вторая проблема, когда я нажимаю кнопку, я получаю
(button:1727): GLib-GObject-WARNING **: 17:59:47.965: invalid cast from 'GtkButton' to 'GtkWindow'
(button:1727): Gtk-CRITICAL **: 17:59:47.982: gtk_window_set_transient_for: assertion 'parent == NULL || GTK_IS_WINDOW (parent)' failed
. Я новичок в GTK. Я полагаю, что gtk_show_about_dialog(GTK_WINDOW(window)...
не является подходящим виджетом для использования.