GTK4:单击“保存”按钮后主窗口最小化

问题描述 投票:0回答:1

我正在使用 GTK4 用 C 语言开发一个应用程序,其中从主窗口打开一个帮助器窗口 (add_book_window) 以添加书籍。

void on_add_book_clicked(GtkButton *button, gpointer user_data)
{   
    CoreWindow *win = CORE_WINDOW(user_data);

    GtkBuilder *builder = gtk_builder_new_from_resource("/org/gtk/coreapp/add_book_window.ui");
    GtkWidget *window = GTK_WIDGET(gtk_builder_get_object(builder, "add_book_window"));
    
    g_signal_connect(save_button, "clicked", G_CALLBACK(on_save_button_clicked), win);

    g_object_set_data(G_OBJECT(save_button), "title_entry", title_entry);
    g_object_set_data(G_OBJECT(save_button), "author_entry", author_entry);
    g_object_set_data(G_OBJECT(save_button), "isbn_entry", isbn_entry);

    //gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(win)); 
    gtk_window_set_modal(GTK_WINDOW(window), TRUE);
    gtk_window_present(GTK_WINDOW(window));

    g_object_unref(builder);
}

帮助窗口包含用于输入书名、作者和 ISBN 的文本字段 (GtkEntry)。但是,如果我与保存书籍按钮交互并关闭辅助窗口,主窗口将自动最小化。 如果我不与按钮交互,则不会出现问题。

我的保存按钮功能:

void on_save_button_clicked(GtkButton *button, gpointer user_data)
{
    CoreWindow *win = CORE_WINDOW(user_data);
    GtkWidget *add_book_window = GTK_WIDGET(gtk_widget_get_ancestor(GTK_WIDGET(button),GTK_TYPE_WINDOW));

    GtkEntry *title_entry = GTK_ENTRY(g_object_get_data(G_OBJECT(button), "title_entry"));
    GtkEntry *author_entry = GTK_ENTRY(g_object_get_data(G_OBJECT(button), "author_entry"));
    GtkEntry *isbn_entry = GTK_ENTRY(g_object_get_data(G_OBJECT(button), "isbn_entry"));

    const char *title = gtk_editable_get_text(GTK_EDITABLE(title_entry));
    const char *author = gtk_editable_get_text(GTK_EDITABLE(author_entry));
    const char *isbn = gtk_editable_get_text(GTK_EDITABLE(isbn_entry));
   
    if (!check_lenght_save_button(title, author, isbn))
    {   
        show_alert("Todos os campos são obrigatórios", GTK_WINDOW(add_book_window));
        return;
    }
    
    Book *new_book = book_new(title, author, isbn);
    win->books = g_list_append(win->books, new_book); 

    GtkWidget *list_item = gtk_label_new(new_book->title);
    gtk_list_box_insert(win->books_list, list_item, -1); 
    gtk_widget_set_visible(GTK_WIDGET(win->books_list), TRUE)

}

我正在使用:

海湾合作委员会:14.1.0

GTK4:4.14.4

WIN11-首页

与 GtkEntry 交互后关闭辅助窗口时,可能导致主窗口最小化的原因是什么?如何防止这种行为?

之前警告标志是在主窗口中参考显示的,也出现了困难。现在我的 GtkAlertDialog (show_alert) 引用 (add_book_window) 问题仍然存在。

我尝试删除transient_for信号并手动配置窗口关闭,但问题仍然存在。我还添加了调试消息,但我无法确定主窗口最小化的原因。

我希望我能解决这个问题并理解点击保存按钮后传递到主窗口的信号。

c gtk gtk4
1个回答
0
投票

在您的情况下,我会尝试注释掉部分按钮代码,这可能是问题的根源,因此将问题一分为二。正如您所说,“如果我不与按钮交互,问题就不会发生”。

我使用 GLib 的频率不够高,但看起来您可能不需要在由

g_object_unref
构造函数创建的浮动对象上调用
*_new_*
。至少这是我在网上找到的:https://discourse.gnome.org/t/when-should-i-use-g-object-unref/3834/2

这可能不太可能,但我希望它会有所帮助。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.