desktoptracker.cpp
00001 #include <algorithm>
00002
00003 #include "desktoptracker.h"
00004
00005 DesktopTracker::DesktopTracker ()
00006 {
00007
00008 connect( &kWinModule, SIGNAL( currentDesktopChanged(int) ),
00009 this, SLOT( handleDesktopChange(int) ));
00010
00011 _desktopCount = kWinModule.numberOfDesktops();
00012 _previousDesktop = kWinModule.currentDesktop()-1;
00013
00014
00015 if( _previousDesktop < 0 ) _previousDesktop = 0;
00016 }
00017
00018 void DesktopTracker::handleDesktopChange(int desktop)
00019 {
00020 desktop--;
00021
00022 TaskVector::iterator it;
00023
00024
00025 TaskVector tv = desktopTracker[_previousDesktop];
00026 for (it = tv.begin(); it != tv.end(); it++) {
00027 emit leftActiveDesktop(*it);
00028 }
00029
00030
00031 tv = desktopTracker[desktop];
00032 for (it = tv.begin(); it != tv.end(); it++) {
00033 emit reachedtActiveDesktop(*it);
00034 }
00035 _previousDesktop = desktop;
00036
00037
00038 }
00039
00040 void DesktopTracker::startTracking()
00041 {
00042 int currentDesktop = kWinModule.currentDesktop() -1;
00043
00044
00045 if ( currentDesktop < 0 ) currentDesktop = 0;
00046
00047 TaskVector &tv = desktopTracker[ currentDesktop ];
00048 TaskVector::iterator tit = tv.begin();
00049 while(tit!=tv.end()) {
00050 emit reachedtActiveDesktop(*tit);
00051 tit++;
00052 }
00053 }
00054
00055 void DesktopTracker::registerForDesktops( Task* task, DesktopList desktopList)
00056 {
00057
00058 if (desktopList.size()==0) {
00059 for (int i=0; i<16; i++) {
00060 TaskVector *v = &(desktopTracker[i]);
00061 TaskVector::iterator tit = std::find(v->begin(), v->end(), task);
00062 if (tit != v->end())
00063 desktopTracker[i].erase(tit);
00064
00065
00066 if( i == kWinModule.currentDesktop() -1)
00067 emit leftActiveDesktop(task);
00068 }
00069
00070 return;
00071 }
00072
00073
00074
00075
00076 if (desktopList.size()>0) {
00077 for (int i=0; i<16; i++) {
00078 TaskVector& v = desktopTracker[i];
00079 TaskVector::iterator tit = std::find(v.begin(), v.end(), task);
00080
00081 if ( std::find( desktopList.begin(), desktopList.end(), i)
00082 != desktopList.end()) {
00083 if (tit == v.end())
00084 v.push_back(task);
00085 }
00086 else {
00087 if (tit != v.end())
00088 {
00089 v.erase(tit);
00090
00091
00092 if( i == kWinModule.currentDesktop() -1)
00093 emit leftActiveDesktop(task);
00094 }
00095 }
00096 }
00097 startTracking();
00098 }
00099 }
00100
00101 void DesktopTracker::printTrackers() {
00102 TaskVector::iterator it;
00103 for (int i=0; i<16; i++) {
00104 TaskVector& start = desktopTracker[i];
00105 it = start.begin();
00106 while (it != start.end()) {
00107 it++;
00108 }
00109 }
00110 }
00111 #include "desktoptracker.moc"
This file is part of the documentation for karm Library Version 3.2.2.