Source Code (Use browser search to find items of interest.)

Class Index

kicker'PanelKMenu (./kdebase/kicker/menus.h:117)

class PanelKMenu : public PanelBrowserMenu
{
    Q_OBJECT
public:
    PanelKMenu(QWidget *parent=0, const char *name=0);
    ~PanelKMenu(){;}

    virtual void initialize(bool reInit = false); // call this before manually adding menus
    //    void removeChildMenu(QPopupMenu *popup); // for removing client menus
    int insertClientMenu(KickerClientMenu *p);
    void removeClientMenu(int id);

protected slots:
    void slotLock();
    void slotLogout();
    void slotConfigure();
    void slotRestart();
    void slotSizeSmall();
    void slotSizeNormal();
    void slotSizeLarge();
    void slotContextHelp();

private:

    int client_id;
    QIntDict<KickerClientMenu> clients;

};

// Menu for the "Recent Documents". It mostly just re-initializes when shown.

kicker'PanelKMenu::PanelKMenu() (./kdebase/kicker/menus.cpp:436)

PanelKMenu::PanelKMenu(QWidget *parent, const char *name)
    : PanelBrowserMenu(KGlobal::dirs()->resourceDirs("apps").last(), false,
                       true, parent, name)
{
  // set the first client id to some arbitrarily large value. I guess more
  // than 10000 menu entries in the toplevel K menu are quite useless, anyway :-)
  client_id = 10000;
}


kicker'PanelKMenu::initialize() (./kdebase/kicker/menus.cpp:445)

void PanelKMenu::initialize(bool)
{
    if(!init){
        PanelBrowserMenu::initialize();
        QPopupMenu *sizeMnu = new QPopupMenu;
        sizeMnu->insertItem(i18n("Tiny"), this, SLOT(slotSizeSmall()));
        sizeMnu->insertItem(i18n("Normal"), this, SLOT(slotSizeNormal()));
        sizeMnu->insertItem(i18n("Large"), this, SLOT(slotSizeLarge()));

        QPopupMenu *panelOpMnu = new QPopupMenu;
        panelOpMnu->insertItem(i18n("Panel Size"), sizeMnu);
        panelOpMnu->insertItem(i18n("Add Application"));
        panelOpMnu->insertItem(i18n("Configure..."), this, SLOT(slotConfigure()));
        panelOpMnu->insertItem(i18n("Restart"), this, SLOT(slotRestart()));

        // testing
        KConfig *config = KGlobal::config();
        config->setGroup("menus");
	bool merge = config->readBoolEntry("MergeKDEDirs", false);
	QStringList appDirs =
	  KGlobal::dirs()->resourceDirs("apps");

	QStringList::Iterator it(appDirs.begin());
	for (; it != appDirs.end(); ++it) {
	  // we want to skip the last one, it's already done.
	  if (*it == appDirs.last())
  	    break;

	  QString dirFile(*it+"/.directory");
	  QString entryName;
	  QIconSet smallIcon;
	  if(QFile::exists(dirFile)){
	    KSimpleConfig config(dirFile);
	    config.setDesktopGroup();
	    smallIcon = SmallIcon(config.readEntry("Icon", "folder"));
	    entryName = config.readEntry("Name", QDir(*it).dirName());
	  }

	  if (smallIcon.isNull()) {
	    QIconSet def(SmallIcon("folder"));
	    def.setPixmap(KGlobal::iconLoader()->
			  loadIcon("folder", KIcon::Desktop, KIcon::SizeMedium),
			  QIconSet::Large);
	    smallIcon = def;
	  }

	  if (merge) {
	    setPath(*it);
	    PanelBrowserMenu::initialize(true);
	  } else {
	    insertSeparator();
	    PanelBrowserMenu *newMnu =
	      new PanelBrowserMenu(*it, true, false, this);
	    insertItem(smallIcon, entryName, newMnu);
	  }
	}

	insertSeparator();

        bool flag = config->readBoolEntry("UseRecent", true);
        if(flag){
        	PanelRecentMenu *recentMnu = new PanelRecentMenu(this);
                insertItem(SmallIcon("document"),
                           i18n("Recent Documents"), recentMnu);
        	insertSeparator();
        }
        flag = config->readBoolEntry("UseBrowser", true);
        if(flag){
            PanelQuickBrowser *browserMnu = new PanelQuickBrowser(this);
            insertItem(SmallIcon("folder_red"),
                       i18n("Quick Browser"), browserMnu);
            insertSeparator();
        }

	// insert client menus, if any
	if (clients.count() > 0)
	  {
	    QIntDictIterator<KickerClientMenu> it(clients);
	    while (it)
	      {
		insertItem(it.current()->icon, it.current()->text, it.current(), it.currentKey());
		++it;
	      }
	    insertSeparator();
	  }

        // testing
        insertItem(SmallIcon("panel"),
		   i18n("Panel Menu"), panelOpMnu);
        insertItem( i18n("Context Help"), this, SLOT( slotContextHelp() ) );
        insertItem(SmallIcon("key"),
                   i18n("Lock Screen"), this, SLOT(slotLock()));
        insertItem(SmallIcon("exit"),
                   i18n("Logout"), this, SLOT(slotLogout()));
        adjustSize();
    }
}


