summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Klinghed <the_jk@yahoo.com>2017-07-29 20:50:07 +0200
committerJoel Klinghed <the_jk@yahoo.com>2017-07-29 20:50:07 +0200
commit8a180486226576173c4850960825bb9cbe91945b (patch)
tree903ed6f9d35970b1330499e5c9487d086dd187b5
parent6b078b7117d227a66905cdec2d4f5da73244de37 (diff)
Lower GTK and Qt version requirements
For GTK lower than 3.20 there is no GtkFileChooserNative so fallback to using GtkFileChooserDialog
-rw-r--r--configure.ac4
-rw-r--r--src/gui_gtk.cc58
2 files changed, 52 insertions, 10 deletions
diff --git a/configure.ac b/configure.ac
index 2d7c041..0633a84 100644
--- a/configure.ac
+++ b/configure.ac
@@ -141,7 +141,7 @@ AC_ARG_ENABLE([gtk],
[AC_HELP_STRING([--disable-gtk], [do not use GTK even if found])],
[gtk_check=$enableval], [gtk_check=yes])
AS_IF([test x$gtk_check = xyes],
- [gtk_need="gtk+-3.0 >= 3.20"
+ [gtk_need="gtk+-3.0 >= 3.18"
PKG_CHECK_EXISTS([$gtk_need],
[PKG_CHECK_MODULES([GTK], [$gtk_need])
have_gtk=1])
@@ -156,7 +156,7 @@ AC_ARG_ENABLE([qt],
[AC_HELP_STRING([--disable-qt], [do not use QT even if found])],
[qt_check=$enableval], [qt_check=yes])
AS_IF([test x$qt_check = xyes],
- [qt_need="Qt5Widgets >= 5.8.0"
+ [qt_need="Qt5Widgets >= 5.5.0"
PKG_CHECK_EXISTS([$qt_need],
[PKG_CHECK_MODULES([QT], [$qt_need])
PKG_CHECK_VAR([QT_CONFIG], [Qt5Core], [qt_config])
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;