summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gui_gtk.cc58
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;