Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:aualin:kde
kdebase3
kmenu-search-slowdown-fix.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File kmenu-search-slowdown-fix.diff of Package kdebase3
Index: kicker/kicker/ui/k_mnu.cpp =================================================================== --- kicker/kicker/ui/k_mnu.cpp.orig +++ kicker/kicker/ui/k_mnu.cpp @@ -771,6 +771,7 @@ void PanelKMenu::updateRecent() insertSeparator(RecentlyLaunchedApps::the().m_nNumMenuItems); } } + iconsLoaded_ = false; } void PanelKMenu::clearRecentMenuItems() Index: kicker/kicker/ui/service_mnu.cpp =================================================================== --- kicker/kicker/ui/service_mnu.cpp.orig +++ kicker/kicker/ui/service_mnu.cpp @@ -63,13 +63,20 @@ PanelServiceMenu::PanelServiceMenu(const 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 +110,7 @@ void PanelServiceMenu::initialize() clearSubmenus(); searchSubMenuIDs.clear(); searchMenuItems.clear(); + iconsLoaded_ = false; doInitialize(); } @@ -289,15 +297,13 @@ void PanelServiceMenu::fillMenu(KService 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<KSycocaEntry*>(g)); // This submenu will be searched when applying a search string searchSubMenuIDs[m] = newId; @@ -392,6 +398,12 @@ void PanelServiceMenu::doInitialize() 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(); } @@ -456,9 +468,9 @@ void PanelServiceMenu::insertMenuItem(KS int newId; if ( label.isEmpty() ) - newId = insertItem(KickerLib::menuIconSet(s->icon()), serviceName, nId, nIndex); + newId = insertItem(emptyiconset, serviceName, nId, nIndex); else - newId = insertItem(KickerLib::menuIconSet(s->icon()), label, nId, nIndex); + newId = insertItem(emptyiconset, label, nId, nIndex); entryMap_.insert(newId, static_cast<KSycocaEntry*>(s)); } @@ -1003,3 +1015,23 @@ bool PanelServiceMenu::hasSearchResults( { return hasSearchResults_; } + +void PanelServiceMenu::slotAboutToShow() +{ + KPanelMenu::slotAboutToShow(); + + if (!iconsLoaded_) { + EntryMap::Iterator mapIt; + for ( mapIt = entryMap_.begin(); mapIt != entryMap_.end(); ++mapIt ) { + KService *s = dynamic_cast<KService *>(static_cast<KSycocaEntry*>(mapIt.data())); + if (s) + changeItem(mapIt.key(),KickerLib::menuIconSet(s->icon()),text(mapIt.key())); + else { + KServiceGroup *g = dynamic_cast<KServiceGroup *>(static_cast<KSycocaEntry*>(mapIt.data())); + if (g) + changeItem(mapIt.key(),KickerLib::menuIconSet(g->icon()),text(mapIt.key())); + } + } + iconsLoaded_ = true; + } +} Index: kicker/kicker/ui/service_mnu.h =================================================================== --- kicker/kicker/ui/service_mnu.h.orig +++ kicker/kicker/ui/service_mnu.h @@ -124,9 +124,12 @@ protected: PanelServiceMenuMap searchSubMenuIDs; bool hasSearchResults_; std::set<int> searchMenuItems; + QIconSet emptyiconset; + bool iconsLoaded_; private slots: void slotContextMenu(int); + void slotAboutToShow(); private: enum ContextMenuEntry { AddItemToPanel, EditItem, AddMenuToPanel, EditMenu,
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor