diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2025-04-24 20:12:26 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2025-04-25 07:43:33 +0200 |
| commit | 95dc7e43a23300b3eacbb7e1e0a9d4f31a8bd5a0 (patch) | |
| tree | 9fedc2fef0f5459f3df38c91f3b6366ffb9d48b3 | |
| parent | 48eb849abde6c9af75c015a9721c9b337f3a5fd9 (diff) | |
| download | turns-95dc7e43a23300b3eacbb7e1e0a9d4f31a8bd5a0.tar.xz turns-95dc7e43a23300b3eacbb7e1e0a9d4f31a8bd5a0.zip | |
adw: extract class definitions
55 files changed, 1067 insertions, 565 deletions
diff --git a/adw/CMakeLists.txt b/adw/CMakeLists.txt index 6ca4ad0..6b08199 100644 --- a/adw/CMakeLists.txt +++ b/adw/CMakeLists.txt @@ -14,23 +14,12 @@ pkg_check_modules("adwaita" IMPORTED_TARGET REQUIRED "libadwaita-1>=1.7.0") pkg_check_modules("giomm" IMPORTED_TARGET REQUIRED "giomm-2.68>=2.80") pkg_check_modules("glibmm" IMPORTED_TARGET REQUIRED "glibmm-2.68>=2.80") -add_library("adwaitamm" - "src/helpers/async_callback.cpp" - "src/actionrow.cpp" - "src/alertdialog.cpp" - "src/application.cpp" - "src/applicationwindow.cpp" - "src/breakpoint.cpp" - "src/dialog.cpp" - "src/enums.cpp" - "src/preferencesdialog.cpp" - "src/preferencespage.cpp" - "src/preferencesrow.cpp" - "src/stylemanager.cpp" - "src/switchrow.cpp" - "src/toast.cpp" - "src/toastoverlay.cpp" - "src/wrap_init.cpp" +add_library("adwaitamm") + +file(GLOB_RECURSE ADWAITAMM_SOURCES RELATIVE "${PROJECT_SOURCE_DIR}" CONFIGURE_DEPENDS "src/**.cpp") + +target_sources("adwaitamm" PRIVATE + ${ADWAITAMM_SOURCES} ) file(GLOB_RECURSE ADWAITAMM_HEADERS RELATIVE "${PROJECT_SOURCE_DIR}" CONFIGURE_DEPENDS "include/**/*.hpp") diff --git a/adw/include/adwaitamm/actionrow.hpp b/adw/include/adwaitamm/actionrow.hpp index 5b99ab7..6a34e15 100644 --- a/adw/include/adwaitamm/actionrow.hpp +++ b/adw/include/adwaitamm/actionrow.hpp @@ -24,23 +24,10 @@ namespace Adwaita struct ActionRow : PreferencesRow, helpers::gobj_mixin<ActionRow, AdwActionRow> { - struct Class : Glib::Class - { - using BaseClassParent = AdwPreferencesRowClass; - using BaseClassType = AdwActionRowClass; - using BaseObjectType = AdwActionRow; - using CppClassParent = PreferencesRow::Class; - using CppObjectType = ActionRow; - - auto init() -> Glib::Class const &; - auto static class_init_function(void * gclass, void * data) -> void; - auto static wrap_new(GObject * object) -> Glib::ObjectBase *; - }; - - using BaseObjectType = Class::BaseObjectType; - using BaseClassType = Class::BaseClassType; - using CppObjectType = Class::CppObjectType; - using CppClassType = Class; + using BaseObjectType = AdwActionRow; + using BaseClassType = AdwActionRowClass; + using CppObjectType = ActionRow; + using CppClassType = struct ActionRow_Class; using helpers::gobj_mixin<CppObjectType, BaseObjectType>::gobj; using helpers::gobj_mixin<CppObjectType, BaseObjectType>::gobj_copy; @@ -87,6 +74,8 @@ namespace Adwaita auto property_title_lines() const noexcept -> Glib::PropertyProxy_ReadOnly<int>; protected: + friend struct ActionRow_Class; + explicit ActionRow(Glib::ConstructParams const & params); explicit ActionRow(BaseObjectType * gobj); }; diff --git a/adw/include/adwaitamm/alertdialog.hpp b/adw/include/adwaitamm/alertdialog.hpp index 2a34a45..fb0d88f 100644 --- a/adw/include/adwaitamm/alertdialog.hpp +++ b/adw/include/adwaitamm/alertdialog.hpp @@ -17,8 +17,9 @@ #include <glib-object.h> -using AdwAlertDialog = struct _AdwAlertDialog; -using AdwAlertDialogClass = struct _AdwAlertDialogClass; +#define _ADWAITA_INSIDE +#include <adw-alert-dialog.h> +#undef _ADWAITA_INSIDE namespace Adwaita { @@ -27,23 +28,10 @@ namespace Adwaita struct AlertDialog : Dialog, helpers::gobj_mixin<AlertDialog, AdwAlertDialog> { - struct Class : Glib::Class - { - using BaseClassParent = AdwDialogClass; - using BaseClassType = AdwAlertDialogClass; - using BaseObjectType = AdwAlertDialog; - using CppClassParent = Dialog::Class; - using CppObjectType = AlertDialog; - - auto init() -> Glib::Class const &; - auto static class_init_function(void * gclass, void * data) -> void; - auto static wrap_new(GObject * object) -> Glib::ObjectBase *; - }; - - using BaseObjectType = Class::BaseObjectType; - using BaseClassType = Class::BaseClassType; - using CppObjectType = Class::CppObjectType; - using CppClassType = Class; + using BaseObjectType = AdwAlertDialog; + using BaseClassType = AdwAlertDialogClass; + using CppObjectType = AlertDialog; + using CppClassType = struct AlertDialog_Class; using helpers::gobj_mixin<CppObjectType, BaseObjectType>::gobj; using helpers::gobj_mixin<CppObjectType, BaseObjectType>::gobj_copy; @@ -67,6 +55,8 @@ namespace Adwaita auto set_response_appearance(Glib::ustring id, ResponseAppearance value) -> void; protected: + friend AlertDialog_Class; + explicit AlertDialog(Glib::ConstructParams const & params); explicit AlertDialog(BaseObjectType * gobj); }; diff --git a/adw/include/adwaitamm/application.hpp b/adw/include/adwaitamm/application.hpp index 5242d50..0cbc24f 100644 --- a/adw/include/adwaitamm/application.hpp +++ b/adw/include/adwaitamm/application.hpp @@ -4,6 +4,7 @@ #include "adwaitamm/helpers/gobj_mixin.hpp" #include <glibmm/class.h> +#include <glibmm/object.h> #include <glibmm/refptr.h> #include <glibmm/ustring.h> @@ -11,31 +12,21 @@ #include <gtkmm/application.h> -using AdwApplication = struct _AdwApplication; -using AdwApplicationClass = struct _AdwApplicationClass; +#include <glib-object.h> + +#define _ADWAITA_INSIDE +#include <adw-application.h> +#undef _ADWAITA_INSIDE namespace Adwaita { struct Application : Gtk::Application, helpers::gobj_mixin<Application, AdwApplication> { - struct Class : Glib::Class - { - using BaseClassParent = GtkApplicationClass; - using BaseClassType = AdwApplicationClass; - using BaseObjectType = AdwApplication; - using CppClassParent = struct Gtk::Application_Class; - using CppObjectType = Application; - - auto init() -> Glib::Class const &; - auto static class_init_function(void * gclass, void * data) -> void; - auto static wrap_new(GObject * object) -> Glib::ObjectBase *; - }; - - using BaseObjectType = Class::BaseObjectType; - using BaseClassType = Class::BaseClassType; - using CppObjectType = Class::CppObjectType; - using CppClassType = Class; + using BaseObjectType = AdwApplication; + using BaseClassType = AdwApplicationClass; + using CppObjectType = Application; + using CppClassType = struct Application_Class; using helpers::gobj_mixin<CppObjectType, BaseObjectType>::gobj; using helpers::gobj_mixin<CppObjectType, BaseObjectType>::gobj_copy; @@ -46,13 +37,15 @@ namespace Adwaita auto operator=(Application const & other) noexcept -> Application & = delete; auto operator=(Application && other) noexcept -> Application & = default; - auto static create(Glib::ustring const & id = {}, - Gio::Application::Flags flags = Gio::Application::Flags::NONE) -> Glib::RefPtr<Application>; + auto static create(Glib::ustring const & id = {}, Gio::Application::Flags flags = Gio::Application::Flags::NONE) + -> Glib::RefPtr<Application>; auto static get_type() -> GType; auto static get_base_type() -> GType; protected: + friend Application_Class; + explicit Application(Glib::ConstructParams const & params); explicit Application(BaseObjectType * gobj); explicit Application(Glib::ustring const & id = {}, Gio::Application::Flags flags = Gio::Application::Flags::NONE); diff --git a/adw/include/adwaitamm/applicationwindow.hpp b/adw/include/adwaitamm/applicationwindow.hpp index 310795e..454fad5 100644 --- a/adw/include/adwaitamm/applicationwindow.hpp +++ b/adw/include/adwaitamm/applicationwindow.hpp @@ -11,31 +11,21 @@ #include <gtkmm/application.h> #include <gtkmm/applicationwindow.h> -using AdwApplicationWindow = struct _AdwApplicationWindow; -using AdwApplicationWindowClass = struct _AdwApplicationWindowClass; +#include <glib-object.h> + +#define _ADWAITA_INSIDE +#include <adw-application-window.h> +#undef _ADWAITA_INSIDE namespace Adwaita { struct ApplicationWindow : Gtk::ApplicationWindow, helpers::gobj_mixin<ApplicationWindow, AdwApplicationWindow> { - struct Class : Glib::Class - { - using BaseClassParent = GtkApplicationWindowClass; - using BaseClassType = AdwApplicationWindowClass; - using BaseObjectType = AdwApplicationWindow; - using CppClassParent = struct Gtk::ApplicationWindow_Class; - using CppObjectType = ApplicationWindow; - - auto init() -> Glib::Class const &; - auto static class_init_function(void * gclass, void * data) -> void; - auto static wrap_new(GObject * object) -> Glib::ObjectBase *; - }; - - using BaseObjectType = Class::BaseObjectType; - using BaseClassType = Class::BaseClassType; - using CppObjectType = Class::CppObjectType; - using CppClassType = Class; + using BaseObjectType = AdwApplicationWindow; + using BaseClassType = AdwApplicationWindowClass; + using CppObjectType = ApplicationWindow; + using CppClassType = struct ApplicationWindow_Class; using helpers::gobj_mixin<CppObjectType, BaseObjectType>::gobj; using helpers::gobj_mixin<CppObjectType, BaseObjectType>::gobj_copy; @@ -51,6 +41,8 @@ namespace Adwaita auto static get_base_type() -> GType; protected: + friend ApplicationWindow_Class; + explicit ApplicationWindow(Glib::ConstructParams const & params); explicit ApplicationWindow(BaseObjectType * gobj); }; diff --git a/adw/include/adwaitamm/breakpoint.hpp b/adw/include/adwaitamm/breakpoint.hpp index 13e9f1e..7bcb2d9 100644 --- a/adw/include/adwaitamm/breakpoint.hpp +++ b/adw/include/adwaitamm/breakpoint.hpp @@ -52,23 +52,10 @@ namespace Adwaita Gtk::Buildable, helpers::gobj_mixin<Breakpoint, AdwBreakpoint> { - struct Class : Glib::Class - { - using BaseClassParent = GObjectClass; - using BaseClassType = AdwBreakpointClass; - using BaseObjectType = AdwBreakpoint; - using CppClassParent = struct Glib::Object_Class; - using CppObjectType = Breakpoint; - - auto init() -> Glib::Class const &; - auto static class_init_function(void * gclass, void * data) -> void; - auto static wrap_new(GObject * object) -> Glib::ObjectBase *; - }; - - using BaseObjectType = Class::BaseObjectType; - using BaseClassType = Class::BaseClassType; - using CppObjectType = Class::CppObjectType; - using CppClassType = Class; + using BaseObjectType = AdwBreakpoint; + using BaseClassType = AdwBreakpointClass; + using CppObjectType = Breakpoint; + using CppClassType = struct Breakpoint_Class; using helpers::gobj_mixin<CppObjectType, BaseObjectType>::gobj; using helpers::gobj_mixin<CppObjectType, BaseObjectType>::gobj_copy; @@ -87,6 +74,8 @@ namespace Adwaita auto property_condition() const -> Glib::PropertyProxy_ReadOnly<BreakpointCondition *>; protected: + friend Breakpoint_Class; + explicit Breakpoint(BreakpointCondition & condition); explicit Breakpoint(Glib::ConstructParams const & params); explicit Breakpoint(BaseObjectType * gobj); diff --git a/adw/include/adwaitamm/dialog.hpp b/adw/include/adwaitamm/dialog.hpp index 44dde25..eeaeda1 100644 --- a/adw/include/adwaitamm/dialog.hpp +++ b/adw/include/adwaitamm/dialog.hpp @@ -15,34 +15,21 @@ #include <glib-object.h> -using AdwDialog = struct _AdwDialog; -using AdwDialogClass = struct _AdwDialogClass; +#define _ADWAITA_INSIDE +#include <adw-dialog.h> +#undef _ADWAITA_INSIDE namespace Adwaita { - struct Dialog_Class; - struct Dialog : Gtk::Widget, Gtk::ShortcutManager, helpers::gobj_mixin<Dialog, AdwDialog> { - struct Class : Glib::Class - { - using BaseClassParent = GtkWidgetClass; - using BaseClassType = AdwDialogClass; - using BaseObjectType = AdwDialog; - using CppClassParent = struct Gtk::Widget_Class; - using CppObjectType = Dialog; - - auto init() -> Glib::Class const &; - auto static class_init_function(void * gclass, void * data) -> void; - auto static wrap_new(GObject * object) -> Glib::ObjectBase *; - }; - - using BaseObjectType = Class::BaseObjectType; - using BaseClassType = Class::BaseClassType; - using CppObjectType = Class::CppObjectType; - using CppClassType = Class; + + using BaseObjectType = AdwDialog; + using BaseClassType = AdwDialogClass; + using CppObjectType = Dialog; + using CppClassType = struct Dialog_Class; using helpers::gobj_mixin<CppObjectType, BaseObjectType>::gobj; using helpers::gobj_mixin<CppObjectType, BaseObjectType>::gobj_copy; @@ -71,6 +58,8 @@ namespace Adwaita auto set_title(Glib::ustring const & str) -> void; protected: + friend Dialog_Class; + explicit Dialog(Glib::ConstructParams const & params); explicit Dialog(BaseObjectType * gobj); }; diff --git a/adw/include/adwaitamm/helpers/gobj_mixin.hpp b/adw/include/adwaitamm/helpers/gobj_mixin.hpp index fbdaa4e..762136e 100644 --- a/adw/include/adwaitamm/helpers/gobj_mixin.hpp +++ b/adw/include/adwaitamm/helpers/gobj_mixin.hpp @@ -8,27 +8,35 @@ namespace Adwaita::helpers { - template<typename Type, typename AdwType> + template<typename SourceType, typename TargetType> + struct copy_const + { + using type = TargetType; + }; + + template<typename SourceType, typename TargetType> + struct copy_const<SourceType const, TargetType> + { + using type = std::add_const_t<TargetType>; + }; + + template<typename SourceType, typename TargetType> + using copy_const_t = typename copy_const<SourceType, TargetType>::type; + + template<typename CppType, typename BaseType> struct gobj_mixin { template<typename Self> auto gobj(this Self && self) noexcept { - using clean_type = std::remove_reference_t<Self>; - using gobj_type = std::conditional_t<std::is_const_v<clean_type>, std::add_const_t<Glib::Object>, Glib::Object>; - using cast_type = std::conditional_t<std::is_const_v<clean_type>, std::add_const_t<AdwType>, AdwType>; - - return reinterpret_cast<cast_type *>(static_cast<gobj_type &&>(self).gobj()); + using base_type = copy_const_t<std::remove_reference_t<Self>, BaseType>; + return reinterpret_cast<base_type *>(self.::Glib::Object::gobj()); } template<typename Self> - auto gobj_copy(this Self && self) noexcept -> AdwType * + auto gobj_copy(this Self && self) noexcept { - using clean_type = std::remove_reference_t<Self>; - using gobj_type = std::conditional_t<std::is_const_v<clean_type>, std::add_const_t<Glib::Object>, Glib::Object>; - - static_cast<gobj_type &&>(self).reference(); - return const_cast<AdwType *>(self.gobj()); + return reinterpret_cast<BaseType *>(self.::Glib::Object::gobj_copy()); } }; diff --git a/adw/include/adwaitamm/preferencesdialog.hpp b/adw/include/adwaitamm/preferencesdialog.hpp index 2beaf64..080651f 100644 --- a/adw/include/adwaitamm/preferencesdialog.hpp +++ b/adw/include/adwaitamm/preferencesdialog.hpp @@ -1,9 +1,9 @@ #ifndef LIBADWAITAMM_PREFERENCES_DIALOG_HPP #define LIBADWAITAMM_PREFERENCES_DIALOG_HPP +#include "adwaitamm/preferencespage.hpp" #include "dialog.hpp" #include "helpers/gobj_mixin.hpp" -#include "adwaitamm/preferencespage.hpp" #include <glibmm/class.h> #include <glibmm/object.h> @@ -15,33 +15,19 @@ #include <glib-object.h> -using AdwPreferencesDialog = struct _AdwPreferencesDialog; -using AdwPreferencesDialogClass = struct _AdwPreferencesDialogClass; +#define _ADWAITA_INSIDE +#include <adw-preferences-dialog.h> +#undef _ADWAITA_INSIDE namespace Adwaita { - struct PreferencesDialog_Class; - struct PreferencesDialog : Dialog, helpers::gobj_mixin<PreferencesDialog, AdwPreferencesDialog> { - struct Class : Glib::Class - { - using BaseClassParent = AdwDialogClass; - using BaseClassType = AdwPreferencesDialogClass; - using BaseObjectType = AdwPreferencesDialog; - using CppClassParent = Dialog::Class; - using CppObjectType = PreferencesDialog; - - auto init() -> Glib::Class const &; - auto static class_init_function(void * gclass, void * data) -> void; - auto static wrap_new(GObject * object) -> Glib::ObjectBase *; - }; - - using BaseObjectType = Class::BaseObjectType; - using BaseClassType = Class::BaseClassType; - using CppObjectType = Class::CppObjectType; - using CppClassType = Class; + using BaseObjectType = AdwPreferencesDialog; + using BaseClassType = AdwPreferencesDialogClass; + using CppObjectType = PreferencesDialog; + using CppClassType = struct PreferencesDialog_Class; using helpers::gobj_mixin<CppObjectType, BaseObjectType>::gobj; using helpers::gobj_mixin<CppObjectType, BaseObjectType>::gobj_copy; @@ -60,6 +46,8 @@ namespace Adwaita auto set_visible_page(PreferencesPage & page) -> void; protected: + friend PreferencesDialog_Class; + explicit PreferencesDialog(Glib::ConstructParams const & params); explicit PreferencesDialog(BaseObjectType * gobj); }; diff --git a/adw/include/adwaitamm/preferencespage.hpp b/adw/include/adwaitamm/preferencespage.hpp index 7e7e9ed..311796f 100644 --- a/adw/include/adwaitamm/preferencespage.hpp +++ b/adw/include/adwaitamm/preferencespage.hpp @@ -13,31 +13,20 @@ #include <glib-object.h> -using AdwPreferencesPage = struct _AdwPreferencesPage; -using AdwPreferencesPageClass = struct _AdwPreferencesPageClass; +#define _ADWAITA_INSIDE +#include <adw-preferences-page.h> +#undef _ADWAITA_INSIDE namespace Adwaita { struct PreferencesPage : Gtk::Widget, helpers::gobj_mixin<PreferencesPage, AdwPreferencesPage> { - struct Class : Glib::Class - { - using BaseClassParent = GtkWidgetClass; - using BaseClassType = AdwPreferencesPageClass; - using BaseObjectType = AdwPreferencesPage; - using CppClassParent = struct Gtk::Widget_Class; - using CppObjectType = PreferencesPage; - auto init() -> Glib::Class const &; - auto static class_init_function(void * gclass, void * data) -> void; - auto static wrap_new(GObject * object) -> Glib::ObjectBase *; - }; - - using BaseObjectType = Class::BaseObjectType; - using BaseClassType = Class::BaseClassType; - using CppObjectType = Class::CppObjectType; - using CppClassType = Class; + using BaseObjectType = AdwPreferencesPage; + using BaseClassType = AdwPreferencesPageClass; + using CppObjectType = PreferencesPage; + using CppClassType = struct PreferencesPage_Class; using helpers::gobj_mixin<CppObjectType, BaseObjectType>::gobj; using helpers::gobj_mixin<CppObjectType, BaseObjectType>::gobj_copy; @@ -53,6 +42,8 @@ namespace Adwaita auto static get_base_type() -> GType; protected: + friend PreferencesPage_Class; + explicit PreferencesPage(Glib::ConstructParams const & params); explicit PreferencesPage(BaseObjectType * gobj); }; diff --git a/adw/include/adwaitamm/preferencesrow.hpp b/adw/include/adwaitamm/preferencesrow.hpp index 6c1d6bb..3bbaaec 100644 --- a/adw/include/adwaitamm/preferencesrow.hpp +++ b/adw/include/adwaitamm/preferencesrow.hpp @@ -22,23 +22,10 @@ namespace Adwaita struct PreferencesRow : Gtk::ListBoxRow, helpers::gobj_mixin<PreferencesRow, AdwPreferencesRow> { - struct Class : Glib::Class - { - using BaseClassParent = GtkListBoxRowClass; - using BaseClassType = AdwPreferencesRowClass; - using BaseObjectType = AdwPr |
