-rw-r--r-- | core/launcher/documentlist.cpp | 92 | ||||
-rw-r--r-- | core/launcher/documentlist.h | 1 |
2 files changed, 91 insertions, 2 deletions
diff --git a/core/launcher/documentlist.cpp b/core/launcher/documentlist.cpp index 92b8c25..59dd721 100644 --- a/core/launcher/documentlist.cpp +++ b/core/launcher/documentlist.cpp | |||
@@ -326,18 +326,106 @@ void DocumentList::linkChanged( QString arg ) | |||
326 | void DocumentList::restoreDone() | 326 | void DocumentList::restoreDone() |
327 | { | 327 | { |
328 | reloadAppLnks(); | 328 | reloadAppLnks(); |
329 | reloadDocLnks(); | 329 | reloadDocLnks(); |
330 | } | 330 | } |
331 | 331 | ||
332 | void DocumentList::DiffAppLnks() | ||
333 | { | ||
334 | static AppLnkSet *appLnkSet2; | ||
335 | |||
336 | appLnkSet2 = new AppLnkSet( MimeType::appsFolderName() ); | ||
337 | |||
338 | if ( d->sendAppLnks && d->serverGui ) { | ||
339 | static QStringList prevTypeList = appLnkSet->types(); | ||
340 | QStringList types = appLnkSet2->types(); | ||
341 | for ( QStringList::Iterator ittypes=types.begin(); ittypes!=types.end(); ++ittypes) { | ||
342 | if ( !(*ittypes).isEmpty() ) { | ||
343 | if ( !prevTypeList.contains(*ittypes) ) { | ||
344 | QString name = appLnkSet2->typeName(*ittypes); | ||
345 | QPixmap pm = appLnkSet2->typePixmap(*ittypes); | ||
346 | QPixmap bgPm = appLnkSet2->typeBigPixmap(*ittypes); | ||
347 | |||
348 | if (pm.isNull()) { | ||
349 | QImage img( Resource::loadImage( "UnknownDocument" ) ); | ||
350 | pm = img.smoothScale( AppLnk::smallIconSize(), AppLnk::smallIconSize() ); | ||
351 | bgPm = img.smoothScale( AppLnk::bigIconSize(), AppLnk::bigIconSize() ); | ||
352 | } | ||
353 | |||
354 | odebug << "adding type " << (*ittypes) << "" << oendl; | ||
355 | |||
356 | // ### our current launcher expects docs tab to be last | ||
357 | d->serverGui->typeAdded( *ittypes, name.isNull() ? (*ittypes) : name, pm, bgPm ); | ||
358 | } | ||
359 | prevTypeList.remove(*ittypes); | ||
360 | } | ||
361 | } | ||
362 | for ( QStringList::Iterator ittypes=prevTypeList.begin(); ittypes!=prevTypeList.end(); ++ittypes) { | ||
363 | odebug << "removing type " << (*ittypes) << "" << oendl; | ||
364 | d->serverGui->typeRemoved(*ittypes); | ||
365 | } | ||
366 | prevTypeList = types; | ||
367 | } | ||
368 | |||
369 | |||
370 | QListIterator<AppLnk> it1( appLnkSet->children() ); | ||
371 | QListIterator<AppLnk> it2( appLnkSet2->children() ); | ||
372 | |||
373 | AppLnk *i; | ||
374 | AppLnk *j; | ||
375 | bool found; | ||
376 | |||
377 | while ( (j=it2.current()) ) { | ||
378 | it1 = appLnkSet->children(); | ||
379 | found = false; | ||
380 | while ( (i=it1.current()) ){ | ||
381 | if (strcmp(i->name().ascii(),j->name().ascii()) == 0) | ||
382 | found = true; | ||
383 | ++it1; | ||
384 | } | ||
385 | if (!found) { | ||
386 | qDebug("Item %s needs to be added",j->name().ascii() ); | ||
387 | d->serverGui->applicationAdded( j->type(), *j ); | ||
388 | } | ||
389 | ++it2; | ||
390 | } | ||
391 | |||
392 | it1 = appLnkSet->children(); | ||
393 | while ( (i=it1.current()) ) { | ||
394 | it2 = appLnkSet2->children(); | ||
395 | found = false; | ||
396 | while ( (j=it2.current()) ){ | ||
397 | if (strcmp(i->name().ascii(),j->name().ascii()) == 0) | ||
398 | found = true; | ||
399 | ++it2; | ||
400 | } | ||
401 | if (!found) { | ||
402 | qDebug("Item %s needs to be removed",i->name().ascii() ); | ||
403 | d->serverGui->applicationRemoved( i->type(), *i ); | ||
404 | } | ||
405 | |||
406 | ++it1; | ||
407 | } | ||
408 | |||
409 | delete appLnkSet; | ||
410 | appLnkSet = appLnkSet2; | ||
411 | |||
412 | } | ||
332 | void DocumentList::storageChanged() | 413 | void DocumentList::storageChanged() |
333 | { | 414 | { |
415 | QTime t; | ||
334 | // ### can implement better | 416 | // ### can implement better |
335 | reloadAppLnks(); | 417 | |
418 | t.start(); | ||
419 | DiffAppLnks(); | ||
420 | // reloadAppLnks(); | ||
421 | qDebug("Reload App links took %i ms",t.elapsed() ); | ||
336 | reloadDocLnks(); | 422 | reloadDocLnks(); |
337 | // ### Optimization opportunity | 423 | // odebug << "Reload links took " << t.elapsed() << " ms " << oendl; |
424 | qDebug("Reload All links took %i ms",t.elapsed() ); | ||
425 | // ### Optimization opportunity | ||
338 | // Could be a bit more intelligent and somehow work out which | 426 | // Could be a bit more intelligent and somehow work out which |
339 | // mtab entry has changed and then only scan that and add and remove | 427 | // mtab entry has changed and then only scan that and add and remove |
340 | // links appropriately. | 428 | // links appropriately. |
341 | // rescan(); | 429 | // rescan(); |
342 | } | 430 | } |
343 | 431 | ||
diff --git a/core/launcher/documentlist.h b/core/launcher/documentlist.h index bd5c031..232bb6a 100644 --- a/core/launcher/documentlist.h +++ b/core/launcher/documentlist.h | |||
@@ -39,12 +39,13 @@ public: | |||
39 | void restoreDone(); | 39 | void restoreDone(); |
40 | void storageChanged(); | 40 | void storageChanged(); |
41 | void sendAllDocLinks(); | 41 | void sendAllDocLinks(); |
42 | 42 | ||
43 | void reloadAppLnks(); | 43 | void reloadAppLnks(); |
44 | void reloadDocLnks(); | 44 | void reloadDocLnks(); |
45 | void DiffAppLnks(); | ||
45 | 46 | ||
46 | // Orig DocList stuff | 47 | // Orig DocList stuff |
47 | void start(); | 48 | void start(); |
48 | void pause(); | 49 | void pause(); |
49 | void resume(); | 50 | void resume(); |
50 | void rescan(); | 51 | void rescan(); |