--- kicker/kicker/ui/service_mnu.cpp 2005/11/25 08:19:25 1.115 +++ kicker/kicker/ui/service_mnu.cpp 2005/11/25 10:32:36 @@ -63,13 +63,20 @@ insertInlineHeader_( insertInlineHeader ), clearOnClose_(false), addmenumode_(addmenumode), - popupMenu_(0) + popupMenu_(0), + iconsLoaded_(false) { excludeNoDisplay_=true; connect(KSycoca::self(), SIGNAL(databaseChanged()), SLOT(slotClearOnClose())); connect(this, SIGNAL(aboutToHide()), this, SLOT(slotClose())); + + const int iconSize = KickerSettings::menuEntryHeight(); + QPixmap pix(iconSize,iconSize); + QBitmap map(iconSize,iconSize,true); + pix.setMask(map); + emptyiconset = QIconSet(pix,pix); } PanelServiceMenu::~PanelServiceMenu() @@ -103,6 +112,7 @@ clearSubmenus(); searchSubMenuIDs.clear(); searchMenuItems.clear(); + iconsLoaded_ = false; doInitialize(); } @@ -258,15 +268,13 @@ newSubMenu(g->name(), g->relPath(), this, g->name().utf8(), inlineHeaderName); m->setCaption(groupCaption); - QIconSet iconset = KickerLib::menuIconSet(g->icon()); - if (separatorNeeded) { insertSeparator(); separatorNeeded = false; } - int newId = insertItem(iconset, groupCaption, m, id++); + int newId = insertItem(emptyiconset,groupCaption, m, id++); entryMap_.insert(newId, static_cast(g)); // This submenu will be searched when applying a search string searchSubMenuIDs[m] = newId; @@ -428,5 +428,11 @@ void PanelServiceMenu::configChanged() { + const int iconSize = KickerSettings::menuEntryHeight(); + QPixmap pix(iconSize,iconSize); + QBitmap map(iconSize,iconSize,true); + pix.setMask(map); + emptyiconset = QIconSet(pix,pix); + deinitialize(); } @@ -347,7 +359,7 @@ // to accelerators, replace them with two ampersands. serviceName.replace("&", "&&"); - int newId = insertItem(KickerLib::menuIconSet(s->icon()), serviceName, nId, nIndex); + int newId = insertItem(emptyiconset, serviceName, nId, nIndex); entryMap_.insert(newId, static_cast(s)); } @@ -1009,3 +1019,23 @@ { return hasSearchResults_; } + +void PanelServiceMenu::slotAboutToShow() +{ + KPanelMenu::slotAboutToShow(); + + if (!iconsLoaded_) { + EntryMap::Iterator mapIt; + for ( mapIt = entryMap_.begin(); mapIt != entryMap_.end(); ++mapIt ) { + KService *s = dynamic_cast(static_cast(mapIt.data())); + if (s) + changeItem(mapIt.key(),KickerLib::menuIconSet(s->icon()),text(mapIt.key())); + else { + KServiceGroup *g = dynamic_cast(static_cast(mapIt.data())); + if (g) + changeItem(mapIt.key(),KickerLib::menuIconSet(g->icon()),text(mapIt.key())); + } + } + iconsLoaded_ = true; + } +} --- kicker/kicker/ui/service_mnu.h 2005/11/25 08:18:55 1.85 +++ kicker/kicker/ui/service_mnu.h 2005/11/25 10:34:47 @@ -125,9 +125,12 @@ PanelServiceMenuMap searchSubMenuIDs; bool hasSearchResults_; std::set searchMenuItems; + QIconSet emptyiconset; + bool iconsLoaded_; private slots: void slotContextMenu(int); + void slotAboutToShow(); private: enum ContextMenuEntry { AddItemToPanel, EditItem, AddMenuToPanel, EditMenu, --- kicker/kicker/ui/k_mnu.cpp 2005/11/25 08:18:55 1.85 +++ kicker/kicker/ui/k_mnu.cpp 2005/11/25 10:33:46 @@ -775,6 +775,7 @@ insertSeparator(RecentlyLaunchedApps::the().m_nNumMenuItems); } } + iconsLoaded_ = false; } void PanelKMenu::clearRecentMenuItems()