Source Code (Use browser search to find items of interest.)
Class Index
kicker'TaskbarApplet (./kdebase/kicker/internalapplets/taskbar/taskbar.h:84)
class TaskbarApplet : public InternalApplet, virtual public AppStarting
{
Q_OBJECT
public:
TaskbarApplet(QWidget* parent, const char* name = 0);
~TaskbarApplet();
int widthForHeight(int h);
int heightForWidth(int w);
void resetLayout();
void clientStarted( QString, QString, QString, int );
void clientMapped( QString );
void clientDied( int );
protected slots:
void killAppStartButton(int);
void windowAdd(WId);
void windowRemove(WId);
void windowChange(WId);
void windowActivate(WId);
void desktopChange(int);
protected:
void resizeEvent(QResizeEvent*);
private:
QIntDict<AppStartButton> appsStarting;
QList<TaskButton> buttons;
int taskbar_size;
int lastH;
TaskButton* findButton(WId w);
};
kicker'TaskbarApplet::TaskbarApplet() (./kdebase/kicker/internalapplets/taskbar/taskbar.cpp:36)
TaskbarApplet::TaskbarApplet(QWidget* parent, const char* name )
: InternalApplet(parent, name ), DCOPObject("TaskbarApplet")
{
setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
connect( kwin_module, SIGNAL( windowAdd(WId) ), this, SLOT( windowAdd(WId) ) );
connect( kwin_module, SIGNAL( windowRemove(WId) ), this, SLOT( windowRemove(WId) ) );
connect( kwin_module, SIGNAL( windowChange(WId) ), this, SLOT( windowChange(WId) ) );
connect( kwin_module, SIGNAL( windowActivate(WId) ), this, SLOT( windowActivate(WId) ) );
connect( kwin_module, SIGNAL( desktopChange(int) ), this, SLOT( desktopChange(int) ) );
setStretch(true);
resetLayout();
appsStarting.setAutoDelete(true);
}
kicker'TaskbarApplet::~TaskbarApplet() (./kdebase/kicker/internalapplets/taskbar/taskbar.cpp:52)
TaskbarApplet::~TaskbarApplet() {}
kicker'TaskbarApplet::killAppStartButton() (./kdebase/kicker/internalapplets/taskbar/taskbar.cpp:54)
void TaskbarApplet::killAppStartButton(int pid)
{
appsStarting.remove(pid);
}
kicker'TaskbarApplet::resizeEvent() (./kdebase/kicker/internalapplets/taskbar/taskbar.cpp:59)
void TaskbarApplet::resizeEvent(QResizeEvent*)
{
resetLayout();
}
kicker'TaskbarApplet::findButton() (./kdebase/kicker/internalapplets/taskbar/taskbar.cpp:64)
TaskButton* TaskbarApplet::findButton( WId w )
{
for ( TaskButton* b = buttons.first(); b; b = buttons.next() ) {
if ( b->window() == w )
return b;
}
return 0;
}
kicker'TaskbarApplet::windowAdd() (./kdebase/kicker/internalapplets/taskbar/taskbar.cpp:73)
void TaskbarApplet::windowAdd(WId w )
{
if ( w == topLevelWidget()->winId() )
return;
QString s = KWM::title(w);
if(s.right(6) == "[menu]" || s.right(7) == "[tools]")
return;
TaskButton* b = new TaskButton(w, this);
buttons.append( b );
resetLayout();
}
kicker'TaskbarApplet::windowRemove() (./kdebase/kicker/internalapplets/taskbar/taskbar.cpp:85)
void TaskbarApplet::windowRemove(WId w )
{
if ( w == topLevelWidget()->winId() )
return;
TaskButton* b = findButton( w );
if ( b ) {
buttons.removeRef(b);
delete b;
resetLayout();
}
}
kicker'TaskbarApplet::windowChange() (./kdebase/kicker/internalapplets/taskbar/taskbar.cpp:97)
void TaskbarApplet::windowChange(WId w)
{
TaskButton* b = findButton( w );
if ( !b )
return;
b->refresh();
if ( b->onCurrentDesktop() != isVisible() ) {
b->isVisible()?b->hide():b->show();
resetLayout();
}
}
kicker'TaskbarApplet::windowActivate() (./kdebase/kicker/internalapplets/taskbar/taskbar.cpp:111)
void TaskbarApplet::windowActivate(WId w)
{
if ( w == topLevelWidget()->winId() )
return;
TaskButton* b = findButton( w );
if ( b )
b->setActiveButton();
else
TaskButton::noActiveButton();
}
kicker'TaskbarApplet::desktopChange() (./kdebase/kicker/internalapplets/taskbar/taskbar.cpp:122)
void TaskbarApplet::desktopChange(int )
{
resetLayout();
}
kicker'TaskbarApplet::widthForHeight() (./kdebase/kicker/internalapplets/taskbar/taskbar.cpp:127)
int TaskbarApplet::widthForHeight(int h)
{
lastH = h;
return 200; // a default size (we are a stretch applet so this does not really matter)
}
kicker'TaskbarApplet::heightForWidth() (./kdebase/kicker/internalapplets/taskbar/taskbar.cpp:133)
int TaskbarApplet::heightForWidth(int)
{
return 200; // a default size (we are a stretch applet so this does not really matter)
}
kicker'TaskbarApplet::resetLayout() (./kdebase/kicker/internalapplets/taskbar/taskbar.cpp:138)
void TaskbarApplet::resetLayout()
{
static QGridLayout *layout = NULL;
if(layout)
delete layout;
bool horiz = orientation() == Horizontal;
int items, i, col, row, mod = 0;
TaskButton *b;
for(items=0, b = buttons.first(); b; b = buttons.next())
items += b->onCurrentDesktop()?1:0;
items += appsStarting.count();
if(items){
mod = (horiz && height() > 32) ? 2 : 1;
layout = new QGridLayout(this,mod ,1 ,lineWidth());
}
else
layout = NULL;
for(i=0, col=0, row=0, b = buttons.first(); b; b = buttons.next()){
if(b->onCurrentDesktop()){
b->show();
if(horiz){
b->setMinimumSize(64, 8);
b->setMaximumSize(200, 100);
layout->addWidget(b, row, col);
layout->setColStretch(col, 100);
}
else{
b->setMinimumSize(8, 21);
layout->addWidget(b, row, 0);
}
++i;
if ( horiz && ((i%mod) == 0) ) {
row = 0;
++col;
}
else
++row;
}
else{
b->move(0, 0);
b->hide();
}
}
QIntDictIterator<AppStartButton> it(appsStarting);
for (; it.current(); ++it) {
AppStartButton * asb = it.current();
asb->show();
if (horiz) {
asb->setMinimumSize(64, 8);
asb->setMaximumSize(200, 100);
layout->addWidget(asb, row, col);
layout->setColStretch(col, 100);
} else {
asb->setMinimumSize(8, 21);
layout->addWidget(asb, row, 0);
}
++i;
if ( horiz && ((i%mod) == 0) ) {
row = 0;
++col;
}
else
++row;
}
if(layout){
if(!horiz){ // hack since were using the taskbar as required stretch
layout->setRowStretch(++row, 100);
}
else
layout->setColStretch(++col, 1);
layout->activate();
updateGeometry();
}
}
kicker'TaskbarApplet::clientStarted() (./kdebase/kicker/internalapplets/taskbar/taskbar.cpp:435)
void TaskbarApplet::clientStarted(
QString name,
QString icon,
QString resName,
int pid
)
{
qDebug("clientStarted(%s, %s, %s, %d)", name.latin1(), icon.latin1(), resName.latin1(), pid);
AppStartButton * b = new AppStartButton(name, icon, resName, pid, this);
appsStarting.insert(pid, b);
connect(
b, SIGNAL(killMe(int)),
this, SLOT(killAppStartButton(int)));
resetLayout();
b->show();
}
kicker'TaskbarApplet::clientMapped() (./kdebase/kicker/internalapplets/taskbar/taskbar.cpp:456)
void TaskbarApplet::clientMapped(QString name)
{
qDebug("clientMapped(`%s')", name.latin1());
QIntDictIterator<AppStartButton> it(appsStarting);
for (; it.current(); ++it) {
if (it.current()->resName() == name) {
appsStarting.remove(it.currentKey());
resetLayout();
break;
}
}
}
kicker'TaskbarApplet::clientDied() (./kdebase/kicker/internalapplets/taskbar/taskbar.cpp:472)
void TaskbarApplet::clientDied(int pid)
{
qDebug("clientDied(%d)", pid);
AppStartButton * b = appsStarting[pid];
if (0 != b) {
appsStarting.remove(pid);
resetLayout();
}
}