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

Side by Side Diff: views/controls/textfield/textfield.cc

Issue 5988010: focus reverse traversal was not working for TextfieldViews. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sync Created 9 years, 11 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
« no previous file with comments | « views/controls/textfield/textfield.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "views/controls/textfield/textfield.h" 5 #include "views/controls/textfield/textfield.h"
6 6
7 #if defined(OS_LINUX) 7 #if defined(OS_LINUX)
8 #include <gdk/gdkkeysyms.h> 8 #include <gdk/gdkkeysyms.h>
9 #endif 9 #endif
10 10
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 gfx::Size Textfield::GetPreferredSize() { 254 gfx::Size Textfield::GetPreferredSize() {
255 gfx::Insets insets; 255 gfx::Insets insets;
256 if (draw_border_ && native_wrapper_) 256 if (draw_border_ && native_wrapper_)
257 insets = native_wrapper_->CalculateInsets(); 257 insets = native_wrapper_->CalculateInsets();
258 return gfx::Size(font_.GetExpectedTextWidth(default_width_in_chars_) + 258 return gfx::Size(font_.GetExpectedTextWidth(default_width_in_chars_) +
259 insets.width(), 259 insets.width(),
260 num_lines_ * font_.GetHeight() + insets.height()); 260 num_lines_ * font_.GetHeight() + insets.height());
261 } 261 }
262 262
263 bool Textfield::IsFocusable() const { 263 bool Textfield::IsFocusable() const {
264 return IsEnabled() && !read_only_; 264 return View::IsFocusable() && !read_only_;
265 } 265 }
266 266
267 void Textfield::AboutToRequestFocusFromTabTraversal(bool reverse) { 267 void Textfield::AboutToRequestFocusFromTabTraversal(bool reverse) {
268 SelectAll(); 268 SelectAll();
269 } 269 }
270 270
271 bool Textfield::SkipDefaultKeyEventProcessing(const KeyEvent& e) { 271 bool Textfield::SkipDefaultKeyEventProcessing(const KeyEvent& e) {
272 // TODO(hamaji): Figure out which keyboard combinations we need to add here, 272 // TODO(hamaji): Figure out which keyboard combinations we need to add here,
273 // similar to LocationBarView::SkipDefaultKeyEventProcessing. 273 // similar to LocationBarView::SkipDefaultKeyEventProcessing.
274 app::KeyboardCode key = e.GetKeyCode(); 274 app::KeyboardCode key = e.GetKeyCode();
275 if (key == app::VKEY_BACK) 275 if (key == app::VKEY_BACK)
276 return true; // We'll handle BackSpace ourselves. 276 return true; // We'll handle BackSpace ourselves.
277 277
278 #if defined(OS_WIN) 278 #if defined(OS_WIN)
279 // We don't translate accelerators for ALT + NumPad digit on Windows, they are 279 // We don't translate accelerators for ALT + NumPad digit on Windows, they are
280 // used for entering special characters. We do translate alt-home. 280 // used for entering special characters. We do translate alt-home.
281 if (e.IsAltDown() && (key != app::VKEY_HOME) && 281 if (e.IsAltDown() && (key != app::VKEY_HOME) &&
282 app::win::IsNumPadDigit(key, e.IsExtendedKey())) 282 app::win::IsNumPadDigit(key, e.IsExtendedKey()))
283 return true; 283 return true;
284 #endif 284 #endif
285 return false; 285 return false;
286 } 286 }
287 287
288 void Textfield::PaintFocusBorder(gfx::Canvas* canvas) { 288 void Textfield::PaintFocusBorder(gfx::Canvas* canvas) {
289 if (NativeViewHost::kRenderNativeControlFocus) 289 if (NativeViewHost::kRenderNativeControlFocus)
290 View::PaintFocusBorder(canvas); 290 View::PaintFocusBorder(canvas);
291 } 291 }
292 292
293 bool Textfield::OnKeyPressed(const views::KeyEvent& e) {
294 return native_wrapper_ && native_wrapper_->HandleKeyPressed(e);
295 }
296
297 bool Textfield::OnKeyReleased(const views::KeyEvent& e) {
298 return native_wrapper_ && native_wrapper_->HandleKeyReleased(e);
299 }
300
301 void Textfield::WillGainFocus() {
302 if (native_wrapper_)
303 native_wrapper_->HandleWillGainFocus();
304 }
305
306 void Textfield::DidGainFocus() {
307 if (native_wrapper_)
308 native_wrapper_->HandleDidGainFocus();
309 }
310
311 void Textfield::WillLoseFocus() {
312 if (native_wrapper_)
313 native_wrapper_->HandleWillLoseFocus();
314 }
315
293 AccessibilityTypes::Role Textfield::GetAccessibleRole() { 316 AccessibilityTypes::Role Textfield::GetAccessibleRole() {
294 return AccessibilityTypes::ROLE_TEXT; 317 return AccessibilityTypes::ROLE_TEXT;
295 } 318 }
296 319
297 AccessibilityTypes::State Textfield::GetAccessibleState() { 320 AccessibilityTypes::State Textfield::GetAccessibleState() {
298 int state = 0; 321 int state = 0;
299 if (read_only()) 322 if (read_only())
300 state |= AccessibilityTypes::STATE_READONLY; 323 state |= AccessibilityTypes::STATE_READONLY;
301 if (IsPassword()) 324 if (IsPassword())
302 state |= AccessibilityTypes::STATE_PROTECTED; 325 state |= AccessibilityTypes::STATE_PROTECTED;
303 return state; 326 return state;
304 } 327 }
305 328
306 std::wstring Textfield::GetAccessibleValue() { 329 std::wstring Textfield::GetAccessibleValue() {
307 if (!text_.empty()) 330 if (!text_.empty())
308 return UTF16ToWide(text_); 331 return UTF16ToWide(text_);
309 return std::wstring(); 332 return std::wstring();
310 } 333 }
311 334
312 void Textfield::SetEnabled(bool enabled) { 335 void Textfield::SetEnabled(bool enabled) {
313 View::SetEnabled(enabled); 336 View::SetEnabled(enabled);
314 if (native_wrapper_) 337 if (native_wrapper_)
315 native_wrapper_->UpdateEnabled(); 338 native_wrapper_->UpdateEnabled();
316 } 339 }
317 340
318 void Textfield::Focus() { 341 void Textfield::Focus() {
319 if (native_wrapper_) { 342 // Forward the focus to the wrapper if it exists.
320 // Forward the focus to the wrapper if it exists. 343 if (!native_wrapper_ || !native_wrapper_->SetFocus()) {
321 native_wrapper_->SetFocus(); 344 // If there is no wrapper or the wrapper din't take focus, call
322 } else { 345 // View::Focus to clear the native focus so that we still get
323 // If there is no wrapper, cause the RootView to be focused so that we still 346 // keyboard messages.
324 // get keyboard messages.
325 View::Focus(); 347 View::Focus();
326 } 348 }
327 } 349 }
328 350
329 void Textfield::ViewHierarchyChanged(bool is_add, View* parent, View* child) { 351 void Textfield::ViewHierarchyChanged(bool is_add, View* parent, View* child) {
330 if (is_add && !native_wrapper_ && GetWidget() && !initialized_) { 352 if (is_add && !native_wrapper_ && GetWidget() && !initialized_) {
331 initialized_ = true; 353 initialized_ = true;
332 354
333 // The native wrapper's lifetime will be managed by the view hierarchy after 355 // The native wrapper's lifetime will be managed by the view hierarchy after
334 // we call AddChildView. 356 // we call AddChildView.
(...skipping 13 matching lines...) Expand all
348 static_cast<NativeTextfieldWin*>(native_wrapper_)->AttachHack(); 370 static_cast<NativeTextfieldWin*>(native_wrapper_)->AttachHack();
349 #endif 371 #endif
350 } 372 }
351 } 373 }
352 374
353 std::string Textfield::GetClassName() const { 375 std::string Textfield::GetClassName() const {
354 return kViewClassName; 376 return kViewClassName;
355 } 377 }
356 378
357 } // namespace views 379 } // namespace views
OLDNEW
« no previous file with comments | « views/controls/textfield/textfield.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698