Sophie

Sophie

distrib > Mandriva > 2009.0 > i586 > by-pkgid > 9e8230873ca69f393e5304ceb1afeac2 > files > 34

kdebase4-workspace-4.2.4-0.6mdv2009.0.src.rpm

#
# SVN commit 939224 by cloose:
# 
# Add support for separators to the ApplicationModel and the classic menu style variant of kickoff (simpleapplet).
# 
# REVIEWED: http://reviewboard.kde.org/r/293/
# BUG: 187014
#

--- plasma/applets/kickoff/core/applicationmodel.h~	2009-03-18 19:24:37.000000000 +0100
+++ plasma/applets/kickoff/core/applicationmodel.h	2009-03-18 19:44:32.000000000 +0100
@@ -38,7 +38,7 @@
     Q_OBJECT
 
 public:
-    ApplicationModel(QObject *parent = 0);
+    ApplicationModel(QObject *parent = 0, bool allowSeparators = false);
     virtual ~ApplicationModel();
 
     /**
--- plasma/applets/kickoff/core/models.h~	2008-11-19 11:18:14.000000000 +0100
+++ plasma/applets/kickoff/core/models.h	2009-03-18 19:46:13.000000000 +0100
@@ -69,7 +69,9 @@
     /** The amount of free space (in Kilobytes) for items which represent storage. */
     DiskFreeSpaceRole = Qt::UserRole + 5,
     SubTitleMandatoryRole = Qt::UserRole + 6,
-    LastDataRole = SubTitleMandatoryRole
+    /** Is item a separator. **/
+    SeparatorRole = Qt::UserRole + 7,
+    LastDataRole = SeparatorRole
 };
 
 /**
--- plasma/applets/kickoff/simpleapplet/menuview.cpp~	2009-03-18 19:24:37.000000000 +0100
+++ plasma/applets/kickoff/simpleapplet/menuview.cpp	2009-03-18 19:49:32.000000000 +0100
@@ -122,7 +122,7 @@
 
 void MenuView::updateAction(QAbstractItemModel *model, QAction *action, const QModelIndex& index)
 {
-
+    bool isSeparator = index.data(Kickoff::SeparatorRole).value<bool>();
     QString text = index.data(Qt::DisplayRole).value<QString>().replace("&", "&&"); // describing text, e.g. "Spreadsheet" or "Rekall" (right, sometimes the text is also used for the generic app-name)
     QString name = index.data(Kickoff::SubTitleRole).value<QString>().replace("&", "&&"); // the generic name, e.g. "kspread" or "OpenOffice.org Spreadsheet" or just "" (right, it's a mess too)
     if (action->menu() != 0) { // if its an item with sub-menuitems, we probably like to thread them another way...
@@ -159,6 +159,7 @@
         }
     }
 
+    action->setSeparator(isSeparator);
     action->setIcon(index.data(Qt::DecorationRole).value<QIcon>());
 
     // we map modelindex and action together
--- plasma/applets/kickoff/core/applicationmodel.cpp~	2009-02-26 15:17:03.000000000 +0100
+++ plasma/applets/kickoff/core/applicationmodel.cpp	2009-03-18 22:50:11.000000000 +0100
@@ -72,6 +72,7 @@
         : parent(0),
           fetched(false),
           isDir(false),
+          isSeparator(false),
           subTitleMandatory(false)
     {
     }
@@ -92,18 +93,20 @@
     AppNode *parent;
     bool fetched;
     bool isDir;
+    bool isSeparator;
     bool subTitleMandatory;
 };
 
 class ApplicationModelPrivate
 {
 public:
-    ApplicationModelPrivate(ApplicationModel *qq)
+    ApplicationModelPrivate(ApplicationModel *qq, bool _allowSeparators)
             : q(qq),
               root(new AppNode()),
               duplicatePolicy(ApplicationModel::ShowDuplicatesPolicy),
               systemApplicationPolicy(ApplicationModel::ShowSystemOnlyPolicy),
-              primaryNamePolicy(ApplicationModel::GenericNamePrimary)
+              primaryNamePolicy(ApplicationModel::GenericNamePrimary),
+              allowSeparators(_allowSeparators)
     {
         systemApplications = Kickoff::systemApplicationList();
     }
@@ -121,6 +124,7 @@
     ApplicationModel::DuplicatePolicy duplicatePolicy;
     ApplicationModel::SystemApplicationPolicy systemApplicationPolicy;
     ApplicationModel::PrimaryNamePolicy primaryNamePolicy;
+    bool allowSeparators;
     QStringList systemApplications;
 };
 
@@ -134,7 +138,7 @@
 
     const KServiceGroup::List list = root->entries(true /* sorted */,
                                                    true /* exclude no display entries */,
