OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #ifndef UI_VIEWS_FOCUS_FOCUS_MANAGER_H_ | 5 #ifndef UI_VIEWS_FOCUS_FOCUS_MANAGER_H_ |
6 #define UI_VIEWS_FOCUS_FOCUS_MANAGER_H_ | 6 #define UI_VIEWS_FOCUS_FOCUS_MANAGER_H_ |
7 | 7 |
8 #include <list> | 8 #include <list> |
9 #include <map> | 9 #include <map> |
10 #include <memory> | 10 #include <memory> |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
194 // attached to the window hierarchy anymore. | 194 // attached to the window hierarchy anymore. |
195 void ValidateFocusedView(); | 195 void ValidateFocusedView(); |
196 | 196 |
197 // Stores the focused view. Used when the widget loses activation. | 197 // Stores the focused view. Used when the widget loses activation. |
198 // |clear_native_focus| indicates whether this should invoke ClearFocus(). | 198 // |clear_native_focus| indicates whether this should invoke ClearFocus(). |
199 // Typically |true| should be passed in. | 199 // Typically |true| should be passed in. |
200 void StoreFocusedView(bool clear_native_focus); | 200 void StoreFocusedView(bool clear_native_focus); |
201 | 201 |
202 // Restore the view saved with a previous call to StoreFocusedView(). Used | 202 // Restore the view saved with a previous call to StoreFocusedView(). Used |
203 // when the widget becomes active. Returns true when the previous view was | 203 // when the widget becomes active. Returns true when the previous view was |
204 // successfully refocused - otherwise false. | 204 // successfully refocused. In case the stored view is no longer focusable, |
205 // it advances focus and returns false. | |
205 bool RestoreFocusedView(); | 206 bool RestoreFocusedView(); |
206 | 207 |
207 // Sets the |view| to be restored when calling RestoreFocusView. This is used | 208 // Sets the |view| to be restored when calling RestoreFocusView. This is used |
208 // to set where the focus should go on restoring a Window created without | 209 // to set where the focus should go on restoring a Window created without |
209 // focus being set. | 210 // focus being set. |
210 void SetStoredFocusView(View* view); | 211 void SetStoredFocusView(View* view); |
211 | 212 |
212 // Returns the View that either currently has focus, or if no view has focus | 213 // Returns the View that either currently has focus, or if no view has focus |
213 // the view that last had focus. | 214 // the view that last had focus. |
214 View* GetStoredFocusView(); | 215 View* GetStoredFocusView(); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
312 // |starting_view| is NULL |starting_widget| is consuled to determine which | 313 // |starting_view| is NULL |starting_widget| is consuled to determine which |
313 // Widget to start from. See | 314 // Widget to start from. See |
314 // WidgetDelegate::ShouldAdvanceFocusToTopLevelWidget() for details. If both | 315 // WidgetDelegate::ShouldAdvanceFocusToTopLevelWidget() for details. If both |
315 // |starting_view| and |starting_widget| are NULL, traversal starts at | 316 // |starting_view| and |starting_widget| are NULL, traversal starts at |
316 // |widget_|. | 317 // |widget_|. |
317 View* GetNextFocusableView(View* starting_view, | 318 View* GetNextFocusableView(View* starting_view, |
318 Widget* starting_widget, | 319 Widget* starting_widget, |
319 bool reverse, | 320 bool reverse, |
320 bool dont_loop); | 321 bool dont_loop); |
321 | 322 |
323 bool keyboard_accessible() const { return keyboard_accessible_; } | |
324 | |
325 // Updates |keyboard_accessible_| to the given value and advances focus if | |
326 // necessary. | |
327 void SetKeyboardAccessible(bool keyboard_accessible); | |
328 | |
322 private: | 329 private: |
323 // Returns the focusable view found in the FocusTraversable specified starting | 330 // Returns the focusable view found in the FocusTraversable specified starting |
324 // at the specified view. This traverses down along the FocusTraversable | 331 // at the specified view. This traverses down along the FocusTraversable |
325 // hierarchy. | 332 // hierarchy. |
326 // Returns NULL if no focusable view were found. | 333 // Returns NULL if no focusable view were found. |
327 View* FindFocusableView(FocusTraversable* focus_traversable, | 334 View* FindFocusableView(FocusTraversable* focus_traversable, |
328 View* starting_view, | 335 View* starting_view, |
329 bool reverse); | 336 bool reverse); |
330 | 337 |
331 // Process arrow key traversal. Returns true if the event has been consumed | 338 // Process arrow key traversal. Returns true if the event has been consumed |
332 // and should not be processed further. | 339 // and should not be processed further. |
333 bool ProcessArrowKeyTraversal(const ui::KeyEvent& event); | 340 bool ProcessArrowKeyTraversal(const ui::KeyEvent& event); |
334 | 341 |
342 // Returns true if the |view| is accessibility focusable (checking | |
343 // IsFocusable() if |keyboard_accessible_| is false on Mac). | |
tapted
2016/05/03 08:08:25
nit: (this reads a bit funny). Maybe
// Whether |
karandeepb
2016/05/04 01:56:38
Done.
| |
344 bool IsFocusable(View* view) const; | |
345 | |
335 // Whether arrow key traversal is enabled. | 346 // Whether arrow key traversal is enabled. |
336 static bool arrow_key_traversal_enabled_; | 347 static bool arrow_key_traversal_enabled_; |
337 | 348 |
338 // The top-level Widget this FocusManager is associated with. | 349 // The top-level Widget this FocusManager is associated with. |
339 Widget* widget_; | 350 Widget* widget_; |
340 | 351 |
341 // The object which handles an accelerator when |accelerator_manager_| doesn't | 352 // The object which handles an accelerator when |accelerator_manager_| doesn't |
342 // handle it. | 353 // handle it. |
343 std::unique_ptr<FocusManagerDelegate> delegate_; | 354 std::unique_ptr<FocusManagerDelegate> delegate_; |
344 | 355 |
(...skipping 12 matching lines...) Expand all Loading... | |
357 | 368 |
358 // The reason why the focus most recently changed. | 369 // The reason why the focus most recently changed. |
359 FocusChangeReason focus_change_reason_; | 370 FocusChangeReason focus_change_reason_; |
360 | 371 |
361 // The list of registered FocusChange listeners. | 372 // The list of registered FocusChange listeners. |
362 base::ObserverList<FocusChangeListener, true> focus_change_listeners_; | 373 base::ObserverList<FocusChangeListener, true> focus_change_listeners_; |
363 | 374 |
364 // See description above getter. | 375 // See description above getter. |
365 bool is_changing_focus_; | 376 bool is_changing_focus_; |
366 | 377 |
378 // This is true if full keyboard accessibility is needed. This causes | |
379 // IsAccessibilityFocusable() to be checked rather than IsFocusable(). This | |
380 // can be set depending on platform constraints. FocusSearch uses this in | |
381 // addition to its own accessibility mode, which handles accessibility at the | |
382 // FocusTraversable level. Currently only used on Mac, when Full Keyboard | |
383 // access is enabled. | |
384 // Default value is false. | |
385 bool keyboard_accessible_; | |
386 | |
367 DISALLOW_COPY_AND_ASSIGN(FocusManager); | 387 DISALLOW_COPY_AND_ASSIGN(FocusManager); |
368 }; | 388 }; |
369 | 389 |
370 } // namespace views | 390 } // namespace views |
371 | 391 |
372 #endif // UI_VIEWS_FOCUS_FOCUS_MANAGER_H_ | 392 #endif // UI_VIEWS_FOCUS_FOCUS_MANAGER_H_ |
OLD | NEW |