From 135f55589ef230ab009e3b961895a6d3b12cdc87 Mon Sep 17 00:00:00 2001 From: Kevin Smith Date: Thu, 23 Dec 2010 10:32:29 +0000 Subject: Add a timer so 20 seconds after requesting a quit, it'll quit regardless of receiving a stream close diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp index b925857..660c12f 100644 --- a/Swift/Controllers/MainController.cpp +++ b/Swift/Controllers/MainController.cpp @@ -554,6 +554,9 @@ void MainController::handleNotificationClicked(const JID& jid) { void MainController::handleQuitRequest() { if (client_ && client_->isActive()) { quitRequested_ = true; + quitTimer_ = networkFactories_->getTimerFactory()->createTimer(SecondsToWaitBeforeForceQuitting * 1000); + quitTimer_->onTick.connect(boost::bind(&MainController::handleForceQuit, this)); + quitTimer_->start(); client_->disconnect(); } else { @@ -562,4 +565,12 @@ void MainController::handleQuitRequest() { } } +void MainController::handleForceQuit() { + delete client_; + client_ = NULL; + handleQuitRequest(); +} + +const int MainController::SecondsToWaitBeforeForceQuitting = 20; + } diff --git a/Swift/Controllers/MainController.h b/Swift/Controllers/MainController.h index aece80f..8489f71 100644 --- a/Swift/Controllers/MainController.h +++ b/Swift/Controllers/MainController.h @@ -102,6 +102,7 @@ namespace Swift { void reconnectAfterError(); void setManagersOffline(); void handleNotificationClicked(const JID& jid); + void handleForceQuit(); private: EventLoop* eventLoop_; @@ -141,8 +142,10 @@ namespace Swift { UserSearchController* userSearchController_; int timeBeforeNextReconnect_; Timer::ref reconnectTimer_; + Timer::ref quitTimer_; StatusTracker* statusTracker_; bool myStatusLooksOnline_; bool quitRequested_; + static const int SecondsToWaitBeforeForceQuitting; }; } -- cgit v0.10.2-6-g49f6