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

Unified Diff: ui/views/focus/focus_manager.cc

Issue 13227002: Revise NativeWidgetWin focus hack; force focus on restore. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Restore FocusManager::RestoreFocusedView return values. Created 7 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: ui/views/focus/focus_manager.cc
diff --git a/ui/views/focus/focus_manager.cc b/ui/views/focus/focus_manager.cc
index 24baff18ba28ad04ee6b6b64ba5b5298d7f46a0b..149934dfb33ef2ce7e8d3713884075ba2c763e58 100644
--- a/ui/views/focus/focus_manager.cc
+++ b/ui/views/focus/focus_manager.cc
@@ -249,7 +249,10 @@ View* FocusManager::GetNextFocusableView(View* original_starting_view,
void FocusManager::SetFocusedViewWithReason(
View* view, FocusChangeReason reason) {
- if (focused_view_ == view)
+ // Force a focus update on kReasonFocusRestore, even if the view is focused.
+ // This is needed to restore focus to a child HWND when its top-level window
+ // is restored from the minimized state. See http://crbug.com/125976
+ if (focused_view_ == view && reason != kReasonFocusRestore)
return;
base::AutoReset<bool> auto_changing_focus(&is_changing_focus_, true);
@@ -320,22 +323,8 @@ bool FocusManager::RestoreFocusedView() {
View* view = view_storage->RetrieveView(stored_focused_view_storage_id_);
if (view) {
- if (ContainsView(view)) {
- if (!view->IsFocusable() && view->IsAccessibilityFocusable()) {
- // RequestFocus would fail, but we want to restore focus to controls
- // that had focus in accessibility mode.
- SetFocusedViewWithReason(view, kReasonFocusRestore);
- } else {
- // This usually just sets the focus if this view is focusable, but
- // let the view override RequestFocus if necessary.
- view->RequestFocus();
-
- // If it succeeded, the reason would be incorrect; set it to
- // focus restore.
- if (focused_view_ == view)
- focus_change_reason_ = kReasonFocusRestore;
- }
- }
+ if (ContainsView(view))
+ SetFocusedViewWithReason(view, kReasonFocusRestore);
return true;
}
return false;

Powered by Google App Engine
This is Rietveld 408576698