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