From c5415f69834f13834179331af41329980fe8a3e8 Mon Sep 17 00:00:00 2001 From: tpearson Date: Fri, 3 Sep 2010 04:51:42 +0000 Subject: [PATCH] Added SuSE-originated simple menu feature git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1171226 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kio/kio/kservice.cpp | 14 ++++++++++ kio/kio/kservice.h | 4 +++ kio/kio/kservicegroup.cpp | 56 ++++++++++++++++++++++++++++++++++++--- kio/kio/kservicegroup.h | 13 +++++++++ 4 files changed, 83 insertions(+), 4 deletions(-) diff --git a/kio/kio/kservice.cpp b/kio/kio/kservice.cpp index 299d91e90..3af62f26f 100644 --- a/kio/kio/kservice.cpp +++ b/kio/kio/kservice.cpp @@ -757,6 +757,20 @@ TQString KService::untranslatedGenericName() const { return v.isValid() ? v.toString() : TQString::null; } +bool KService::SuSEunimportant() const { + TQMap::ConstIterator it = m_mapProps.find( "X-SuSE-Unimportant" ); + if ( (it == m_mapProps.end()) || (!it.data().isValid())) + { + return false; + } + + TQString aValue = it.data().toString(); + if (aValue == "true" || aValue == "on" || aValue == "yes") + return true; + else + return false; +} + TQString KService::parentApp() const { TQMap::ConstIterator it = m_mapProps.find( "X-KDE-ParentApp" ); if ( (it == m_mapProps.end()) || (!it.data().isValid())) diff --git a/kio/kio/kservice.h b/kio/kio/kservice.h index 1e9c2dc12..c276e8369 100644 --- a/kio/kio/kservice.h +++ b/kio/kio/kservice.h @@ -327,6 +327,10 @@ public: * @return true to suppress this service */ bool noDisplay() const; + /** + * check if the application entry is important + */ + bool SuSEunimportant() const; /** * Name of the application this service belongs to. diff --git a/kio/kio/kservicegroup.cpp b/kio/kio/kservicegroup.cpp index be093fc17..3e9484ace 100644 --- a/kio/kio/kservicegroup.cpp +++ b/kio/kio/kservicegroup.cpp @@ -31,8 +31,10 @@ class KServiceGroup::Private { public: - Private() { m_bNoDisplay = false; m_bShowEmptyMenu = false;m_bShowInlineHeader=false;m_bInlineAlias=false; m_bAllowInline = false;m_inlineValue = 4;} + Private() { m_bNoDisplay = false; m_bShowEmptyMenu = false;m_bShowInlineHeader=false;m_bInlineAlias=false; m_bAllowInline = false; m_inlineValue = 4; m_bShortMenu = false; m_bGeneralDescription = false;} bool m_bNoDisplay; + bool m_bShortMenu; + bool m_bGeneralDescription; bool m_bShowEmptyMenu; bool m_bShowInlineHeader; bool m_bInlineAlias; @@ -71,6 +73,11 @@ KServiceGroup::KServiceGroup( const TQString &configFile, const TQString & _relp m_strComment = config.readComment(); m_bDeleted = config.readBoolEntry( "Hidden", false ); d->m_bNoDisplay = config.readBoolEntry( "NoDisplay", false ); + if (d->directoryEntryPath.startsWith(TQDir::homeDirPath())) + d->m_bShortMenu = false; + else + d->m_bShortMenu = config.readBoolEntry( "X-SuSE-AutoShortMenu", false ); + d->m_bGeneralDescription = config.readBoolEntry( "X-SuSE-GeneralDescription", false ); TQStringList tmpList; if (config.hasKey("OnlyShowIn")) { @@ -118,6 +125,10 @@ int KServiceGroup::childCount() { if (m_childCount == -1) { + KConfig global("kdeglobals"); + global.setGroup("KDE"); + bool showUnimportant = global.readBoolEntry("showUnimportant", true); + m_childCount = 0; for( List::ConstIterator it = m_serviceList.begin(); @@ -128,7 +139,8 @@ int KServiceGroup::childCount() { KService *service = static_cast(p); if (!service->noDisplay()) - m_childCount++; + if ( showUnimportant || !service->SuSEunimportant() ) + m_childCount++; } else if (p->isType(KST_KServiceGroup)) { @@ -201,6 +213,16 @@ TQStringList KServiceGroup::suppressGenericNames() const return d->suppressGenericNames; } +bool KServiceGroup::SuSEgeneralDescription() const +{ + return d->m_bGeneralDescription; +} + +bool KServiceGroup::SuSEshortMenu() const +{ + return d->m_bShortMenu; +} + void KServiceGroup::load( TQDataStream& s ) { TQStringList groupList; @@ -212,7 +234,8 @@ void KServiceGroup::load( TQDataStream& s ) s >> m_strCaption >> m_strIcon >> m_strComment >> groupList >> m_strBaseGroupName >> m_childCount >> noDisplay >> d->suppressGenericNames >> d->directoryEntryPath >> - d->sortOrder >> _showEmptyMenu >> inlineHeader >> _inlineAlias >> _allowInline; + d->sortOrder >> _showEmptyMenu >> inlineHeader >> _inlineAlias >> + _allowInline >> d->m_bShortMenu >> d->m_bGeneralDescription; d->m_bNoDisplay = (noDisplay != 0); d->m_bShowEmptyMenu = ( _showEmptyMenu != 0 ); @@ -284,7 +307,8 @@ void KServiceGroup::save( TQDataStream& s ) s << m_strCaption << m_strIcon << m_strComment << groupList << m_strBaseGroupName << m_childCount << noDisplay << d->suppressGenericNames << d->directoryEntryPath << - d->sortOrder <<_showEmptyMenu <sortOrder <<_showEmptyMenu <m_bShortMenu << d->m_bGeneralDescription; } KServiceGroup::List @@ -309,6 +333,12 @@ static void addItem(KServiceGroup::List &sorted, const KSycocaEntry::Ptr &p, boo KServiceGroup::List KServiceGroup::entries(bool sort, bool excludeNoDisplay, bool allowSeparators, bool sortByGenericName) +{ + return SuSEentries(sort, excludeNoDisplay, allowSeparators, sortByGenericName); +} + +KServiceGroup::List +KServiceGroup::SuSEentries(bool sort, bool excludeNoDisplay, bool allowSeparators, bool sortByGenericName, bool excludeSuSEunimportant) { KServiceGroup *group = this; @@ -336,11 +366,18 @@ KServiceGroup::entries(bool sort, bool excludeNoDisplay, bool allowSeparators, b for (List::ConstIterator it(group->m_serviceList.begin()); it != group->m_serviceList.end(); ++it) { KSycocaEntry *p = (*it); +// if( !p->isType(KST_KServiceGroup) && !p->isType(KST_KService)) +// continue; bool noDisplay = p->isType(KST_KServiceGroup) ? static_cast(p)->noDisplay() : static_cast(p)->noDisplay(); if (excludeNoDisplay && noDisplay) continue; + bool SuSEunimportant = p->isType(KST_KService) && + static_cast(p)->SuSEunimportant(); + if (excludeSuSEunimportant && SuSEunimportant) + continue; + // Choose the right list KSortableValueList & list = p->isType(KST_KServiceGroup) ? glist : slist; TQString name; @@ -372,6 +409,15 @@ KServiceGroup::entries(bool sort, bool excludeNoDisplay, bool allowSeparators, b } list.insert(key,SPtr(*it)); } + + return group->SuSEsortEntries( slist, glist, excludeNoDisplay, allowSeparators ); +} + +KServiceGroup::List +KServiceGroup::SuSEsortEntries( KSortableValueList slist, KSortableValueList glist, bool excludeNoDisplay, bool allowSeparators ) +{ + KServiceGroup *group = this; + // Now sort slist.sort(); glist.sort(); @@ -413,6 +459,8 @@ KServiceGroup::entries(bool sort, bool excludeNoDisplay, bool allowSeparators, b // TODO: This prevents duplicates for(KSortableValueList::Iterator it2 = slist.begin(); it2 != slist.end(); ++it2) { + if (!(*it2).value()->isType(KST_KService)) + continue; KService *service = (KService *)((KSycocaEntry *)((*it2).value())); if (service->menuId() == item) { diff --git a/kio/kio/kservicegroup.h b/kio/kio/kservicegroup.h index de26a3ffb..69242e6ed 100644 --- a/kio/kio/kservicegroup.h +++ b/kio/kio/kservicegroup.h @@ -26,6 +26,7 @@ #include #include +#include #include "ksycocaentry.h" #include "ksycocatype.h" @@ -200,6 +201,12 @@ public: */ void setLayoutInfo(const TQStringList &layout); + /** + * Original API and feature kindly provided by SuSE + */ + bool SuSEshortMenu() const; + bool SuSEgeneralDescription() const; + /** * @internal * Returns information related to the layout of services in this group. @@ -238,6 +245,12 @@ public: */ virtual List entries(bool sorted = false); + /* + * Original API and feature kindly provided by SuSE + */ + virtual List SuSEentries(bool sort, bool excludeNoDisplay, bool allowSeparators, bool sortByGenericName, bool excludeSuSEunimportant = false); + virtual List SuSEsortEntries( KSortableValueList slist, KSortableValueList glist, bool excludeNoDisplay, bool allowSeparators ); + /** * Returns a non-empty string if the group is a special base group. * By default, "Settings/" is the kcontrol base group ("settings")