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 void DesktopTracker::startTracking()
00061 {
00062 int currentDesktop = kWinModule.currentDesktop() -1;
00063
00064
00065 if ( currentDesktop < 0 ) currentDesktop = 0;
00066
00067 TaskVector &tv = desktopTracker[ currentDesktop ];
00068 TaskVector::iterator tit = tv.begin();
00069 while(tit!=tv.end()) {
00070 emit reachedtActiveDesktop(*tit);
00071 tit++;
00072 }
00073 }
00074
00075 void DesktopTracker::registerForDesktops( Task* task, DesktopList desktopList)
00076 {
00077
00078 if (desktopList.size()==0) {
00079 for (int i=0; i<maxDesktops; i++) {
00080 TaskVector *v = &(desktopTracker[i]);
00081 TaskVector::iterator tit = std::find(v->begin(), v->end(), task);
00082 if (tit != v->end())
00083 desktopTracker[i].erase(tit);
00084
00085
00086 if( i == kWinModule.currentDesktop() -1)
00087 emit leftActiveDesktop(task);
00088 }
00089
00090 return;
00091 }
00092
00093
00094
00095
00096 if (desktopList.size()>0) {
00097 for (int i=0; i<maxDesktops; i++) {
00098 TaskVector& v = desktopTracker[i];
00099 TaskVector::iterator tit = std::find(v.begin(), v.end(), task);
00100
00101 if ( std::find( desktopList.begin(), desktopList.end(), i)
00102 != desktopList.end()) {
00103 if (tit == v.end())
00104 v.push_back(task);
00105 }
00106 else {
00107 if (tit != v.end())
00108 {
00109 v.erase(tit);
00110
00111
00112 if( i == kWinModule.currentDesktop() -1)
00113 emit leftActiveDesktop(task);
00114 }
00115 }
00116 }
00117 startTracking();
00118 }
00119 }
00120
00121 void DesktopTracker::printTrackers() {
00122 TaskVector::iterator it;
00123 for (int i=0; i<maxDesktops; i++) {
00124 TaskVector& start = desktopTracker[i];
00125 it = start.begin();
00126 while (it != start.end()) {
00127 it++;
00128 }
00129 }
00130 }
00131 #include "desktoptracker.moc"
|