| 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_native_widget_aura.h" |     5 #include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h" | 
|     6  |     6  | 
|     7 #include "base/bind.h" |     7 #include "base/bind.h" | 
|     8 #include "base/debug/trace_event.h" |     8 #include "base/debug/trace_event.h" | 
|     9 #include "ui/aura/client/activation_client.h" |     9 #include "ui/aura/client/activation_client.h" | 
|    10 #include "ui/aura/client/aura_constants.h" |    10 #include "ui/aura/client/aura_constants.h" | 
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   236  |   236  | 
|   237   DISALLOW_COPY_AND_ASSIGN(RootWindowDestructionObserver); |   237   DISALLOW_COPY_AND_ASSIGN(RootWindowDestructionObserver); | 
|   238 }; |   238 }; | 
|   239  |   239  | 
|   240 //////////////////////////////////////////////////////////////////////////////// |   240 //////////////////////////////////////////////////////////////////////////////// | 
|   241 // DesktopNativeWidgetAura, public: |   241 // DesktopNativeWidgetAura, public: | 
|   242  |   242  | 
|   243 int DesktopNativeWidgetAura::cursor_reference_count_ = 0; |   243 int DesktopNativeWidgetAura::cursor_reference_count_ = 0; | 
|   244 DesktopNativeCursorManager* DesktopNativeWidgetAura::native_cursor_manager_ = |   244 DesktopNativeCursorManager* DesktopNativeWidgetAura::native_cursor_manager_ = | 
|   245     NULL; |   245     NULL; | 
|   246 views::corewm::CursorManager* DesktopNativeWidgetAura::cursor_manager_ = NULL; |   246 wm::CursorManager* DesktopNativeWidgetAura::cursor_manager_ = NULL; | 
|   247  |   247  | 
|   248 DesktopNativeWidgetAura::DesktopNativeWidgetAura( |   248 DesktopNativeWidgetAura::DesktopNativeWidgetAura( | 
|   249     internal::NativeWidgetDelegate* delegate) |   249     internal::NativeWidgetDelegate* delegate) | 
|   250     : desktop_window_tree_host_(NULL), |   250     : desktop_window_tree_host_(NULL), | 
|   251       ownership_(Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET), |   251       ownership_(Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET), | 
|   252       close_widget_factory_(this), |   252       close_widget_factory_(this), | 
|   253       can_activate_(true), |   253       can_activate_(true), | 
|   254       content_window_container_(NULL), |   254       content_window_container_(NULL), | 
|   255       content_window_(new aura::Window(this)), |   255       content_window_(new aura::Window(this)), | 
|   256       native_widget_delegate_(delegate), |   256       native_widget_delegate_(delegate), | 
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   394   NativeWidgetAura::RegisterNativeWidgetForWindow(this, content_window_); |   394   NativeWidgetAura::RegisterNativeWidgetForWindow(this, content_window_); | 
|   395   // Animations on TYPE_WINDOW are handled by the OS. Additionally if we animate |   395   // Animations on TYPE_WINDOW are handled by the OS. Additionally if we animate | 
|   396   // these windows the size of the window gets augmented, effecting restore |   396   // these windows the size of the window gets augmented, effecting restore | 
|   397   // bounds and maximized windows in bad ways. |   397   // bounds and maximized windows in bad ways. | 
|   398   if (params.type == Widget::InitParams::TYPE_WINDOW && |   398   if (params.type == Widget::InitParams::TYPE_WINDOW && | 
|   399       !params.remove_standard_frame) { |   399       !params.remove_standard_frame) { | 
|   400     content_window_->SetProperty(aura::client::kAnimationsDisabledKey, true); |   400     content_window_->SetProperty(aura::client::kAnimationsDisabledKey, true); | 
|   401   } |   401   } | 
|   402   content_window_->SetType(GetAuraWindowTypeForWidgetType(params.type)); |   402   content_window_->SetType(GetAuraWindowTypeForWidgetType(params.type)); | 
|   403   content_window_->Init(params.layer_type); |   403   content_window_->Init(params.layer_type); | 
|   404   corewm::SetShadowType(content_window_, corewm::SHADOW_TYPE_NONE); |   404   wm::SetShadowType(content_window_, wm::SHADOW_TYPE_NONE); | 
|   405  |   405  | 
|   406   content_window_container_ = new aura::Window(NULL); |   406   content_window_container_ = new aura::Window(NULL); | 
|   407   content_window_container_->Init(aura::WINDOW_LAYER_NOT_DRAWN); |   407   content_window_container_->Init(aura::WINDOW_LAYER_NOT_DRAWN); | 
|   408   content_window_container_->Show(); |   408   content_window_container_->Show(); | 
|   409   content_window_container_->AddChild(content_window_); |   409   content_window_container_->AddChild(content_window_); | 
|   410  |   410  | 
|   411   desktop_window_tree_host_ = params.desktop_window_tree_host ? |   411   desktop_window_tree_host_ = params.desktop_window_tree_host ? | 
|   412       params.desktop_window_tree_host : |   412       params.desktop_window_tree_host : | 
|   413       DesktopWindowTreeHost::Create(native_widget_delegate_, this); |   413       DesktopWindowTreeHost::Create(native_widget_delegate_, this); | 
|   414   host_.reset(desktop_window_tree_host_->AsWindowTreeHost()); |   414   host_.reset(desktop_window_tree_host_->AsWindowTreeHost()); | 
|   415   desktop_window_tree_host_->Init(content_window_, params); |   415   desktop_window_tree_host_->Init(content_window_, params); | 
|   416  |   416  | 
|   417   // Mark this window as Desktop root window. |   417   // Mark this window as Desktop root window. | 
|   418   host_->window()->SetProperty(views::kDesktopRootWindow, true); |   418   host_->window()->SetProperty(views::kDesktopRootWindow, true); | 
|   419  |   419  | 
|   420   host_->InitHost(); |   420   host_->InitHost(); | 
|   421   host_->window()->AddChild(content_window_container_); |   421   host_->window()->AddChild(content_window_container_); | 
|   422   host_->window()->SetProperty(kDesktopNativeWidgetAuraKey, this); |   422   host_->window()->SetProperty(kDesktopNativeWidgetAuraKey, this); | 
|   423  |   423  | 
|   424   host_->window()->AddObserver(new RootWindowDestructionObserver(this)); |   424   host_->window()->AddObserver(new RootWindowDestructionObserver(this)); | 
|   425  |   425  | 
|   426   // The WindowsModalityController event filter should be at the head of the |   426   // The WindowsModalityController event filter should be at the head of the | 
|   427   // pre target handlers list. This ensures that it handles input events first |   427   // pre target handlers list. This ensures that it handles input events first | 
|   428   // when modal windows are at the top of the Zorder. |   428   // when modal windows are at the top of the Zorder. | 
|   429   if (widget_type_ == Widget::InitParams::TYPE_WINDOW) |   429   if (widget_type_ == Widget::InitParams::TYPE_WINDOW) | 
|   430     window_modality_controller_.reset( |   430     window_modality_controller_.reset( | 
|   431         new views::corewm::WindowModalityController(host_->window())); |   431         new wm::WindowModalityController(host_->window())); | 
|   432  |   432  | 
|   433   // |root_window_event_filter_| must be created before |   433   // |root_window_event_filter_| must be created before | 
|   434   // OnWindowTreeHostCreated() is invoked. |   434   // OnWindowTreeHostCreated() is invoked. | 
|   435  |   435  | 
|   436   // CEF sets focus to the window the user clicks down on. |   436   // CEF sets focus to the window the user clicks down on. | 
|   437   // TODO(beng): see if we can't do this some other way. CEF seems a heavy- |   437   // TODO(beng): see if we can't do this some other way. CEF seems a heavy- | 
|   438   //             handed way of accomplishing focus. |   438   //             handed way of accomplishing focus. | 
|   439   // No event filter for aura::Env. Create CompoundEvnetFilter per |   439   // No event filter for aura::Env. Create CompoundEvnetFilter per | 
|   440   // WindowEventDispatcher. |   440   // WindowEventDispatcher. | 
|   441   root_window_event_filter_ = new corewm::CompoundEventFilter; |   441   root_window_event_filter_ = new wm::CompoundEventFilter; | 
|   442   // Pass ownership of the filter to the root_window. |   442   // Pass ownership of the filter to the root_window. | 
|   443   host_->window()->SetEventFilter(root_window_event_filter_); |   443   host_->window()->SetEventFilter(root_window_event_filter_); | 
|   444  |   444  | 
|   445   // The host's dispatcher must be added to |native_cursor_manager_| before |   445   // The host's dispatcher must be added to |native_cursor_manager_| before | 
|   446   // OnNativeWidgetCreated() is called. |   446   // OnNativeWidgetCreated() is called. | 
|   447   cursor_reference_count_++; |   447   cursor_reference_count_++; | 
|   448   if (!native_cursor_manager_) { |   448   if (!native_cursor_manager_) { | 
|   449     native_cursor_manager_ = new DesktopNativeCursorManager( |   449     native_cursor_manager_ = new DesktopNativeCursorManager( | 
|   450         DesktopCursorLoaderUpdater::Create()); |   450         DesktopCursorLoaderUpdater::Create()); | 
|   451   } |   451   } | 
|   452   if (!cursor_manager_) { |   452   if (!cursor_manager_) { | 
|   453     cursor_manager_ = new views::corewm::CursorManager( |   453     cursor_manager_ = new wm::CursorManager( | 
|   454         scoped_ptr<corewm::NativeCursorManager>(native_cursor_manager_)); |   454         scoped_ptr<wm::NativeCursorManager>(native_cursor_manager_)); | 
|   455   } |   455   } | 
|   456   native_cursor_manager_->AddHost(host()); |   456   native_cursor_manager_->AddHost(host()); | 
|   457   aura::client::SetCursorClient(host_->window(), cursor_manager_); |   457   aura::client::SetCursorClient(host_->window(), cursor_manager_); | 
|   458  |   458  | 
|   459   desktop_window_tree_host_->OnNativeWidgetCreated(params); |   459   desktop_window_tree_host_->OnNativeWidgetCreated(params); | 
|   460  |   460  | 
|   461   UpdateWindowTransparency(); |   461   UpdateWindowTransparency(); | 
|   462  |   462  | 
|   463   capture_client_.reset(new DesktopCaptureClient(host_->window())); |   463   capture_client_.reset(new DesktopCaptureClient(host_->window())); | 
|   464  |   464  | 
|   465   corewm::FocusController* focus_controller = |   465   wm::FocusController* focus_controller = | 
|   466       new corewm::FocusController(new DesktopFocusRules(content_window_)); |   466       new wm::FocusController(new DesktopFocusRules(content_window_)); | 
|   467   focus_client_.reset(focus_controller); |   467   focus_client_.reset(focus_controller); | 
|   468   aura::client::SetFocusClient(host_->window(), focus_controller); |   468   aura::client::SetFocusClient(host_->window(), focus_controller); | 
|   469   aura::client::SetActivationClient(host_->window(), focus_controller); |   469   aura::client::SetActivationClient(host_->window(), focus_controller); | 
|   470   host_->window()->AddPreTargetHandler(focus_controller); |   470   host_->window()->AddPreTargetHandler(focus_controller); | 
|   471  |   471  | 
|   472   dispatcher_client_.reset(new DesktopDispatcherClient); |   472   dispatcher_client_.reset(new DesktopDispatcherClient); | 
|   473   aura::client::SetDispatcherClient(host_->window(), |   473   aura::client::SetDispatcherClient(host_->window(), | 
|   474                                     dispatcher_client_.get()); |   474                                     dispatcher_client_.get()); | 
|   475  |   475  | 
|   476   position_client_.reset(new DesktopScreenPositionClient(host_->window())); |   476   position_client_.reset(new DesktopScreenPositionClient(host_->window())); | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
|   498   tooltip_manager_.reset(new TooltipManagerAura(GetWidget())); |   498   tooltip_manager_.reset(new TooltipManagerAura(GetWidget())); | 
|   499  |   499  | 
|   500   tooltip_controller_.reset( |   500   tooltip_controller_.reset( | 
|   501       new corewm::TooltipController( |   501       new corewm::TooltipController( | 
|   502           desktop_window_tree_host_->CreateTooltip())); |   502           desktop_window_tree_host_->CreateTooltip())); | 
|   503   aura::client::SetTooltipClient(host_->window(), |   503   aura::client::SetTooltipClient(host_->window(), | 
|   504                                  tooltip_controller_.get()); |   504                                  tooltip_controller_.get()); | 
|   505   host_->window()->AddPreTargetHandler(tooltip_controller_.get()); |   505   host_->window()->AddPreTargetHandler(tooltip_controller_.get()); | 
|   506  |   506  | 
|   507   if (params.opacity == Widget::InitParams::TRANSLUCENT_WINDOW) { |   507   if (params.opacity == Widget::InitParams::TRANSLUCENT_WINDOW) { | 
|   508     visibility_controller_.reset(new views::corewm::VisibilityController); |   508     visibility_controller_.reset(new wm::VisibilityController); | 
|   509     aura::client::SetVisibilityClient(host_->window(), |   509     aura::client::SetVisibilityClient(host_->window(), | 
|   510                                       visibility_controller_.get()); |   510                                       visibility_controller_.get()); | 
|   511     views::corewm::SetChildWindowVisibilityChangesAnimated(host_->window()); |   511     wm::SetChildWindowVisibilityChangesAnimated(host_->window()); | 
|   512     views::corewm::SetChildWindowVisibilityChangesAnimated( |   512     wm::SetChildWindowVisibilityChangesAnimated( | 
|   513         content_window_container_); |   513         content_window_container_); | 
|   514   } |   514   } | 
|   515  |   515  | 
|   516   if (params.type == Widget::InitParams::TYPE_WINDOW) { |   516   if (params.type == Widget::InitParams::TYPE_WINDOW) { | 
|   517     focus_manager_event_handler_.reset(new FocusManagerEventHandler(this)); |   517     focus_manager_event_handler_.reset(new FocusManagerEventHandler(this)); | 
|   518     host_->window()->AddPreTargetHandler(focus_manager_event_handler_.get()); |   518     host_->window()->AddPreTargetHandler(focus_manager_event_handler_.get()); | 
|   519   } |   519   } | 
|   520  |   520  | 
|   521   event_client_.reset(new DesktopEventClient); |   521   event_client_.reset(new DesktopEventClient); | 
|   522   aura::client::SetEventClient(host_->window(), event_client_.get()); |   522   aura::client::SetEventClient(host_->window(), event_client_.get()); | 
|   523  |   523  | 
|   524   aura::client::GetFocusClient(content_window_)->FocusWindow(content_window_); |   524   aura::client::GetFocusClient(content_window_)->FocusWindow(content_window_); | 
|   525  |   525  | 
|   526   aura::client::SetActivationDelegate(content_window_, this); |   526   aura::client::SetActivationDelegate(content_window_, this); | 
|   527  |   527  | 
|   528   shadow_controller_.reset(new corewm::ShadowController( |   528   shadow_controller_.reset(new wm::ShadowController( | 
|   529       aura::client::GetActivationClient(host_->window()))); |   529       aura::client::GetActivationClient(host_->window()))); | 
|   530  |   530  | 
|   531   content_window_->SetProperty(aura::client::kCanMaximizeKey, |   531   content_window_->SetProperty(aura::client::kCanMaximizeKey, | 
|   532                                GetWidget()->widget_delegate()->CanMaximize()); |   532                                GetWidget()->widget_delegate()->CanMaximize()); | 
|   533   content_window_->SetProperty(aura::client::kCanResizeKey, |   533   content_window_->SetProperty(aura::client::kCanResizeKey, | 
|   534                                GetWidget()->widget_delegate()->CanResize()); |   534                                GetWidget()->widget_delegate()->CanResize()); | 
|   535  |   535  | 
|   536   window_reorderer_.reset(new WindowReorderer(content_window_, |   536   window_reorderer_.reset(new WindowReorderer(content_window_, | 
|   537       GetWidget()->GetRootView())); |   537       GetWidget()->GetRootView())); | 
|   538 } |   538 } | 
| (...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1166 //////////////////////////////////////////////////////////////////////////////// |  1166 //////////////////////////////////////////////////////////////////////////////// | 
|  1167 // DesktopNativeWidgetAura, NativeWidget implementation: |  1167 // DesktopNativeWidgetAura, NativeWidget implementation: | 
|  1168  |  1168  | 
|  1169 ui::EventHandler* DesktopNativeWidgetAura::GetEventHandler() { |  1169 ui::EventHandler* DesktopNativeWidgetAura::GetEventHandler() { | 
|  1170   return this; |  1170   return this; | 
|  1171 } |  1171 } | 
|  1172  |  1172  | 
|  1173 void DesktopNativeWidgetAura::InstallInputMethodEventFilter() { |  1173 void DesktopNativeWidgetAura::InstallInputMethodEventFilter() { | 
|  1174   DCHECK(!input_method_event_filter_.get()); |  1174   DCHECK(!input_method_event_filter_.get()); | 
|  1175  |  1175  | 
|  1176   input_method_event_filter_.reset(new corewm::InputMethodEventFilter( |  1176   input_method_event_filter_.reset(new wm::InputMethodEventFilter( | 
|  1177       host_->GetAcceleratedWidget())); |  1177       host_->GetAcceleratedWidget())); | 
|  1178   input_method_event_filter_->SetInputMethodPropertyInRootWindow( |  1178   input_method_event_filter_->SetInputMethodPropertyInRootWindow( | 
|  1179       host_->window()); |  1179       host_->window()); | 
|  1180   root_window_event_filter_->AddHandler(input_method_event_filter_.get()); |  1180   root_window_event_filter_->AddHandler(input_method_event_filter_.get()); | 
|  1181 } |  1181 } | 
|  1182  |  1182  | 
|  1183 void DesktopNativeWidgetAura::UpdateWindowTransparency() { |  1183 void DesktopNativeWidgetAura::UpdateWindowTransparency() { | 
|  1184   content_window_->SetTransparent( |  1184   content_window_->SetTransparent( | 
|  1185       desktop_window_tree_host_->ShouldWindowContentsBeTransparent()); |  1185       desktop_window_tree_host_->ShouldWindowContentsBeTransparent()); | 
|  1186 } |  1186 } | 
|  1187  |  1187  | 
|  1188 void DesktopNativeWidgetAura::RootWindowDestroyed() { |  1188 void DesktopNativeWidgetAura::RootWindowDestroyed() { | 
|  1189   cursor_reference_count_--; |  1189   cursor_reference_count_--; | 
|  1190   if (cursor_reference_count_ == 0) { |  1190   if (cursor_reference_count_ == 0) { | 
|  1191     // We are the last DesktopNativeWidgetAura instance, and we are responsible |  1191     // We are the last DesktopNativeWidgetAura instance, and we are responsible | 
|  1192     // for cleaning up |cursor_manager_|. |  1192     // for cleaning up |cursor_manager_|. | 
|  1193     delete cursor_manager_; |  1193     delete cursor_manager_; | 
|  1194     native_cursor_manager_ = NULL; |  1194     native_cursor_manager_ = NULL; | 
|  1195     cursor_manager_ = NULL; |  1195     cursor_manager_ = NULL; | 
|  1196   } |  1196   } | 
|  1197 } |  1197 } | 
|  1198  |  1198  | 
|  1199 }  // namespace views |  1199 }  // namespace views | 
| OLD | NEW |