Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.1:kernel-2.6.32
kdebase3
kmenu-search-slowdown-fix.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File kmenu-search-slowdown-fix.diff of Package kdebase3
--- kicker/kicker/ui/k_mnu.cpp +++ kicker/kicker/ui/k_mnu.cpp @@ -774,6 +774,7 @@ insertSeparator(RecentlyLaunchedApps::the().m_nNumMenuItems); } } + iconsLoaded_ = false; } void PanelKMenu::clearRecentMenuItems() --- kicker/kicker/ui/service_mnu.cpp +++ kicker/kicker/ui/service_mnu.cpp @@ -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 +110,7 @@ clearSubmenus(); searchSubMenuIDs.clear(); searchMenuItems.clear(); + iconsLoaded_ = false; doInitialize(); } @@ -289,15 +297,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<KSycocaEntry*>(g)); // This submenu will be searched when applying a search string searchSubMenuIDs[m] = newId; @@ -392,6 +398,12 @@ 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 @@ 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)); } @@ -1001,3 +1013,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<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; + } +} --- kicker/kicker/ui/service_mnu.h +++ kicker/kicker/ui/service_mnu.h @@ -124,9 +124,12 @@ 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