diff -r 341166945d65 -r 52b0f64eeb51 homescreenapp/hsdomainmodel/src/hsscene.cpp --- a/homescreenapp/hsdomainmodel/src/hsscene.cpp Fri Jun 25 19:19:22 2010 +0300 +++ b/homescreenapp/hsdomainmodel/src/hsscene.cpp Fri Jul 09 14:36:01 2010 +0300 @@ -164,29 +164,41 @@ return true; } - int index = mPages.indexOf(page) + 1; + int nextIndex = mPages.indexOf(page) + 1; HsDatabase *db = HsDatabase::instance(); db->transaction(); - + // update page indexes HsPageData data; - for (int i = index; i < mPages.count(); ++i) { - data.id = mPages.at(i)->databaseId(); - data.indexPosition = i - 1; + int pageCount(mPages.count()); + for (;nextIndex < pageCount; ++nextIndex) { + data.id = mPages.at(nextIndex)->databaseId(); + data.indexPosition = nextIndex - 1; if (!db->updatePage(data)) { db->rollback(); return false; } } - + // page will remove itself from database if (!page->deleteFromDatabase()) { db->rollback(); return false; } db->commit(); - + // update internal list + int index = mPages.indexOf(page); + bool lastPage(mPages.last() == page); mPages.removeOne(page); + if (mPages.isEmpty()) { + mActivePage = NULL; + }else if (mActivePage == page) { + if (lastPage) { + index--; + } + setActivePageIndex(index); + } + return true; }