diff --git a/CMakeLists.txt b/CMakeLists.txt index c9853c1..7712730 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,50 +1,51 @@ project(kde-gtk-config) set(PROJECT_VERSION "5.18.80") cmake_minimum_required(VERSION 3.10) find_package(ECM REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" ${ECM_MODULE_PATH}) find_package(Qt5 REQUIRED NO_MODULE COMPONENTS DBus) find_package(KF5CoreAddons REQUIRED) find_package(KF5Config REQUIRED) find_package(KF5IconThemes REQUIRED) find_package(KF5DBusAddons REQUIRED) find_package(PkgConfig REQUIRED) find_package(GSettingSchemas REQUIRED) find_package(XSettingsd) pkg_check_modules(GTK+3 REQUIRED IMPORTED_TARGET gtk+-3.0) pkg_check_modules(GTK+2 REQUIRED IMPORTED_TARGET gtk+-2.0) pkg_check_modules(GLib2 REQUIRED IMPORTED_TARGET glib-2.0) pkg_check_modules(GObject REQUIRED IMPORTED_TARGET gobject-2.0) pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) include(ECMSetupVersion) include(ECMInstallIcons) include(ECMMarkAsTest) include(GenerateExportHeader) include(FeatureSummary) include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings NO_POLICY_SCOPE) include(KDEClangFormat) set_package_properties(XSettingsd PROPERTIES DESCRIPTION "XSettingsd daemon" TYPE RUNTIME PURPOSE "Allows GTK Config kded module to apply settings to GTK applications on the fly" ) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake kded/config.h) add_subdirectory(gtkproxies) add_subdirectory(gtk3proxies) add_subdirectory(kded) add_subdirectory(kconf_update) +add_subdirectory(color-reload-module) # add clang-format target for all our real source files file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h) kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES}) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/color-reload-module/CMakeLists.txt b/color-reload-module/CMakeLists.txt new file mode 100644 index 0000000..cc92832 --- /dev/null +++ b/color-reload-module/CMakeLists.txt @@ -0,0 +1,19 @@ +add_library(colorreload-gtk3-module MODULE + reloader.c +) + +target_link_libraries(colorreload-gtk3-module + PRIVATE + PkgConfig::GLib2 + PkgConfig::GTK+3 +) + +set_target_properties(colorreload-gtk3-module + PROPERTIES + OUTPUT_NAME libcolorreload-gtk-module +) + +install( + TARGETS colorreload-gtk3-module + DESTINATION ${KDE_INSTALL_LIBDIR}/gtk-3.0/modules +) diff --git a/color-reload-module/reloader.c b/color-reload-module/reloader.c new file mode 100644 index 0000000..795036c --- /dev/null +++ b/color-reload-module/reloader.c @@ -0,0 +1,46 @@ +#include +#include +#include +#include + +gchar *path; +GFile *file; +GFileMonitor *mon; +GtkCssProvider *provider; + +void reload_colours() { + if (provider == NULL) { + provider = gtk_css_provider_new(); + } else { + gtk_style_context_remove_provider_for_screen( + gdk_screen_get_default(), + GTK_STYLE_PROVIDER(provider) + ); + g_clear_object(&provider); + provider = gtk_css_provider_new(); + } + gtk_style_context_add_provider_for_screen( + gdk_screen_get_default(), + GTK_STYLE_PROVIDER (provider), + GTK_STYLE_PROVIDER_PRIORITY_USER+1 + ); + gtk_css_provider_load_from_file( + provider, + file, + NULL + ); +} + +__attribute__((visibility("default"))) void gtk_module_init(gint *argc, gchar ***argv[]) { + path = g_strconcat(g_get_user_config_dir(), "/gtk-3.0/colors.css", NULL); + file = g_file_new_for_path(path); + + mon = g_file_monitor_file( + file, + G_FILE_MONITOR_NONE, + NULL, + NULL + ); + + g_signal_connect(mon, "changed", G_CALLBACK(reload_colours), NULL); +}