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
3 // found in the LICENSE file.
5 #include "ui/views/window/client_view.h"
7 #include "base/logging.h"
8 #include "ui/accessibility/ax_view_state.h"
9 #include "ui/base/hit_test.h"
10 #include "ui/views/widget/widget.h"
11 #include "ui/views/widget/widget_delegate.h"
16 const char ClientView::kViewClassName
[] =
17 "ui/views/window/ClientView";
19 ///////////////////////////////////////////////////////////////////////////////
20 // ClientView, public:
22 ClientView::ClientView(Widget
* widget
, View
* contents_view
)
23 : contents_view_(contents_view
) {
26 int ClientView::NonClientHitTest(const gfx::Point
& point
) {
27 return bounds().Contains(point
) ? HTCLIENT
: HTNOWHERE
;
30 DialogClientView
* ClientView::AsDialogClientView() {
34 const DialogClientView
* ClientView::AsDialogClientView() const {
38 bool ClientView::CanClose() {
42 void ClientView::WidgetClosing() {
45 ///////////////////////////////////////////////////////////////////////////////
46 // ClientView, View overrides:
48 gfx::Size
ClientView::GetPreferredSize() const {
49 // |contents_view_| is allowed to be NULL up until the point where this view
50 // is attached to a Container.
51 return contents_view_
? contents_view_
->GetPreferredSize() : gfx::Size();
54 gfx::Size
ClientView::GetMaximumSize() const {
55 // |contents_view_| is allowed to be NULL up until the point where this view
56 // is attached to a Container.
57 return contents_view_
? contents_view_
->GetMaximumSize() : gfx::Size();
60 gfx::Size
ClientView::GetMinimumSize() const {
61 // |contents_view_| is allowed to be NULL up until the point where this view
62 // is attached to a Container.
63 return contents_view_
? contents_view_
->GetMinimumSize() : gfx::Size();
66 void ClientView::Layout() {
67 // |contents_view_| is allowed to be NULL up until the point where this view
68 // is attached to a Container.
70 contents_view_
->SetBounds(0, 0, width(), height());
73 const char* ClientView::GetClassName() const {
74 return kViewClassName
;
77 void ClientView::GetAccessibleState(ui::AXViewState
* state
) {
78 state
->role
= ui::AX_ROLE_CLIENT
;
81 void ClientView::OnBoundsChanged(const gfx::Rect
& previous_bounds
) {
82 // Overridden to do nothing. The NonClientView manually calls Layout on the
83 // ClientView when it is itself laid out, see comment in
84 // NonClientView::Layout.
87 void ClientView::ViewHierarchyChanged(
88 const ViewHierarchyChangedDetails
& details
) {
89 if (details
.is_add
&& details
.child
== this) {
91 DCHECK(contents_view_
); // |contents_view_| must be valid now!
92 // Insert |contents_view_| at index 0 so it is first in the focus chain.
93 // (the OK/Cancel buttons are inserted before contents_view_)
94 AddChildViewAt(contents_view_
, 0);