создать заголовок с о диалоге в GTK + 3 - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь создать панель заголовка, которая должна содержать кнопку с надписью «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)... не является подходящим виджетом для использования.

1 Ответ

0 голосов
/ 02 апреля 2020
#include <gtk/gtk.h>

static void activate_about(GtkWidget *widget, gpointer window);

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_window_set_titlebar(GTK_WINDOW(window), headbar);
    gtk_header_bar_pack_start(GTK_HEADER_BAR(headbar), about_button);

    g_signal_connect(about_button, "clicked", 
    G_CALLBACK(activate_about), window);

    g_signal_connect_swapped (window, "destroy",
    G_CALLBACK (gtk_main_quit), NULL);

    gtk_widget_show_all(window);

    gtk_main();

    return 0;
}


static void activate_about(GtkWidget *widget, gpointer window) {

    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;
}
...