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 #include "ui/aura/window.h" | 5 #include "ui/aura/window.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
518 Window* Window::GetToplevelWindow() { | 518 Window* Window::GetToplevelWindow() { |
519 Window* topmost_window_with_delegate = NULL; | 519 Window* topmost_window_with_delegate = NULL; |
520 for (aura::Window* window = this; window != NULL; window = window->parent()) { | 520 for (aura::Window* window = this; window != NULL; window = window->parent()) { |
521 if (window->delegate()) | 521 if (window->delegate()) |
522 topmost_window_with_delegate = window; | 522 topmost_window_with_delegate = window; |
523 } | 523 } |
524 return topmost_window_with_delegate; | 524 return topmost_window_with_delegate; |
525 } | 525 } |
526 | 526 |
527 void Window::Focus() { | 527 void Window::Focus() { |
528 DCHECK(GetFocusManager()); | 528 client::FocusClient* client = client::GetFocusClient(this); |
529 GetFocusManager()->SetFocusedWindow(this, NULL); | 529 DCHECK(client); |
530 client->FocusWindow(this, NULL); | |
530 } | 531 } |
531 | 532 |
532 void Window::Blur() { | 533 void Window::Blur() { |
533 DCHECK(GetFocusManager()); | 534 client::FocusClient* client = client::GetFocusClient(this); |
534 GetFocusManager()->SetFocusedWindow(NULL, NULL); | 535 DCHECK(client); |
536 client->FocusWindow(NULL, NULL); | |
535 } | 537 } |
536 | 538 |
537 bool Window::HasFocus() const { | 539 bool Window::HasFocus() const { |
538 const FocusManager* focus_manager = GetFocusManager(); | 540 client::FocusClient* client = client::GetFocusClient(this); |
539 return focus_manager ? focus_manager->IsFocusedWindow(this) : false; | 541 return client ? client->GetFocusedWindow() == this : false; |
sky
2012/11/28 00:20:13
nit: return client && client->Getfocusedwindow() =
| |
540 } | 542 } |
541 | 543 |
542 bool Window::CanFocus() const { | 544 bool Window::CanFocus() const { |
543 // NOTE: as part of focusing the window the ActivationClient may make the | 545 // NOTE: as part of focusing the window the ActivationClient may make the |
544 // window visible (by way of making a hidden ancestor visible). For this | 546 // window visible (by way of making a hidden ancestor visible). For this |
545 // reason we can't check visibility here and assume the client is doing it. | 547 // reason we can't check visibility here and assume the client is doing it. |
546 if (!parent_ || (delegate_ && !delegate_->CanFocus())) | 548 if (!parent_ || (delegate_ && !delegate_->CanFocus())) |
547 return false; | 549 return false; |
548 | 550 |
549 // The client may forbid certain windows from receiving focus at a given point | 551 // The client may forbid certain windows from receiving focus at a given point |
550 // in time. | 552 // in time. |
551 client::EventClient* client = client::GetEventClient(GetRootWindow()); | 553 client::EventClient* client = client::GetEventClient(GetRootWindow()); |
552 if (client && !client->CanProcessEventsWithinSubtree(this)) | 554 if (client && !client->CanProcessEventsWithinSubtree(this)) |
553 return false; | 555 return false; |
554 | 556 |
555 return parent_->CanFocus(); | 557 return parent_->CanFocus(); |
556 } | 558 } |
557 | 559 |
558 bool Window::CanReceiveEvents() const { | 560 bool Window::CanReceiveEvents() const { |
559 // The client may forbid certain windows from receiving events at a given | 561 // The client may forbid certain windows from receiving events at a given |
560 // point in time. | 562 // point in time. |
561 client::EventClient* client = client::GetEventClient(GetRootWindow()); | 563 client::EventClient* client = client::GetEventClient(GetRootWindow()); |
562 if (client && !client->CanProcessEventsWithinSubtree(this)) | 564 if (client && !client->CanProcessEventsWithinSubtree(this)) |
563 return false; | 565 return false; |
564 | 566 |
565 return parent_ && IsVisible() && parent_->CanReceiveEvents(); | 567 return parent_ && IsVisible() && parent_->CanReceiveEvents(); |
566 } | 568 } |
567 | 569 |
568 FocusManager* Window::GetFocusManager() { | |
569 return const_cast<FocusManager*>( | |
570 static_cast<const Window*>(this)->GetFocusManager()); | |
571 } | |
572 | |
573 const FocusManager* Window::GetFocusManager() const { | |
574 return parent_ ? parent_->GetFocusManager() : NULL; | |
575 } | |
576 | |
577 void Window::SetCapture() { | 570 void Window::SetCapture() { |
578 if (!IsVisible()) | 571 if (!IsVisible()) |
579 return; | 572 return; |
580 | 573 |
581 RootWindow* root_window = GetRootWindow(); | 574 RootWindow* root_window = GetRootWindow(); |
582 if (!root_window) | 575 if (!root_window) |
583 return; | 576 return; |
584 client::GetCaptureClient(root_window)->SetCapture(this); | 577 client::GetCaptureClient(root_window)->SetCapture(this); |
585 } | 578 } |
586 | 579 |
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
971 bool contains_mouse = false; | 964 bool contains_mouse = false; |
972 if (IsVisible()) { | 965 if (IsVisible()) { |
973 RootWindow* root_window = GetRootWindow(); | 966 RootWindow* root_window = GetRootWindow(); |
974 contains_mouse = root_window && | 967 contains_mouse = root_window && |
975 ContainsPointInRoot(root_window->GetLastMouseLocationInRoot()); | 968 ContainsPointInRoot(root_window->GetLastMouseLocationInRoot()); |
976 } | 969 } |
977 return contains_mouse; | 970 return contains_mouse; |
978 } | 971 } |
979 | 972 |
980 } // namespace aura | 973 } // namespace aura |
OLD | NEW |