Закрыть GtkNativeDialog

#c #gtk3

#c #gtk3

Вопрос:

Я следовал примеру GTK3 о том, как запрашивать OpenFileDialog из консольного приложения. По какой-то странной причине, когда я выбираю файл, диалоговое окно остается открытым (оно как бы «зависает»). Тем временем моя программа продолжается с правильным именем файла.

Я просто застрял на этой части.

 string requestInputFile()
{
    gtk_init(NULL, NULL);
    GtkFileChooserNative *native;
    gint res;
    string filename = "";

    native = gtk_file_chooser_native_new((gchar *)"Open File", NULL, GTK_FILE_CHOOSER_ACTION_OPEN, "Open", "Cancel");

    auto filter = gtk_file_filter_new();
    gtk_file_filter_set_name(filter, "Excel");
    gtk_file_filter_add_pattern(filter, "*.xlsx");

    gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(native), filter);

    GtkNativeDialog *filedialog = GTK_NATIVE_DIALOG (native);
    res = gtk_native_dialog_run (filedialog);

    if (res == GTK_RESPONSE_ACCEPT)
    {
        GtkFileChooser *chooser = GTK_FILE_CHOOSER (native);
        filename = gtk_file_chooser_get_filename (chooser);
    }

    g_object_unref(native);

    return filename;
}
 

Комментарии:

1. Измените g_object_unref на gtk_widget_destroy , это должно решить проблему.

2. @AlexanderDmitriev, это не работает. Поскольку ‘native’ не является GtkWidget: `невозможно преобразовать ‘GtkFileChooserNative* {он же _GtkFileChooserNative*}’ в ‘GtkWidget * {он же _GtkWidget *}’ для аргумента ‘1’ в ‘void gtk_widget_destroy(GtkWidget *)’ gtk_widget_destroy(родной)