/*
void PanelKMenu::removeChildMenu(QPopupMenu *popup)
{
    int index;
    findPopup(popup, &index);
    if(index != -1){
        removeItemAt(index);
        adjustSize();
    }
}
*/



kicker'PanelKMenu::insertClientMenu() (./kdebase/kicker/menus.cpp:557)

int PanelKMenu::insertClientMenu(KickerClientMenu *p)
{
  int id = client_id;
  clients.insert(id, p);
  slotClear();
  return id;
}



kicker'PanelKMenu::removeClientMenu() (./kdebase/kicker/menus.cpp:566)

void PanelKMenu::removeClientMenu(int id)
{
  clients.remove(id);
  removeItem(id);
  slotClear();
}



kicker'PanelKMenu::slotLock() (./kdebase/kicker/menus.cpp:574)

void PanelKMenu::slotLock()
{
    DCOPClient *client = kapp->dcopClient();
    client->send("kdesktop", "KScreensaverIface", "lock()", "");
}


kicker'PanelKMenu::slotLogout() (./kdebase/kicker/menus.cpp:580)

void PanelKMenu::slotLogout()
{
     PGlobal::panel->writeConfig();
     kapp->requestShutDown();
}


kicker'PanelKMenu::slotSizeSmall() (./kdebase/kicker/menus.cpp:586)

void PanelKMenu::slotSizeSmall()
{
    PGlobal::panel->setSize(Tiny);
}


kicker'PanelKMenu::slotSizeNormal() (./kdebase/kicker/menus.cpp:591)

void PanelKMenu::slotSizeNormal()
{
    PGlobal::panel->setSize(Normal);
}


kicker'PanelKMenu::slotSizeLarge() (./kdebase/kicker/menus.cpp:596)

void PanelKMenu::slotSizeLarge()
{
    PGlobal::panel->setSize(Large);
}


kicker'PanelKMenu::slotConfigure() (./kdebase/kicker/menus.cpp:601)

void PanelKMenu::slotConfigure()
{
  PGlobal::panel->writeConfig();

  if (fork() == 0)
	{
	  execl(locate("exe", "kcmshell"), "kcmshell", "Applications/panel", 0);
	  warning("Error launching kcmshell Applications/panel!");
	  exit(1);
	}
}



kicker'PanelKMenu::slotContextHelp() (./kdebase/kicker/menus.cpp:614)

void PanelKMenu::slotContextHelp()
{
    KWin::invokeContextHelp();
}


kicker'PanelKMenu::slotRestart() (./kdebase/kicker/menus.cpp:619)

void PanelKMenu::slotRestart()
{
    char ** o_argv = new char*[2];
    // TODO : support for cmd line arguments
    //for (int v=0; v<o_argc; v++) o_argv[v] = argv[v];
    o_argv[0] = strdup("kicker");
    o_argv[1] = 0L;

    PGlobal::panel->writeConfig();
    QApplication::exit();
	execv(locate("exe", "kicker"), o_argv);
    exit(1);
}