#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(родной)