diff options
author | Remko Tronçon <git@el-tramo.be> | 2010-10-23 08:22:10 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2010-10-23 08:22:10 (GMT) |
commit | 96be62f4a700e3bd50f4b6f177f02e5820a09106 (patch) | |
tree | fc2f49e7a9874c147ba04795d60a9a941dd2b624 /SwifTools/Notifier/TogglableNotifier.h | |
parent | fd7d3f4f994159a4990f3a0029597d4c14f727a9 (diff) | |
download | swift-contrib-96be62f4a700e3bd50f4b6f177f02e5820a09106.zip swift-contrib-96be62f4a700e3bd50f4b6f177f02e5820a09106.tar.bz2 |
Don't lose notification enabledness when the user changes status.
Resolves: #651
Release-Notes: The notification toggle on Linux will now be respected.
Diffstat (limited to 'SwifTools/Notifier/TogglableNotifier.h')
-rw-r--r-- | SwifTools/Notifier/TogglableNotifier.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/SwifTools/Notifier/TogglableNotifier.h b/SwifTools/Notifier/TogglableNotifier.h new file mode 100644 index 0000000..1e87807 --- /dev/null +++ b/SwifTools/Notifier/TogglableNotifier.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#pragma once + +#include "SwifTools/Notifier/Notifier.h" + +namespace Swift { + class TogglableNotifier : public Notifier { + public: + TogglableNotifier(Notifier* notifier) : notifier(notifier), persistentEnabled(true), temporarilyDisabled(false) { + } + + /** + * Set a long-term (usually user-set) enabled. + * This may be temporarily overriden by the application, e.g. if the + * user is marked DND. + */ + void setPersistentEnabled(bool b) { + persistentEnabled = b; + } + + /** + * Set a temporary override to stop notifications without changing the + * long-term state. e.g. if the user goes DND, but the persistent + * enabled shouldn't be lost when they become available again. + */ + void setTemporarilyDisabled(bool b) { + temporarilyDisabled = b; + } + + /** + * Get the result of applying the temporary override to the persistent + * enabledness. + */ + bool getCurrentlyEnabled() const { + return persistentEnabled && !temporarilyDisabled; + } + + virtual void showMessage(Type type, const String& subject, const String& description, const boost::filesystem::path& picture, boost::function<void()> callback) { + if (getCurrentlyEnabled()) { + notifier->showMessage(type, subject, description, picture, callback); + } + } + + private: + Notifier* notifier; + bool persistentEnabled; + bool temporarilyDisabled; + }; +} |