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();
  }
}