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/views/widget/desktop_aura/desktop_window_tree_host_win.h" | 5 #include "ui/views/widget/desktop_aura/desktop_window_tree_host_win.h" |
6 | 6 |
7 #include "base/win/metro.h" | 7 #include "base/win/metro.h" |
8 #include "third_party/skia/include/core/SkPath.h" | 8 #include "third_party/skia/include/core/SkPath.h" |
9 #include "third_party/skia/include/core/SkRegion.h" | 9 #include "third_party/skia/include/core/SkRegion.h" |
10 #include "ui/aura/client/aura_constants.h" | 10 #include "ui/aura/client/aura_constants.h" |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 internal::NativeWidgetDelegate* native_widget_delegate, | 76 internal::NativeWidgetDelegate* native_widget_delegate, |
77 DesktopNativeWidgetAura* desktop_native_widget_aura) | 77 DesktopNativeWidgetAura* desktop_native_widget_aura) |
78 : message_handler_(new HWNDMessageHandler(this)), | 78 : message_handler_(new HWNDMessageHandler(this)), |
79 native_widget_delegate_(native_widget_delegate), | 79 native_widget_delegate_(native_widget_delegate), |
80 desktop_native_widget_aura_(desktop_native_widget_aura), | 80 desktop_native_widget_aura_(desktop_native_widget_aura), |
81 content_window_(NULL), | 81 content_window_(NULL), |
82 drag_drop_client_(NULL), | 82 drag_drop_client_(NULL), |
83 should_animate_window_close_(false), | 83 should_animate_window_close_(false), |
84 pending_close_(false), | 84 pending_close_(false), |
85 has_non_client_view_(false), | 85 has_non_client_view_(false), |
86 tooltip_(NULL) { | 86 tooltip_(NULL), |
| 87 need_synchronous_paint_(false), |
| 88 in_sizing_loop_(false) { |
87 } | 89 } |
88 | 90 |
89 DesktopWindowTreeHostWin::~DesktopWindowTreeHostWin() { | 91 DesktopWindowTreeHostWin::~DesktopWindowTreeHostWin() { |
90 // WARNING: |content_window_| has been destroyed by the time we get here. | 92 // WARNING: |content_window_| has been destroyed by the time we get here. |
91 desktop_native_widget_aura_->OnDesktopWindowTreeHostDestroyed(this); | 93 desktop_native_widget_aura_->OnDesktopWindowTreeHostDestroyed(this); |
92 DestroyDispatcher(); | 94 DestroyDispatcher(); |
93 } | 95 } |
94 | 96 |
95 // static | 97 // static |
96 aura::Window* DesktopWindowTreeHostWin::GetContentWindowForHWND(HWND hwnd) { | 98 aura::Window* DesktopWindowTreeHostWin::GetContentWindowForHWND(HWND hwnd) { |
(...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
689 | 691 |
690 void DesktopWindowTreeHostWin::HandleCaptureLost() { | 692 void DesktopWindowTreeHostWin::HandleCaptureLost() { |
691 OnHostLostWindowCapture(); | 693 OnHostLostWindowCapture(); |
692 } | 694 } |
693 | 695 |
694 void DesktopWindowTreeHostWin::HandleClose() { | 696 void DesktopWindowTreeHostWin::HandleClose() { |
695 GetWidget()->Close(); | 697 GetWidget()->Close(); |
696 } | 698 } |
697 | 699 |
698 bool DesktopWindowTreeHostWin::HandleCommand(int command) { | 700 bool DesktopWindowTreeHostWin::HandleCommand(int command) { |
| 701 // Windows uses the 4 lower order bits of |notification_code| for type- |
| 702 // specific information so we must exclude this when comparing. |
| 703 static const int sc_mask = 0xFFF0; |
| 704 switch (command & sc_mask) { |
| 705 case SC_RESTORE: |
| 706 case SC_MAXIMIZE: |
| 707 need_synchronous_paint_ = true; |
| 708 break; |
| 709 |
| 710 case SC_SIZE: |
| 711 in_sizing_loop_ = true; |
| 712 break; |
| 713 |
| 714 default: |
| 715 break; |
| 716 } |
699 return GetWidget()->widget_delegate()->ExecuteWindowsCommand(command); | 717 return GetWidget()->widget_delegate()->ExecuteWindowsCommand(command); |
700 } | 718 } |
701 | 719 |
702 void DesktopWindowTreeHostWin::HandleAccelerator( | 720 void DesktopWindowTreeHostWin::HandleAccelerator( |
703 const ui::Accelerator& accelerator) { | 721 const ui::Accelerator& accelerator) { |
704 GetWidget()->GetFocusManager()->ProcessAccelerator(accelerator); | 722 GetWidget()->GetFocusManager()->ProcessAccelerator(accelerator); |
705 } | 723 } |
706 | 724 |
707 void DesktopWindowTreeHostWin::HandleCreate() { | 725 void DesktopWindowTreeHostWin::HandleCreate() { |
708 native_widget_delegate_->OnNativeWidgetCreated(true); | 726 native_widget_delegate_->OnNativeWidgetCreated(true); |
(...skipping 15 matching lines...) Expand all Loading... |
724 bool DesktopWindowTreeHostWin::HandleInitialFocus( | 742 bool DesktopWindowTreeHostWin::HandleInitialFocus( |
725 ui::WindowShowState show_state) { | 743 ui::WindowShowState show_state) { |
726 return GetWidget()->SetInitialFocus(show_state); | 744 return GetWidget()->SetInitialFocus(show_state); |
727 } | 745 } |
728 | 746 |
729 void DesktopWindowTreeHostWin::HandleDisplayChange() { | 747 void DesktopWindowTreeHostWin::HandleDisplayChange() { |
730 GetWidget()->widget_delegate()->OnDisplayChanged(); | 748 GetWidget()->widget_delegate()->OnDisplayChanged(); |
731 } | 749 } |
732 | 750 |
733 void DesktopWindowTreeHostWin::HandleBeginWMSizeMove() { | 751 void DesktopWindowTreeHostWin::HandleBeginWMSizeMove() { |
| 752 if (in_sizing_loop_) |
| 753 need_synchronous_paint_ = true; |
734 native_widget_delegate_->OnNativeWidgetBeginUserBoundsChange(); | 754 native_widget_delegate_->OnNativeWidgetBeginUserBoundsChange(); |
735 } | 755 } |
736 | 756 |
737 void DesktopWindowTreeHostWin::HandleEndWMSizeMove() { | 757 void DesktopWindowTreeHostWin::HandleEndWMSizeMove() { |
| 758 if (in_sizing_loop_) { |
| 759 need_synchronous_paint_ = false; |
| 760 in_sizing_loop_ = false; |
| 761 } |
738 native_widget_delegate_->OnNativeWidgetEndUserBoundsChange(); | 762 native_widget_delegate_->OnNativeWidgetEndUserBoundsChange(); |
739 } | 763 } |
740 | 764 |
741 void DesktopWindowTreeHostWin::HandleMove() { | 765 void DesktopWindowTreeHostWin::HandleMove() { |
742 native_widget_delegate_->OnNativeWidgetMove(); | 766 native_widget_delegate_->OnNativeWidgetMove(); |
743 OnHostMoved(GetBounds().origin()); | 767 OnHostMoved(GetBounds().origin()); |
744 } | 768 } |
745 | 769 |
746 void DesktopWindowTreeHostWin::HandleWorkAreaChanged() { | 770 void DesktopWindowTreeHostWin::HandleWorkAreaChanged() { |
747 GetWidget()->widget_delegate()->OnWorkAreaChanged(); | 771 GetWidget()->widget_delegate()->OnWorkAreaChanged(); |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
884 LPARAM l_param) { | 908 LPARAM l_param) { |
885 } | 909 } |
886 | 910 |
887 bool DesktopWindowTreeHostWin::HandleScrollEvent( | 911 bool DesktopWindowTreeHostWin::HandleScrollEvent( |
888 const ui::ScrollEvent& event) { | 912 const ui::ScrollEvent& event) { |
889 SendEventToProcessor(const_cast<ui::ScrollEvent*>(&event)); | 913 SendEventToProcessor(const_cast<ui::ScrollEvent*>(&event)); |
890 return event.handled(); | 914 return event.handled(); |
891 } | 915 } |
892 | 916 |
893 void DesktopWindowTreeHostWin::HandleWindowSizeChanging() { | 917 void DesktopWindowTreeHostWin::HandleWindowSizeChanging() { |
894 if (compositor()) | 918 if (compositor() && need_synchronous_paint_) { |
895 compositor()->FinishAllRendering(); | 919 compositor()->FinishAllRendering(); |
| 920 // If we received the window size changing notification due to a restore or |
| 921 // maximize operation, then we can reset the need_synchronous_paint_ flag |
| 922 // here. For a sizing operation, the flag will be reset at the end of the |
| 923 // operation. |
| 924 if (!in_sizing_loop_) |
| 925 need_synchronous_paint_ = false; |
| 926 } |
896 } | 927 } |
897 | 928 |
898 //////////////////////////////////////////////////////////////////////////////// | 929 //////////////////////////////////////////////////////////////////////////////// |
899 // DesktopWindowTreeHostWin, private: | 930 // DesktopWindowTreeHostWin, private: |
900 | 931 |
901 Widget* DesktopWindowTreeHostWin::GetWidget() { | 932 Widget* DesktopWindowTreeHostWin::GetWidget() { |
902 return native_widget_delegate_->AsWidget(); | 933 return native_widget_delegate_->AsWidget(); |
903 } | 934 } |
904 | 935 |
905 const Widget* DesktopWindowTreeHostWin::GetWidget() const { | 936 const Widget* DesktopWindowTreeHostWin::GetWidget() const { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
939 | 970 |
940 // static | 971 // static |
941 DesktopWindowTreeHost* DesktopWindowTreeHost::Create( | 972 DesktopWindowTreeHost* DesktopWindowTreeHost::Create( |
942 internal::NativeWidgetDelegate* native_widget_delegate, | 973 internal::NativeWidgetDelegate* native_widget_delegate, |
943 DesktopNativeWidgetAura* desktop_native_widget_aura) { | 974 DesktopNativeWidgetAura* desktop_native_widget_aura) { |
944 return new DesktopWindowTreeHostWin(native_widget_delegate, | 975 return new DesktopWindowTreeHostWin(native_widget_delegate, |
945 desktop_native_widget_aura); | 976 desktop_native_widget_aura); |
946 } | 977 } |
947 | 978 |
948 } // namespace views | 979 } // namespace views |
OLD | NEW |