summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.vscode/settings.json5
-rw-r--r--CMakeLists.txt2
-rw-r--r--app/CMakeLists.txt5
-rw-r--r--cmake/Modules/GlibCompileSchemas.cmake44
-rw-r--r--core/CMakeLists.txt16
-rw-r--r--core/include/turns/core/settings.hpp21
-rw-r--r--core/schemas/ch.arknet.Turns.gschema.xml (renamed from app/ch.arknet.Turns.gschema.xml)0
-rw-r--r--core/src/settings.cpp28
-rw-r--r--ui/src/windows/tracker.cpp5
9 files changed, 117 insertions, 9 deletions
diff --git a/.vscode/settings.json b/.vscode/settings.json
index ccee2f6..9338cfa 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -15,7 +15,7 @@
],
"editor.tabSize": 2,
-
+
"cSpell.language": "en,de",
@@ -29,7 +29,8 @@
"cmake.configureArgs": [
"-DCMAKE_EXPORT_COMPILE_COMMANDS=YES",
"-DCMAKE_INSTALL_PREFIX=${env:HOME}/.local",
- "-DTURNS_USE_INSTALLED_TRANSLATIONS=OFF"
+ "-DTURNS_USE_INSTALLED_TRANSLATIONS=OFF",
+ "-DTURNS_USE_INSTALLED_SCHEMA_FILES=OFF"
],
"C_Cpp.autoAddFileAssociations": false,
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b660a86..5f894ab 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,6 +14,7 @@ include("Cambalache")
include("CheckIPOSupported")
include("EnableCoverage")
include("GlibCompileResources")
+include("GlibCompileSchemas")
include("GNUInstallDirs")
find_package("Gettext" REQUIRED)
@@ -38,6 +39,7 @@ set(LIBADWAITA_MINIMUM_VERSION "1.5")
# Build options
option(TURNS_USE_INSTALLED_TRANSLATIONS "Use the installed translation files" ON)
+option(TURNS_USE_INSTALLED_SCHEMA_FILES "Use the installed schema files" ON)
# Dependencies
diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt
index 9a94702..da6d90f 100644
--- a/app/CMakeLists.txt
+++ b/app/CMakeLists.txt
@@ -43,8 +43,3 @@ install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/turns.xml"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/mime/packages"
)
-
-install(FILES
- "ch.arknet.Turns.gschema.xml"
- DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/glib-2.0/schemas"
-)
diff --git a/cmake/Modules/GlibCompileSchemas.cmake b/cmake/Modules/GlibCompileSchemas.cmake
new file mode 100644
index 0000000..1595e36
--- /dev/null
+++ b/cmake/Modules/GlibCompileSchemas.cmake
@@ -0,0 +1,44 @@
+find_program(GLIB_COMPILE_SCHEMAS_BIN
+ NAMES "glib-compile-schemas"
+ REQUIRED
+)
+
+function(target_add_glib_schemas TARGET)
+ set(SINGLE_VALUE_ARGS "SCHEMA_DIR")
+ cmake_parse_arguments(
+ PARSE_ARGV 1
+ ""
+ "${OPTIONS}"
+ "${SINGLE_VALUE_ARGS}"
+ "${MULTI_VALUE_ARGS}"
+ )
+
+ if(NOT TARGET "${TARGET}")
+ message(FATAL_ERROR "Target '${TARGET}' does not exist")
+ endif()
+
+ if(NOT IS_ABSOLUTE "${_SCHEMA_DIR}")
+ get_filename_component(_SCHEMA_DIR "${_SCHEMA_DIR}" REALPATH)
+ endif()
+
+ if(NOT IS_DIRECTORY "${_SCHEMA_DIR}")
+ message(FATAL_ERROR "Directory '${_SCHEMA_DIR}' does not exists")
+ endif()
+
+ file(GLOB SCHAMA_FILES CONFIGURE_DEPENDS "${_SCHEMA_DIR}/*.gschema.xml")
+
+ add_custom_command(TARGET "${TARGET}"
+ PRE_BUILD
+ BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/glib-2.0/schemas/gschemas.compiled"
+ WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
+ COMMAND "${GLIB_COMPILE_SCHEMAS_BIN}"
+ ARGS
+ "--targetdir=${CMAKE_CURRENT_BINARY_DIR}/glib-2.0/schemas"
+ "--strict"
+ "${_SCHEMA_DIR}"
+ VERBATIM
+ COMMENT "Compiling gsettings schemas"
+ DEPENDS
+ ${SCHEMA_FILES}
+ )
+endfunction()
diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt
index 9b6390c..5ec88e4 100644
--- a/core/CMakeLists.txt
+++ b/core/CMakeLists.txt
@@ -4,6 +4,7 @@ add_library("core"
"src/disposition.cpp"
"src/init.cpp"
"src/participant.cpp"
+ "src/settings.cpp"
"src/turn_order.cpp"
)
@@ -16,6 +17,12 @@ target_compile_options("core" PUBLIC
"$<$<CXX_COMPILER_ID:GNU,Clang>:-pedantic-errors>"
)
+if(NOT TURNS_USE_INSTALLED_SCHEMA_FILES)
+ target_compile_definitions("core" PUBLIC
+ "TURNS_SETTINGS_SCHEMA_DIR=\"${CMAKE_CURRENT_BINARY_DIR}\""
+ )
+endif()
+
target_include_directories("core" PUBLIC
"include"
)
@@ -26,8 +33,17 @@ target_link_libraries("core" PUBLIC
"nlohmann_json::nlohmann_json"
)
+target_add_glib_schemas("core"
+ SCHEMA_DIR "schemas"
+)
+
enable_coverage("core")
+install(FILES
+ "schemas/ch.arknet.Turns.gschema.xml"
+ DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/glib-2.0/schemas"
+)
+
# Tests
add_executable("core-tests"
diff --git a/core/include/turns/core/settings.hpp b/core/include/turns/core/settings.hpp
new file mode 100644
index 0000000..3e21a47
--- /dev/null
+++ b/core/include/turns/core/settings.hpp
@@ -0,0 +1,21 @@
+#ifndef TURNS_CORE_SETTINGS_HPP
+#define TURNS_CORE_SETTINGS_HPP
+
+#include <glibmm/refptr.h>
+
+#include <giomm/settings.h>
+
+namespace turns::core
+{
+ namespace key
+ {
+ auto constexpr disposition_friendly_color = "disposition-friendly-color";
+ auto constexpr disposition_hostile_color = "disposition-hostile-color";
+ auto constexpr disposition_secret_color = "disposition-secret-color";
+ auto constexpr skip_defeated = "skip-defeated";
+ } // namespace key
+
+ auto get_settings() -> Glib::RefPtr<Gio::Settings>;
+} // namespace turns::core
+
+#endif \ No newline at end of file
diff --git a/app/ch.arknet.Turns.gschema.xml b/core/schemas/ch.arknet.Turns.gschema.xml
index d764608..d764608 100644
--- a/app/ch.arknet.Turns.gschema.xml
+++ b/core/schemas/ch.arknet.Turns.gschema.xml
diff --git a/core/src/settings.cpp b/core/src/settings.cpp
new file mode 100644
index 0000000..c98e5eb
--- /dev/null
+++ b/core/src/settings.cpp
@@ -0,0 +1,28 @@
+#include "turns/core/settings.hpp"
+
+#include <glibmm/refptr.h>
+#include <glibmm/wrap.h>
+
+#include <giomm/settings.h>
+#include <giomm/settingsschemasource.h>
+
+#include <gio/gsettings.h>
+
+namespace turns::core
+{
+
+ auto get_settings() -> Glib::RefPtr<Gio::Settings>
+ {
+ auto constexpr schema_id = "ch.arknet.Turns";
+
+#ifdef TURNS_SETTINGS_SCHEMA_DIR
+ auto source = Gio::SettingsSchemaSource::create(TURNS_SETTINGS_SCHEMA_DIR "/glib-2.0/schemas", true);
+ auto schema = source->lookup(schema_id, true);
+ auto settings = g_settings_new_full(Glib::unwrap(schema), nullptr, nullptr);
+ return Glib::wrap(settings);
+#else
+ return Gio::Settings::create(schema);
+#endif
+ }
+
+} // namespace turns::core
diff --git a/ui/src/windows/tracker.cpp b/ui/src/windows/tracker.cpp
index e087eb0..b38b9da 100644
--- a/ui/src/windows/tracker.cpp
+++ b/ui/src/windows/tracker.cpp
@@ -2,9 +2,9 @@
#include "turns/adw/toast.hpp"
#include "turns/adw/toastoverlay.hpp"
+#include "turns/core/settings.hpp"
#include "turns/core/turn_order.hpp"
#include "turns/lang/messages.hpp"
-#include "turns/ui/widgets/preferences.hpp"
#include "turns/ui/widgets/turn_order_view.hpp"
#include <sigc++/adaptors/bind.h>
@@ -18,6 +18,7 @@
#include <glibmm/varianttype.h>
#include <glibmm/wrap.h>
+#include <giomm/file.h>
#include <giomm/liststore.h>
#include <giomm/settings.h>
@@ -55,7 +56,7 @@ namespace turns::ui::windows
, m_title{builder->get_widget<Gtk::Widget>("title")}
, m_turn_order{core::turn_order::create()}
, m_turn_order_view{Gtk::make_managed<widgets::turn_order_view>(m_turn_order)}
- , m_settings{Gio::Settings::create("ch.arknet.Turns")}
+ , m_settings{turns::core::get_settings()}
, m_subtitle{m_title, "subtitle"}
, m_css{Gtk::CssProvider::create()}
{