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

Side by Side Diff: chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm

Issue 7067007: Remove prefix eliding (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h" 5 #import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h"
6 6
7 #import <QuartzCore/QuartzCore.h> 7 #import <QuartzCore/QuartzCore.h>
8 8
9 #include <limits> 9 #include <limits>
10 #include <string> 10 #include <string>
(...skipping 29 matching lines...) Expand all
40 #import "chrome/browser/ui/cocoa/tabs/tab_strip_model_observer_bridge.h" 40 #import "chrome/browser/ui/cocoa/tabs/tab_strip_model_observer_bridge.h"
41 #import "chrome/browser/ui/cocoa/tabs/tab_strip_view.h" 41 #import "chrome/browser/ui/cocoa/tabs/tab_strip_view.h"
42 #import "chrome/browser/ui/cocoa/tabs/tab_view.h" 42 #import "chrome/browser/ui/cocoa/tabs/tab_view.h"
43 #import "chrome/browser/ui/cocoa/tabs/throbber_view.h" 43 #import "chrome/browser/ui/cocoa/tabs/throbber_view.h"
44 #import "chrome/browser/ui/cocoa/tracking_area.h" 44 #import "chrome/browser/ui/cocoa/tracking_area.h"
45 #include "chrome/browser/ui/find_bar/find_bar.h" 45 #include "chrome/browser/ui/find_bar/find_bar.h"
46 #include "chrome/browser/ui/find_bar/find_bar_controller.h" 46 #include "chrome/browser/ui/find_bar/find_bar_controller.h"
47 #include "chrome/browser/ui/find_bar/find_tab_helper.h" 47 #include "chrome/browser/ui/find_bar/find_tab_helper.h"
48 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 48 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
49 #include "chrome/browser/ui/tabs/tab_menu_model.h" 49 #include "chrome/browser/ui/tabs/tab_menu_model.h"
50 #include "chrome/browser/ui/title_prefix_matcher.h"
51 #include "chrome/common/chrome_switches.h" 50 #include "chrome/common/chrome_switches.h"
52 #include "chrome/common/pref_names.h" 51 #include "chrome/common/pref_names.h"
53 #include "content/browser/tab_contents/navigation_controller.h" 52 #include "content/browser/tab_contents/navigation_controller.h"
54 #include "content/browser/tab_contents/navigation_entry.h" 53 #include "content/browser/tab_contents/navigation_entry.h"
55 #include "content/browser/tab_contents/tab_contents.h" 54 #include "content/browser/tab_contents/tab_contents.h"
56 #include "content/browser/tab_contents/tab_contents_view.h" 55 #include "content/browser/tab_contents/tab_contents_view.h"
57 #include "content/browser/user_metrics.h" 56 #include "content/browser/user_metrics.h"
58 #include "content/common/notification_service.h" 57 #include "content/common/notification_service.h"
59 #include "grit/app_resources.h" 58 #include "grit/app_resources.h"
60 #include "grit/generated_resources.h" 59 #include "grit/generated_resources.h"
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 - (NSInteger)indexFromModelIndex:(NSInteger)index; 164 - (NSInteger)indexFromModelIndex:(NSInteger)index;
166 - (NSInteger)numberOfOpenTabs; 165 - (NSInteger)numberOfOpenTabs;
167 - (NSInteger)numberOfOpenMiniTabs; 166 - (NSInteger)numberOfOpenMiniTabs;
168 - (NSInteger)numberOfOpenNonMiniTabs; 167 - (NSInteger)numberOfOpenNonMiniTabs;
169 - (void)mouseMoved:(NSEvent*)event; 168 - (void)mouseMoved:(NSEvent*)event;
170 - (void)setTabTrackingAreasEnabled:(BOOL)enabled; 169 - (void)setTabTrackingAreasEnabled:(BOOL)enabled;
171 - (void)droppingURLsAt:(NSPoint)point 170 - (void)droppingURLsAt:(NSPoint)point
172 givesIndex:(NSInteger*)index 171 givesIndex:(NSInteger*)index
173 disposition:(WindowOpenDisposition*)disposition; 172 disposition:(WindowOpenDisposition*)disposition;
174 - (void)setNewTabButtonHoverState:(BOOL)showHover; 173 - (void)setNewTabButtonHoverState:(BOOL)showHover;
175 - (void)updateCommonTitlePrefix;
176 - (BOOL)shouldShowProfileMenuButton; 174 - (BOOL)shouldShowProfileMenuButton;
177 - (void)updateProfileMenuButton; 175 - (void)updateProfileMenuButton;
178 @end 176 @end
179 177
180 // A simple view class that prevents the Window Server from dragging the area 178 // A simple view class that prevents the Window Server from dragging the area
181 // behind tabs. Sometimes core animation confuses it. Unfortunately, it can also 179 // behind tabs. Sometimes core animation confuses it. Unfortunately, it can also
182 // falsely pick up clicks during rapid tab closure, so we have to account for 180 // falsely pick up clicks during rapid tab closure, so we have to account for
183 // that. 181 // that.
184 @interface TabStripControllerDragBlockingView : NSView { 182 @interface TabStripControllerDragBlockingView : NSView {
185 TabStripController* controller_; // weak; owns us 183 TabStripController* controller_; // weak; owns us
(...skipping 1001 matching lines...) Expand 10 before | Expand all | Expand 10 after
1187 [self layoutTabs]; 1185 [self layoutTabs];
1188 } 1186 }
1189 1187
1190 // During normal loading, we won't yet have a favicon and we'll get 1188 // During normal loading, we won't yet have a favicon and we'll get
1191 // subsequent state change notifications to show the throbber, but when we're 1189 // subsequent state change notifications to show the throbber, but when we're
1192 // dragging a tab out into a new window, we have to put the tab's favicon 1190 // dragging a tab out into a new window, we have to put the tab's favicon
1193 // into the right state up front as we won't be told to do it from anywhere 1191 // into the right state up front as we won't be told to do it from anywhere
1194 // else. 1192 // else.
1195 [self updateFaviconForContents:contents atIndex:modelIndex]; 1193 [self updateFaviconForContents:contents atIndex:modelIndex];
1196 1194
1197 [self updateCommonTitlePrefix];
1198
1199 // Send a broadcast that the number of tabs have changed. 1195 // Send a broadcast that the number of tabs have changed.
1200 [[NSNotificationCenter defaultCenter] 1196 [[NSNotificationCenter defaultCenter]
1201 postNotificationName:kTabStripNumberOfTabsChanged 1197 postNotificationName:kTabStripNumberOfTabsChanged
1202 object:self]; 1198 object:self];
1203 } 1199 }
1204 1200
1205 // Called when a notification is received from the model to select a particular 1201 // Called when a notification is received from the model to select a particular
1206 // tab. Swaps in the toolbar and content area associated with |newContents|. 1202 // tab. Swaps in the toolbar and content area associated with |newContents|.
1207 - (void)activateTabWithContents:(TabContentsWrapper*)newContents 1203 - (void)activateTabWithContents:(TabContentsWrapper*)newContents
1208 previousContents:(TabContentsWrapper*)oldContents 1204 previousContents:(TabContentsWrapper*)oldContents
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1320 [controller setTarget:nil]; 1316 [controller setTarget:nil];
1321 1317
1322 if ([hoveredTab_ isEqual:tab]) 1318 if ([hoveredTab_ isEqual:tab])
1323 hoveredTab_ = nil; 1319 hoveredTab_ = nil;
1324 1320
1325 NSValue* identifier = [NSValue valueWithPointer:tab]; 1321 NSValue* identifier = [NSValue valueWithPointer:tab];
1326 [targetFrames_ removeObjectForKey:identifier]; 1322 [targetFrames_ removeObjectForKey:identifier];
1327 1323
1328 // Once we're totally done with the tab, delete its controller 1324 // Once we're totally done with the tab, delete its controller
1329 [tabArray_ removeObjectAtIndex:index]; 1325 [tabArray_ removeObjectAtIndex:index];
1330
1331 [self updateCommonTitlePrefix];
1332 } 1326 }
1333 1327
1334 // Called by the CAAnimation delegate when the tab completes the closing 1328 // Called by the CAAnimation delegate when the tab completes the closing
1335 // animation. 1329 // animation.
1336 - (void)animationDidStopForController:(TabController*)controller 1330 - (void)animationDidStopForController:(TabController*)controller
1337 finished:(BOOL)finished { 1331 finished:(BOOL)finished {
1338 [closingControllers_ removeObject:controller]; 1332 [closingControllers_ removeObject:controller];
1339 [self removeTab:controller]; 1333 [self removeTab:controller];
1340 } 1334 }
1341 1335
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
1523 TabController* tabController = [tabArray_ objectAtIndex:index]; 1517 TabController* tabController = [tabArray_ objectAtIndex:index];
1524 1518
1525 if (change != TabStripModelObserver::LOADING_ONLY) 1519 if (change != TabStripModelObserver::LOADING_ONLY)
1526 [self setTabTitle:tabController withContents:contents->tab_contents()]; 1520 [self setTabTitle:tabController withContents:contents->tab_contents()];
1527 1521
1528 [self updateFaviconForContents:contents atIndex:modelIndex]; 1522 [self updateFaviconForContents:contents atIndex:modelIndex];
1529 1523
1530 TabContentsController* updatedController = 1524 TabContentsController* updatedController =
1531 [tabContentsArray_ objectAtIndex:index]; 1525 [tabContentsArray_ objectAtIndex:index];
1532 [updatedController tabDidChange:contents->tab_contents()]; 1526 [updatedController tabDidChange:contents->tab_contents()];
1533
1534 [self updateCommonTitlePrefix];
1535 } 1527 }
1536 1528
1537 // Called when a tab is moved (usually by drag&drop). Keep our parallel arrays 1529 // Called when a tab is moved (usually by drag&drop). Keep our parallel arrays
1538 // in sync with the tab strip model. It can also be pinned/unpinned 1530 // in sync with the tab strip model. It can also be pinned/unpinned
1539 // simultaneously, so we need to take care of that. 1531 // simultaneously, so we need to take care of that.
1540 - (void)tabMovedWithContents:(TabContentsWrapper*)contents 1532 - (void)tabMovedWithContents:(TabContentsWrapper*)contents
1541 fromIndex:(NSInteger)modelFrom 1533 fromIndex:(NSInteger)modelFrom
1542 toIndex:(NSInteger)modelTo { 1534 toIndex:(NSInteger)modelTo {
1543 // Take closing tabs into account. 1535 // Take closing tabs into account.
1544 NSInteger from = [self indexFromModelIndex:modelFrom]; 1536 NSInteger from = [self indexFromModelIndex:modelFrom];
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1580 1572
1581 [tabController setMini:tabStripModel_->IsMiniTab(modelIndex)]; 1573 [tabController setMini:tabStripModel_->IsMiniTab(modelIndex)];
1582 [tabController setPinned:tabStripModel_->IsTabPinned(modelIndex)]; 1574 [tabController setPinned:tabStripModel_->IsTabPinned(modelIndex)];
1583 [tabController setApp:tabStripModel_->IsAppTab(modelIndex)]; 1575 [tabController setApp:tabStripModel_->IsAppTab(modelIndex)];
1584 [tabController setUrl:contents->tab_contents()->GetURL()]; 1576 [tabController setUrl:contents->tab_contents()->GetURL()];
1585 [self updateFaviconForContents:contents atIndex:modelIndex]; 1577 [self updateFaviconForContents:contents atIndex:modelIndex];
1586 // If the tab is being restored and it's pinned, the mini state is set after 1578 // If the tab is being restored and it's pinned, the mini state is set after
1587 // the tab has already been rendered, so re-layout the tabstrip. In all other 1579 // the tab has already been rendered, so re-layout the tabstrip. In all other
1588 // cases, the state is set before the tab is rendered so this isn't needed. 1580 // cases, the state is set before the tab is rendered so this isn't needed.
1589 [self layoutTabs]; 1581 [self layoutTabs];
1590
1591 [self updateCommonTitlePrefix];
1592 } 1582 }
1593 1583
1594 - (void)setFrameOfActiveTab:(NSRect)frame { 1584 - (void)setFrameOfActiveTab:(NSRect)frame {
1595 NSView* view = [self activeTabView]; 1585 NSView* view = [self activeTabView];
1596 NSValue* identifier = [NSValue valueWithPointer:view]; 1586 NSValue* identifier = [NSValue valueWithPointer:view];
1597 [targetFrames_ setObject:[NSValue valueWithRect:frame] 1587 [targetFrames_ setObject:[NSValue valueWithRect:frame]
1598 forKey:identifier]; 1588 forKey:identifier];
1599 [view setFrame:frame]; 1589 [view setFrame:frame];
1600 } 1590 }
1601 1591
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after
2115 NSInteger modelIndex = [self modelIndexForContentsView:tabContentsView]; 2105 NSInteger modelIndex = [self modelIndexForContentsView:tabContentsView];
2116 NSInteger index = [self indexFromModelIndex:modelIndex]; 2106 NSInteger index = [self indexFromModelIndex:modelIndex];
2117 BrowserWindowController* controller = 2107 BrowserWindowController* controller =
2118 (BrowserWindowController*)[[switchView_ window] windowController]; 2108 (BrowserWindowController*)[[switchView_ window] windowController];
2119 DCHECK(index >= 0); 2109 DCHECK(index >= 0);
2120 if (index >= 0) { 2110 if (index >= 0) {
2121 [controller setTab:[self viewAtIndex:index] isDraggable:YES]; 2111 [controller setTab:[self viewAtIndex:index] isDraggable:YES];
2122 } 2112 }
2123 } 2113 }
2124 2114
2125 // Update the lengths of common title prefixes for all tabs. This needs
2126 // to be done every time tabs are added/removed or when titles change.
2127 - (void)updateCommonTitlePrefix {
2128 DCHECK_EQ([tabArray_ count], [tabArray_ count]);
2129
2130 std::vector<TitlePrefixMatcher::TitleInfo> tabTitleInfos;
2131 ScopedVector<string16> titles;
2132 size_t tabIndex;
2133 size_t tabCount = [tabArray_ count];
2134
2135 // Add all tab titles to |tabTitleInfos|.
2136 for (tabIndex = 0; tabIndex < tabCount; ++tabIndex) {
2137 TabController* tabController = [tabArray_ objectAtIndex:tabIndex];
2138 string16 title = base::SysNSStringToUTF16([tabController title]);
2139 if (!title.empty() && ![tabController mini]) {
2140 titles.push_back(new string16(title));
2141 tabTitleInfos.push_back(TitlePrefixMatcher::TitleInfo(
2142 titles[titles.size() - 1], [tabController url], tabIndex));
2143 }
2144 }
2145
2146 // Calculate the prefix length.
2147 TitlePrefixMatcher::CalculatePrefixLengths(&tabTitleInfos);
2148
2149 // Update the prefix length for each tab.
2150 for (size_t infoIndex = 0; infoIndex < tabTitleInfos.size(); ++infoIndex) {
2151 tabIndex = tabTitleInfos[infoIndex].caller_value;
2152 DCHECK(tabIndex < [tabArray_ count]);
2153 TabController* tabController = [tabArray_ objectAtIndex:tabIndex];
2154 [tabController setTitleCommonPrefixLength:
2155 tabTitleInfos[infoIndex].prefix_length];
2156 }
2157 }
2158
2159 - (BOOL)shouldShowProfileMenuButton { 2115 - (BOOL)shouldShowProfileMenuButton {
2160 if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kMultiProfiles)) 2116 if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kMultiProfiles))
2161 return NO; 2117 return NO;
2162 if (browser_->profile()->IsOffTheRecord()) 2118 if (browser_->profile()->IsOffTheRecord())
2163 return NO; 2119 return NO;
2164 return (!browser_->profile()->GetPrefs()->GetString( 2120 return (!browser_->profile()->GetPrefs()->GetString(
2165 prefs::kGoogleServicesUsername).empty()); 2121 prefs::kGoogleServicesUsername).empty());
2166 } 2122 }
2167 2123
2168 - (void)updateProfileMenuButton { 2124 - (void)updateProfileMenuButton {
2169 if (![self shouldShowProfileMenuButton]) { 2125 if (![self shouldShowProfileMenuButton]) {
2170 [profileMenuButton_ setHidden:YES]; 2126 [profileMenuButton_ setHidden:YES];
2171 return; 2127 return;
2172 } 2128 }
2173 2129
2174 std::string profileName = browser_->profile()->GetPrefs()->GetString( 2130 std::string profileName = browser_->profile()->GetPrefs()->GetString(
2175 prefs::kGoogleServicesUsername); 2131 prefs::kGoogleServicesUsername);
2176 [profileMenuButton_ setProfileDisplayName: 2132 [profileMenuButton_ setProfileDisplayName:
2177 [NSString stringWithUTF8String:profileName.c_str()]]; 2133 [NSString stringWithUTF8String:profileName.c_str()]];
2178 [profileMenuButton_ setHidden:NO]; 2134 [profileMenuButton_ setHidden:NO];
2179 } 2135 }
2180 2136
2181 @end 2137 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698