diff options
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/src/main.cpp b/src/main.cpp index 71e54d3..f6b2ae6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,12 +2,16 @@ #include <gtkmm/application.h> #include <gtkmm/cssprovider.h> #include <gtkmm/settings.h> +#ifndef NDEBUG +#include <giomm.h> +#endif -int main (int argc, char *argv[]) +static int setWindowCss(dchat::Window &window, Glib::RefPtr<Gtk::CssProvider> css) { - auto app = Gtk::Application::create(argc, argv, "dec05eba.dchat"); + auto ctx = window.get_style_context(); + auto screen = Gdk::Screen::get_default(); + ctx->remove_provider_for_screen(screen, css); - auto css = Gtk::CssProvider::create(); try { if(!css->load_from_path("css/style.css")) @@ -22,10 +26,27 @@ int main (int argc, char *argv[]) return 1; } - dchat::Window window; - auto ctx = window.get_style_context(); - auto screen = Gdk::Screen::get_default(); ctx->add_provider_for_screen(screen, css, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + return 0; +} + +int main (int argc, char *argv[]) +{ + auto app = Gtk::Application::create(argc, argv, "dec05eba.dchat"); + auto css = Gtk::CssProvider::create(); + dchat::Window window; + if(setWindowCss(window, css) != 0) + return 1; + +#ifndef NDEBUG + auto cssFile = Gio::File::create_for_path("css/style.css"); + auto cssFileMonitor = cssFile->monitor_file(); + cssFileMonitor->signal_changed().connect([&window, css](const Glib::RefPtr<Gio::File> &file, const Glib::RefPtr<Gio::File> &otherFile, Gio::FileMonitorEvent event) + { + fprintf(stderr, "Css file modified, reloading\n"); + setWindowCss(window, css); + }); +#endif return app->run(window); } |