-                                                   false /* allow separators */,
+                                                   allowSeparators /* allow separators */,
                                                    primaryNamePolicy == ApplicationModel::GenericNamePrimary /* sort by generic name */);
 
     // application name <-> service map for detecting duplicate entries
@@ -150,6 +154,7 @@
         QString relPath = _relPath;
         QString desktopEntry;
         bool isDir = false;
+        bool isSeparator = false;
         const KSycocaEntry::Ptr p = (*it);
 
         if (p->isType(KST_KService)) {
@@ -216,7 +221,7 @@
             appName = serviceGroup->comment();
             isDir = true;
         } else if (p->isType(KST_KServiceSeparator)) {
-            // TODO: implement seaparators
+            isSeparator = true;
         } else {
             kWarning(250) << "KServiceGroup: Unexpected object in list!";
             continue;
@@ -229,6 +234,7 @@
         newnode->relPath = relPath;
         newnode->desktopEntry = desktopEntry;
         newnode->isDir = isDir;
+        newnode->isSeparator = isSeparator;
         newnode->parent = node;
         node->children.append(newnode);
 
@@ -252,8 +258,8 @@
     }
 }
 
-ApplicationModel::ApplicationModel(QObject *parent)
-        : KickoffAbstractModel(parent), d(new ApplicationModelPrivate(this))
+ApplicationModel::ApplicationModel(QObject *parent, bool allowSeparators)
+        : KickoffAbstractModel(parent), d(new ApplicationModelPrivate(this, allowSeparators))
 {
     QDBusConnection dbus = QDBusConnection::sessionBus();
     (void)new KickoffAdaptor(this);
@@ -309,6 +315,9 @@
     case Kickoff::SubTitleMandatoryRole:
         return node->subTitleMandatory;
         break;
+    case Kickoff::SeparatorRole:
+        return node->isSeparator;
+        break;
     case Qt::DecorationRole:
         return node->icon;
         break;
--- plasma/applets/kickoff/simpleapplet/simpleapplet.cpp~	2009-04-02 05:28:03.000000000 +0200
+++ plasma/applets/kickoff/simpleapplet/simpleapplet.cpp	2009-04-02 05:30:08.000000000 +0200
@@ -597,7 +597,7 @@
         //Kickoff::MenuView::ModelOptions options = d->viewtypes.count() < 2 ? Kickoff::MenuView::MergeFirstLevel : Kickoff::MenuView::None;
         foreach(QString vtname, d->viewtypes) {
             if(vtname == "Applications") {
-                Kickoff::ApplicationModel *appModel = new Kickoff::ApplicationModel(d->menuview);
+                Kickoff::ApplicationModel *appModel = new Kickoff::ApplicationModel(d->menuview, true /*allow separators*/);
                 appModel->setDuplicatePolicy(Kickoff::ApplicationModel::ShowLatestOnlyPolicy);
                if (d->formattype == Name || d->formattype == NameDescription || d->formattype == NameDashDescription)
                     appModel->setPrimaryNamePolicy(Kickoff::ApplicationModel::AppNamePrimary);