Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(226)

Side by Side Diff: ios/chrome/browser/tabs/tab_model_order_controller.mm

Issue 2703333006: Move the notion of current Tab from TabModel to WebStateList. (Closed)
Patch Set: Rebase. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "ios/chrome/browser/tabs/tab_model_order_controller.h"
6
7 #include "base/logging.h"
8
9 #if !defined(__has_feature) || !__has_feature(objc_arc)
10 #error "This file requires ARC support."
11 #endif
12
13 @implementation TabModelOrderController {
14 __weak TabModel* model_;
15 }
16
17 - (instancetype)initWithTabModel:(TabModel*)model {
18 DCHECK(model);
19 if ((self = [super init]))
20 model_ = model;
21 return self;
22 }
23
24 - (Tab*)determineNewSelectedTabFromRemovedTab:(Tab*)removedTab {
25 // While the desktop version of this code deals in indices, this deals in
26 // actual tabs. As a result, the tab only needs to change iff the selection
27 // is the tab that's removed.
28 if (removedTab != model_.currentTab)
29 return model_.currentTab;
30
31 const NSUInteger numberOfTabs = model_.count;
32 if (numberOfTabs < 2)
33 return nil;
34
35 DCHECK(numberOfTabs >= 2);
36 DCHECK(removedTab == model_.currentTab);
37
38 // First see if the tab being removed has any "child" tabs. If it does, we
39 // want to select the first in that child group, not the next tab in the same
40 // group of the removed tab.
41 Tab* firstChild = [model_ nextTabWithOpener:removedTab afterTab:nil];
42 if (firstChild)
43 return firstChild;
44 Tab* parentTab = [model_ openerOfTab:removedTab];
45 if (parentTab) {
46 // If the tab was in a group, shift selection to the next tab in the group.
47 Tab* nextTab = [model_ nextTabWithOpener:parentTab afterTab:removedTab];
48 if (nextTab)
49 return nextTab;
50
51 // If we can't find a subsequent group member, just fall back to the
52 // parentTab itself. Note that we use "group" here since opener is
53 // reset by select operations.
54 return parentTab;
55 }
56
57 // No opener set, fall through to the default handler...
58 NSUInteger selectedIndex = [model_ indexOfTab:removedTab];
59 DCHECK(selectedIndex <= numberOfTabs - 1);
60 // Is the closing tab the last one? If so, return the penultimate tab.
61 if (selectedIndex == numberOfTabs - 1)
62 return [model_ tabAtIndex:selectedIndex - 1];
63 // Otherwise return the next tab after the current tab.
64 return [model_ tabAtIndex:selectedIndex + 1];
65 }
66
67 @end
OLDNEW
« no previous file with comments | « ios/chrome/browser/tabs/tab_model_order_controller.h ('k') | ios/chrome/browser/tabs/tab_model_selected_tab_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698