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

Side by Side Diff: views/widget/widget.cc

Issue 7129022: Move last of event handlers down to NativeWidgetWin/Gtk. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 6 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/widget/widget.h ('k') | views/window/native_window.h » ('j') | 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/widget/widget.h" 5 #include "views/widget/widget.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "ui/base/l10n/l10n_font_util.h"
11 #include "ui/base/resource/resource_bundle.h"
10 #include "ui/gfx/compositor/compositor.h" 12 #include "ui/gfx/compositor/compositor.h"
11 #include "views/focus/view_storage.h" 13 #include "views/focus/view_storage.h"
12 #include "views/ime/input_method.h" 14 #include "views/ime/input_method.h"
13 #include "views/views_delegate.h" 15 #include "views/views_delegate.h"
14 #include "views/widget/default_theme_provider.h" 16 #include "views/widget/default_theme_provider.h"
15 #include "views/widget/root_view.h" 17 #include "views/widget/root_view.h"
16 #include "views/widget/native_widget.h" 18 #include "views/widget/native_widget.h"
17 #include "views/widget/widget_delegate.h" 19 #include "views/widget/widget_delegate.h"
18 #include "views/window/custom_frame_view.h" 20 #include "views/window/custom_frame_view.h"
19 21
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 : is_mouse_button_pressed_(false), 93 : is_mouse_button_pressed_(false),
92 last_mouse_event_was_move_(false), 94 last_mouse_event_was_move_(false),
93 native_widget_(NULL), 95 native_widget_(NULL),
94 widget_delegate_(NULL), 96 widget_delegate_(NULL),
95 non_client_view_(NULL), 97 non_client_view_(NULL),
96 dragged_view_(NULL), 98 dragged_view_(NULL),
97 ownership_(InitParams::NATIVE_WIDGET_OWNS_WIDGET), 99 ownership_(InitParams::NATIVE_WIDGET_OWNS_WIDGET),
98 is_secondary_widget_(true), 100 is_secondary_widget_(true),
99 frame_type_(FRAME_TYPE_DEFAULT), 101 frame_type_(FRAME_TYPE_DEFAULT),
100 disable_inactive_rendering_(false), 102 disable_inactive_rendering_(false),
101 widget_closed_(false) { 103 widget_closed_(false),
104 saved_maximized_state_(false),
105 minimum_size_(100, 100) {
102 } 106 }
103 107
104 Widget::~Widget() { 108 Widget::~Widget() {
105 DestroyRootView(); 109 DestroyRootView();
106 110
107 if (ownership_ == InitParams::WIDGET_OWNS_NATIVE_WIDGET) 111 if (ownership_ == InitParams::WIDGET_OWNS_NATIVE_WIDGET)
108 delete native_widget_; 112 delete native_widget_;
109 } 113 }
110 114
111 // static 115 // static
112 void Widget::SetPureViews(bool pure) { 116 void Widget::SetPureViews(bool pure) {
113 use_pure_views = pure; 117 use_pure_views = pure;
114 } 118 }
115 119
116 // static 120 // static
117 bool Widget::IsPureViews() { 121 bool Widget::IsPureViews() {
118 return use_pure_views; 122 return use_pure_views;
119 } 123 }
120 124
121 // static 125 // static
122 Widget* Widget::GetWidgetForNativeView(gfx::NativeView native_view) { 126 Widget* Widget::GetWidgetForNativeView(gfx::NativeView native_view) {
123 NativeWidget* native_widget = 127 NativeWidget* native_widget =
124 NativeWidget::GetNativeWidgetForNativeView(native_view); 128 NativeWidget::GetNativeWidgetForNativeView(native_view);
125 return native_widget ? native_widget->GetWidget() : NULL; 129 return native_widget ? native_widget->GetWidget() : NULL;
126 } 130 }
127 131
132 // static
133 int Widget::GetLocalizedContentsWidth(int col_resource_id) {
134 return ui::GetLocalizedContentsWidthForFont(col_resource_id,
135 ResourceBundle::GetSharedInstance().GetFont(ResourceBundle::BaseFont));
136 }
137
138 // static
139 int Widget::GetLocalizedContentsHeight(int row_resource_id) {
140 return ui::GetLocalizedContentsHeightForFont(row_resource_id,
141 ResourceBundle::GetSharedInstance().GetFont(ResourceBundle::BaseFont));
142 }
143
144 // static
145 gfx::Size Widget::GetLocalizedContentsSize(int col_resource_id,
146 int row_resource_id) {
147 return gfx::Size(GetLocalizedContentsWidth(col_resource_id),
148 GetLocalizedContentsHeight(row_resource_id));
149 }
150
128 void Widget::Init(const InitParams& params) { 151 void Widget::Init(const InitParams& params) {
129 widget_delegate_ = 152 widget_delegate_ =
130 params.delegate ? params.delegate : new DefaultWidgetDelegate; 153 params.delegate ? params.delegate : new DefaultWidgetDelegate;
131 ownership_ = params.ownership; 154 ownership_ = params.ownership;
132 native_widget_ = 155 native_widget_ =
133 params.native_widget ? params.native_widget 156 params.native_widget ? params.native_widget
134 : NativeWidget::CreateNativeWidget(this); 157 : NativeWidget::CreateNativeWidget(this);
135 GetRootView(); 158 GetRootView();
136 default_theme_provider_.reset(new DefaultThemeProvider); 159 default_theme_provider_.reset(new DefaultThemeProvider);
137 if (params.type == InitParams::TYPE_MENU) 160 if (params.type == InitParams::TYPE_MENU)
138 is_mouse_button_pressed_ = native_widget_->IsMouseButtonDown(); 161 is_mouse_button_pressed_ = native_widget_->IsMouseButtonDown();
139 native_widget_->InitNativeWidget(params); 162 native_widget_->InitNativeWidget(params);
140 if (params.type == InitParams::TYPE_WINDOW) { 163 if (params.type == InitParams::TYPE_WINDOW) {
141 non_client_view_ = new NonClientView; 164 non_client_view_ = new NonClientView;
142 non_client_view_->SetFrameView(CreateNonClientFrameView()); 165 non_client_view_->SetFrameView(CreateNonClientFrameView());
143 // Create the ClientView, add it to the NonClientView and add the 166 // Create the ClientView, add it to the NonClientView and add the
144 // NonClientView to the RootView. This will cause everything to be parented. 167 // NonClientView to the RootView. This will cause everything to be parented.
145 non_client_view_->set_client_view(widget_delegate_->CreateClientView(this)); 168 non_client_view_->set_client_view(widget_delegate_->CreateClientView(this));
146 SetContentsView(non_client_view_); 169 SetContentsView(non_client_view_);
170 SetInitialBounds(params.bounds);
171 UpdateWindowTitle();
147 } 172 }
148 } 173 }
149 174
150 // Unconverted methods (see header) -------------------------------------------- 175 // Unconverted methods (see header) --------------------------------------------
151 176
152 gfx::NativeView Widget::GetNativeView() const { 177 gfx::NativeView Widget::GetNativeView() const {
153 return native_widget_->GetNativeView(); 178 return native_widget_->GetNativeView();
154 } 179 }
155 180
156 gfx::NativeWindow Widget::GetNativeWindow() const { 181 gfx::NativeWindow Widget::GetNativeWindow() const {
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 void Widget::CloseNow() { 302 void Widget::CloseNow() {
278 native_widget_->CloseNow(); 303 native_widget_->CloseNow();
279 } 304 }
280 305
281 void Widget::EnableClose(bool enable) { 306 void Widget::EnableClose(bool enable) {
282 non_client_view_->EnableClose(enable); 307 non_client_view_->EnableClose(enable);
283 native_widget_->EnableClose(enable); 308 native_widget_->EnableClose(enable);
284 } 309 }
285 310
286 void Widget::Show() { 311 void Widget::Show() {
287 native_widget_->Show(); 312 if (non_client_view_) {
313 native_widget_->ShowNativeWidget(
314 saved_maximized_state_ ? NativeWidget::SHOW_MAXIMIZED
315 : NativeWidget::SHOW_RESTORED);
316 // |saved_maximized_state_| only applies the first time the window is shown.
317 // If we don't reset the value the window will be shown maximized every time
318 // it is subsequently shown after being hidden.
319 saved_maximized_state_ = false;
320 } else {
321 native_widget_->Show();
322 }
288 } 323 }
289 324
290 void Widget::Hide() { 325 void Widget::Hide() {
291 native_widget_->Hide(); 326 native_widget_->Hide();
292 } 327 }
293 328
294 void Widget::ShowInactive() { 329 void Widget::ShowInactive() {
295 native_widget_->ShowNativeWidget(NativeWidget::SHOW_INACTIVE); 330 native_widget_->ShowNativeWidget(NativeWidget::SHOW_INACTIVE);
296 } 331 }
297 332
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 461
427 void Widget::SetCursor(gfx::NativeCursor cursor) { 462 void Widget::SetCursor(gfx::NativeCursor cursor) {
428 native_widget_->SetCursor(cursor); 463 native_widget_->SetCursor(cursor);
429 } 464 }
430 465
431 void Widget::ResetLastMouseMoveFlag() { 466 void Widget::ResetLastMouseMoveFlag() {
432 last_mouse_event_was_move_ = false; 467 last_mouse_event_was_move_ = false;
433 } 468 }
434 469
435 void Widget::UpdateWindowTitle() { 470 void Widget::UpdateWindowTitle() {
436 if (non_client_view_) { 471 if (!non_client_view_)
437 // If the non-client view is rendering its own title, it'll need to relayout 472 return;
438 // now. 473
439 non_client_view_->Layout(); 474 // If the non-client view is rendering its own title, it'll need to relayout
440 } 475 // now.
476 non_client_view_->Layout();
441 477
442 // Update the native frame's text. We do this regardless of whether or not 478 // Update the native frame's text. We do this regardless of whether or not
443 // the native frame is being used, since this also updates the taskbar, etc. 479 // the native frame is being used, since this also updates the taskbar, etc.
444 string16 window_title; 480 string16 window_title;
445 if (native_widget_->IsScreenReaderActive()) { 481 if (native_widget_->IsScreenReaderActive()) {
446 window_title = WideToUTF16(widget_delegate_->GetAccessibleWindowTitle()); 482 window_title = WideToUTF16(widget_delegate_->GetAccessibleWindowTitle());
447 } else { 483 } else {
448 window_title = WideToUTF16(widget_delegate_->GetWindowTitle()); 484 window_title = WideToUTF16(widget_delegate_->GetWindowTitle());
449 } 485 }
450 base::i18n::AdjustStringForLocaleDirection(&window_title); 486 base::i18n::AdjustStringForLocaleDirection(&window_title);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 if (ViewsDelegate::views_delegate) 553 if (ViewsDelegate::views_delegate)
518 ViewsDelegate::views_delegate->NotifyAccessibilityEvent(view, event_type); 554 ViewsDelegate::views_delegate->NotifyAccessibilityEvent(view, event_type);
519 555
520 if (send_native_event) 556 if (send_native_event)
521 native_widget_->SendNativeAccessibilityEvent(view, event_type); 557 native_widget_->SendNativeAccessibilityEvent(view, event_type);
522 } 558 }
523 559
524 //////////////////////////////////////////////////////////////////////////////// 560 ////////////////////////////////////////////////////////////////////////////////
525 // Widget, NativeWidgetDelegate implementation: 561 // Widget, NativeWidgetDelegate implementation:
526 562
563 bool Widget::IsModal() const {
564 return widget_delegate_->IsModal();
565 }
566
567 bool Widget::IsDialogBox() const {
568 return !!widget_delegate_->AsDialogDelegate();
569 }
570
527 bool Widget::CanActivate() const { 571 bool Widget::CanActivate() const {
528 return widget_delegate_->CanActivate(); 572 return widget_delegate_->CanActivate();
529 } 573 }
530 574
531 bool Widget::IsInactiveRenderingDisabled() const { 575 bool Widget::IsInactiveRenderingDisabled() const {
532 return disable_inactive_rendering_; 576 return disable_inactive_rendering_;
533 } 577 }
534 578
535 void Widget::EnableInactiveRendering() { 579 void Widget::EnableInactiveRendering() {
536 disable_inactive_rendering_ = false; 580 disable_inactive_rendering_ = false;
(...skipping 26 matching lines...) Expand all
563 // Only the top level Widget in a native widget hierarchy has a focus 607 // Only the top level Widget in a native widget hierarchy has a focus
564 // manager. 608 // manager.
565 focus_manager_.reset(new FocusManager(this)); 609 focus_manager_.reset(new FocusManager(this));
566 } 610 }
567 EnsureCompositor(); 611 EnsureCompositor();
568 612
569 native_widget_->SetAccessibleRole( 613 native_widget_->SetAccessibleRole(
570 widget_delegate_->GetAccessibleWindowRole()); 614 widget_delegate_->GetAccessibleWindowRole());
571 native_widget_->SetAccessibleState( 615 native_widget_->SetAccessibleState(
572 widget_delegate_->GetAccessibleWindowState()); 616 widget_delegate_->GetAccessibleWindowState());
617
618 if (widget_delegate_->IsModal())
619 native_widget_->BecomeModal();
573 } 620 }
574 621
575 void Widget::OnNativeWidgetDestroying() { 622 void Widget::OnNativeWidgetDestroying() {
576 if (non_client_view_) 623 if (non_client_view_)
577 non_client_view_->WindowClosing(); 624 non_client_view_->WindowClosing();
578 widget_delegate_->WindowClosing(); 625 widget_delegate_->WindowClosing();
579 } 626 }
580 627
581 void Widget::OnNativeWidgetDestroyed() { 628 void Widget::OnNativeWidgetDestroyed() {
582 widget_delegate_->DeleteDelegate(); 629 widget_delegate_->DeleteDelegate();
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 // bail. 820 // bail.
774 if (!widget_delegate_) 821 if (!widget_delegate_)
775 return; 822 return;
776 823
777 bool maximized; 824 bool maximized;
778 gfx::Rect bounds; 825 gfx::Rect bounds;
779 native_widget_->GetWindowBoundsAndMaximizedState(&bounds, &maximized); 826 native_widget_->GetWindowBoundsAndMaximizedState(&bounds, &maximized);
780 widget_delegate_->SaveWindowPlacement(bounds, maximized); 827 widget_delegate_->SaveWindowPlacement(bounds, maximized);
781 } 828 }
782 829
830 void Widget::SetInitialBounds(const gfx::Rect& bounds) {
831 if (!non_client_view_)
832 return;
833
834 // First we obtain the window's saved show-style and store it. We need to do
835 // this here, rather than in Show() because by the time Show() is called,
836 // the window's size will have been reset (below) and the saved maximized
837 // state will have been lost. Sadly there's no way to tell on Windows when
838 // a window is restored from maximized state, so we can't more accurately
839 // track maximized state independently of sizing information.
840 widget_delegate_->GetSavedMaximizedState(
841 &saved_maximized_state_);
842
843 // Restore the window's placement from the controller.
844 gfx::Rect saved_bounds = bounds;
845 if (widget_delegate_->GetSavedWindowBounds(&saved_bounds)) {
846 if (!widget_delegate_->ShouldRestoreWindowSize()) {
847 saved_bounds.set_size(non_client_view_->GetPreferredSize());
848 } else {
849 // Make sure the bounds are at least the minimum size.
850 if (saved_bounds.width() < minimum_size_.width()) {
851 saved_bounds.SetRect(saved_bounds.x(), saved_bounds.y(),
852 saved_bounds.right() + minimum_size_.width() -
853 saved_bounds.width(),
854 saved_bounds.bottom());
855 }
856
857 if (saved_bounds.height() < minimum_size_.height()) {
858 saved_bounds.SetRect(saved_bounds.x(), saved_bounds.y(),
859 saved_bounds.right(),
860 saved_bounds.bottom() + minimum_size_.height() -
861 saved_bounds.height());
862 }
863 }
864
865 // Widget's SetBounds method does not further modify the bounds that are
866 // passed to it.
867 SetBounds(saved_bounds);
868 } else {
869 if (bounds.IsEmpty()) {
870 // No initial bounds supplied, so size the window to its content and
871 // center over its parent.
872 native_widget_->CenterWindow(non_client_view_->GetPreferredSize());
873 } else {
874 // Use the supplied initial bounds.
875 SetBoundsConstrained(bounds, NULL);
876 }
877 }
878 }
783 879
784 880
785 } // namespace views 881 } // namespace views
OLDNEW
« no previous file with comments | « views/widget/widget.h ('k') | views/window/native_window.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698