diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2014-09-24 23:13:44 -0500 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2014-09-24 23:13:44 -0500 |
commit | 485ab965cd717c5b94bf2d941e4efa6293b57642 (patch) | |
tree | 2b9124a3ec47faa9956842e603e711bbdd28269e /khelpcenter/navigatorappitem.cpp | |
parent | 07d87c947a409c095cec678e7c36b022a58e2567 (diff) | |
download | tdebase-485ab965cd717c5b94bf2d941e4efa6293b57642.tar.gz tdebase-485ab965cd717c5b94bf2d941e4efa6293b57642.zip |
Fix khelpcenter service group entry appearing when no child service items have documentation
This relates to Bug 1968
Fix khelpcenter services showing tree expansion hints
Diffstat (limited to 'khelpcenter/navigatorappitem.cpp')
-rw-r--r-- | khelpcenter/navigatorappitem.cpp | 48 |
1 files changed, 36 insertions, 12 deletions
diff --git a/khelpcenter/navigatorappitem.cpp b/khelpcenter/navigatorappitem.cpp index b2bee736e..2c175386c 100644 --- a/khelpcenter/navigatorappitem.cpp +++ b/khelpcenter/navigatorappitem.cpp @@ -78,20 +78,21 @@ void NavigatorAppItem::setOpen(bool open) TQListViewItem::setOpen(open); } -void NavigatorAppItem::populate( bool recursive ) +bool NavigatorAppItem::populate( bool recursive ) { - if ( mPopulated ) return; + bool entriesAdded = false; + + if ( mPopulated ) return false; KServiceGroup::Ptr root = KServiceGroup::group(mRelpath); if ( !root ) { kdWarning() << "No Service groups\n"; - return; + return false; } KServiceGroup::List list = root->entries(); - for ( KServiceGroup::List::ConstIterator it = list.begin(); - it != list.end(); ++it ) + for ( KServiceGroup::List::ConstIterator it = list.begin(); it != list.end(); ++it ) { KSycocaEntry * e = *it; KService::Ptr s; @@ -108,20 +109,41 @@ void NavigatorAppItem::populate( bool recursive ) DocEntry *entry = new DocEntry( s->name(), url, s->icon() ); item = new NavigatorItem( entry, this ); item->setAutoDeleteDocEntry( true ); - item->setExpandable( true ); + item->setExpandable( false ); + entriesAdded = true; } break; } case KST_KServiceGroup: { g = static_cast<KServiceGroup*>(e); - if ( ( g->childCount() == 0 ) || g->name().startsWith( "." ) ) + if ( ( g->childCount() == 0 ) || g->name().startsWith( "." ) ) { continue; - DocEntry *entry = new DocEntry( g->caption(), "", g->icon() ); - NavigatorAppItem *appItem; - appItem = new NavigatorAppItem( entry, this, g->relPath() ); - appItem->setAutoDeleteDocEntry( true ); - if ( recursive ) appItem->populate( recursive ); + } + KServiceGroup::List entryList = g->entries(false, true, false, false); + if (entryList.count() > 0) { + int entryCount = 0; + for( KServiceGroup::List::ConstIterator it2 = entryList.begin(); it2 != entryList.end(); it2++) + { + KSycocaEntry *p = (*it2); + if (p->isType(KST_KService)) + { + KService *s = static_cast<KService *>(p); + url = documentationURL( s ); + if ( !url.isEmpty() ){ + entryCount++; + } + } + } + if (entryCount > 0) { + DocEntry *entry = new DocEntry( g->caption(), "", g->icon() ); + NavigatorAppItem *appItem; + appItem = new NavigatorAppItem( entry, this, g->relPath() ); + appItem->setAutoDeleteDocEntry( true ); + if ( recursive ) appItem->populate( recursive ); + entriesAdded = true; + } + } break; } default: @@ -130,6 +152,8 @@ void NavigatorAppItem::populate( bool recursive ) } sortChildItems( 0, true /* ascending */ ); mPopulated = true; + + return entriesAdded; } TQString NavigatorAppItem::documentationURL( KService *s ) |