BookmarkManager: Fix 'new folder text field size changes on clicking it' issue.
[chromium-blink-merge.git] / chrome / browser / ui / cocoa / styled_text_field.mm
blob1acac18e4cecd6a76c62a5973107d44d8d15df5b
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
3 // found in the LICENSE file.
5 #import "chrome/browser/ui/cocoa/styled_text_field.h"
7 #include "base/logging.h"
8 #import "chrome/browser/ui/cocoa/styled_text_field_cell.h"
10 @implementation StyledTextField
12 - (StyledTextFieldCell*)styledTextFieldCell {
13   DCHECK([[self cell] isKindOfClass:[StyledTextFieldCell class]]);
14   return static_cast<StyledTextFieldCell*>([self cell]);
17 // Cocoa text fields are edited by placing an NSTextView as subview,
18 // positioned by the cell's -editWithFrame:inView:... method.  Using
19 // the standard -makeFirstResponder: machinery to reposition the field
20 // editor results in resetting the field editor's editing state, which
21 // OmniboxViewMac monitors.  This causes problems because
22 // editing can require the field editor to be repositioned, which
23 // could disrupt editing.  This code repositions the subview directly,
24 // which causes no editing-state changes.
25 - (void)resetFieldEditorFrameIfNeeded {
26   // No action if not editing.
27   NSText* editor = [self currentEditor];
28   if (!editor) {
29     return;
30   }
32   // When editing, we should have exactly one subview, which is a
33   // clipview containing the editor (for purposes of scrolling).
34   NSArray* subviews = [self subviews];
35   DCHECK_EQ([subviews count], 1U);
36   DCHECK([editor isDescendantOf:self]);
37   if ([subviews count] == 0) {
38     return;
39   }
41   // If the frame is already right, don't make any visible changes.
42   StyledTextFieldCell* cell = [self styledTextFieldCell];
43   const NSRect frame([cell drawingRectForBounds:[self bounds]]);
44   NSView* subview = [subviews objectAtIndex:0];
45   if (NSEqualRects(frame, [subview frame])) {
46     return;
47   }
49   [subview setFrame:frame];
51   // Make sure the selection remains visible.
52   [editor scrollRangeToVisible:[editor selectedRange]];
55 - (CGFloat)availableDecorationWidth {
56   NSAttributedString* as = [self attributedStringValue];
57   const NSSize size([as size]);
58   const NSRect bounds([self bounds]);
59   return NSWidth(bounds) - size.width;
62 - (NSFocusRingType)focusRingType {
63   // This is taken care of by the custom drawing code in the cell.
64   return NSFocusRingTypeNone;
67 // Due to theming, parts of the field are transparent.
68 - (BOOL)isOpaque {
69   return NO;
72 @end