Chromium Code Reviews| Index: chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_cell.mm |
| diff --git a/chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_cell.mm b/chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_cell.mm |
| index 814d89631291ac5102badb244f9f68363a89db1c..a0d39fba53f3dd799a0f625a9d0e4980f20edcfa 100644 |
| --- a/chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_cell.mm |
| +++ b/chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_cell.mm |
| @@ -18,6 +18,7 @@ |
| #import "extensions/common/feature_switch.h" |
| #import "third_party/mozilla/NSPasteboard+Utils.h" |
| #import "ui/base/cocoa/appkit_utils.h" |
| +#import "ui/base/cocoa/tracking_area.h" |
| #import "ui/base/cocoa/nsview_additions.h" |
| #include "ui/base/cocoa/scoped_cg_context_smooth_fonts.h" |
| #include "ui/base/material_design/material_design_controller.h" |
| @@ -182,9 +183,17 @@ size_t CalculatePositionsInFrame( |
| return 17; |
| } |
| +- (void)clearTrackingArea { |
| + for (size_t i = 0; i < mouseTrackingDecorations_.size(); i++) |
|
Robert Sesek
2016/11/11 19:35:07
for (auto& decoration : mouseTrackingDecorations_)
spqchan
2016/11/12 00:36:20
Done. TIL :D
|
| + mouseTrackingDecorations_[i]->RemoveTrackingArea(); |
| + |
| + mouseTrackingDecorations_.clear(); |
| +} |
| + |
| - (void)clearDecorations { |
| leftDecorations_.clear(); |
| rightDecorations_.clear(); |
| + [self clearTrackingArea]; |
| } |
| - (void)addLeftDecoration:(LocationBarDecoration*)decoration { |
| @@ -458,6 +467,8 @@ size_t CalculatePositionsInFrame( |
| if (!decoration || !decoration->AcceptsMousePress()) |
| return NO; |
| + decoration->OnMouseDown(); |
| + |
| NSRect decorationRect = |
| [self frameForDecoration:decoration inFrame:cellFrame]; |
| @@ -517,6 +528,15 @@ size_t CalculatePositionsInFrame( |
| point.y - decorationRect.origin.y)); |
| } |
| +- (void)mouseUp:(NSEvent*)theEvent |
| + inRect:(NSRect)cellFrame |
| + ofView:(AutocompleteTextField*)controlView { |
| + LocationBarDecoration* decoration = |
| + [self decorationForEvent:theEvent inRect:cellFrame ofView:controlView]; |
| + if (decoration) |
| + decoration->OnMouseUp(); |
| +} |
| + |
| // Returns the file path for file |name| if saved at NSURL |base|. |
| static NSString* PathWithBaseURLAndName(NSURL* base, NSString* name) { |
| NSString* filteredName = |
| @@ -623,15 +643,22 @@ static NSString* UnusedLegalNameForNewDropFile(NSURL* saveLocation, |
| return NSDragOperationCopy; |
| } |
| -- (void)updateToolTipsInRect:(NSRect)cellFrame |
| - ofView:(AutocompleteTextField*)controlView { |
| +- (void)updateMouseTrackingAndToolTipsInRect:(NSRect)cellFrame |
| + ofView: |
| + (AutocompleteTextField*)controlView { |
| std::vector<LocationBarDecoration*> decorations; |
| std::vector<NSRect> decorationFrames; |
| NSRect textFrame; |
| CalculatePositionsInFrame(cellFrame, leftDecorations_, rightDecorations_, |
| &decorations, &decorationFrames, &textFrame); |
| + [self clearTrackingArea]; |
| for (size_t i = 0; i < decorations.size(); ++i) { |
| + CrTrackingArea* trackingArea = |
| + decorations[i]->SetupTrackingArea(decorationFrames[i], controlView); |
| + if (trackingArea) |
| + mouseTrackingDecorations_.push_back(decorations[i]); |
| + |
| NSString* tooltip = decorations[i]->GetToolTip(); |
| if ([tooltip length] > 0) |
| [controlView addToolTip:tooltip forRect:decorationFrames[i]]; |
| @@ -666,3 +693,11 @@ static NSString* UnusedLegalNameForNewDropFile(NSURL* saveLocation, |
| } |
| @end |
| + |
| +@implementation AutocompleteTextFieldCell (TestingAPI) |
| + |
| +- (std::vector<LocationBarDecoration*>)mouseTrackingDecorations { |
| + return mouseTrackingDecorations_; |
| +} |
| + |
| +@end |