diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/gui_gtk.cc | 58 |
1 files changed, 50 insertions, 8 deletions
diff --git a/src/gui_gtk.cc b/src/gui_gtk.cc index 20b23ec..574cf84 100644 --- a/src/gui_gtk.cc +++ b/src/gui_gtk.cc @@ -720,26 +720,47 @@ public: std::string file_dialog(std::string const& title, std::string const& file, uint8_t flags, std::vector<GuiFile::Filter> const& filter) override { - shared_gobject<GtkFileChooserNative> chooser(gtk_file_chooser_native_new( + GtkFileChooser* chooser; +#if GTK_CHECK_VERSION(3, 20, 0) + shared_gobject<GtkFileChooserNative> native(gtk_file_chooser_native_new( title.c_str(), reinterpret_cast<GtkWindow*>(impl()), flags & GuiFile::FILE_SAVE ? GTK_FILE_CHOOSER_ACTION_SAVE : GTK_FILE_CHOOSER_ACTION_OPEN, nullptr, nullptr)); + chooser = GTK_FILE_CHOOSER(native.get()); +#else + auto widget = gtk_file_chooser_dialog_new( + title.c_str(), + reinterpret_cast<GtkWindow*>(impl()), + flags & GuiFile::FILE_SAVE ? GTK_FILE_CHOOSER_ACTION_SAVE + : GTK_FILE_CHOOSER_ACTION_OPEN, + "_Cancel", + GTK_RESPONSE_CANCEL, + flags & GuiFile::FILE_SAVE ? "_Save" : "_Open", + GTK_RESPONSE_ACCEPT, + NULL); + chooser = GTK_FILE_CHOOSER(widget); +#endif if (flags & GuiFile::FILE_SAVE) { - gtk_file_chooser_set_do_overwrite_confirmation( - GTK_FILE_CHOOSER(chooser.get()), true); + gtk_file_chooser_set_do_overwrite_confirmation(chooser, true); } if (file.empty()) { - gtk_file_chooser_set_filename( - GTK_FILE_CHOOSER(chooser.get()), file.c_str()); + gtk_file_chooser_set_filename(chooser, file.c_str()); } - set_filter(GTK_FILE_CHOOSER(chooser.get()), filter); + set_filter(chooser, filter); std::string ret_file; - auto ret = gtk_native_dialog_run(GTK_NATIVE_DIALOG(chooser.get())); +#if GTK_CHECK_VERSION(3, 20, 0) + auto ret = gtk_native_dialog_run(GTK_NATIVE_DIALOG(native.get())); +#else + auto ret = gtk_dialog_run(GTK_DIALOG(widget)); +#endif if (ret == GTK_RESPONSE_ACCEPT) { - ret_file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser.get())); + ret_file = gtk_file_chooser_get_filename(chooser); } +#if !GTK_CHECK_VERSION(3, 20, 0) + gtk_widget_destroy(widget); +#endif return ret_file; } @@ -1168,11 +1189,24 @@ public: g_signal_connect(G_OBJECT(v->chooser_), "file-set", G_CALLBACK(file_set), value.get()); } else { +#if GTK_CHECK_VERSION(3, 20, 0) auto chooser = gtk_file_chooser_native_new( v->label_.c_str(), GTK_WINDOW(dialog_), GTK_FILE_CHOOSER_ACTION_SAVE, nullptr, nullptr); +#else + auto chooser = gtk_file_chooser_dialog_new( + v->label_.c_str(), + GTK_WINDOW(dialog_), + GTK_FILE_CHOOSER_ACTION_SAVE, + "_Cancel", + GTK_RESPONSE_CANCEL, + "_Save", + GTK_RESPONSE_ACCEPT, + NULL); +#endif + extra = gtk_button_new_with_label("..."); g_signal_connect(G_OBJECT(extra), "clicked", G_CALLBACK(show_filechooser), v); @@ -1258,7 +1292,11 @@ public: v->value_.clear(); } } else { +#if GTK_CHECK_VERSION(3, 20, 0) g_object_unref(v->chooser_); +#else + gtk_widget_destroy(GTK_WIDGET(v->chooser_)); +#endif } v->chooser_ = nullptr; break; @@ -1385,7 +1423,11 @@ protected: static void show_filechooser(GtkButton*, gpointer user_data) { auto value = reinterpret_cast<FileValue*>(user_data); +#if GTK_CHECK_VERSION(3, 20, 0) auto ret = gtk_native_dialog_run(GTK_NATIVE_DIALOG(value->chooser_)); +#else + auto ret = gtk_dialog_run(GTK_DIALOG(value->chooser_)); +#endif if (ret == GTK_RESPONSE_ACCEPT) { auto file = gtk_file_chooser_get_filename(value->chooser_); value->value_ = file; |
