karm
desktoptracker.cpp00001 #include <algorithm>
00002
00003 #include <qtimer.h>
00004 #include <kdebug.h>
00005
00006 #include "desktoptracker.h"
00007
00008
00009 const int minimumInterval = 5;
00010
00011 DesktopTracker::DesktopTracker ()
00012 {
00013
00014 connect( &kWinModule, SIGNAL( currentDesktopChanged(int) ),
00015 this, SLOT( handleDesktopChange(int) ));
00016
00017 _desktopCount = kWinModule.numberOfDesktops();
00018 _previousDesktop = kWinModule.currentDesktop()-1;
00019
00020
00021 if( _previousDesktop < 0 ) _previousDesktop = 0;
00022
00023 _timer = new QTimer(this);
00024 connect( _timer, SIGNAL( timeout() ), this, SLOT( changeTimers() ) );
00025 }
00026
00027 void DesktopTracker::handleDesktopChange( int desktop )
00028 {
00029 _desktop = desktop;
00030
00031
00032
00033
00034
00035 if ( !_timer->start( minimumInterval * 1000, true ) ) changeTimers();
00036 }
00037
00038 void DesktopTracker::changeTimers()
00039 {
00040 _desktop--;
00041
00042 TaskVector::iterator it;
00043
00044
00045 TaskVector tv = desktopTracker[_previousDesktop];
00046 for (it = tv.begin(); it != tv.end(); ++it) {
00047 emit leftActiveDesktop(*it);
00048 }
00049
00050
00051 tv = desktopTracker[_desktop];
00052 for (it = tv.begin(); it != tv.end(); ++it) {
00053 emit reachedtActiveDesktop(*it);
00054 }
00055 _previousDesktop = _desktop;
00056
00057
00058 }
00059
00060 QString DesktopTracker::startTracking()
00061 {
00062 QString err;
00063 int currentDesktop = kWinModule.currentDesktop() -1;
00064
00065
00066 if ( currentDesktop < 0 ) currentDesktop = 0;
00067 if ( currentDesktop < maxDesktops )
00068 {
00069 TaskVector &tv = desktopTracker[ currentDesktop ];
00070 TaskVector::iterator tit = tv.begin();
00071 while(tit!=tv.end())
00072 {
00073 emit reachedtActiveDesktop(*tit);
00074 tit++;
00075 }
00076 }
00077 else err="ETooHighDeskTopNumber";
00078 return err;
00079 }
00080
00081 void DesktopTracker::registerForDesktops( Task* task, DesktopList desktopList)
00082 {
00083
00084 if (desktopList.size()==0) {
00085 for (int i=0; i<maxDesktops; i++) {
00086 TaskVector *v = &(desktopTracker[i]);
00087 TaskVector::iterator tit = std::find(v->begin(), v->end(), task);
00088 if (tit != v->end())
00089 desktopTracker[i].erase(tit);
00090
00091
00092 if( i == kWinModule.currentDesktop() -1)
00093 emit leftActiveDesktop(task);
00094 }
00095
00096 return;
00097 }
00098
00099
00100
00101
00102 if (desktopList.size()>0) {
00103 for (int i=0; i<maxDesktops; i++) {
00104 TaskVector& v = desktopTracker[i];
00105 TaskVector::iterator tit = std::find(v.begin(), v.end(), task);
00106
00107 if ( std::find( desktopList.begin(), desktopList.end(), i)
00108 != desktopList.end()) {
00109 if (tit == v.end())
00110 v.push_back(task);
00111 }
00112 else {
00113 if (tit != v.end())
00114 {
00115 v.erase(tit);
00116
00117
00118 if( i == kWinModule.currentDesktop() -1)
00119 emit leftActiveDesktop(task);
00120 }
00121 }
00122 }
00123 startTracking();
00124 }
00125 }
00126
00127 void DesktopTracker::printTrackers() {
00128 TaskVector::iterator it;
00129 for (int i=0; i<maxDesktops; i++) {
00130 TaskVector& start = desktopTracker[i];
00131 it = start.begin();
00132 while (it != start.end()) {
00133 it++;
00134 }
00135 }
00136 }
00137 #include "desktoptracker.moc"
|