15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/views/widget/desktop_aura/desktop_window_tree_host_win.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/win/metro.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkPath.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkRegion.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/client/aura_constants.h" 11b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "ui/aura/client/cursor_client.h" 128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ui/aura/client/focus_client.h" 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/aura/window_event_dispatcher.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/window_property.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/cursor/cursor_loader_win.h" 167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/ime/input_method.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/win/shell.h" 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/compositor/compositor_constants.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/insets.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h" 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/gfx/path.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/path_win.h" 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/gfx/vector2d.h" 24d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/gfx/win/dpi.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/native_theme/native_theme_aura.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/native_theme/native_theme_win.h" 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/views/corewm/tooltip_win.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/ime/input_method_bridge.h" 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/views/widget/desktop_aura/desktop_cursor_loader_updater.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/desktop_aura/desktop_drag_drop_client_win.h" 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/desktop_aura/desktop_native_cursor_manager.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/root_view.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget_delegate.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget_hwnd_utils.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/win/fullscreen_handler.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/win/hwnd_message_handler.h" 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/wm/core/compound_event_filter.h" 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/wm/core/input_method_event_filter.h" 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/wm/core/window_animations.h" 41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/wm/public/scoped_tooltip_disabler.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace { 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)gfx::Size GetExpandedWindowSize(DWORD window_style, gfx::Size size) { 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!(window_style & WS_EX_COMPOSITED) || !ui::win::IsAeroGlassEnabled()) 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return size; 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Some AMD drivers can't display windows that are less than 64x64 pixels, 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // so expand them to be at least that size. http://crbug.com/286609 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Size expanded(std::max(size.width(), 64), std::max(size.height(), 64)); 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return expanded; 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void InsetBottomRight(gfx::Rect* rect, gfx::Vector2d vector) { 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) rect->Inset(0, 0, vector.x(), vector.y()); 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DEFINE_WINDOW_PROPERTY_KEY(aura::Window*, kContentWindowForRootWindow, NULL); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Identifies the DesktopWindowTreeHostWin associated with the 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// WindowEventDispatcher. 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)DEFINE_WINDOW_PROPERTY_KEY(DesktopWindowTreeHostWin*, kDesktopWindowTreeHostKey, 680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) NULL); 690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// DesktopWindowTreeHostWin, public: 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::is_cursor_visible_ = true; 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)DesktopWindowTreeHostWin::DesktopWindowTreeHostWin( 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) internal::NativeWidgetDelegate* native_widget_delegate, 771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DesktopNativeWidgetAura* desktop_native_widget_aura) 78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : message_handler_(new HWNDMessageHandler(this)), 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_widget_delegate_(native_widget_delegate), 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) desktop_native_widget_aura_(desktop_native_widget_aura), 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_window_(NULL), 821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) drag_drop_client_(NULL), 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) should_animate_window_close_(false), 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pending_close_(false), 854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) has_non_client_view_(false), 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tooltip_(NULL) { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)DesktopWindowTreeHostWin::~DesktopWindowTreeHostWin() { 908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // WARNING: |content_window_| has been destroyed by the time we get here. 91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) desktop_native_widget_aura_->OnDesktopWindowTreeHostDestroyed(this); 92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DestroyDispatcher(); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)aura::Window* DesktopWindowTreeHostWin::GetContentWindowForHWND(HWND hwnd) { 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) aura::WindowTreeHost* host = 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) aura::WindowTreeHost::GetForAcceleratedWidget(hwnd); 99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return host ? host->window()->GetProperty(kContentWindowForRootWindow) : NULL; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ui::NativeTheme* DesktopWindowTreeHost::GetNativeTheme(aura::Window* window) { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use NativeThemeWin for windows shown on the desktop, those not on the 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // desktop come from Ash and get NativeThemeAura. 106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) aura::WindowTreeHost* host = window ? window->GetHost() : NULL; 107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (host) { 108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) HWND host_hwnd = host->GetAcceleratedWidget(); 1091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (host_hwnd && 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DesktopWindowTreeHostWin::GetContentWindowForHWND(host_hwnd)) { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ui::NativeThemeWin::instance(); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ui::NativeThemeAura::instance(); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// DesktopWindowTreeHostWin, DesktopWindowTreeHost implementation: 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void DesktopWindowTreeHostWin::Init(aura::Window* content_window, 121a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const Widget::InitParams& params) { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(beng): SetInitParams(). 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_window_ = content_window; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::client::SetAnimationHost(content_window_, this); 1261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConfigureWindowStyles(message_handler_.get(), params, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWidget()->widget_delegate(), 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_widget_delegate_); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HWND parent_hwnd = NULL; 132a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (params.parent && params.parent->GetHost()) 133a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) parent_hwnd = params.parent->GetHost()->GetAcceleratedWidget(); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_handler_->set_remove_standard_frame(params.remove_standard_frame); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) has_non_client_view_ = Widget::RequiresNonClientView(params.type); 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 13958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) gfx::Rect pixel_bounds = gfx::win::DIPToScreenRect(params.bounds); 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) message_handler_->Init(parent_hwnd, pixel_bounds); 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (params.type == Widget::InitParams::TYPE_MENU) { 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ::SetProp(GetAcceleratedWidget(), 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kForceSoftwareCompositor, 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) reinterpret_cast<HANDLE>(true)); 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CreateCompositor(GetAcceleratedWidget()); 1471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 149a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void DesktopWindowTreeHostWin::OnNativeWidgetCreated( 1501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const Widget::InitParams& params) { 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The cursor is not necessarily visible when the root window is created. 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::client::CursorClient* cursor_client = 153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) aura::client::GetCursorClient(window()); 1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (cursor_client) 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) is_cursor_visible_ = cursor_client->IsCursorVisible(); 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 157a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) window()->SetProperty(kContentWindowForRootWindow, content_window_); 158a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) window()->SetProperty(kDesktopWindowTreeHostKey, this); 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) should_animate_window_close_ = 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content_window_->type() != ui::wm::WINDOW_TYPE_NORMAL && 162a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) !wm::WindowAnimationsDisabled(content_window_); 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// TODO this is not invoked *after* Init(), but should be ok. 1650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) SetWindowTransparency(); 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)scoped_ptr<corewm::Tooltip> DesktopWindowTreeHostWin::CreateTooltip() { 1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(!tooltip_); 1704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) tooltip_ = new corewm::TooltipWin(GetAcceleratedWidget()); 1714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return scoped_ptr<corewm::Tooltip>(tooltip_); 1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)scoped_ptr<aura::client::DragDropClient> 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)DesktopWindowTreeHostWin::CreateDragDropClient( 1761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DesktopNativeCursorManager* cursor_manager) { 177a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) drag_drop_client_ = new DesktopDragDropClientWin(window(), GetHWND()); 1781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return scoped_ptr<aura::client::DragDropClient>(drag_drop_client_).Pass(); 1791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 1801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::Close() { 182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // TODO(beng): Move this entire branch to DNWA so it can be shared with X11. 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (should_animate_window_close_) { 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pending_close_ = true; 185a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const bool is_animating = 186a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) content_window_->layer()->GetAnimator()->IsAnimatingProperty( 187a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ui::LayerAnimationElement::VISIBILITY); 188a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Animation may not start for a number of reasons. 189a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (!is_animating) 190a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) message_handler_->Close(); 191a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // else case, OnWindowHidingAnimationCompleted does the actual Close. 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_handler_->Close(); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::CloseNow() { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->CloseNow(); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)aura::WindowTreeHost* DesktopWindowTreeHostWin::AsWindowTreeHost() { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::ShowWindowWithState( 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::WindowShowState show_state) { 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->ShowWindowWithState(show_state); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::ShowMaximizedWithBounds( 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& restored_bounds) { 21258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) gfx::Rect pixel_bounds = gfx::win::DIPToScreenRect(restored_bounds); 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) message_handler_->ShowMaximizedWithBounds(pixel_bounds); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::IsVisible() const { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return message_handler_->IsVisible(); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::SetSize(const gfx::Size& size) { 22158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) gfx::Size size_in_pixels = gfx::win::DIPToScreenSize(size); 222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Size expanded = GetExpandedWindowSize( 223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) message_handler_->window_ex_style(), size_in_pixels); 224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) window_enlargement_ = 225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Vector2d(expanded.width() - size_in_pixels.width(), 226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expanded.height() - size_in_pixels.height()); 227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) message_handler_->SetSize(expanded); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::StackAtTop() { 231a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) message_handler_->StackAtTop(); 232a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 233a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::CenterWindow(const gfx::Size& size) { 23558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) gfx::Size size_in_pixels = gfx::win::DIPToScreenSize(size); 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Size expanded_size; 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) expanded_size = GetExpandedWindowSize(message_handler_->window_ex_style(), 2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) size_in_pixels); 2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window_enlargement_ = 2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Vector2d(expanded_size.width() - size_in_pixels.width(), 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) expanded_size.height() - size_in_pixels.height()); 2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) message_handler_->CenterWindow(expanded_size); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::GetWindowPlacement( 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect* bounds, 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::WindowShowState* show_state) const { 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->GetWindowPlacement(bounds, show_state); 249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InsetBottomRight(bounds, window_enlargement_); 25058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) *bounds = gfx::win::ScreenToDIPRect(*bounds); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)gfx::Rect DesktopWindowTreeHostWin::GetWindowBoundsInScreen() const { 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) gfx::Rect pixel_bounds = message_handler_->GetWindowBoundsInScreen(); 255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InsetBottomRight(&pixel_bounds, window_enlargement_); 25658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return gfx::win::ScreenToDIPRect(pixel_bounds); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)gfx::Rect DesktopWindowTreeHostWin::GetClientAreaBoundsInScreen() const { 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) gfx::Rect pixel_bounds = message_handler_->GetClientAreaBoundsInScreen(); 261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InsetBottomRight(&pixel_bounds, window_enlargement_); 26258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return gfx::win::ScreenToDIPRect(pixel_bounds); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)gfx::Rect DesktopWindowTreeHostWin::GetRestoredBounds() const { 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) gfx::Rect pixel_bounds = message_handler_->GetRestoredBounds(); 267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InsetBottomRight(&pixel_bounds, window_enlargement_); 26858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return gfx::win::ScreenToDIPRect(pixel_bounds); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)gfx::Rect DesktopWindowTreeHostWin::GetWorkAreaBoundsInScreen() const { 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MONITORINFO monitor_info; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) monitor_info.cbSize = sizeof(monitor_info); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetMonitorInfo(MonitorFromWindow(message_handler_->hwnd(), 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MONITOR_DEFAULTTONEAREST), 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &monitor_info); 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) gfx::Rect pixel_bounds = gfx::Rect(monitor_info.rcWork); 27858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return gfx::win::ScreenToDIPRect(pixel_bounds); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::SetShape(gfx::NativeRegion native_region) { 282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (native_region) { 283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) message_handler_->SetRegion(gfx::CreateHRGNFromSkRegion(*native_region)); 284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else { 285f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) message_handler_->SetRegion(NULL); 286f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 287f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 288f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) delete native_region; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::Activate() { 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->Activate(); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::Deactivate() { 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->Deactivate(); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::IsActive() const { 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return message_handler_->IsActive(); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::Maximize() { 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->Maximize(); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::Minimize() { 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->Minimize(); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::Restore() { 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->Restore(); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::IsMaximized() const { 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return message_handler_->IsMaximized(); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::IsMinimized() const { 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return message_handler_->IsMinimized(); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::HasCapture() const { 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return message_handler_->HasCapture(); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::SetAlwaysOnTop(bool always_on_top) { 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->SetAlwaysOnTop(always_on_top); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::IsAlwaysOnTop() const { 3324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return message_handler_->IsAlwaysOnTop(); 3334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 3344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 335a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void DesktopWindowTreeHostWin::SetVisibleOnAllWorkspaces(bool always_visible) { 336a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Windows does not have the concept of workspaces. 337a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 338a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::SetWindowTitle(const base::string16& title) { 340a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return message_handler_->SetTitle(title); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::ClearNativeFocus() { 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->ClearNativeFocus(); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)Widget::MoveLoopResult DesktopWindowTreeHostWin::RunMoveLoop( 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Vector2d& drag_offset, 34968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) Widget::MoveLoopSource source, 35068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) Widget::MoveLoopEscapeBehavior escape_behavior) { 35168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const bool hide_on_escape = 35268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) escape_behavior == Widget::MOVE_LOOP_ESCAPE_BEHAVIOR_HIDE; 35368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return message_handler_->RunMoveLoop(drag_offset, hide_on_escape) ? 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Widget::MOVE_LOOP_SUCCESSFUL : Widget::MOVE_LOOP_CANCELED; 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::EndMoveLoop() { 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->EndMoveLoop(); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::SetVisibilityChangedAnimationsEnabled( 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool value) { 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->SetVisibilityChangedAnimationsEnabled(value); 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content_window_->SetProperty(aura::client::kAnimationsDisabledKey, !value); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::ShouldUseNativeFrame() const { 3688f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu return IsTranslucentWindowOpacitySupported(); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::ShouldWindowContentsBeTransparent() const { 3725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If the window has a native frame, we assume it is an Aero Glass window, and 3735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // is therefore transparent. Note: This is not equivalent to calling 3745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // IsAeroGlassEnabled, because ShouldUseNativeFrame is overridden in a 3755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // subclass. 3765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ShouldUseNativeFrame(); 3775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::FrameTypeChanged() { 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->FrameTypeChanged(); 3810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) SetWindowTransparency(); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::SetFullscreen(bool fullscreen) { 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->fullscreen_handler()->SetFullscreen(fullscreen); 386a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // TODO(sky): workaround for ScopedFullscreenVisibility showing window 387a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // directly. Instead of this should listen for visibility changes and then 388a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // update window. 389a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (message_handler_->IsVisible() && !content_window_->TargetVisibility()) 390a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) content_window_->Show(); 3910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) SetWindowTransparency(); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::IsFullscreen() const { 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return message_handler_->fullscreen_handler()->fullscreen(); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::SetOpacity(unsigned char opacity) { 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->SetOpacity(static_cast<BYTE>(opacity)); 400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content_window_->layer()->SetOpacity(opacity / 255.0); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::SetWindowIcons( 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::ImageSkia& window_icon, const gfx::ImageSkia& app_icon) { 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->SetWindowIcons(window_icon, app_icon); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::InitModalType(ui::ModalType modal_type) { 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->InitModalType(modal_type); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::FlashFrame(bool flash_frame) { 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->FlashFrame(flash_frame); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::OnRootViewLayout() const { 41758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 41858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::OnNativeWidgetFocus() { 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HWNDMessageHandler will perform the proper updating on its own. 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::OnNativeWidgetBlur() { 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::IsAnimatingClosed() const { 4271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return pending_close_; 4281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 4291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4308f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liubool DesktopWindowTreeHostWin::IsTranslucentWindowOpacitySupported() const { 4318f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu return ui::win::IsAeroGlassEnabled(); 4328f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu} 4338f6e4bda48b1f7e913c8b2f770559183fd98092bBo Liu 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 4355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// DesktopWindowTreeHostWin, WindowTreeHost implementation: 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuui::EventSource* DesktopWindowTreeHostWin::GetEventSource() { 4385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return this; 4395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 4405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)gfx::AcceleratedWidget DesktopWindowTreeHostWin::GetAcceleratedWidget() { 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return message_handler_->hwnd(); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::Show() { 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->Show(); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::Hide() { 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!pending_close_) 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_handler_->Hide(); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 454c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// GetBounds and SetBounds work in pixel coordinates, whereas other get/set 455c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// methods work in DIP. 456c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)gfx::Rect DesktopWindowTreeHostWin::GetBounds() const { 4585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Rect bounds(message_handler_->GetClientAreaBounds()); 4594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // If the window bounds were expanded we need to return the original bounds 4604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // To achieve this we do the reverse of the expansion, i.e. add the 4614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // window_expansion_top_left_delta_ to the origin and subtract the 4624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // window_expansion_bottom_right_delta_ from the width and height. 4634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect without_expansion( 4644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bounds.x() + window_expansion_top_left_delta_.x(), 4654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bounds.y() + window_expansion_top_left_delta_.y(), 466f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bounds.width() - window_expansion_bottom_right_delta_.x() - 467f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) window_enlargement_.x(), 468f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bounds.height() - window_expansion_bottom_right_delta_.y() - 469f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) window_enlargement_.y()); 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return without_expansion; 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::SetBounds(const gfx::Rect& bounds) { 4744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // If the window bounds have to be expanded we need to subtract the 4754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // window_expansion_top_left_delta_ from the origin and add the 4764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // window_expansion_bottom_right_delta_ to the width and height 4775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Size old_hwnd_size(message_handler_->GetClientAreaBounds().size()); 4785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Size old_content_size = GetBounds().size(); 4795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect expanded( 4814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bounds.x() - window_expansion_top_left_delta_.x(), 4824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bounds.y() - window_expansion_top_left_delta_.y(), 4834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bounds.width() + window_expansion_bottom_right_delta_.x(), 4844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bounds.height() + window_expansion_bottom_right_delta_.y()); 485f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 486f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect new_expanded( 487f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expanded.origin(), 488f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetExpandedWindowSize(message_handler_->window_ex_style(), 489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expanded.size())); 490f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) window_enlargement_ = 491f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Vector2d(new_expanded.width() - expanded.width(), 492f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new_expanded.height() - expanded.height()); 493cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) message_handler_->SetBounds(new_expanded, old_content_size != bounds.size()); 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)gfx::Point DesktopWindowTreeHostWin::GetLocationOnNativeScreen() const { 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetBounds().origin(); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::SetCapture() { 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->SetCapture(); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::ReleaseCapture() { 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_handler_->ReleaseCapture(); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::PostNativeEvent( 5095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::NativeEvent& native_event) { 5105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 5115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::OnDeviceScaleFactorChanged( 5135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) float device_scale_factor) { 5145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 5155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::SetCursorNative(gfx::NativeCursor cursor) { 5175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::CursorLoaderWin cursor_loader; 5185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cursor_loader.SetPlatformCursor(&cursor); 5195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) message_handler_->SetCursor(cursor.platform()); 5215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 5225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::OnCursorVisibilityChangedNative(bool show) { 524f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (is_cursor_visible_ == show) 525f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return; 526f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) is_cursor_visible_ = show; 5270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) ::ShowCursor(!!show); 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::MoveCursorToNative(const gfx::Point& location) { 531b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) POINT cursor_location = location.ToPOINT(); 532b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ::ClientToScreen(GetHWND(), &cursor_location); 533b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ::SetCursorPos(cursor_location.x, cursor_location.y); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 5375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// DesktopWindowTreeHostWin, ui::EventSource implementation: 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ui::EventProcessor* DesktopWindowTreeHostWin::GetEventProcessor() { 540a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return dispatcher(); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 5445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// DesktopWindowTreeHostWin, aura::AnimationHost implementation: 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::SetHostTransitionOffsets( 5474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const gfx::Vector2d& top_left_delta, 5484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const gfx::Vector2d& bottom_right_delta) { 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect bounds_without_expansion = GetBounds(); 5504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) window_expansion_top_left_delta_ = top_left_delta; 5514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) window_expansion_bottom_right_delta_ = bottom_right_delta; 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetBounds(bounds_without_expansion); 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::OnWindowHidingAnimationCompleted() { 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (pending_close_) 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_handler_->Close(); 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 5615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// DesktopWindowTreeHostWin, HWNDMessageHandlerDelegate implementation: 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::IsWidgetWindow() const { 564c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return has_non_client_view_; 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::IsUsingCustomFrame() const { 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !GetWidget()->ShouldUseNativeFrame(); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::SchedulePaint() { 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWidget()->GetRootView()->SchedulePaint(); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::EnableInactiveRendering() { 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_widget_delegate_->EnableInactiveRendering(); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::IsInactiveRenderingDisabled() { 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return native_widget_delegate_->IsInactiveRenderingDisabled(); 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::CanResize() const { 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetWidget()->widget_delegate()->CanResize(); 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::CanMaximize() const { 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetWidget()->widget_delegate()->CanMaximize(); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::CanActivate() const { 5924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (IsModalWindowActive()) 5934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return native_widget_delegate_->CanActivate(); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::WidgetSizeIsClientSize() const { 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Widget* widget = GetWidget()->GetTopLevelWidget(); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return IsMaximized() || (widget && widget->ShouldUseNativeFrame()); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::IsModal() const { 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return native_widget_delegate_->IsModal(); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int DesktopWindowTreeHostWin::GetInitialShowState() const { 607cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return CanActivate() ? SW_SHOWNORMAL : SW_SHOWNOACTIVATE; 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::WillProcessWorkAreaChange() const { 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetWidget()->widget_delegate()->WillProcessWorkAreaChange(); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int DesktopWindowTreeHostWin::GetNonClientComponent( 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& point) const { 61658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) gfx::Point dip_position = gfx::win::ScreenToDIPPoint(point); 61790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return native_widget_delegate_->GetNonClientComponent(dip_position); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::GetWindowMask(const gfx::Size& size, 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Path* path) { 622f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (GetWidget()->non_client_view()) { 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWidget()->non_client_view()->GetWindowMask(size, path); 624f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else if (!window_enlargement_.IsZero()) { 625f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect bounds(WidgetSizeIsClientSize() 626f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ? message_handler_->GetClientAreaBoundsInScreen() 627f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : message_handler_->GetWindowBoundsInScreen()); 628f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InsetBottomRight(&bounds, window_enlargement_); 629f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) path->addRect(SkRect::MakeXYWH(0, 0, bounds.width(), bounds.height())); 630f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::GetClientAreaInsets(gfx::Insets* insets) const { 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::GetMinMaxSize(gfx::Size* min_size, 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size* max_size) const { 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *min_size = native_widget_delegate_->GetMinimumSize(); 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *max_size = native_widget_delegate_->GetMaximumSize(); 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)gfx::Size DesktopWindowTreeHostWin::GetRootViewSize() const { 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetWidget()->GetRootView()->size(); 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::ResetWindowControls() { 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWidget()->non_client_view()->ResetWindowControls(); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::PaintLayeredWindow(gfx::Canvas* canvas) { 652cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetWidget()->GetRootView()->Paint(canvas, views::CullSet()); 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)gfx::NativeViewAccessible DesktopWindowTreeHostWin::GetNativeViewAccessible() { 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetWidget()->GetRootView()->GetNativeViewAccessible(); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)InputMethod* DesktopWindowTreeHostWin::GetInputMethod() { 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetWidget()->GetInputMethodDirect(); 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::ShouldHandleSystemCommands() const { 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetWidget()->widget_delegate()->ShouldHandleSystemCommands(); 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleAppDeactivated() { 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_widget_delegate_->EnableInactiveRendering(); 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleActivationChanged(bool active) { 6724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // This can be invoked from HWNDMessageHandler::Init(), at which point we're 6734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // not in a good state and need to ignore it. 674a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // TODO(beng): Do we need this still now the host owns the dispatcher? 675a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!dispatcher()) 6764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return; 6774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (active) 679a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OnHostActivated(); 68058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) desktop_native_widget_aura_->HandleActivationChanged(active); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::HandleAppCommand(short command) { 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We treat APPCOMMAND ids as an extension of our command namespace, and just 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // let the delegate figure out what to do... 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetWidget()->widget_delegate() && 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWidget()->widget_delegate()->ExecuteWindowsCommand(command); 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleCancelMode() { 691a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) dispatcher()->DispatchCancelModeEvent(); 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleCaptureLost() { 695a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OnHostLostWindowCapture(); 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_widget_delegate_->OnMouseCaptureLost(); 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleClose() { 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWidget()->Close(); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::HandleCommand(int command) { 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetWidget()->widget_delegate()->ExecuteWindowsCommand(command); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleAccelerator( 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator& accelerator) { 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWidget()->GetFocusManager()->ProcessAccelerator(accelerator); 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleCreate() { 713f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) native_widget_delegate_->OnNativeWidgetCreated(true); 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleDestroying() { 7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) drag_drop_client_->OnNativeWidgetDestroying(GetHWND()); 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_widget_delegate_->OnNativeWidgetDestroying(); 7195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Destroy the compositor before destroying the HWND since shutdown 7215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // may try to swap to the window. 7225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DestroyCompositor(); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleDestroyed() { 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) desktop_native_widget_aura_->OnHostClosed(); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::HandleInitialFocus( 7305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::WindowShowState show_state) { 7315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return GetWidget()->SetInitialFocus(show_state); 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleDisplayChange() { 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWidget()->widget_delegate()->OnDisplayChanged(); 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleBeginWMSizeMove() { 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_widget_delegate_->OnNativeWidgetBeginUserBoundsChange(); 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleEndWMSizeMove() { 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_widget_delegate_->OnNativeWidgetEndUserBoundsChange(); 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleMove() { 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_widget_delegate_->OnNativeWidgetMove(); 748a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OnHostMoved(GetBounds().origin()); 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleWorkAreaChanged() { 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWidget()->widget_delegate()->OnWorkAreaChanged(); 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleVisibilityChanging(bool visible) { 7563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) native_widget_delegate_->OnNativeWidgetVisibilityChanging(visible); 7573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 7583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 7595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleVisibilityChanged(bool visible) { 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_widget_delegate_->OnNativeWidgetVisibilityChanged(visible); 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleClientSizeChanged( 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Size& new_size) { 765a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (dispatcher()) 766a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OnHostResized(new_size); 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleFrameChanged() { 770f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SetWindowTransparency(); 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Replace the frame and layout the contents. 772f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetWidget()->non_client_view()->UpdateFrame(); 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleNativeFocus(HWND last_focused_window) { 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(beng): inform the native_widget_delegate_. 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InputMethod* input_method = GetInputMethod(); 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (input_method) 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_method->OnFocus(); 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleNativeBlur(HWND focused_window) { 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(beng): inform the native_widget_delegate_. 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InputMethod* input_method = GetInputMethod(); 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (input_method) 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_method->OnBlur(); 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::HandleMouseEvent(const ui::MouseEvent& event) { 7905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SendEventToProcessor(const_cast<ui::MouseEvent*>(&event)); 7915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return event.handled(); 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::HandleKeyEvent(const ui::KeyEvent& event) { 7952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::HandleUntranslatedKeyEvent( 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::KeyEvent& event) { 800a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::KeyEvent duplicate_event(event); 8015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SendEventToProcessor(&duplicate_event); 8025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return duplicate_event.handled(); 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleTouchEvent( 8062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::TouchEvent& event) { 80758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // HWNDMessageHandler asynchronously processes touch events. Because of this 808a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // it's possible for the aura::WindowEventDispatcher to have been destroyed 809a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // by the time we attempt to process them. 81058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!GetWidget()->GetNativeView()) 81158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 8120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 8130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // Currently we assume the window that has capture gets touch events too. 814a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) aura::WindowTreeHost* host = 815a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) aura::WindowTreeHost::GetForAcceleratedWidget(GetCapture()); 816a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (host) { 8175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DesktopWindowTreeHostWin* target = 818a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) host->window()->GetProperty(kDesktopWindowTreeHostKey); 8190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (target && target->HasCapture() && target != this) { 8200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) POINT target_location(event.location().ToPOINT()); 8210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) ClientToScreen(GetHWND(), &target_location); 8220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) ScreenToClient(target->GetHWND(), &target_location); 8230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) ui::TouchEvent target_event(event, static_cast<View*>(NULL), 8240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) static_cast<View*>(NULL)); 8250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) target_event.set_location(gfx::Point(target_location)); 8260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) target_event.set_root_location(target_event.location()); 8275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) target->SendEventToProcessor(&target_event); 8280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return; 8290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 8300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 8315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SendEventToProcessor(const_cast<ui::TouchEvent*>(&event)); 8322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::HandleIMEMessage(UINT message, 8352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WPARAM w_param, 8362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LPARAM l_param, 8372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LRESULT* result) { 8387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MSG msg = {}; 8397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) msg.hwnd = GetHWND(); 8407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) msg.message = message; 8417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) msg.wParam = w_param; 8427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) msg.lParam = l_param; 8437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return desktop_native_widget_aura_->input_method_event_filter()-> 8447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) input_method()->OnUntranslatedIMEMessage(msg, result); 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleInputLanguageChange( 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD character_set, 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKL input_language_id) { 8507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) desktop_native_widget_aura_->input_method_event_filter()-> 8517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) input_method()->OnInputLocaleChanged(); 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::HandlePaintAccelerated( 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& invalid_rect) { 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return native_widget_delegate_->OnNativeWidgetPaintAccelerated(invalid_rect); 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandlePaint(gfx::Canvas* canvas) { 860cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // It appears possible to get WM_PAINT after WM_DESTROY. 861cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (compositor()) 862cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) compositor()->ScheduleRedrawRect(gfx::Rect()); 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::HandleTooltipNotify(int w_param, 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NMHDR* l_param, 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT* l_result) { 8684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return tooltip_ && tooltip_->HandleNotify(w_param, l_param, l_result); 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleTooltipMouseMove(UINT message, 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WPARAM w_param, 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LPARAM l_param) { 8744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // TooltipWin implementation doesn't need this. 8754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // TODO(sky): remove from HWNDMessageHandler once non-aura path nuked. 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleMenuLoop(bool in_menu_loop) { 8795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (in_menu_loop) { 8805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tooltip_disabler_.reset( 881a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) new aura::client::ScopedTooltipDisabler(window())); 8825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 8835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tooltip_disabler_.reset(); 8845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 8855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 8865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 8875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::PreHandleMSG(UINT message, 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WPARAM w_param, 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LPARAM l_param, 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT* result) { 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::PostHandleMSG(UINT message, 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WPARAM w_param, 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LPARAM l_param) { 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::HandleScrollEvent( 9005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ui::ScrollEvent& event) { 9015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SendEventToProcessor(const_cast<ui::ScrollEvent*>(&event)); 9025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return event.handled(); 9035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 9045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 905cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void DesktopWindowTreeHostWin::HandleWindowSizeChanging() { 906cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (compositor()) 907cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) compositor()->FinishAllRendering(); 908cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 909cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 9115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// DesktopWindowTreeHostWin, private: 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)Widget* DesktopWindowTreeHostWin::GetWidget() { 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return native_widget_delegate_->AsWidget(); 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const Widget* DesktopWindowTreeHostWin::GetWidget() const { 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return native_widget_delegate_->AsWidget(); 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)HWND DesktopWindowTreeHostWin::GetHWND() const { 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return message_handler_->hwnd(); 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void DesktopWindowTreeHostWin::SetWindowTransparency() { 9260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) bool transparent = ShouldUseNativeFrame() && !IsFullscreen(); 927a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) compositor()->SetHostHasTransparentBackground(transparent); 928a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) window()->SetTransparent(transparent); 929f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content_window_->SetTransparent(transparent); 9300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 9310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 9325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool DesktopWindowTreeHostWin::IsModalWindowActive() const { 9334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // This function can get called during window creation which occurs before 934a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // dispatcher() has been created. 935a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!dispatcher()) 9364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 9374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 9384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) aura::Window::Windows::const_iterator index; 939a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) for (index = window()->children().begin(); 940a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) index != window()->children().end(); 9414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ++index) { 9424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if ((*index)->GetProperty(aura::client::kModalKey) != 9434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ui:: MODAL_TYPE_NONE && (*index)->TargetVisibility()) 9444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 9454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 9464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return false; 9474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 9484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 9505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// DesktopWindowTreeHost, public: 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 9535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)DesktopWindowTreeHost* DesktopWindowTreeHost::Create( 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) internal::NativeWidgetDelegate* native_widget_delegate, 9551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DesktopNativeWidgetAura* desktop_native_widget_aura) { 9565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return new DesktopWindowTreeHostWin(native_widget_delegate, 9571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) desktop_native_widget_aura); 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace views 961