当前位置

// add services
/* This item should be at the top of the menu...
char *user = getlogin();
if (user == 0) user = getenv("LOGNAME");
QString username(user);

insertItem(SmallIconSet("kuser"), username, this, SLOT( slotEditUserContact() ) );
*/
PanelServiceMenu::initialize();
int id;
id = insertItem(new PopupMenuTitle(i18n("All Applications"), font()), -1 /* id */, 0);
setItemEnabled( id, false );
id = insertItem(new PopupMenuTitle(i18n("Actions"), font()), -1 /* id */, -1);
setItemEnabled( id, false )
这一段是kmenu实现的部分,上面注释掉的那一段是取系统用户名的。
看来维护者早有模仿的打算。

void PanelKMenu::mousePressEvent(QMouseEvent * e)
{
QMouseEvent newEvent = translateMouseEvent(e);
PanelServiceMenu::mousePressEvent( &newEvent );
}

这一段是鼠标事件的实现,是不分左右键,所以不管左击还是右击都是启动执行。

从kmenu整体实现而言,PanelMenu从PanelServiceMenu派生而来。
整体结构已经不可能有什么大的变化,如果要改头换面就一定要重写这个菜单。

可能是功力不够,或者有些功能很重要但是我们没有认识到,我总是感觉KDE有些代码写得太复杂了,没有必要的复杂。
比如像kinit, kicker, ksmsserver等等,kdm也是一个例子,完全没有必要的。