485ab965 | 2014-09-24 23:13:44 | Timothy Pearson |
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 |
||
M khelpcenter/application.cpp M khelpcenter/docentry.cpp M khelpcenter/navigator.cpp M khelpcenter/navigatorappitem.cpp M khelpcenter/navigatorappitem.h |
||
diff --git a/khelpcenter/application.cpp b/khelpcenter/application.cpp index 7adafeb..631818d 100644 --- a/khelpcenter/application.cpp +++ b/khelpcenter/application.cpp @@ -34,7 +34,7 @@ int Application::newInstance() { if (restoringSession()) return 0; - + TDECmdLineArgs *args = TDECmdLineArgs::parsedArgs(); KURL url; diff --git a/khelpcenter/docentry.cpp b/khelpcenter/docentry.cpp index 05f3ffa..e2feedc 100644 --- a/khelpcenter/docentry.cpp +++ b/khelpcenter/docentry.cpp @@ -269,7 +269,7 @@ if ( i == 0 ) { if ( entry->weight() < mChildren.first()->weight() ) { entry->setNextSibling( mChildren.first() ); - mChildren.prepend( entry ); + mChildren.prepend( entry ); break; } } diff --git a/khelpcenter/navigator.cpp b/khelpcenter/navigator.cpp index e05671e..7d865d9 100644 --- a/khelpcenter/navigator.cpp +++ b/khelpcenter/navigator.cpp @@ -225,8 +225,9 @@ KServiceGroup::List::ConstIterator end = entries.end(); for ( ; it != end; ++it ) { TQString desktopFile = ( *it )->entryPath(); - if ( TQDir::isRelativePath( desktopFile ) ) + if ( TQDir::isRelativePath( desktopFile ) ) { desktopFile = locate( "apps", desktopFile ); + } createItemFromDesktopFile( topItem, desktopFile ); } } diff --git a/khelpcenter/navigatorappitem.cpp b/khelpcenter/navigatorappitem.cpp index b2bee73..2c17538 100644 --- a/khelpcenter/navigatorappitem.cpp +++ b/khelpcenter/navigatorappitem.cpp @@ -78,20 +78,21 @@ 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 @@ 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 @@ } sortChildItems( 0, true /* ascending */ ); mPopulated = true; + + return entriesAdded; } TQString NavigatorAppItem::documentationURL( KService *s ) diff --git a/khelpcenter/navigatorappitem.h b/khelpcenter/navigatorappitem.h index 8ae3eac..ddebe96 100644 --- a/khelpcenter/navigatorappitem.h +++ b/khelpcenter/navigatorappitem.h @@ -42,7 +42,7 @@ void setRelpath( const TQString & ); virtual void setOpen(bool); - void populate( bool recursive = false ); + bool populate( bool recursive = false ); protected: TQString documentationURL( KService *s ); |