diff options
| author | Kevin Smith <git@kismith.co.uk> | 2009-10-25 17:20:54 (GMT) | 
|---|---|---|
| committer | Kevin Smith <git@kismith.co.uk> | 2009-10-25 17:20:54 (GMT) | 
| commit | 22b51f8f82f6bd3186339b05943c1e19aa71050f (patch) | |
| tree | 65f5444a7e6213ae4caa58b03b9ab974e9dc10d4 | |
| parent | bfdf408bed69a279eb710de915e932764ceaed76 (diff) | |
| download | swift-contrib-22b51f8f82f6bd3186339b05943c1e19aa71050f.zip swift-contrib-22b51f8f82f6bd3186339b05943c1e19aa71050f.tar.bz2 | |
Autoaway.
| -rw-r--r-- | Swift/Controllers/MainController.cpp | 14 | ||||
| -rw-r--r-- | Swift/Controllers/MainController.h | 1 | ||||
| -rw-r--r-- | Swift/QtUI/QtIdleDetector.cpp | 22 | ||||
| -rw-r--r-- | Swift/QtUI/QtIdleDetector.h | 17 | 
4 files changed, 48 insertions, 6 deletions
| diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp index 5495ec0..15947b6 100644 --- a/Swift/Controllers/MainController.cpp +++ b/Swift/Controllers/MainController.cpp @@ -185,7 +185,6 @@ void MainController::handleEventQueueLengthChange(int count) {  void MainController::handleChangeStatusRequest(StatusShow::Type show, const String &statusText) {  	boost::shared_ptr<Presence> presence(new Presence()); -	presence->addPayload(capsInfo_);  	if (show == StatusShow::None) {  		// FIXME: This is wrong. None doesn't mean unavailable  		presence->setType(Presence::Unavailable); @@ -206,6 +205,7 @@ void MainController::sendPresence(boost::shared_ptr<Presence> presence) {  	if (!vCardPhotoHash_.isEmpty()) {  		presence->addPayload(boost::shared_ptr<VCardUpdate>(new VCardUpdate(vCardPhotoHash_)));  	} +	presence->addPayload(capsInfo_);  	lastSentPresence_ = presence;  	client_->sendPresence(presence);  	if (presence->getType() == Presence::Unavailable) { @@ -214,11 +214,19 @@ void MainController::sendPresence(boost::shared_ptr<Presence> presence) {  }  void MainController::handleInputIdle() { -	 +	preIdlePresence_ = lastSentPresence_; +	boost::shared_ptr<Presence> presence(new Presence()); +	presence->setShow(StatusShow::Away); +	presence->setStatus("Auto-away"); +	sendPresence(presence);  }  void MainController::handleInputNotIdle() { -	 +	if (client_) { +		sendPresence(preIdlePresence_); +	} else { +		queuedPresence_ = preIdlePresence_; +	}  }  void MainController::handleIncomingPresence(boost::shared_ptr<Presence> presence) { diff --git a/Swift/Controllers/MainController.h b/Swift/Controllers/MainController.h index 5cdd9fa..3179df9 100644 --- a/Swift/Controllers/MainController.h +++ b/Swift/Controllers/MainController.h @@ -106,6 +106,7 @@ namespace Swift {  			SoundEventController* soundEventController_;  			AvatarManager* avatarManager_;  			boost::shared_ptr<Presence> lastSentPresence_; +			boost::shared_ptr<Presence> preIdlePresence_;  			String vCardPhotoHash_;  			boost::shared_ptr<Presence> queuedPresence_;  			String password_; diff --git a/Swift/QtUI/QtIdleDetector.cpp b/Swift/QtUI/QtIdleDetector.cpp index e947854..783cc14 100644 --- a/Swift/QtUI/QtIdleDetector.cpp +++ b/Swift/QtUI/QtIdleDetector.cpp @@ -1,8 +1,15 @@  #include "QtIdleDetector.h" +#include <QCursor> +  namespace Swift {  QtIdleDetector::QtIdleDetector() { +	signalled_ = false; +	lastMoveTime_ = QDateTime::currentDateTime(); +	lastPosition_ = QCursor::pos(); +	connect(&timer_, SIGNAL(timeout()), this, SLOT(handleTimerTick())); +	timer_.start(1000);  }  QtIdleDetector::~QtIdleDetector() { @@ -12,5 +19,20 @@ void QtIdleDetector::forceNotIdle() {  } +void QtIdleDetector::handleTimerTick() { +	QPoint position = QCursor::pos(); +	QDateTime now = QDateTime::currentDateTime(); +	if (position != lastPosition_) { +		if (signalled_) { +			onInputNotIdle(); +		} +		lastPosition_ = position; +		lastMoveTime_ = now; +		signalled_ = false; +	} else if (!signalled_ && now > lastMoveTime_.addSecs(600) && position == lastPosition_) { +		signalled_ = true; +		onInputIdle(); +	} +}  } diff --git a/Swift/QtUI/QtIdleDetector.h b/Swift/QtUI/QtIdleDetector.h index e21e4a8..444fb15 100644 --- a/Swift/QtUI/QtIdleDetector.h +++ b/Swift/QtUI/QtIdleDetector.h @@ -2,13 +2,24 @@  #include "Swift/Controllers/IdleDetector.h" +#include <QObject> +#include <QPoint> +#include <QTimer> +#include <QDateTime> +  namespace Swift { -class QtIdleDetector : public IdleDetector { +class QtIdleDetector : public QObject, public IdleDetector { +	Q_OBJECT  	public:  		QtIdleDetector();  		virtual ~QtIdleDetector();  		virtual void forceNotIdle(); -	   -		 +	private slots: +		void handleTimerTick(); +	private: +		QPoint lastPosition_; +		QDateTime lastMoveTime_; +		QTimer timer_; +		bool signalled_;  };  } | 
 Swift
 Swift