From 0b2e002d4f281edfef0e6c036cf58d9fdb7ae978 Mon Sep 17 00:00:00 2001 From: Mark Tiefenbruck <mark@fluxbox.org> Date: Mon, 12 May 2008 09:00:02 -0700 Subject: use AutoReloadHelper in apps file, check for changes automatically --- ChangeLog | 3 +++ src/Remember.cc | 28 ++++++++++++++-------------- src/Remember.hh | 6 ++++-- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 690212b..e441093 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ (Format: Year/Month/Day) Changes for 1.1 +*08/05/12: + * Modifying the apps file no longer requires a reconfigure (Mark) + Remember.cc/hh *08/05/09: * Made tooltip in toolbar update when the title changes (Henrik) Tooltip.cc/hh, Screen.cc/cc, OSDWindow.hh diff --git a/src/Remember.cc b/src/Remember.cc index 8e133b8..825a070 100644 --- a/src/Remember.cc +++ b/src/Remember.cc @@ -281,14 +281,14 @@ void Application::reset() { Remember *Remember::s_instance = 0; Remember::Remember(): - m_pats(new Patterns()), - m_last_timestamp(0) -{ + m_pats(new Patterns()) { if (s_instance != 0) throw string("Can not create more than one instance of Remember"); s_instance = this; enableUpdate(); + + m_reloader.setReloadCmd(FbTk::RefCount<FbTk::Command<void> >(new FbTk::SimpleCommand<Remember>(*this, &Remember::reload))); reconfigure(); } @@ -579,11 +579,12 @@ Application *Remember::findMatchingPatterns(ClientPattern *pat, Patterns *patlis void Remember::reconfigure() { - string apps_string = FbTk::StringUtil::expandFilename(Fluxbox::instance()->getAppsFilename()); + m_reloader.setMainFile(Fluxbox::instance()->getAppsFilename()); + m_reloader.checkReload(); +} - time_t timestamp = FbTk::FileUtil::getLastStatusChangeTimestamp(apps_string.c_str()); - if (m_last_timestamp > 0 && m_last_timestamp == timestamp) - return; +void Remember::reload() { + string apps_string = FbTk::StringUtil::expandFilename(Fluxbox::instance()->getAppsFilename()); #ifdef DEBUG cerr<<__FILE__<<"("<<__FUNCTION__<<"): Loading apps file ["<<apps_string<<"]"<<endl; @@ -598,7 +599,6 @@ void Remember::reconfigure() { m_startups.clear(); if (!apps_file.fail()) { - m_last_timestamp = timestamp; if (!apps_file.eof()) { string line; int row = 0; @@ -687,7 +687,7 @@ void Remember::reconfigure() { #endif } } else { - cerr << "apps file failure" << endl; + cerr << "failed to open apps file" << endl; } // Clean up old state @@ -895,11 +895,8 @@ void Remember::save() { apps_file << "[end]" << endl; } apps_file.close(); - - time_t timestamp = FbTk::FileUtil::getLastStatusChangeTimestamp(apps_string.c_str()); - if (timestamp > 0) - m_last_timestamp = timestamp; - + // update timestamp to avoid unnecessary reload + m_reloader.addFile(Fluxbox::instance()->getAppsFilename()); } bool Remember::isRemembered(WinClient &winclient, Attribute attrib) { @@ -1216,6 +1213,9 @@ void Remember::setupClient(WinClient &winclient) { if (winclient.screen().isRestart()) return; + // check if apps file has changed + reconfigure(); + Application *app = find(winclient); if (app == 0) return; // nothing to do diff --git a/src/Remember.hh b/src/Remember.hh index 4ab8f2a..107f1d2 100644 --- a/src/Remember.hh +++ b/src/Remember.hh @@ -29,6 +29,7 @@ #include "AtomHandler.hh" #include "ClientPattern.hh" +#include "FbTk/AutoReloadHelper.hh" #include "FbTk/RefCount.hh" #include <fstream> @@ -223,7 +224,8 @@ public: Application* add(WinClient &winclient); FluxboxWindow* findGroup(Application *, BScreen &screen); - void reconfigure(); // was load + void reconfigure(); + void reload(); void save(); bool isRemembered(WinClient &win, Attribute attrib); @@ -277,7 +279,7 @@ private: Startups m_startups; static Remember *s_instance; - time_t m_last_timestamp; + FbTk::AutoReloadHelper m_reloader; }; #endif // REMEMBER_HH -- cgit v0.11.2