ktimetracker
desktoptracker.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "desktoptracker.h"
00023
00024 #include <QTimer>
00025
00026 #include <KDebug>
00027 #include <KWindowSystem>
00028
00029 #include "ktimetracker.h"
00030
00031 DesktopTracker::DesktopTracker ()
00032 {
00033
00034 #ifdef Q_WS_X11
00035 connect( KWindowSystem::self(), SIGNAL( currentDesktopChanged( int ) ),
00036 this, SLOT( handleDesktopChange( int ) ) );
00037
00038 mDesktopCount = KWindowSystem::self()->numberOfDesktops();
00039 mPreviousDesktop = KWindowSystem::self()->currentDesktop()-1;
00040 #else
00041 #ifdef __GNUC__
00042 #warning non-X11 support missing
00043 #endif
00044 #endif
00045
00046
00047 if( mPreviousDesktop < 0 ) mPreviousDesktop = 0;
00048
00049 mTimer = new QTimer( this );
00050 mTimer->setSingleShot( true );
00051 connect( mTimer, SIGNAL( timeout() ), this, SLOT( changeTimers() ) );
00052 }
00053
00054 void DesktopTracker::handleDesktopChange( int desktop )
00055 {
00056 mDesktop = desktop;
00057
00058
00059
00060
00061
00062 mTimer->start( KTimeTrackerSettings::minActiveTime() * 1000 );
00063 }
00064
00065 void DesktopTracker::changeTimers()
00066 {
00067 --mDesktop;
00068
00069
00070
00071 foreach ( Task *task, mDesktopTracker[mPreviousDesktop] ) {
00072 emit leftActiveDesktop( task );
00073 }
00074
00075
00076 foreach ( Task *task, mDesktopTracker[mDesktop] ) {
00077 emit reachedActiveDesktop( task );
00078 }
00079
00080 mPreviousDesktop = mDesktop;
00081 }
00082
00083 QString DesktopTracker::startTracking()
00084 {
00085 QString err;
00086 #ifdef Q_WS_X11
00087 int currentDesktop = KWindowSystem::self()->currentDesktop() -1;
00088 #else
00089 #ifdef __GNUC__
00090 #warning non-X11 support missing
00091 #endif
00092 int currentDesktop = 0;
00093 #endif
00094
00095
00096 if ( currentDesktop < 0 ) currentDesktop = 0;
00097 if ( currentDesktop >= maxDesktops ) err="desktop number too high, desktop tracking will not work";
00098 else
00099 foreach ( Task *task, mDesktopTracker[ currentDesktop ] )
00100 {
00101 emit reachedActiveDesktop( task );
00102 }
00103 return err;
00104 }
00105
00106 void DesktopTracker::registerForDesktops( Task* task, DesktopList desktopList )
00107 {
00108 kDebug(5970) << "Entering function";
00109
00110 if ( desktopList.size() == 0 )
00111 {
00112 for ( int i = 0; i < maxDesktops; ++i )
00113 {
00114 TaskVector *v = &( mDesktopTracker[i] );
00115 TaskVector::iterator tit = qFind( v->begin(), v->end(), task );
00116 if ( tit != v->end() )
00117 mDesktopTracker[i].erase( tit );
00118
00119
00120 #ifdef Q_WS_X11
00121 if ( i == KWindowSystem::self()->currentDesktop() - 1 )
00122 emit leftActiveDesktop( task );
00123 #else
00124 #ifdef __GNUC__
00125 #warning non-X11 support missing
00126 #endif
00127 #endif
00128 }
00129 kDebug(5970) << "Leaving function, desktopList.size=0";
00130 return;
00131 }
00132
00133
00134
00135
00136 if ( desktopList.size() > 0 )
00137 {
00138 for ( int i = 0; i < maxDesktops; ++i )
00139 {
00140 TaskVector& v = mDesktopTracker[i];
00141 TaskVector::iterator tit = qFind( v.begin(), v.end(), task );
00142
00143 if ( qFind( desktopList.begin(), desktopList.end(), i )
00144 != desktopList.end() )
00145 {
00146 if ( tit == v.end() )
00147 v.push_back( task );
00148 }
00149 else
00150 {
00151 if ( tit != v.end() )
00152 {
00153 v.erase( tit );
00154
00155
00156 #ifdef Q_WS_X11
00157 if( i == KWindowSystem::self()->currentDesktop() -1)
00158 emit leftActiveDesktop( task );
00159 #else
00160 #ifdef __GNUC__
00161 #warning non-X11 support missing
00162 #endif
00163 #endif
00164 }
00165 }
00166 }
00167 startTracking();
00168 }
00169 kDebug(5970) << "Leaving function";
00170 }
00171
00172 #include "desktoptracker.moc"