--y0ulUmNC+osPPQO6 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi, please review the following patch: It speeds up kicker starting by optimizing away unnecessary icon reloads and adds also a delayed construction of the main kmenu. Dirk --y0ulUmNC+osPPQO6 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="patch.kicker" Index: containerarea.cpp =================================================================== RCS file: /home/kde/kdebase/kicker/core/containerarea.cpp,v retrieving revision 1.13 diff -u -2 -d -p -b -r1.13 containerarea.cpp Index: panelbutton.cpp =================================================================== RCS file: /home/kde/kdebase/kicker/core/panelbutton.cpp,v retrieving revision 1.9 diff -u -2 -d -p -b -r1.9 panelbutton.cpp --- panelbutton.cpp 2000/09/20 10:00:58 1.9 +++ panelbutton.cpp 2000/09/20 18:29:59 @@ -269,5 +269,4 @@ PanelKButton::PanelKButton(QWidget *pare topMenu = new PanelKMenu(this); connect(topMenu, SIGNAL(aboutToHide()), SLOT(slotRelease())); - topMenu->initialize(); // Get this ready now. connect(this, SIGNAL(pressed()), SLOT(slotExecMenu())); // client menu stuff @@ -337,5 +336,4 @@ void PanelKButton::slotExecMenu() { topMenu->hide(); - topMenu->initialize(); topMenu->popup(getPopupPosition(topMenu)); } @@ -344,5 +342,4 @@ void PanelKButton::slotExecMenuAt(int x, { topMenu->hide(); - topMenu->initialize(); topMenu->popup(QPoint(x,y)); } Index: panelbuttonbase.cpp =================================================================== RCS file: /home/kde/kdebase/kicker/core/panelbuttonbase.cpp,v retrieving revision 1.5 diff -u -2 -d -p -b -r1.5 panelbuttonbase.cpp --- panelbuttonbase.cpp 2000/08/30 14:33:14 1.5 +++ panelbuttonbase.cpp 2000/09/20 18:29:59 @@ -77,33 +77,40 @@ void PanelButtonBase::setTile(const QStr void PanelButtonBase::setIcon(const QString & nm, const QString & fallback) { - KIcon::StdSizes sz = // Er, enum names should not be plural + KIcon::StdSizes newsz = width() < 32 ? KIcon::SizeSmall : (width() < 48 ? KIcon::SizeMedium : KIcon::SizeLarge); + KIcon::StdSizes oldsz = _icon.width() < 32 ? KIcon::SizeSmall : + (_icon.width() < 48 ? KIcon::SizeMedium : KIcon::SizeLarge); + if(oldsz == newsz) + return; + KIconLoader * ldr = KGlobal::iconLoader(); - _icon = ldr->loadIcon(nm, KIcon::Desktop, sz, KIcon::DefaultState, 0L, true); + _icon = ldr->loadIcon(nm, KIcon::Desktop, newsz, KIcon::DefaultState, 0L, true); if (_icon.isNull()) - _icon = ldr->loadIcon(fallback, KIcon::Desktop, sz, KIcon::DefaultState); + _icon = ldr->loadIcon(fallback, KIcon::Desktop, newsz, KIcon::DefaultState); - _iconh = ldr->loadIcon(nm, KIcon::Desktop, sz, KIcon::ActiveState, 0L, true); + _iconh = ldr->loadIcon(nm, KIcon::Desktop, newsz, KIcon::ActiveState, 0L, true); if (_iconh.isNull()) - _iconh = ldr->loadIcon(fallback, KIcon::Desktop, sz, KIcon::ActiveState); - - repaint(); + _iconh = ldr->loadIcon(fallback, KIcon::Desktop, newsz, KIcon::ActiveState); } void PanelButtonBase::setIcon(const KURL & u) { - KIcon::StdSizes sz = + KIcon::StdSizes newsz = width() < 32 ? KIcon::SizeSmall : (width() < 48 ? KIcon::SizeMedium : KIcon::SizeLarge); - _icon = KMimeType::pixmapForURL(u, 0, KIcon::Desktop, sz, KIcon::DefaultState); - _iconh = KMimeType::pixmapForURL(u, 0, KIcon::Desktop, sz, KIcon::ActiveState); + KIcon::StdSizes oldsz = _icon.width() < 32 ? KIcon::SizeSmall : + (_icon.width() < 48 ? KIcon::SizeMedium : KIcon::SizeLarge); - repaint(); + if(oldsz == newsz) + return; + + _icon = KMimeType::pixmapForURL(u, 0, KIcon::Desktop, newsz, KIcon::DefaultState); + _iconh = KMimeType::pixmapForURL(u, 0, KIcon::Desktop, newsz, KIcon::ActiveState); } --y0ulUmNC+osPPQO6--