diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ project(kde-gtk-config) set(PROJECT_VERSION "5.17.80") -cmake_minimum_required(VERSION 2.8.12) +cmake_minimum_required (VERSION 3.4) find_package(ECM 0.0.9 REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" ${ECM_MODULE_PATH}) @@ -11,6 +11,10 @@ find_package(GTK3 REQUIRED) find_package(GSettingSchemas REQUIRED) +find_package(PkgConfig REQUIRED) +pkg_check_modules(GLIB glib-2.0) +pkg_check_modules(GTK gtk+-3.0) + include_directories( ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/src @@ -67,6 +71,7 @@ add_subdirectory(gtk3proxies) add_subdirectory(icons) add_subdirectory(tests) +add_subdirectory(color-reload-module) add_subdirectory(kded) # add clang-format target for all our real source files diff --git a/color-reload-module/CMakeLists.txt b/color-reload-module/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/color-reload-module/CMakeLists.txt @@ -0,0 +1,21 @@ +include(GNUInstallDirs) + +add_library(colorreload-gtk-module SHARED + reloader.c +) + +target_link_libraries(colorreload-gtk-module + PRIVATE + ${GLIB_LIBRARIES} + ${GTK_LIBRARIES} +) + +target_include_directories( + colorreload-gtk-module PRIVATE + ${GLIB_INCLUDE_DIRS} ${GTK_INCLUDE_DIRS} +) + +install( + TARGETS colorreload-gtk-module + DESTINATION ${CMAKE_INSTALL_LIBDIR}/gtk-3.0/modules +) \ No newline at end of file diff --git a/color-reload-module/reloader.c b/color-reload-module/reloader.c new file mode 100644 --- /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 + ); +} + +void gtk_module_init(gint *argc, gchar ***argv[]) { + path = g_strconcat(g_get_home_dir(), "/.config/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); +} \ No newline at end of file