Annotation of /trunk/kdebase4-workspace/patches/kdebase4-workspace-4.4.0-kickoff.patch
Parent Directory | Revision Log
Revision 981 -
(hide annotations)
(download)
Sat Feb 13 11:52:08 2010 UTC (14 years, 7 months ago) by niro
File size: 9291 byte(s)
Sat Feb 13 11:52:08 2010 UTC (14 years, 7 months ago) by niro
File size: 9291 byte(s)
-patches for 4.4.0
1 | niro | 981 | Index: plasma/desktop/applets/kickoff/core/systemmodel.cpp |
2 | =================================================================== | ||
3 | --- plasma/desktop/applets/kickoff/core/systemmodel.cpp (Revision 1087229) | ||
4 | +++ plasma/desktop/applets/kickoff/core/systemmodel.cpp (Revision 1087230) | ||
5 | @@ -52,21 +52,22 @@ | ||
6 | |||
7 | struct UsageInfo { | ||
8 | UsageInfo() | ||
9 | - : used(0), | ||
10 | - available(0), | ||
11 | - dirty(true) {} | ||
12 | + : used(0), | ||
13 | + available(0) | ||
14 | + {} | ||
15 | |||
16 | quint64 used; | ||
17 | quint64 available; | ||
18 | - bool dirty; | ||
19 | }; | ||
20 | |||
21 | class SystemModel::Private | ||
22 | { | ||
23 | public: | ||
24 | Private(SystemModel *parent) | ||
25 | - : q(parent) | ||
26 | - , placesModel(new KFilePlacesModel(parent)) { | ||
27 | + : q(parent), | ||
28 | + placesModel(new KFilePlacesModel(parent)), | ||
29 | + currentPlacesModelUsageIndex(0) | ||
30 | + { | ||
31 | q->setSourceModel(placesModel); | ||
32 | |||
33 | connect(placesModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), | ||
34 | @@ -84,44 +85,15 @@ | ||
35 | << i18n("Places") | ||
36 | << i18n("Removable Storage") | ||
37 | << i18n("Storage"); | ||
38 | - loadApplications(); | ||
39 | - connect(&refreshTimer, SIGNAL(timeout()), | ||
40 | - q, SLOT(startRefreshingUsageInfo())); | ||
41 | - refreshTimer.start(10000); | ||
42 | - QTimer::singleShot(0, q, SLOT(startRefreshingUsageInfo())); | ||
43 | connect(KSycoca::self(), SIGNAL(databaseChanged(const QStringList&)), q, SLOT(reloadApplications())); | ||
44 | } | ||
45 | |||
46 | - void queryFreeSpace(const QString& mountPoint) { | ||
47 | - KDiskFreeSpaceInfo freeSpace = KDiskFreeSpaceInfo::freeSpaceInfo(mountPoint); | ||
48 | - if (freeSpace.isValid()) | ||
49 | - q->freeSpaceInfoAvailable(freeSpace.mountPoint(), freeSpace.size() / 1024, | ||
50 | - freeSpace.used() / 1024, freeSpace.available() / 1024); | ||
51 | - } | ||
52 | - | ||
53 | - void loadApplications() { | ||
54 | - const QStringList apps = Kickoff::systemApplicationList(); | ||
55 | - appsList.clear(); | ||
56 | - | ||
57 | - foreach(const QString &app, apps) { | ||
58 | - KService::Ptr service = KService::serviceByStorageId(app); | ||
59 | - | ||
60 | - if (!service) { | ||
61 | - continue; | ||
62 | - } | ||
63 | - | ||
64 | - appsList << service; | ||
65 | - } | ||
66 | - //kDebug() << "*************" << appsList; | ||
67 | - } | ||
68 | - | ||
69 | SystemModel * const q; | ||
70 | KFilePlacesModel *placesModel; | ||
71 | QStringList topLevelSections; | ||
72 | KService::List appsList; | ||
73 | - QList<QString> mountPointsQueue; | ||
74 | QMap<QString, UsageInfo> usageByMountpoint; | ||
75 | - QTimer refreshTimer; | ||
76 | + int currentPlacesModelUsageIndex; | ||
77 | }; | ||
78 | |||
79 | SystemModel::SystemModel(QObject *parent) | ||
80 | @@ -137,7 +109,9 @@ | ||
81 | |||
82 | QModelIndex SystemModel::mapFromSource(const QModelIndex &sourceIndex) const | ||
83 | { | ||
84 | - if (!sourceIndex.isValid()) return QModelIndex(); | ||
85 | + if (!sourceIndex.isValid()) { | ||
86 | + return QModelIndex(); | ||
87 | + } | ||
88 | |||
89 | QModelIndex parent; | ||
90 | |||
91 | @@ -356,75 +330,60 @@ | ||
92 | } | ||
93 | } | ||
94 | |||
95 | -void SystemModel::startRefreshingUsageInfo() | ||
96 | +void SystemModel::refreshUsageInfo() | ||
97 | { | ||
98 | - if (!d->mountPointsQueue.isEmpty()) { | ||
99 | - return; | ||
100 | - } | ||
101 | - | ||
102 | - int rowCount = d->placesModel->rowCount(); | ||
103 | - for (int i = 0; i < rowCount; ++i) { | ||
104 | - QModelIndex index = d->placesModel->index(i, 0); | ||
105 | - if (d->placesModel->isDevice(index)) { | ||
106 | - Solid::Device dev = d->placesModel->deviceForIndex(index); | ||
107 | - Solid::StorageAccess *access = dev.as<Solid::StorageAccess>(); | ||
108 | - | ||
109 | - if (access && !access->filePath().isEmpty()) { | ||
110 | - d->mountPointsQueue << access->filePath(); | ||
111 | - } | ||
112 | - } | ||
113 | - } | ||
114 | - | ||
115 | - if (!d->mountPointsQueue.isEmpty()) { | ||
116 | - d->queryFreeSpace(d->mountPointsQueue.takeFirst()); | ||
117 | - } | ||
118 | + d->currentPlacesModelUsageIndex = 0; | ||
119 | + QTimer::singleShot(100, this, SLOT(refreshNextUsageInfo())); | ||
120 | } | ||
121 | |||
122 | -void SystemModel::reloadApplications() | ||
123 | +void SystemModel::stopRefreshingUsageInfo() | ||
124 | { | ||
125 | - d->loadApplications(); | ||
126 | + d->currentPlacesModelUsageIndex = d->placesModel->rowCount(); | ||
127 | } | ||
128 | |||
129 | -void SystemModel::freeSpaceInfoAvailable(const QString& mountPoint, quint64, | ||
130 | - quint64 kbUsed, quint64 kbAvailable) | ||
131 | +void SystemModel::refreshNextUsageInfo() | ||
132 | { | ||
133 | - UsageInfo info; | ||
134 | - info.used = kbUsed; | ||
135 | - info.available = kbAvailable; | ||
136 | - | ||
137 | - d->usageByMountpoint[mountPoint] = info; | ||
138 | - | ||
139 | - // More to process | ||
140 | - if (!d->mountPointsQueue.isEmpty()) { | ||
141 | - d->queryFreeSpace(d->mountPointsQueue.takeFirst()); | ||
142 | + if (d->currentPlacesModelUsageIndex >= d->placesModel->rowCount()) { | ||
143 | return; | ||
144 | } | ||
145 | |||
146 | - // We're done, let's emit the changes | ||
147 | - int rowCount = d->placesModel->rowCount(); | ||
148 | - for (int i = 0; i < rowCount; ++i) { | ||
149 | - QModelIndex sourceIndex = d->placesModel->index(i, 0); | ||
150 | - if (d->placesModel->isDevice(sourceIndex)) { | ||
151 | - Solid::Device dev = d->placesModel->deviceForIndex(sourceIndex); | ||
152 | - Solid::StorageAccess *access = dev.as<Solid::StorageAccess>(); | ||
153 | + QModelIndex sourceIndex = d->placesModel->index(d->currentPlacesModelUsageIndex, 0); | ||
154 | + if (d->placesModel->isDevice(sourceIndex)) { | ||
155 | + Solid::Device dev = d->placesModel->deviceForIndex(sourceIndex); | ||
156 | + Solid::StorageAccess *access = dev.as<Solid::StorageAccess>(); | ||
157 | |||
158 | - if (access && d->usageByMountpoint.contains(access->filePath())) { | ||
159 | - info = d->usageByMountpoint[access->filePath()]; | ||
160 | + if (access && !access->filePath().isEmpty()) { | ||
161 | + KDiskFreeSpaceInfo freeSpace = KDiskFreeSpaceInfo::freeSpaceInfo(access->filePath()); | ||
162 | + if (freeSpace.isValid()) { | ||
163 | + UsageInfo info; | ||
164 | + info.used = freeSpace.used() / 1024; | ||
165 | + info.available = freeSpace.available() / 1024; | ||
166 | |||
167 | - if (info.dirty) { | ||
168 | - info.dirty = false; | ||
169 | - d->usageByMountpoint[access->filePath()] = info; | ||
170 | - } else { | ||
171 | - d->usageByMountpoint.remove(access->filePath()); | ||
172 | - } | ||
173 | - | ||
174 | + d->usageByMountpoint[freeSpace.mountPoint()] = info; | ||
175 | QModelIndex index = mapFromSource(sourceIndex); | ||
176 | emit dataChanged(index, index); | ||
177 | } | ||
178 | } | ||
179 | } | ||
180 | + | ||
181 | + ++d->currentPlacesModelUsageIndex; | ||
182 | + QTimer::singleShot(0, this, SLOT(refreshNextUsageInfo())); | ||
183 | } | ||
184 | |||
185 | +void SystemModel::reloadApplications() | ||
186 | +{ | ||
187 | + const QStringList apps = Kickoff::systemApplicationList(); | ||
188 | + d->appsList.clear(); | ||
189 | + | ||
190 | + foreach (const QString &app, apps) { | ||
191 | + KService::Ptr service = KService::serviceByStorageId(app); | ||
192 | + | ||
193 | + if (service) { | ||
194 | + d->appsList << service; | ||
195 | + } | ||
196 | + } | ||
197 | +} | ||
198 | + | ||
199 | void Kickoff::SystemModel::sourceDataChanged(const QModelIndex &start, const QModelIndex &end) | ||
200 | { | ||
201 | if (start.parent().isValid()) return; | ||
202 | Index: plasma/desktop/applets/kickoff/core/systemmodel.h | ||
203 | =================================================================== | ||
204 | --- plasma/desktop/applets/kickoff/core/systemmodel.h (Revision 1087229) | ||
205 | +++ plasma/desktop/applets/kickoff/core/systemmodel.h (Revision 1087230) | ||
206 | @@ -48,13 +48,12 @@ | ||
207 | virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; | ||
208 | virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; | ||
209 | virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; | ||
210 | + void refreshUsageInfo(); | ||
211 | + void stopRefreshingUsageInfo(); | ||
212 | |||
213 | private Q_SLOTS: | ||
214 | - void startRefreshingUsageInfo(); | ||
215 | + void refreshNextUsageInfo(); | ||
216 | void reloadApplications(); | ||
217 | - void freeSpaceInfoAvailable(const QString& mountPoint, quint64 kbSize, | ||
218 | - quint64 kbUsed, quint64 kbAvailable); | ||
219 | - | ||
220 | void sourceDataChanged(const QModelIndex &start, const QModelIndex &end); | ||
221 | void sourceRowsAboutToBeInserted(const QModelIndex &parent, int start, int end); | ||
222 | void sourceRowsInserted(const QModelIndex &parent, int start, int end); | ||
223 | Index: plasma/desktop/applets/kickoff/ui/launcher.cpp | ||
224 | =================================================================== | ||
225 | --- plasma/desktop/applets/kickoff/ui/launcher.cpp (Revision 1087229) | ||
226 | +++ plasma/desktop/applets/kickoff/ui/launcher.cpp (Revision 1087230) | ||
227 | @@ -228,7 +228,7 @@ | ||
228 | |||
229 | void setupSystemView() | ||
230 | { | ||
231 | - SystemModel *model = new SystemModel(q); | ||
232 | + systemModel = new SystemModel(q); | ||
233 | UrlItemView *view = new UrlItemView(); | ||
234 | ItemDelegate *delegate = new ItemDelegate(q); | ||
235 | delegate->setRoleMapping(Plasma::Delegate::SubTitleRole, SubTitleRole); | ||
236 | @@ -236,7 +236,7 @@ | ||
237 | view->setItemDelegate(delegate); | ||
238 | view->setItemStateProvider(delegate); | ||
239 | |||
240 | - addView(i18n("Computer"), systemIcon(), model, view); | ||
241 | + addView(i18n("Computer"), systemIcon(), systemModel, view); | ||
242 | } | ||
243 | |||
244 | void setupSearchView() | ||
245 | @@ -448,6 +448,7 @@ | ||
246 | ApplicationModel *applicationModel; | ||
247 | RecentlyUsedModel *recentlyUsedModel; | ||
248 | KRunnerModel *searchModel; | ||
249 | + SystemModel *systemModel; | ||
250 | LeaveModel *leaveModel; | ||
251 | SearchBar *searchBar; | ||
252 | QWidget *footer; | ||
253 | @@ -807,6 +808,7 @@ | ||
254 | { | ||
255 | Q_UNUSED(event) | ||
256 | reset(); | ||
257 | + d->systemModel->stopRefreshingUsageInfo(); | ||
258 | } | ||
259 | |||
260 | void Launcher::keyPressEvent(QKeyEvent *event) | ||
261 | @@ -828,6 +830,7 @@ | ||
262 | void Launcher::showEvent(QShowEvent *e) | ||
263 | { | ||
264 | d->searchBar->setFocus(); | ||
265 | + d->systemModel->refreshUsageInfo(); | ||
266 | |||
267 | QWidget::showEvent(e); | ||
268 | } |