? TODO Index: taskbar.cpp =================================================================== RCS file: /home/kde/kdebase/kicker/taskbar/taskbar.cpp,v retrieving revision 1.26 diff -u -3 -p -r1.26 taskbar.cpp --- taskbar.cpp 2001/05/12 18:30:16 1.26 +++ taskbar.cpp 2001/05/16 01:51:31 @@ -93,11 +93,13 @@ void TaskBar::configure() showAllWindows = c.readBoolEntry( "ShowAllWindows", true ); groupTasks = c.readBoolEntry( "GroupTasks", true ); + taskPerDesktop = c.readBoolEntry( "TaskPerDesktop", false); sortByDesktop = c.readBoolEntry( "SortByDesktop", true ); showIcon = c.readBoolEntry( "ShowIcon", true ); for ( TaskContainer *c = containers.first(); c; c = containers.next() ) { c->setShowAll( showAllWindows ); + c->setTaskPerDesktop( taskPerDesktop ); c->setSortByDesktop( sortByDesktop ); } @@ -130,7 +132,8 @@ void TaskBar::add( Task* task ) // try to group if ( groupTasks ) { for ( TaskContainer *c = containers.first(); c; c = containers.next() ) - if ( idMatch( task->className().lower(), c->id().lower() ) ) { + if ( idMatch( task->className().lower(), c->id().lower() ) + && ( !taskPerDesktop || (task->desktop() == c->desktop()) ) ) { c->add( task ); if ( !blocklayout ) @@ -140,7 +143,7 @@ void TaskBar::add( Task* task ) } // create new container - TaskContainer *c = new TaskContainer( task, taskManager(), showAllWindows, sortByDesktop, showIcon, viewport() ); + TaskContainer *c = new TaskContainer( task, taskManager(), showAllWindows, sortByDesktop, taskPerDesktop, showIcon, viewport() ); addChild( c ); containers.append( c ); emit containerCountChanged(); @@ -166,7 +169,7 @@ void TaskBar::add( Startup* startup ) } // create new container - TaskContainer *c = new TaskContainer( startup, taskManager(), showAllWindows, sortByDesktop, showIcon, viewport() ); + TaskContainer *c = new TaskContainer( startup, taskManager(), showAllWindows, sortByDesktop, taskPerDesktop, showIcon, viewport() ); addChild( c ); containers.append( c ); emit containerCountChanged(); @@ -231,6 +234,12 @@ void TaskBar::windowDesktopChanged( WId for ( TaskContainer *c = containers.first(); c; c = containers.next() ) if ( c->contains( win ) ) c->windowDesktopChanged( win ); + + if (taskPerDesktop) { + Task *task = taskManager()->findTask(win); + remove( task ); + add( task ); + } reLayout(); } Index: taskbar.h =================================================================== RCS file: /home/kde/kdebase/kicker/taskbar/taskbar.h,v retrieving revision 1.14 diff -u -3 -p -r1.14 taskbar.h --- taskbar.h 2001/05/12 18:30:20 1.14 +++ taskbar.h 2001/05/16 01:51:31 @@ -83,6 +83,7 @@ private: bool blocklayout; bool showAllWindows; bool groupTasks; + bool taskPerDesktop; bool sortByDesktop; bool showIcon; ArrowType arrowType; Index: taskcontainer.cpp =================================================================== RCS file: /home/kde/kdebase/kicker/taskbar/taskcontainer.cpp,v retrieving revision 1.26 diff -u -3 -p -r1.26 taskcontainer.cpp --- taskcontainer.cpp 2001/05/14 16:56:41 1.26 +++ taskcontainer.cpp 2001/05/16 01:51:31 @@ -44,8 +44,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE QImage TaskContainer::blendGradient = QImage(); -TaskContainer::TaskContainer( Task *task, TaskManager* manager, bool show, bool sort, bool icon, QWidget *parent, const char *name ) - : QToolButton( parent, name ), taskManager( manager ), showAll( show ), sortByDesktop( sort ), showIcon( icon ) +TaskContainer::TaskContainer( Task *task, TaskManager* manager, bool show, bool sort, bool perDesktop, bool icon, QWidget *parent, const char *name ) + : QToolButton( parent, name ), taskManager( manager ), showAll( show ), sortByDesktop( sort ), showIcon( icon ), taskPerDesktop( perDesktop ) { init(); @@ -56,8 +56,8 @@ TaskContainer::TaskContainer( Task *task connect( task, SIGNAL( changed() ), SLOT( repaint() ) ); } -TaskContainer::TaskContainer( Startup *startup, TaskManager* manager, bool show, bool sort, bool icon, QWidget *parent, const char *name ) - : QToolButton( parent, name ), taskManager( manager ), showAll( show ), sortByDesktop( sort ), showIcon( icon ) +TaskContainer::TaskContainer( Startup *startup, TaskManager* manager, bool show, bool sort, bool perDesktop, bool icon, QWidget *parent, const char *name ) + : QToolButton( parent, name ), taskManager( manager ), showAll( show ), sortByDesktop( sort ), showIcon( icon ), taskPerDesktop( perDesktop ) { init(); @@ -315,6 +315,10 @@ void TaskContainer::drawButton( QPainter if ( !ftasks.isEmpty() && alliconified ) text = QString( "(%1)" ).arg( text ); + // add number of windows in task + if (ftasks.count() > 1) + text = QString("%1 (%2)").arg(text).arg(ftasks.count()); + // draw text if ( !text.isEmpty() ) { @@ -445,53 +449,37 @@ void TaskContainer::popupRMB() { if ( ftasks.count() < 1 ) return; + QPopupMenu* menu; + if ( ftasks.count() == 1 ) { OpMenu* opMenu = new OpMenu( ftasks.first(), taskManager, this ); + menu = opMenu; + } else { + rmbMenu->init(); + menu = rmbMenu; + } - // calc popup menu position - QPoint pos( mapToGlobal( QPoint( 0, 0 ) ) ); + // calc popup menu position + QPoint pos( mapToGlobal( QPoint( 0, 0 ) ) ); - switch( arrowType ) { - case RightArrow: - pos.setX( pos.x() + width() ); - break; - case LeftArrow: - pos.setX( pos.x() - opMenu->sizeHint().width() ); - break; - case DownArrow: - pos.setY( pos.y() + height() ); - break; - case UpArrow: - pos.setY( pos.y() - opMenu->sizeHint().height() ); - default: - break; - } - opMenu->exec( pos ); + switch( arrowType ) { + case RightArrow: + pos.setX( pos.x() + width() ); + break; + case LeftArrow: + pos.setX( pos.x() - menu->sizeHint().width() ); + break; + case DownArrow: + pos.setY( pos.y() + height() ); + break; + case UpArrow: + pos.setY( pos.y() - menu->sizeHint().height() ); + default: + break; } - else { - rmbMenu->init(); - - // calc popup menu position - QPoint pos( mapToGlobal( QPoint( 0, 0 ) ) ); + menu->exec( pos ); - switch( arrowType ) { - case RightArrow: - pos.setX( pos.x() + width() ); - break; - case LeftArrow: - pos.setX( pos.x() - rmbMenu->sizeHint().width() ); - break; - case DownArrow: - pos.setY( pos.y() + height() ); - break; - case UpArrow: - pos.setY( pos.y() - rmbMenu->sizeHint().height() ); - default: - break; - } - rmbMenu->exec( pos ); - } } void TaskContainer::publishIconGeometry( QPoint global ) @@ -534,7 +522,7 @@ int TaskContainer::desktop() if ( tasks.isEmpty() ) return taskManager->currentDesktop(); - if ( tasks.count() > 1 ) + if ( !taskPerDesktop && tasks.count() > 1 ) return taskManager->numberOfDesktops(); return tasks.first()->desktop(); @@ -565,6 +553,15 @@ void TaskContainer::setShowAll( bool s ) updateFilteredTaskList(); repaint(); } +} + +void TaskContainer::setTaskPerDesktop( bool s) +{ + bool update = s != taskPerDesktop; + taskPerDesktop = s; + + if ( update ) + updateFilteredTaskList(); } void TaskContainer::setSortByDesktop( bool s ) Index: taskcontainer.h =================================================================== RCS file: /home/kde/kdebase/kicker/taskbar/taskcontainer.h,v retrieving revision 1.14 diff -u -3 -p -r1.14 taskcontainer.h --- taskcontainer.h 2001/05/12 18:30:20 1.14 +++ taskcontainer.h 2001/05/16 01:51:31 @@ -40,13 +40,14 @@ class TaskContainer : public QToolButton Q_OBJECT public: - TaskContainer( Task*, TaskManager*, bool showAll, bool sort, bool icon, QWidget *parent = 0, const char *name = 0 ); - TaskContainer( Startup*, TaskManager*, bool showAll, bool sort, bool icon, QWidget *parent = 0, const char *name = 0 ); + TaskContainer( Task*, TaskManager*, bool showAll, bool sort, bool perDesktop, bool icon, QWidget *parent = 0, const char *name = 0 ); + TaskContainer( Startup*, TaskManager*, bool showAll, bool sort, bool perDesktop, bool icon, QWidget *parent = 0, const char *name = 0 ); virtual ~TaskContainer(); void setArrowType( Qt::ArrowType at ); void setShowAll( bool ); void setSortByDesktop( bool ); + void setTaskPerDesktop( bool ); void setShowIcon( bool ); void init(); @@ -103,6 +104,7 @@ private: LMBMenu *lmbMenu; RMBMenu *rmbMenu; bool showAll; + bool taskPerDesktop; bool sortByDesktop; bool showIcon; static QImage blendGradient;