| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/app_list/app_list_model.h" | 5 #include "ui/app_list/app_list_model.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "ui/app_list/app_list_folder_item.h" | 10 #include "ui/app_list/app_list_folder_item.h" |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 } | 73 } |
| 74 | 74 |
| 75 AppListFolderItem* AppListModel::FindFolderItem(const std::string& id) { | 75 AppListFolderItem* AppListModel::FindFolderItem(const std::string& id) { |
| 76 AppListItem* item = top_level_item_list_->FindItem(id); | 76 AppListItem* item = top_level_item_list_->FindItem(id); |
| 77 if (item && item->GetItemType() == AppListFolderItem::kItemType) | 77 if (item && item->GetItemType() == AppListFolderItem::kItemType) |
| 78 return static_cast<AppListFolderItem*>(item); | 78 return static_cast<AppListFolderItem*>(item); |
| 79 DCHECK(!item); | 79 DCHECK(!item); |
| 80 return NULL; | 80 return NULL; |
| 81 } | 81 } |
| 82 | 82 |
| 83 AppListItem* AppListModel::AddItem(scoped_ptr<AppListItem> item) { | 83 AppListItem* AppListModel::AddItem(std::unique_ptr<AppListItem> item) { |
| 84 DCHECK(!item->IsInFolder()); | 84 DCHECK(!item->IsInFolder()); |
| 85 DCHECK(!top_level_item_list()->FindItem(item->id())); | 85 DCHECK(!top_level_item_list()->FindItem(item->id())); |
| 86 return AddItemToItemListAndNotify(std::move(item)); | 86 return AddItemToItemListAndNotify(std::move(item)); |
| 87 } | 87 } |
| 88 | 88 |
| 89 AppListItem* AppListModel::AddItemToFolder(scoped_ptr<AppListItem> item, | 89 AppListItem* AppListModel::AddItemToFolder(std::unique_ptr<AppListItem> item, |
| 90 const std::string& folder_id) { | 90 const std::string& folder_id) { |
| 91 if (folder_id.empty()) | 91 if (folder_id.empty()) |
| 92 return AddItem(std::move(item)); | 92 return AddItem(std::move(item)); |
| 93 DVLOG(2) << "AddItemToFolder: " << item->id() << ": " << folder_id; | 93 DVLOG(2) << "AddItemToFolder: " << item->id() << ": " << folder_id; |
| 94 CHECK_NE(folder_id, item->folder_id()); | 94 CHECK_NE(folder_id, item->folder_id()); |
| 95 DCHECK_NE(AppListFolderItem::kItemType, item->GetItemType()); | 95 DCHECK_NE(AppListFolderItem::kItemType, item->GetItemType()); |
| 96 AppListFolderItem* dest_folder = FindOrCreateFolderItem(folder_id); | 96 AppListFolderItem* dest_folder = FindOrCreateFolderItem(folder_id); |
| 97 if (!dest_folder) | 97 if (!dest_folder) |
| 98 return NULL; | 98 return NULL; |
| 99 DCHECK(!dest_folder->item_list()->FindItem(item->id())) | 99 DCHECK(!dest_folder->item_list()->FindItem(item->id())) |
| (...skipping 29 matching lines...) Expand all Loading... |
| 129 } | 129 } |
| 130 | 130 |
| 131 // If the target item is a folder, just add the source item to it. | 131 // If the target item is a folder, just add the source item to it. |
| 132 if (target_item->GetItemType() == AppListFolderItem::kItemType) { | 132 if (target_item->GetItemType() == AppListFolderItem::kItemType) { |
| 133 AppListFolderItem* target_folder = | 133 AppListFolderItem* target_folder = |
| 134 static_cast<AppListFolderItem*>(target_item); | 134 static_cast<AppListFolderItem*>(target_item); |
| 135 if (target_folder->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM) { | 135 if (target_folder->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM) { |
| 136 LOG(WARNING) << "MergeItems called with OEM folder as target"; | 136 LOG(WARNING) << "MergeItems called with OEM folder as target"; |
| 137 return ""; | 137 return ""; |
| 138 } | 138 } |
| 139 scoped_ptr<AppListItem> source_item_ptr = RemoveItem(source_item); | 139 std::unique_ptr<AppListItem> source_item_ptr = RemoveItem(source_item); |
| 140 source_item_ptr->set_position( | 140 source_item_ptr->set_position( |
| 141 target_folder->item_list()->CreatePositionBefore( | 141 target_folder->item_list()->CreatePositionBefore( |
| 142 syncer::StringOrdinal())); | 142 syncer::StringOrdinal())); |
| 143 AddItemToFolderItemAndNotify(target_folder, std::move(source_item_ptr)); | 143 AddItemToFolderItemAndNotify(target_folder, std::move(source_item_ptr)); |
| 144 return target_folder->id(); | 144 return target_folder->id(); |
| 145 } | 145 } |
| 146 | 146 |
| 147 // Otherwise remove the source item and target item from their current | 147 // Otherwise remove the source item and target item from their current |
| 148 // location, they will become owned by the new folder. | 148 // location, they will become owned by the new folder. |
| 149 scoped_ptr<AppListItem> source_item_ptr = RemoveItem(source_item); | 149 std::unique_ptr<AppListItem> source_item_ptr = RemoveItem(source_item); |
| 150 CHECK(source_item_ptr); | 150 CHECK(source_item_ptr); |
| 151 // Note: This would fail if |target_item_id == source_item_id|, except we | 151 // Note: This would fail if |target_item_id == source_item_id|, except we |
| 152 // checked that they are distinct at the top of this method. | 152 // checked that they are distinct at the top of this method. |
| 153 scoped_ptr<AppListItem> target_item_ptr = | 153 std::unique_ptr<AppListItem> target_item_ptr = |
| 154 top_level_item_list_->RemoveItem(target_item_id); | 154 top_level_item_list_->RemoveItem(target_item_id); |
| 155 CHECK(target_item_ptr); | 155 CHECK(target_item_ptr); |
| 156 | 156 |
| 157 // Create a new folder in the same location as the target item. | 157 // Create a new folder in the same location as the target item. |
| 158 std::string new_folder_id = AppListFolderItem::GenerateId(); | 158 std::string new_folder_id = AppListFolderItem::GenerateId(); |
| 159 DVLOG(2) << "Creating folder for merge: " << new_folder_id; | 159 DVLOG(2) << "Creating folder for merge: " << new_folder_id; |
| 160 scoped_ptr<AppListItem> new_folder_ptr(new AppListFolderItem( | 160 std::unique_ptr<AppListItem> new_folder_ptr(new AppListFolderItem( |
| 161 new_folder_id, AppListFolderItem::FOLDER_TYPE_NORMAL)); | 161 new_folder_id, AppListFolderItem::FOLDER_TYPE_NORMAL)); |
| 162 new_folder_ptr->set_position(target_item_ptr->position()); | 162 new_folder_ptr->set_position(target_item_ptr->position()); |
| 163 AppListFolderItem* new_folder = static_cast<AppListFolderItem*>( | 163 AppListFolderItem* new_folder = static_cast<AppListFolderItem*>( |
| 164 AddItemToItemListAndNotify(std::move(new_folder_ptr))); | 164 AddItemToItemListAndNotify(std::move(new_folder_ptr))); |
| 165 | 165 |
| 166 // Add the items to the new folder. | 166 // Add the items to the new folder. |
| 167 target_item_ptr->set_position( | 167 target_item_ptr->set_position( |
| 168 new_folder->item_list()->CreatePositionBefore( | 168 new_folder->item_list()->CreatePositionBefore( |
| 169 syncer::StringOrdinal())); | 169 syncer::StringOrdinal())); |
| 170 AddItemToFolderItemAndNotify(new_folder, std::move(target_item_ptr)); | 170 AddItemToFolderItemAndNotify(new_folder, std::move(target_item_ptr)); |
| 171 source_item_ptr->set_position( | 171 source_item_ptr->set_position( |
| 172 new_folder->item_list()->CreatePositionBefore( | 172 new_folder->item_list()->CreatePositionBefore( |
| 173 syncer::StringOrdinal())); | 173 syncer::StringOrdinal())); |
| 174 AddItemToFolderItemAndNotify(new_folder, std::move(source_item_ptr)); | 174 AddItemToFolderItemAndNotify(new_folder, std::move(source_item_ptr)); |
| 175 | 175 |
| 176 return new_folder->id(); | 176 return new_folder->id(); |
| 177 } | 177 } |
| 178 | 178 |
| 179 void AppListModel::MoveItemToFolder(AppListItem* item, | 179 void AppListModel::MoveItemToFolder(AppListItem* item, |
| 180 const std::string& folder_id) { | 180 const std::string& folder_id) { |
| 181 DVLOG(2) << "MoveItemToFolder: " << folder_id | 181 DVLOG(2) << "MoveItemToFolder: " << folder_id |
| 182 << " <- " << item->ToDebugString(); | 182 << " <- " << item->ToDebugString(); |
| 183 if (item->folder_id() == folder_id) | 183 if (item->folder_id() == folder_id) |
| 184 return; | 184 return; |
| 185 AppListFolderItem* dest_folder = FindOrCreateFolderItem(folder_id); | 185 AppListFolderItem* dest_folder = FindOrCreateFolderItem(folder_id); |
| 186 scoped_ptr<AppListItem> item_ptr = RemoveItem(item); | 186 std::unique_ptr<AppListItem> item_ptr = RemoveItem(item); |
| 187 if (dest_folder) { | 187 if (dest_folder) { |
| 188 CHECK(!item->IsInFolder()); | 188 CHECK(!item->IsInFolder()); |
| 189 AddItemToFolderItemAndNotify(dest_folder, std::move(item_ptr)); | 189 AddItemToFolderItemAndNotify(dest_folder, std::move(item_ptr)); |
| 190 } else { | 190 } else { |
| 191 AddItemToItemListAndNotifyUpdate(std::move(item_ptr)); | 191 AddItemToItemListAndNotifyUpdate(std::move(item_ptr)); |
| 192 } | 192 } |
| 193 } | 193 } |
| 194 | 194 |
| 195 bool AppListModel::MoveItemToFolderAt(AppListItem* item, | 195 bool AppListModel::MoveItemToFolderAt(AppListItem* item, |
| 196 const std::string& folder_id, | 196 const std::string& folder_id, |
| 197 syncer::StringOrdinal position) { | 197 syncer::StringOrdinal position) { |
| 198 DVLOG(2) << "MoveItemToFolderAt: " << folder_id | 198 DVLOG(2) << "MoveItemToFolderAt: " << folder_id |
| 199 << "[" << position.ToDebugString() << "]" | 199 << "[" << position.ToDebugString() << "]" |
| 200 << " <- " << item->ToDebugString(); | 200 << " <- " << item->ToDebugString(); |
| 201 if (item->folder_id() == folder_id) | 201 if (item->folder_id() == folder_id) |
| 202 return false; | 202 return false; |
| 203 AppListFolderItem* src_folder = FindOrCreateFolderItem(item->folder_id()); | 203 AppListFolderItem* src_folder = FindOrCreateFolderItem(item->folder_id()); |
| 204 if (src_folder && | 204 if (src_folder && |
| 205 src_folder->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM) { | 205 src_folder->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM) { |
| 206 LOG(WARNING) << "MoveItemToFolderAt called with OEM folder as source"; | 206 LOG(WARNING) << "MoveItemToFolderAt called with OEM folder as source"; |
| 207 return false; | 207 return false; |
| 208 } | 208 } |
| 209 AppListFolderItem* dest_folder = FindOrCreateFolderItem(folder_id); | 209 AppListFolderItem* dest_folder = FindOrCreateFolderItem(folder_id); |
| 210 scoped_ptr<AppListItem> item_ptr = RemoveItem(item); | 210 std::unique_ptr<AppListItem> item_ptr = RemoveItem(item); |
| 211 if (dest_folder) { | 211 if (dest_folder) { |
| 212 item_ptr->set_position( | 212 item_ptr->set_position( |
| 213 dest_folder->item_list()->CreatePositionBefore(position)); | 213 dest_folder->item_list()->CreatePositionBefore(position)); |
| 214 AddItemToFolderItemAndNotify(dest_folder, std::move(item_ptr)); | 214 AddItemToFolderItemAndNotify(dest_folder, std::move(item_ptr)); |
| 215 } else { | 215 } else { |
| 216 item_ptr->set_position( | 216 item_ptr->set_position( |
| 217 top_level_item_list_->CreatePositionBefore(position)); | 217 top_level_item_list_->CreatePositionBefore(position)); |
| 218 AddItemToItemListAndNotifyUpdate(std::move(item_ptr)); | 218 AddItemToItemListAndNotifyUpdate(std::move(item_ptr)); |
| 219 } | 219 } |
| 220 return true; | 220 return true; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 << "Invalid call to DeleteItem for item with children: " << id; | 265 << "Invalid call to DeleteItem for item with children: " << id; |
| 266 FOR_EACH_OBSERVER(AppListModelObserver, | 266 FOR_EACH_OBSERVER(AppListModelObserver, |
| 267 observers_, | 267 observers_, |
| 268 OnAppListItemWillBeDeleted(item)); | 268 OnAppListItemWillBeDeleted(item)); |
| 269 top_level_item_list_->DeleteItem(id); | 269 top_level_item_list_->DeleteItem(id); |
| 270 FOR_EACH_OBSERVER(AppListModelObserver, observers_, OnAppListItemDeleted()); | 270 FOR_EACH_OBSERVER(AppListModelObserver, observers_, OnAppListItemDeleted()); |
| 271 return; | 271 return; |
| 272 } | 272 } |
| 273 AppListFolderItem* folder = FindFolderItem(item->folder_id()); | 273 AppListFolderItem* folder = FindFolderItem(item->folder_id()); |
| 274 DCHECK(folder) << "Folder not found for item: " << item->ToDebugString(); | 274 DCHECK(folder) << "Folder not found for item: " << item->ToDebugString(); |
| 275 scoped_ptr<AppListItem> child_item = RemoveItemFromFolder(folder, item); | 275 std::unique_ptr<AppListItem> child_item = RemoveItemFromFolder(folder, item); |
| 276 DCHECK_EQ(item, child_item.get()); | 276 DCHECK_EQ(item, child_item.get()); |
| 277 FOR_EACH_OBSERVER(AppListModelObserver, | 277 FOR_EACH_OBSERVER(AppListModelObserver, |
| 278 observers_, | 278 observers_, |
| 279 OnAppListItemWillBeDeleted(item)); | 279 OnAppListItemWillBeDeleted(item)); |
| 280 child_item.reset(); // Deletes item. | 280 child_item.reset(); // Deletes item. |
| 281 FOR_EACH_OBSERVER(AppListModelObserver, observers_, OnAppListItemDeleted()); | 281 FOR_EACH_OBSERVER(AppListModelObserver, observers_, OnAppListItemDeleted()); |
| 282 } | 282 } |
| 283 | 283 |
| 284 void AppListModel::DeleteUninstalledItem(const std::string& id) { | 284 void AppListModel::DeleteUninstalledItem(const std::string& id) { |
| 285 AppListItem* item = FindItem(id); | 285 AppListItem* item = FindItem(id); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 309 // Remove child items from folders. | 309 // Remove child items from folders. |
| 310 std::vector<std::string> folder_ids; | 310 std::vector<std::string> folder_ids; |
| 311 for (size_t i = 0; i < top_level_item_list_->item_count(); ++i) { | 311 for (size_t i = 0; i < top_level_item_list_->item_count(); ++i) { |
| 312 AppListItem* item = top_level_item_list_->item_at(i); | 312 AppListItem* item = top_level_item_list_->item_at(i); |
| 313 if (item->GetItemType() != AppListFolderItem::kItemType) | 313 if (item->GetItemType() != AppListFolderItem::kItemType) |
| 314 continue; | 314 continue; |
| 315 AppListFolderItem* folder = static_cast<AppListFolderItem*>(item); | 315 AppListFolderItem* folder = static_cast<AppListFolderItem*>(item); |
| 316 if (folder->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM) | 316 if (folder->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM) |
| 317 continue; // Do not remove OEM folders. | 317 continue; // Do not remove OEM folders. |
| 318 while (folder->item_list()->item_count()) { | 318 while (folder->item_list()->item_count()) { |
| 319 scoped_ptr<AppListItem> child = folder->item_list()->RemoveItemAt(0); | 319 std::unique_ptr<AppListItem> child = folder->item_list()->RemoveItemAt(0); |
| 320 child->set_folder_id(""); | 320 child->set_folder_id(""); |
| 321 AddItemToItemListAndNotifyUpdate(std::move(child)); | 321 AddItemToItemListAndNotifyUpdate(std::move(child)); |
| 322 } | 322 } |
| 323 folder_ids.push_back(folder->id()); | 323 folder_ids.push_back(folder->id()); |
| 324 } | 324 } |
| 325 // Delete folders. | 325 // Delete folders. |
| 326 for (size_t i = 0; i < folder_ids.size(); ++i) | 326 for (size_t i = 0; i < folder_ids.size(); ++i) |
| 327 DeleteItem(folder_ids[i]); | 327 DeleteItem(folder_ids[i]); |
| 328 } | 328 } |
| 329 | 329 |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 AppListFolderItem* dest_folder = FindFolderItem(folder_id); | 389 AppListFolderItem* dest_folder = FindFolderItem(folder_id); |
| 390 if (dest_folder) | 390 if (dest_folder) |
| 391 return dest_folder; | 391 return dest_folder; |
| 392 | 392 |
| 393 if (!folders_enabled()) { | 393 if (!folders_enabled()) { |
| 394 LOG(ERROR) << "Attempt to create folder item when disabled: " << folder_id; | 394 LOG(ERROR) << "Attempt to create folder item when disabled: " << folder_id; |
| 395 return NULL; | 395 return NULL; |
| 396 } | 396 } |
| 397 | 397 |
| 398 DVLOG(2) << "Creating new folder: " << folder_id; | 398 DVLOG(2) << "Creating new folder: " << folder_id; |
| 399 scoped_ptr<AppListFolderItem> new_folder( | 399 std::unique_ptr<AppListFolderItem> new_folder( |
| 400 new AppListFolderItem(folder_id, AppListFolderItem::FOLDER_TYPE_NORMAL)); | 400 new AppListFolderItem(folder_id, AppListFolderItem::FOLDER_TYPE_NORMAL)); |
| 401 new_folder->set_position( | 401 new_folder->set_position( |
| 402 top_level_item_list_->CreatePositionBefore(syncer::StringOrdinal())); | 402 top_level_item_list_->CreatePositionBefore(syncer::StringOrdinal())); |
| 403 AppListItem* new_folder_item = | 403 AppListItem* new_folder_item = |
| 404 AddItemToItemListAndNotify(std::move(new_folder)); | 404 AddItemToItemListAndNotify(std::move(new_folder)); |
| 405 return static_cast<AppListFolderItem*>(new_folder_item); | 405 return static_cast<AppListFolderItem*>(new_folder_item); |
| 406 } | 406 } |
| 407 | 407 |
| 408 AppListItem* AppListModel::AddItemToItemListAndNotify( | 408 AppListItem* AppListModel::AddItemToItemListAndNotify( |
| 409 scoped_ptr<AppListItem> item_ptr) { | 409 std::unique_ptr<AppListItem> item_ptr) { |
| 410 DCHECK(!item_ptr->IsInFolder()); | 410 DCHECK(!item_ptr->IsInFolder()); |
| 411 AppListItem* item = top_level_item_list_->AddItem(std::move(item_ptr)); | 411 AppListItem* item = top_level_item_list_->AddItem(std::move(item_ptr)); |
| 412 FOR_EACH_OBSERVER(AppListModelObserver, | 412 FOR_EACH_OBSERVER(AppListModelObserver, |
| 413 observers_, | 413 observers_, |
| 414 OnAppListItemAdded(item)); | 414 OnAppListItemAdded(item)); |
| 415 return item; | 415 return item; |
| 416 } | 416 } |
| 417 | 417 |
| 418 AppListItem* AppListModel::AddItemToItemListAndNotifyUpdate( | 418 AppListItem* AppListModel::AddItemToItemListAndNotifyUpdate( |
| 419 scoped_ptr<AppListItem> item_ptr) { | 419 std::unique_ptr<AppListItem> item_ptr) { |
| 420 DCHECK(!item_ptr->IsInFolder()); | 420 DCHECK(!item_ptr->IsInFolder()); |
| 421 AppListItem* item = top_level_item_list_->AddItem(std::move(item_ptr)); | 421 AppListItem* item = top_level_item_list_->AddItem(std::move(item_ptr)); |
| 422 FOR_EACH_OBSERVER(AppListModelObserver, | 422 FOR_EACH_OBSERVER(AppListModelObserver, |
| 423 observers_, | 423 observers_, |
| 424 OnAppListItemUpdated(item)); | 424 OnAppListItemUpdated(item)); |
| 425 return item; | 425 return item; |
| 426 } | 426 } |
| 427 | 427 |
| 428 AppListItem* AppListModel::AddItemToFolderItemAndNotify( | 428 AppListItem* AppListModel::AddItemToFolderItemAndNotify( |
| 429 AppListFolderItem* folder, | 429 AppListFolderItem* folder, |
| 430 scoped_ptr<AppListItem> item_ptr) { | 430 std::unique_ptr<AppListItem> item_ptr) { |
| 431 CHECK_NE(folder->id(), item_ptr->folder_id()); | 431 CHECK_NE(folder->id(), item_ptr->folder_id()); |
| 432 AppListItem* item = folder->item_list()->AddItem(std::move(item_ptr)); | 432 AppListItem* item = folder->item_list()->AddItem(std::move(item_ptr)); |
| 433 item->set_folder_id(folder->id()); | 433 item->set_folder_id(folder->id()); |
| 434 FOR_EACH_OBSERVER(AppListModelObserver, | 434 FOR_EACH_OBSERVER(AppListModelObserver, |
| 435 observers_, | 435 observers_, |
| 436 OnAppListItemUpdated(item)); | 436 OnAppListItemUpdated(item)); |
| 437 return item; | 437 return item; |
| 438 } | 438 } |
| 439 | 439 |
| 440 scoped_ptr<AppListItem> AppListModel::RemoveItem(AppListItem* item) { | 440 std::unique_ptr<AppListItem> AppListModel::RemoveItem(AppListItem* item) { |
| 441 if (!item->IsInFolder()) | 441 if (!item->IsInFolder()) |
| 442 return top_level_item_list_->RemoveItem(item->id()); | 442 return top_level_item_list_->RemoveItem(item->id()); |
| 443 | 443 |
| 444 AppListFolderItem* folder = FindFolderItem(item->folder_id()); | 444 AppListFolderItem* folder = FindFolderItem(item->folder_id()); |
| 445 return RemoveItemFromFolder(folder, item); | 445 return RemoveItemFromFolder(folder, item); |
| 446 } | 446 } |
| 447 | 447 |
| 448 scoped_ptr<AppListItem> AppListModel::RemoveItemFromFolder( | 448 std::unique_ptr<AppListItem> AppListModel::RemoveItemFromFolder( |
| 449 AppListFolderItem* folder, | 449 AppListFolderItem* folder, |
| 450 AppListItem* item) { | 450 AppListItem* item) { |
| 451 std::string folder_id = folder->id(); | 451 std::string folder_id = folder->id(); |
| 452 CHECK_EQ(item->folder_id(), folder_id); | 452 CHECK_EQ(item->folder_id(), folder_id); |
| 453 scoped_ptr<AppListItem> result = folder->item_list()->RemoveItem(item->id()); | 453 std::unique_ptr<AppListItem> result = |
| 454 folder->item_list()->RemoveItem(item->id()); |
| 454 result->set_folder_id(""); | 455 result->set_folder_id(""); |
| 455 if (folder->item_list()->item_count() == 0) { | 456 if (folder->item_list()->item_count() == 0) { |
| 456 DVLOG(2) << "Deleting empty folder: " << folder->ToDebugString(); | 457 DVLOG(2) << "Deleting empty folder: " << folder->ToDebugString(); |
| 457 DeleteItem(folder_id); | 458 DeleteItem(folder_id); |
| 458 } | 459 } |
| 459 return result; | 460 return result; |
| 460 } | 461 } |
| 461 | 462 |
| 462 } // namespace app_list | 463 } // namespace app_list |
| OLD | NEW |