diff --git a/gtk/.clang-format b/gtk/.clang-format index 462033ba4..2799fd6a6 100644 --- a/gtk/.clang-format +++ b/gtk/.clang-format @@ -9,7 +9,7 @@ IncludeCategories: - Regex: '^ diff --git a/gtk/Application.cc b/gtk/Application.cc index b7f103063..f48107d99 100644 --- a/gtk/Application.cc +++ b/gtk/Application.cc @@ -8,6 +8,7 @@ #include "DetailsDialog.h" #include "Dialogs.h" #include "FilterBar.h" +#include "GtkCompat.h" #include "HigWorkarea.h" // GUI_PAD, GUI_PAD_BIG #include "MainWindow.h" #include "MakeDialog.h" diff --git a/gtk/CMakeLists.txt b/gtk/CMakeLists.txt index b75321692..c9ed110ba 100644 --- a/gtk/CMakeLists.txt +++ b/gtk/CMakeLists.txt @@ -143,6 +143,7 @@ set(${PROJECT_NAME}_HEADERS FilterBar.h Flags.h FreeSpaceLabel.h + GtkCompat.h HigWorkarea.h IconCache.h ListModelAdapter.h diff --git a/gtk/DetailsDialog.cc b/gtk/DetailsDialog.cc index 5cb035848..15351caf6 100644 --- a/gtk/DetailsDialog.cc +++ b/gtk/DetailsDialog.cc @@ -8,6 +8,7 @@ #include "Actions.h" #include "FaviconCache.h" // gtr_get_favicon() #include "FileList.h" +#include "GtkCompat.h" #include "HigWorkarea.h" // GUI_PAD, GUI_PAD_BIG, GUI_PAD_SMALL #include "Prefs.h" #include "PrefsDialog.h" diff --git a/gtk/Dialogs.cc b/gtk/Dialogs.cc index 60564e2f7..98e94b556 100644 --- a/gtk/Dialogs.cc +++ b/gtk/Dialogs.cc @@ -4,6 +4,7 @@ #include "Dialogs.h" +#include "GtkCompat.h" #include "Session.h" #include "Utils.h" diff --git a/gtk/FileList.cc b/gtk/FileList.cc index 2f95b6d39..2a9a45471 100644 --- a/gtk/FileList.cc +++ b/gtk/FileList.cc @@ -5,6 +5,7 @@ #include "FileList.h" +#include "GtkCompat.h" #include "HigWorkarea.h" // GUI_PAD, GUI_PAD_BIG #include "IconCache.h" #include "PrefsDialog.h" diff --git a/gtk/FilterBar.h b/gtk/FilterBar.h index 55890b68c..61c2a04ce 100644 --- a/gtk/FilterBar.h +++ b/gtk/FilterBar.h @@ -5,7 +5,7 @@ #pragma once -#include "Utils.h" +#include "GtkCompat.h" #include diff --git a/gtk/GtkCompat.h b/gtk/GtkCompat.h new file mode 100644 index 000000000..6f49d7dee --- /dev/null +++ b/gtk/GtkCompat.h @@ -0,0 +1,134 @@ +// This file Copyright © 2022 Mnemosyne LLC. +// It may be used under GPLv2 (SPDX: GPL-2.0-only), GPLv3 (SPDX: GPL-3.0-only), +// or any future license endorsed by Mnemosyne LLC. +// License text can be found in the licenses/ folder. + +#pragma once + +#include +#include +#include +#include + +#include + +#ifndef GTKMM_CHECK_VERSION +#define GTKMM_CHECK_VERSION(major, minor, micro) \ + (GTKMM_MAJOR_VERSION > (major) || (GTKMM_MAJOR_VERSION == (major) && GTKMM_MINOR_VERSION > (minor)) || \ + (GTKMM_MAJOR_VERSION == (major) && GTKMM_MINOR_VERSION == (minor) && GTKMM_MICRO_VERSION >= (micro))) +#endif + +#ifndef GLIBMM_CHECK_VERSION +#define GLIBMM_CHECK_VERSION(major, minor, micro) \ + (GLIBMM_MAJOR_VERSION > (major) || (GLIBMM_MAJOR_VERSION == (major) && GLIBMM_MINOR_VERSION > (minor)) || \ + (GLIBMM_MAJOR_VERSION == (major) && GLIBMM_MINOR_VERSION == (minor) && GLIBMM_MICRO_VERSION >= (micro))) +#endif + +#ifndef CAIROMM_CHECK_VERSION +#define CAIROMM_CHECK_VERSION(major, minor, micro) \ + (CAIROMM_MAJOR_VERSION > (major) || (CAIROMM_MAJOR_VERSION == (major) && CAIROMM_MINOR_VERSION > (minor)) || \ + (CAIROMM_MAJOR_VERSION == (major) && CAIROMM_MINOR_VERSION == (minor) && CAIROMM_MICRO_VERSION >= (micro))) +#endif + +#ifndef PANGOMM_CHECK_VERSION +#define PANGOMM_CHECK_VERSION(major, minor, micro) \ + (PANGOMM_MAJOR_VERSION > (major) || (PANGOMM_MAJOR_VERSION == (major) && PANGOMM_MINOR_VERSION > (minor)) || \ + (PANGOMM_MAJOR_VERSION == (major) && PANGOMM_MINOR_VERSION == (minor) && PANGOMM_MICRO_VERSION >= (micro))) +#endif + +#if GTKMM_CHECK_VERSION(4, 0, 0) +#define IF_GTKMM4(ThenValue, ElseValue) ThenValue +#else +#define IF_GTKMM4(ThenValue, ElseValue) ElseValue +#endif + +#if GLIBMM_CHECK_VERSION(2, 68, 0) +#define IF_GLIBMM2_68(ThenValue, ElseValue) ThenValue +#else +#define IF_GLIBMM2_68(ThenValue, ElseValue) ElseValue +#endif + +#if CAIROMM_CHECK_VERSION(1, 16, 0) +#define IF_CAIROMM1_16(ThenValue, ElseValue) ThenValue +#else +#define IF_CAIROMM1_16(ThenValue, ElseValue) ElseValue +#endif + +#if PANGOMM_CHECK_VERSION(2, 48, 0) +#define IF_PANGOMM2_48(ThenValue, ElseValue) ThenValue +#else +#define IF_PANGOMM2_48(ThenValue, ElseValue) ElseValue +#endif + +#define TR_GTK_ALIGN(Code) IF_GTKMM4(Gtk::Align::Code, Gtk::ALIGN_##Code) +#define TR_GTK_BUTTONS_TYPE(Code) IF_GTKMM4(Gtk::ButtonsType::Code, Gtk::BUTTONS_##Code) +#define TR_GTK_CELL_RENDERER_STATE(Code) IF_GTKMM4(Gtk::CellRendererState::Code, Gtk::CELL_RENDERER_##Code) +#define TR_GTK_FILE_CHOOSER_ACTION(Code) IF_GTKMM4(Gtk::FileChooser::Action::Code, Gtk::FILE_CHOOSER_ACTION_##Code) +#define TR_GTK_MESSAGE_TYPE(Code) IF_GTKMM4(Gtk::MessageType::Code, Gtk::MESSAGE_##Code) +#define TR_GTK_ORIENTATION(Code) IF_GTKMM4(Gtk::Orientation::Code, Gtk::ORIENTATION_##Code) +#define TR_GTK_POLICY_TYPE(Code) IF_GTKMM4(Gtk::PolicyType::Code, Gtk::POLICY_##Code) +#define TR_GTK_RESPONSE_TYPE(Code) IF_GTKMM4(Gtk::ResponseType::Code, Gtk::RESPONSE_##Code) +#define TR_GTK_SELECTION_MODE(Code) IF_GTKMM4(Gtk::SelectionMode::Code, Gtk::SELECTION_##Code) +#define TR_GTK_SORT_TYPE(Code) IF_GTKMM4(Gtk::SortType::Code, Gtk::SORT_##Code) +#define TR_GTK_STATE_FLAGS(Code) IF_GTKMM4(Gtk::StateFlags::Code, Gtk::STATE_FLAG_##Code) +#define TR_GTK_TREE_MODEL_FLAGS(Code) IF_GTKMM4(Gtk::TreeModel::Flags::Code, Gtk::TREE_MODEL_##Code) +#define TR_GTK_TREE_VIEW_COLUMN_SIZING(Code) IF_GTKMM4(Gtk::TreeViewColumn::Sizing::Code, Gtk::TREE_VIEW_COLUMN_##Code) + +#define TR_GTK_TREE_MODEL_CHILD_ITER(Obj) IF_GTKMM4((Obj).get_iter(), (Obj)) +#define TR_GTK_WIDGET_GET_ROOT(Obj) IF_GTKMM4((Obj).get_root(), (Obj).get_toplevel()) + +#define TR_GDK_COLORSPACE(Code) IF_GTKMM4(Gdk::Colorspace::Code, Gdk::COLORSPACE_##Code) +#define TR_GDK_EVENT_TYPE(Code) IF_GTKMM4(Gdk::Event::Type::Code, GdkEventType::GDK_##Code) +#define TR_GDK_DRAG_ACTION(Code) IF_GTKMM4(Gdk::DragAction::Code, Gdk::ACTION_##Code) +#define TR_GDK_MODIFIED_TYPE(Code) IF_GTKMM4(Gdk::ModifierType::Code, GdkModifierType::GDK_##Code) + +#define TR_GLIB_FILE_TEST(Code) IF_GLIBMM2_68(Glib::FileTest::Code, Glib::FILE_TEST_##Code) +#define TR_GLIB_NODE_TREE_TRAVERSE_FLAGS(Cls, Code) IF_GLIBMM2_68(Cls::TraverseFlags::Code, Cls::TRAVERSE_##Code) +#define TR_GLIB_PARAM_FLAGS(Code) IF_GLIBMM2_68(Glib::ParamFlags::Code, Glib::PARAM_##Code) +#define TR_GLIB_SPAWN_FLAGS(Code) IF_GLIBMM2_68(Glib::SpawnFlags::Code, Glib::SPAWN_##Code) +#define TR_GLIB_USER_DIRECTORY(Code) IF_GLIBMM2_68(Glib::UserDirectory::Code, Glib::USER_DIRECTORY_##Code) + +#define TR_GLIB_EXCEPTION_WHAT(Obj) IF_GLIBMM2_68((Obj).what(), (Obj).what().c_str()) + +#define TR_GIO_APP_INFO_CREATE_FLAGS(Code) IF_GLIBMM2_68(Gio::AppInfo::CreateFlags::Code, Gio::APP_INFO_CREATE_##Code) +#define TR_GIO_APPLICATION_FLAGS(Code) IF_GLIBMM2_68(Gio::Application::Flags::Code, Gio::APPLICATION_##Code) +#define TR_GIO_DBUS_BUS_TYPE(Code) IF_GLIBMM2_68(Gio::DBus::BusType::Code, Gio::DBus::BUS_TYPE_##Code) +#define TR_GIO_DBUS_PROXY_FLAGS(Code) IF_GLIBMM2_68(Gio::DBus::ProxyFlags::Code, Gio::DBus::PROXY_FLAGS_##Code) +#define TR_GIO_FILE_MONITOR_EVENT(Code) IF_GLIBMM2_68(Gio::FileMonitor::Event::Code, Gio::FILE_MONITOR_EVENT_##Code) + +#define TR_CAIRO_SURFACE_FORMAT(Code) IF_CAIROMM1_16(Cairo::Surface::Format::Code, Cairo::FORMAT_##Code) +#define TR_CAIRO_CONTEXT_OPERATOR(Code) IF_CAIROMM1_16(Cairo::Context::Operator::Code, Cairo::OPERATOR_##Code) + +#define TR_PANGO_ALIGNMENT(Code) IF_PANGOMM2_48(Pango::Alignment::Code, Pango::ALIGN_##Code) +#define TR_PANGO_ELLIPSIZE_MODE(Code) IF_PANGOMM2_48(Pango::EllipsizeMode::Code, Pango::ELLIPSIZE_##Code) +#define TR_PANGO_WEIGHT(Code) IF_PANGOMM2_48(Pango::Weight::Code, Pango::WEIGHT_##Code) + +namespace Glib +{ + +#if !GLIBMM_CHECK_VERSION(2, 68, 0) + +template +class RefPtr; + +template +inline bool operator==(RefPtr const& lhs, std::nullptr_t /*rhs*/) +{ + return !lhs; +} + +template +inline bool operator!=(RefPtr const& lhs, std::nullptr_t /*rhs*/) +{ + return !(lhs == nullptr); +} + +template +inline RefPtr make_refptr_for_instance(T* object) +{ + return RefPtr(object); +} + +#endif + +} // namespace Glib diff --git a/gtk/IconCache.cc b/gtk/IconCache.cc index 7f4dff80f..22cb91380 100644 --- a/gtk/IconCache.cc +++ b/gtk/IconCache.cc @@ -7,7 +7,7 @@ #include "IconCache.h" -#include "Utils.h" +#include "GtkCompat.h" #include diff --git a/gtk/ListModelAdapter.cc b/gtk/ListModelAdapter.cc index afda4e08c..6bb32e13a 100644 --- a/gtk/ListModelAdapter.cc +++ b/gtk/ListModelAdapter.cc @@ -5,6 +5,8 @@ #include "ListModelAdapter.h" +#include "Utils.h" + namespace { diff --git a/gtk/ListModelAdapter.h b/gtk/ListModelAdapter.h index 3b72faa8a..14b5ce08a 100644 --- a/gtk/ListModelAdapter.h +++ b/gtk/ListModelAdapter.h @@ -5,7 +5,7 @@ #pragma once -#include "Utils.h" +#include "GtkCompat.h" #include #include diff --git a/gtk/MainWindow.cc b/gtk/MainWindow.cc index a7c7d7ca0..eb580f65d 100644 --- a/gtk/MainWindow.cc +++ b/gtk/MainWindow.cc @@ -6,6 +6,7 @@ #include "Actions.h" #include "FilterBar.h" +#include "GtkCompat.h" #include "ListModelAdapter.h" #include "Prefs.h" #include "PrefsDialog.h" diff --git a/gtk/MakeDialog.cc b/gtk/MakeDialog.cc index fd8b14450..015624404 100644 --- a/gtk/MakeDialog.cc +++ b/gtk/MakeDialog.cc @@ -5,6 +5,7 @@ #include "MakeDialog.h" +#include "GtkCompat.h" #include "PathButton.h" #include "PrefsDialog.h" #include "Session.h" diff --git a/gtk/MessageLogWindow.cc b/gtk/MessageLogWindow.cc index bf28ee43e..bc3a3d300 100644 --- a/gtk/MessageLogWindow.cc +++ b/gtk/MessageLogWindow.cc @@ -6,6 +6,7 @@ #include "MessageLogWindow.h" #include "Actions.h" +#include "GtkCompat.h" #include "Prefs.h" #include "PrefsDialog.h" #include "Session.h" diff --git a/gtk/Notify.cc b/gtk/Notify.cc index 1797113c6..155ed0e40 100644 --- a/gtk/Notify.cc +++ b/gtk/Notify.cc @@ -5,6 +5,7 @@ #include "Notify.h" +#include "GtkCompat.h" #include "Prefs.h" #include "PrefsDialog.h" #include "Session.h" diff --git a/gtk/OptionsDialog.cc b/gtk/OptionsDialog.cc index 101f089b2..bf19de1ff 100644 --- a/gtk/OptionsDialog.cc +++ b/gtk/OptionsDialog.cc @@ -7,6 +7,7 @@ #include "FileList.h" #include "FreeSpaceLabel.h" +#include "GtkCompat.h" #include "PathButton.h" #include "Prefs.h" #include "PrefsDialog.h" diff --git a/gtk/PathButton.cc b/gtk/PathButton.cc index cd580368a..4e43069ee 100644 --- a/gtk/PathButton.cc +++ b/gtk/PathButton.cc @@ -5,6 +5,8 @@ #include "PathButton.h" +#include "Utils.h" + #include #include #include diff --git a/gtk/PathButton.h b/gtk/PathButton.h index a213923c9..170e11f67 100644 --- a/gtk/PathButton.h +++ b/gtk/PathButton.h @@ -5,7 +5,7 @@ #pragma once -#include "Utils.h" +#include "GtkCompat.h" #include diff --git a/gtk/Prefs.cc b/gtk/Prefs.cc index 3711b5186..a09c59f41 100644 --- a/gtk/Prefs.cc +++ b/gtk/Prefs.cc @@ -4,8 +4,8 @@ #include "Prefs.h" +#include "GtkCompat.h" #include "PrefsDialog.h" -#include "Utils.h" #include #include diff --git a/gtk/PrefsDialog.cc b/gtk/PrefsDialog.cc index b2e13727f..a3265c876 100644 --- a/gtk/PrefsDialog.cc +++ b/gtk/PrefsDialog.cc @@ -6,6 +6,7 @@ #include "PrefsDialog.h" #include "FreeSpaceLabel.h" +#include "GtkCompat.h" #include "PathButton.h" #include "Prefs.h" #include "Session.h" diff --git a/gtk/RelocateDialog.cc b/gtk/RelocateDialog.cc index 07d10a091..ece0210be 100644 --- a/gtk/RelocateDialog.cc +++ b/gtk/RelocateDialog.cc @@ -5,6 +5,7 @@ #include "RelocateDialog.h" +#include "GtkCompat.h" #include "PathButton.h" #include "Prefs.h" /* gtr_pref_string_get */ #include "Session.h" diff --git a/gtk/Session.h b/gtk/Session.h index 426995155..82de89a69 100644 --- a/gtk/Session.h +++ b/gtk/Session.h @@ -4,8 +4,8 @@ #pragma once +#include "GtkCompat.h" #include "Torrent.h" -#include "Utils.h" #include #include diff --git a/gtk/StatsDialog.cc b/gtk/StatsDialog.cc index 4d5e76645..a13ce938f 100644 --- a/gtk/StatsDialog.cc +++ b/gtk/StatsDialog.cc @@ -5,6 +5,7 @@ #include "StatsDialog.h" +#include "GtkCompat.h" #include "PrefsDialog.h" #include "Session.h" #include "Utils.h" diff --git a/gtk/TorrentCellRenderer.cc b/gtk/TorrentCellRenderer.cc index 4bfa02f7c..298e4e6bb 100644 --- a/gtk/TorrentCellRenderer.cc +++ b/gtk/TorrentCellRenderer.cc @@ -7,7 +7,6 @@ #include "HigWorkarea.h" // GUI_PAD, GUI_PAD_SMALL #include "Torrent.h" -#include "Utils.h" #include #include /* tr_truncd() */ diff --git a/gtk/TorrentCellRenderer.h b/gtk/TorrentCellRenderer.h index 550d1864d..d5111a7fa 100644 --- a/gtk/TorrentCellRenderer.h +++ b/gtk/TorrentCellRenderer.h @@ -5,7 +5,7 @@ #pragma once -#include "Utils.h" +#include "GtkCompat.h" #include diff --git a/gtk/TorrentFilter.cc b/gtk/TorrentFilter.cc index fe2600d5f..7d86de4a6 100644 --- a/gtk/TorrentFilter.cc +++ b/gtk/TorrentFilter.cc @@ -5,6 +5,8 @@ #include "TorrentFilter.h" +#include "Utils.h" + #include void TorrentFilter::set_activity(Activity type) diff --git a/gtk/TorrentFilter.h b/gtk/TorrentFilter.h index 2d0065d63..35b6a731b 100644 --- a/gtk/TorrentFilter.h +++ b/gtk/TorrentFilter.h @@ -5,8 +5,8 @@ #pragma once +#include "GtkCompat.h" #include "Torrent.h" -#include "Utils.h" #include #include diff --git a/gtk/TorrentSorter.cc b/gtk/TorrentSorter.cc index d09ece569..4e35b32cf 100644 --- a/gtk/TorrentSorter.cc +++ b/gtk/TorrentSorter.cc @@ -5,6 +5,8 @@ #include "TorrentSorter.h" +#include "Utils.h" + #include #include diff --git a/gtk/TorrentSorter.h b/gtk/TorrentSorter.h index 6178c3f93..98bf4f4b0 100644 --- a/gtk/TorrentSorter.h +++ b/gtk/TorrentSorter.h @@ -5,8 +5,8 @@ #pragma once +#include "GtkCompat.h" #include "Torrent.h" -#include "Utils.h" #include diff --git a/gtk/Utils.h b/gtk/Utils.h index 7d87981b8..46152d5ab 100644 --- a/gtk/Utils.h +++ b/gtk/Utils.h @@ -5,6 +5,8 @@ #pragma once +#include "GtkCompat.h" + #include #include @@ -38,88 +40,6 @@ **** ***/ -#ifndef GTKMM_CHECK_VERSION -#define GTKMM_CHECK_VERSION(major, minor, micro) \ - (GTKMM_MAJOR_VERSION > (major) || (GTKMM_MAJOR_VERSION == (major) && GTKMM_MINOR_VERSION > (minor)) || \ - (GTKMM_MAJOR_VERSION == (major) && GTKMM_MINOR_VERSION == (minor) && GTKMM_MICRO_VERSION >= (micro))) -#endif - -#ifndef GLIBMM_CHECK_VERSION -#define GLIBMM_CHECK_VERSION(major, minor, micro) \ - (GLIBMM_MAJOR_VERSION > (major) || (GLIBMM_MAJOR_VERSION == (major) && GLIBMM_MINOR_VERSION > (minor)) || \ - (GLIBMM_MAJOR_VERSION == (major) && GLIBMM_MINOR_VERSION == (minor) && GLIBMM_MICRO_VERSION >= (micro))) -#endif - -#ifndef PANGOMM_CHECK_VERSION -#define PANGOMM_CHECK_VERSION(major, minor, micro) \ - (PANGOMM_MAJOR_VERSION > (major) || (PANGOMM_MAJOR_VERSION == (major) && PANGOMM_MINOR_VERSION > (minor)) || \ - (PANGOMM_MAJOR_VERSION == (major) && PANGOMM_MINOR_VERSION == (minor) && PANGOMM_MICRO_VERSION >= (micro))) -#endif - -#if GTKMM_CHECK_VERSION(4, 0, 0) -#define IF_GTKMM4(ThenValue, ElseValue) ThenValue -#else -#define IF_GTKMM4(ThenValue, ElseValue) ElseValue -#endif - -#if GLIBMM_CHECK_VERSION(2, 68, 0) -#define IF_GLIBMM2_68(ThenValue, ElseValue) ThenValue -#else -#define IF_GLIBMM2_68(ThenValue, ElseValue) ElseValue -#endif - -#if PANGOMM_CHECK_VERSION(2, 48, 0) -#define IF_PANGOMM2_48(ThenValue, ElseValue) ThenValue -#else -#define IF_PANGOMM2_48(ThenValue, ElseValue) ElseValue -#endif - -#define TR_GTK_ALIGN(Code) IF_GTKMM4(Gtk::Align::Code, Gtk::ALIGN_##Code) -#define TR_GTK_BUTTONS_TYPE(Code) IF_GTKMM4(Gtk::ButtonsType::Code, Gtk::BUTTONS_##Code) -#define TR_GTK_CELL_RENDERER_STATE(Code) IF_GTKMM4(Gtk::CellRendererState::Code, Gtk::CELL_RENDERER_##Code) -#define TR_GTK_FILE_CHOOSER_ACTION(Code) IF_GTKMM4(Gtk::FileChooser::Action::Code, Gtk::FILE_CHOOSER_ACTION_##Code) -#define TR_GTK_MESSAGE_TYPE(Code) IF_GTKMM4(Gtk::MessageType::Code, Gtk::MESSAGE_##Code) -#define TR_GTK_ORIENTATION(Code) IF_GTKMM4(Gtk::Orientation::Code, Gtk::ORIENTATION_##Code) -#define TR_GTK_POLICY_TYPE(Code) IF_GTKMM4(Gtk::PolicyType::Code, Gtk::POLICY_##Code) -#define TR_GTK_RESPONSE_TYPE(Code) IF_GTKMM4(Gtk::ResponseType::Code, Gtk::RESPONSE_##Code) -#define TR_GTK_SELECTION_MODE(Code) IF_GTKMM4(Gtk::SelectionMode::Code, Gtk::SELECTION_##Code) -#define TR_GTK_SORT_TYPE(Code) IF_GTKMM4(Gtk::SortType::Code, Gtk::SORT_##Code) -#define TR_GTK_STATE_FLAGS(Code) IF_GTKMM4(Gtk::StateFlags::Code, Gtk::STATE_FLAG_##Code) -#define TR_GTK_TREE_MODEL_FLAGS(Code) IF_GTKMM4(Gtk::TreeModel::Flags::Code, Gtk::TREE_MODEL_##Code) -#define TR_GTK_TREE_VIEW_COLUMN_SIZING(Code) IF_GTKMM4(Gtk::TreeViewColumn::Sizing::Code, Gtk::TREE_VIEW_COLUMN_##Code) - -#define TR_GTK_TREE_MODEL_CHILD_ITER(Obj) IF_GTKMM4((Obj).get_iter(), (Obj)) -#define TR_GTK_WIDGET_GET_ROOT(Obj) IF_GTKMM4((Obj).get_root(), (Obj).get_toplevel()) - -#define TR_GDK_COLORSPACE(Code) IF_GTKMM4(Gdk::Colorspace::Code, Gdk::COLORSPACE_##Code) -#define TR_GDK_EVENT_TYPE(Code) IF_GTKMM4(Gdk::Event::Type::Code, GdkEventType::GDK_##Code) -#define TR_GDK_DRAG_ACTION(Code) IF_GTKMM4(Gdk::DragAction::Code, Gdk::ACTION_##Code) -#define TR_GDK_MODIFIED_TYPE(Code) IF_GTKMM4(Gdk::ModifierType::Code, GdkModifierType::GDK_##Code) - -#define TR_GLIB_FILE_TEST(Code) IF_GLIBMM2_68(Glib::FileTest::Code, Glib::FILE_TEST_##Code) -#define TR_GLIB_NODE_TREE_TRAVERSE_FLAGS(Cls, Code) IF_GLIBMM2_68(Cls::TraverseFlags::Code, Cls::TRAVERSE_##Code) -#define TR_GLIB_SPAWN_FLAGS(Code) IF_GLIBMM2_68(Glib::SpawnFlags::Code, Glib::SPAWN_##Code) -#define TR_GLIB_USER_DIRECTORY(Code) IF_GLIBMM2_68(Glib::UserDirectory::Code, Glib::USER_DIRECTORY_##Code) - -#define TR_GLIB_EXCEPTION_WHAT(Obj) IF_GLIBMM2_68((Obj).what(), (Obj).what().c_str()) - -#define TR_GIO_APP_INFO_CREATE_FLAGS(Code) IF_GLIBMM2_68(Gio::AppInfo::CreateFlags::Code, Gio::APP_INFO_CREATE_##Code) -#define TR_GIO_APPLICATION_FLAGS(Code) IF_GLIBMM2_68(Gio::Application::Flags::Code, Gio::APPLICATION_##Code) -#define TR_GIO_DBUS_BUS_TYPE(Code) IF_GLIBMM2_68(Gio::DBus::BusType::Code, Gio::DBus::BUS_TYPE_##Code) -#define TR_GIO_DBUS_PROXY_FLAGS(Code) IF_GLIBMM2_68(Gio::DBus::ProxyFlags::Code, Gio::DBus::PROXY_FLAGS_##Code) -#define TR_GIO_FILE_MONITOR_EVENT(Code) IF_GLIBMM2_68(Gio::FileMonitor::Event::Code, Gio::FILE_MONITOR_EVENT_##Code) - -#define TR_CAIRO_SURFACE_FORMAT(Code) IF_GTKMM4(Cairo::Surface::Format::Code, Cairo::FORMAT_##Code) -#define TR_CAIRO_CONTEXT_OPERATOR(Code) IF_GTKMM4(Cairo::Context::Operator::Code, Cairo::OPERATOR_##Code) - -#define TR_PANGO_ALIGNMENT(Code) IF_PANGOMM2_48(Pango::Alignment::Code, Pango::ALIGN_##Code) -#define TR_PANGO_ELLIPSIZE_MODE(Code) IF_PANGOMM2_48(Pango::EllipsizeMode::Code, Pango::ELLIPSIZE_##Code) -#define TR_PANGO_WEIGHT(Code) IF_PANGOMM2_48(Pango::Weight::Code, Pango::WEIGHT_##Code) - -/*** -**** -***/ - extern int const mem_K; extern char const* const mem_K_str; extern char const* const mem_M_str; @@ -284,48 +204,23 @@ extern size_t const max_recent_dirs; std::list gtr_get_recent_dirs(std::string const& pref); void gtr_save_recent_dir(std::string const& pref, Glib::RefPtr const& core, std::string const& dir); -namespace gtr_detail -{ - -#if G_ENCODE_VERSION(GLIBMM_MAJOR_VERSION, GLIBMM_MINOR_VERSION) < G_ENCODE_VERSION(2, 62) - -template -inline T const& sprintify(T const& arg) -{ - return arg; -} - -inline char const* sprintify(Glib::ustring const& arg) -{ - return arg.c_str(); -} - -inline char const* sprintify(std::string const& arg) -{ - return arg.c_str(); -} - -#endif - -} // namespace gtr_detail - template inline Glib::RefPtr gtr_ptr_static_cast(Glib::RefPtr const& ptr) { -#if G_ENCODE_VERSION(GLIBMM_MAJOR_VERSION, GLIBMM_MINOR_VERSION) < G_ENCODE_VERSION(2, 68) - return Glib::RefPtr::cast_static(ptr); -#else +#if GLIBMM_CHECK_VERSION(2, 68, 0) return std::static_pointer_cast(ptr); +#else + return Glib::RefPtr::cast_static(ptr); #endif } template inline Glib::RefPtr gtr_ptr_dynamic_cast(Glib::RefPtr const& ptr) { -#if G_ENCODE_VERSION(GLIBMM_MAJOR_VERSION, GLIBMM_MINOR_VERSION) < G_ENCODE_VERSION(2, 68) - return Glib::RefPtr::cast_dynamic(ptr); -#else +#if GLIBMM_CHECK_VERSION(2, 68, 0) return std::dynamic_pointer_cast(ptr); +#else + return Glib::RefPtr::cast_dynamic(ptr); #endif } @@ -394,30 +289,3 @@ void gtr_window_on_close(Gtk::Window& widget, F&& callback) widget.signal_delete_event().connect(sigc::hide<0>(bool_callback), false); #endif } - -namespace Glib -{ - -#if G_ENCODE_VERSION(GLIBMM_MAJOR_VERSION, GLIBMM_MINOR_VERSION) < G_ENCODE_VERSION(2, 68) - -template -inline bool operator==(RefPtr const& lhs, std::nullptr_t /*rhs*/) -{ - return !lhs; -} - -template -inline bool operator!=(RefPtr const& lhs, std::nullptr_t /*rhs*/) -{ - return !(lhs == nullptr); -} - -template -inline RefPtr make_refptr_for_instance(T* object) -{ - return RefPtr(object); -} - -#endif - -} // namespace Glib diff --git a/gtk/main.cc b/gtk/main.cc index e59b31255..a87501966 100644 --- a/gtk/main.cc +++ b/gtk/main.cc @@ -3,6 +3,7 @@ // License text can be found in the licenses/ folder. #include "Application.h" +#include "GtkCompat.h" #include "Notify.h" #include "Prefs.h" #include "Utils.h"