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 /Swift | |
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 'Swift')
-rw-r--r-- | Swift/Controllers/MainController.cpp | 19 | ||||
-rw-r--r-- | Swift/Controllers/MainController.h | 3 |
2 files changed, 12 insertions, 10 deletions
diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp index 7cf68a1..fcd161b 100644 --- a/Swift/Controllers/MainController.cpp +++ b/Swift/Controllers/MainController.cpp @@ -39,6 +39,7 @@ #include "Swift/Controllers/PresenceNotifier.h" #include "Swift/Controllers/EventNotifier.h" #include "SwifTools/Dock/Dock.h" +#include "SwifTools/Notifier/TogglableNotifier.h" #include "Swiften/Base/foreach.h" #include "Swiften/Base/String.h" #include "Swiften/Client/Client.h" @@ -69,6 +70,7 @@ static const String CLIENT_NAME = "Swift"; static const String CLIENT_VERSION = "1.0-devel"; static const String CLIENT_NODE = "http://swift.im"; +static const String SHOW_NOTIFICATIONS = "showNotifications"; MainController::MainController( ChatWindowFactory* chatWindowFactory, @@ -119,12 +121,12 @@ MainController::MainController( mucSearchWindowFactory_ = mucSearchWindowFactory; eventWindowFactory_ = eventWindowFactory; dock_ = dock; - notifier_ = notifier; chatListWindowFactory_ = chatListWindowFactory; uiEventStream_ = new UIEventStream(); avatarStorage_ = avatarStorage; capsStorage_ = capsStorage; + notifier_ = new TogglableNotifier(notifier); eventController_ = new EventController(); eventController_->onEventQueueLengthChange.connect(boost::bind(&MainController::handleEventQueueLengthChange, this, _1)); @@ -158,10 +160,10 @@ MainController::MainController( xmlConsoleController_ = new XMLConsoleController(uiEventStream_, xmlConsoleWidgetFactory); - bool enabled = settings_->getBoolSetting("showNotifications", true); - notifier_->setEnabled(enabled); - uiEventStream_->send(boost::shared_ptr<ToggleNotificationsUIEvent>(new ToggleNotificationsUIEvent(enabled))); uiEventStream_->onUIEvent.connect(boost::bind(&MainController::handleUIEvent, this, _1)); + bool enabled = settings_->getBoolSetting(SHOW_NOTIFICATIONS, true); + uiEventStream_->send(boost::shared_ptr<ToggleNotificationsUIEvent>(new ToggleNotificationsUIEvent(enabled))); + if (loginAutomatically) { profileSettings_ = new ProfileSettingsProvider(selectedLoginJID, settings_); @@ -179,6 +181,7 @@ MainController::~MainController() { delete uiEventStream_; resetClient(); delete eventController_; + delete notifier_; for(VCardStorageMap::iterator i = vcardStorages_.begin(); i != vcardStorages_.end(); ++i) { delete i->second; } @@ -230,10 +233,8 @@ void MainController::handleUIEvent(boost::shared_ptr<UIEvent> event) { boost::shared_ptr<ToggleNotificationsUIEvent> notificationsEvent = boost::dynamic_pointer_cast<ToggleNotificationsUIEvent>(event); if (notificationsEvent) { bool enabled = notificationsEvent->getEnabled(); - if (enabled != notifier_->getEnabled()) { - notifier_->setEnabled(enabled); - settings_->storeBool("showNotifications", enabled); - } + notifier_->setPersistentEnabled(enabled); + settings_->storeBool(SHOW_NOTIFICATIONS, enabled); } } @@ -339,7 +340,7 @@ void MainController::sendPresence(boost::shared_ptr<Presence> presence) { rosterController_->getWindow()->setMyStatusType(presence->getShow()); rosterController_->getWindow()->setMyStatusText(presence->getStatus()); systemTrayController_->setMyStatusType(presence->getShow()); - notifier_->setEnabled(presence->getShow() != StatusShow::DND); + notifier_->setTemporarilyDisabled(presence->getShow() == StatusShow::DND); // Add information and send if (!vCardPhotoHash_.isEmpty()) { diff --git a/Swift/Controllers/MainController.h b/Swift/Controllers/MainController.h index e7b4bfd..2f01fd2 100644 --- a/Swift/Controllers/MainController.h +++ b/Swift/Controllers/MainController.h @@ -53,6 +53,7 @@ namespace Swift { class LoginWindowFactory; class MUCController; class Notifier; + class TogglableNotifier; class PresenceNotifier; class EventNotifier; class SystemTray; @@ -137,7 +138,7 @@ namespace Swift { VCardStorageFactory* vcardStorageFactory_; VCardManager* vcardManager_; Dock* dock_; - Notifier* notifier_; + TogglableNotifier* notifier_; PresenceNotifier* presenceNotifier_; EventNotifier* eventNotifier_; RosterController* rosterController_; |