aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp33
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);
}