| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "win8/metro_driver/stdafx.h" | 5 #include "win8/metro_driver/stdafx.h" |
| 6 #include "win8/metro_driver/chrome_app_view_ash.h" | 6 #include "win8/metro_driver/chrome_app_view_ash.h" |
| 7 | 7 |
| 8 #include <corewindow.h> | 8 #include <corewindow.h> |
| 9 #include <shellapi.h> | 9 #include <shellapi.h> |
| 10 #include <windows.foundation.h> | 10 #include <windows.foundation.h> |
| 11 | 11 |
| 12 #include "base/bind.h" | 12 #include "base/bind.h" |
| 13 #include "base/command_line.h" | 13 #include "base/command_line.h" |
| 14 #include "base/files/file_path.h" | 14 #include "base/files/file_path.h" |
| 15 #include "base/message_loop/message_loop.h" | 15 #include "base/message_loop/message_loop.h" |
| 16 #include "base/path_service.h" | 16 #include "base/path_service.h" |
| 17 #include "base/threading/thread.h" | 17 #include "base/threading/thread.h" |
| 18 #include "base/win/metro.h" | 18 #include "base/win/metro.h" |
| 19 #include "base/win/win_util.h" | 19 #include "base/win/win_util.h" |
| 20 #include "chrome/common/chrome_switches.h" | 20 #include "chrome/common/chrome_switches.h" |
| 21 #include "ipc/ipc_channel.h" | 21 #include "ipc/ipc_channel.h" |
| 22 #include "ipc/ipc_channel_proxy.h" | 22 #include "ipc/ipc_channel_proxy.h" |
| 23 #include "ipc/ipc_sender.h" | 23 #include "ipc/ipc_sender.h" |
| 24 #include "ui/events/gestures/gesture_sequence.h" | 24 #include "ui/events/gestures/gesture_sequence.h" |
| 25 #include "ui/metro_viewer/metro_viewer_messages.h" | 25 #include "ui/metro_viewer/metro_viewer_messages.h" |
| 26 #include "win8/metro_driver/file_picker_ash.h" | 26 #include "win8/metro_driver/file_picker_ash.h" |
| 27 #include "win8/metro_driver/ime/ime_popup_monitor.h" |
| 28 #include "win8/metro_driver/ime/keyevent_filter.h" |
| 29 #include "win8/metro_driver/ime/language_profile_monitor.h" |
| 30 #include "win8/metro_driver/ime/text_service.h" |
| 27 #include "win8/metro_driver/metro_driver.h" | 31 #include "win8/metro_driver/metro_driver.h" |
| 28 #include "win8/metro_driver/winrt_utils.h" | 32 #include "win8/metro_driver/winrt_utils.h" |
| 29 #include "win8/viewer/metro_viewer_constants.h" | 33 #include "win8/viewer/metro_viewer_constants.h" |
| 30 | 34 |
| 31 typedef winfoundtn::ITypedEventHandler< | 35 typedef winfoundtn::ITypedEventHandler< |
| 32 winapp::Core::CoreApplicationView*, | 36 winapp::Core::CoreApplicationView*, |
| 33 winapp::Activation::IActivatedEventArgs*> ActivatedHandler; | 37 winapp::Activation::IActivatedEventArgs*> ActivatedHandler; |
| 34 | 38 |
| 35 typedef winfoundtn::ITypedEventHandler< | 39 typedef winfoundtn::ITypedEventHandler< |
| 36 winui::Core::CoreWindow*, | 40 winui::Core::CoreWindow*, |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 IPC_MESSAGE_HANDLER(MetroViewerHostMsg_OpenURLOnDesktop, | 161 IPC_MESSAGE_HANDLER(MetroViewerHostMsg_OpenURLOnDesktop, |
| 158 OnOpenURLOnDesktop) | 162 OnOpenURLOnDesktop) |
| 159 IPC_MESSAGE_HANDLER(MetroViewerHostMsg_SetCursor, OnSetCursor) | 163 IPC_MESSAGE_HANDLER(MetroViewerHostMsg_SetCursor, OnSetCursor) |
| 160 IPC_MESSAGE_HANDLER(MetroViewerHostMsg_DisplayFileOpen, | 164 IPC_MESSAGE_HANDLER(MetroViewerHostMsg_DisplayFileOpen, |
| 161 OnDisplayFileOpenDialog) | 165 OnDisplayFileOpenDialog) |
| 162 IPC_MESSAGE_HANDLER(MetroViewerHostMsg_DisplayFileSaveAs, | 166 IPC_MESSAGE_HANDLER(MetroViewerHostMsg_DisplayFileSaveAs, |
| 163 OnDisplayFileSaveAsDialog) | 167 OnDisplayFileSaveAsDialog) |
| 164 IPC_MESSAGE_HANDLER(MetroViewerHostMsg_DisplaySelectFolder, | 168 IPC_MESSAGE_HANDLER(MetroViewerHostMsg_DisplaySelectFolder, |
| 165 OnDisplayFolderPicker) | 169 OnDisplayFolderPicker) |
| 166 IPC_MESSAGE_HANDLER(MetroViewerHostMsg_SetCursorPos, OnSetCursorPos) | 170 IPC_MESSAGE_HANDLER(MetroViewerHostMsg_SetCursorPos, OnSetCursorPos) |
| 171 IPC_MESSAGE_HANDLER(MetroViewerHostMsg_ImeCancelComposition, |
| 172 OnImeCancelComposition) |
| 173 IPC_MESSAGE_HANDLER(MetroViewerHostMsg_ImeTextInputClientUpdated, |
| 174 OnImeTextInputClientChanged) |
| 167 IPC_MESSAGE_UNHANDLED(__debugbreak()) | 175 IPC_MESSAGE_UNHANDLED(__debugbreak()) |
| 168 IPC_END_MESSAGE_MAP() | 176 IPC_END_MESSAGE_MAP() |
| 169 return true; | 177 return true; |
| 170 } | 178 } |
| 171 | 179 |
| 172 virtual void OnChannelError() OVERRIDE { | 180 virtual void OnChannelError() OVERRIDE { |
| 173 DVLOG(1) << "Channel error. Exiting."; | 181 DVLOG(1) << "Channel error. Exiting."; |
| 174 MetroExit(app_view_->core_window_hwnd()); | 182 MetroExit(app_view_->core_window_hwnd()); |
| 175 // In early Windows 8 versions the code above sometimes fails so we call | 183 // In early Windows 8 versions the code above sometimes fails so we call |
| 176 // it a second time with a NULL window which just calls Exit(). | 184 // it a second time with a NULL window which just calls Exit(). |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 | 242 |
| 235 void OnSetCursorPos(int x, int y) { | 243 void OnSetCursorPos(int x, int y) { |
| 236 VLOG(1) << "In IPC OnSetCursorPos: " << x << ", " << y; | 244 VLOG(1) << "In IPC OnSetCursorPos: " << x << ", " << y; |
| 237 ui_proxy_->PostTask( | 245 ui_proxy_->PostTask( |
| 238 FROM_HERE, | 246 FROM_HERE, |
| 239 base::Bind(&ChromeAppViewAsh::OnSetCursorPos, | 247 base::Bind(&ChromeAppViewAsh::OnSetCursorPos, |
| 240 base::Unretained(app_view_), | 248 base::Unretained(app_view_), |
| 241 x, y)); | 249 x, y)); |
| 242 } | 250 } |
| 243 | 251 |
| 252 void OnImeCancelComposition() { |
| 253 ui_proxy_->PostTask( |
| 254 FROM_HERE, |
| 255 base::Bind(&ChromeAppViewAsh::OnImeCancelComposition, |
| 256 base::Unretained(app_view_))); |
| 257 } |
| 258 |
| 259 void OnImeTextInputClientChanged( |
| 260 const std::vector<int32>& input_scopes, |
| 261 const std::vector<metro_viewer::CharacterBounds>& character_bounds) { |
| 262 ui_proxy_->PostTask( |
| 263 FROM_HERE, |
| 264 base::Bind(&ChromeAppViewAsh::OnImeUpdateTextInputClient, |
| 265 base::Unretained(app_view_), |
| 266 input_scopes, |
| 267 character_bounds)); |
| 268 } |
| 244 | 269 |
| 245 scoped_refptr<base::MessageLoopProxy> ui_proxy_; | 270 scoped_refptr<base::MessageLoopProxy> ui_proxy_; |
| 246 ChromeAppViewAsh* app_view_; | 271 ChromeAppViewAsh* app_view_; |
| 247 }; | 272 }; |
| 248 | 273 |
| 249 bool WaitForChromeIPCConnection(const std::string& channel_name) { | 274 bool WaitForChromeIPCConnection(const std::string& channel_name) { |
| 250 int ms_elapsed = 0; | 275 int ms_elapsed = 0; |
| 251 while (!IPC::Channel::IsNamedServerInitialized(channel_name) && | 276 while (!IPC::Channel::IsNamedServerInitialized(channel_name) && |
| 252 ms_elapsed < 10000) { | 277 ms_elapsed < 10000) { |
| 253 ms_elapsed += 500; | 278 ms_elapsed += 500; |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 428 sei.nShow = SW_SHOWNORMAL; | 453 sei.nShow = SW_SHOWNORMAL; |
| 429 sei.lpFile = chrome_exe_path.value().c_str(); | 454 sei.lpFile = chrome_exe_path.value().c_str(); |
| 430 sei.lpDirectory = L""; | 455 sei.lpDirectory = L""; |
| 431 sei.lpParameters = parameters.c_str(); | 456 sei.lpParameters = parameters.c_str(); |
| 432 ::ShellExecuteEx(&sei); | 457 ::ShellExecuteEx(&sei); |
| 433 return true; | 458 return true; |
| 434 } | 459 } |
| 435 | 460 |
| 436 } // namespace | 461 } // namespace |
| 437 | 462 |
| 463 struct ChromeAppViewAsh::TextInputClientState { |
| 464 std::vector<int32> input_scopes; |
| 465 std::vector<metro_viewer::CharacterBounds> composition_character_bounds; |
| 466 }; |
| 467 |
| 438 ChromeAppViewAsh::ChromeAppViewAsh() | 468 ChromeAppViewAsh::ChromeAppViewAsh() |
| 439 : mouse_down_flags_(ui::EF_NONE), | 469 : mouse_down_flags_(ui::EF_NONE), |
| 440 ui_channel_(nullptr), | 470 ui_channel_(nullptr), |
| 441 core_window_hwnd_(NULL), | 471 core_window_hwnd_(NULL), |
| 442 ui_loop_(base::MessageLoop::TYPE_UI) { | 472 ui_loop_(base::MessageLoop::TYPE_UI), |
| 473 text_input_client_state_(new TextInputClientState) { |
| 443 DVLOG(1) << __FUNCTION__; | 474 DVLOG(1) << __FUNCTION__; |
| 444 globals.previous_state = | 475 globals.previous_state = |
| 445 winapp::Activation::ApplicationExecutionState_NotRunning; | 476 winapp::Activation::ApplicationExecutionState_NotRunning; |
| 446 } | 477 } |
| 447 | 478 |
| 448 ChromeAppViewAsh::~ChromeAppViewAsh() { | 479 ChromeAppViewAsh::~ChromeAppViewAsh() { |
| 449 DVLOG(1) << __FUNCTION__; | 480 DVLOG(1) << __FUNCTION__; |
| 450 } | 481 } |
| 451 | 482 |
| 452 IFACEMETHODIMP | 483 IFACEMETHODIMP |
| 453 ChromeAppViewAsh::Initialize(winapp::Core::ICoreApplicationView* view) { | 484 ChromeAppViewAsh::Initialize(winapp::Core::ICoreApplicationView* view) { |
| 454 view_ = view; | 485 view_ = view; |
| 455 DVLOG(1) << __FUNCTION__; | 486 DVLOG(1) << __FUNCTION__; |
| 456 HRESULT hr = view_->add_Activated(mswr::Callback<ActivatedHandler>( | 487 HRESULT hr = view_->add_Activated(mswr::Callback<ActivatedHandler>( |
| 457 this, &ChromeAppViewAsh::OnActivate).Get(), | 488 this, &ChromeAppViewAsh::OnActivate).Get(), |
| 458 &activated_token_); | 489 &activated_token_); |
| 459 CheckHR(hr); | 490 CheckHR(hr); |
| 491 if (!metro_driver::InstallKeyEventFilter()) |
| 492 return E_FAIL; |
| 460 return hr; | 493 return hr; |
| 461 } | 494 } |
| 462 | 495 |
| 463 IFACEMETHODIMP | 496 IFACEMETHODIMP |
| 464 ChromeAppViewAsh::SetWindow(winui::Core::ICoreWindow* window) { | 497 ChromeAppViewAsh::SetWindow(winui::Core::ICoreWindow* window) { |
| 465 window_ = window; | 498 window_ = window; |
| 466 DVLOG(1) << __FUNCTION__; | 499 DVLOG(1) << __FUNCTION__; |
| 467 | 500 |
| 468 // Retrieve the native window handle via the interop layer. | 501 // Retrieve the native window handle via the interop layer. |
| 469 mswr::ComPtr<ICoreWindowInterop> interop; | 502 mswr::ComPtr<ICoreWindowInterop> interop; |
| 470 HRESULT hr = window->QueryInterface(interop.GetAddressOf()); | 503 HRESULT hr = window->QueryInterface(interop.GetAddressOf()); |
| 471 CheckHR(hr); | 504 CheckHR(hr); |
| 472 hr = interop->get_WindowHandle(&core_window_hwnd_); | 505 hr = interop->get_WindowHandle(&core_window_hwnd_); |
| 473 CheckHR(hr); | 506 CheckHR(hr); |
| 474 | 507 |
| 508 text_service_.reset(new metro_driver::TextService(core_window_hwnd_, this)); |
| 509 metro_driver::AddImePopupObserver(this); |
| 510 metro_driver::AddLanguageProfileObserver(this); |
| 511 |
| 475 hr = window_->add_SizeChanged(mswr::Callback<SizeChangedHandler>( | 512 hr = window_->add_SizeChanged(mswr::Callback<SizeChangedHandler>( |
| 476 this, &ChromeAppViewAsh::OnSizeChanged).Get(), | 513 this, &ChromeAppViewAsh::OnSizeChanged).Get(), |
| 477 &sizechange_token_); | 514 &sizechange_token_); |
| 478 CheckHR(hr); | 515 CheckHR(hr); |
| 479 | 516 |
| 480 // Register for pointer and keyboard notifications. We forward | 517 // Register for pointer and keyboard notifications. We forward |
| 481 // them to the browser process via IPC. | 518 // them to the browser process via IPC. |
| 482 hr = window_->add_PointerMoved(mswr::Callback<PointerEventHandler>( | 519 hr = window_->add_PointerMoved(mswr::Callback<PointerEventHandler>( |
| 483 this, &ChromeAppViewAsh::OnPointerMoved).Get(), | 520 this, &ChromeAppViewAsh::OnPointerMoved).Get(), |
| 484 &pointermoved_token_); | 521 &pointermoved_token_); |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 612 ui_loop_.PostTask(FROM_HERE, base::Bind(&RunMessageLoop, dispatcher.Get())); | 649 ui_loop_.PostTask(FROM_HERE, base::Bind(&RunMessageLoop, dispatcher.Get())); |
| 613 ui_loop_.Run(); | 650 ui_loop_.Run(); |
| 614 | 651 |
| 615 DVLOG(0) << "ProcessEvents done, hr=" << hr; | 652 DVLOG(0) << "ProcessEvents done, hr=" << hr; |
| 616 return hr; | 653 return hr; |
| 617 } | 654 } |
| 618 | 655 |
| 619 IFACEMETHODIMP | 656 IFACEMETHODIMP |
| 620 ChromeAppViewAsh::Uninitialize() { | 657 ChromeAppViewAsh::Uninitialize() { |
| 621 DVLOG(1) << __FUNCTION__; | 658 DVLOG(1) << __FUNCTION__; |
| 659 metro_driver::UninstallKeyEventFilter(); |
| 660 metro_driver::RemoveImePopupObserver(this); |
| 661 metro_driver::RemoveLanguageProfileObserver(this); |
| 622 window_ = nullptr; | 662 window_ = nullptr; |
| 623 view_ = nullptr; | 663 view_ = nullptr; |
| 624 core_window_hwnd_ = NULL; | 664 core_window_hwnd_ = NULL; |
| 625 return S_OK; | 665 return S_OK; |
| 626 } | 666 } |
| 627 | 667 |
| 628 // static | 668 // static |
| 629 HRESULT ChromeAppViewAsh::Unsnap() { | 669 HRESULT ChromeAppViewAsh::Unsnap() { |
| 630 mswr::ComPtr<winui::ViewManagement::IApplicationViewStatics> view_statics; | 670 mswr::ComPtr<winui::ViewManagement::IApplicationViewStatics> view_statics; |
| 631 HRESULT hr = winrt_utils::CreateActivationFactory( | 671 HRESULT hr = winrt_utils::CreateActivationFactory( |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 780 DVLOG(1) << __FUNCTION__; | 820 DVLOG(1) << __FUNCTION__; |
| 781 DVLOG(1) << "Success: " << success; | 821 DVLOG(1) << "Success: " << success; |
| 782 if (ui_channel_) { | 822 if (ui_channel_) { |
| 783 ui_channel_->Send(new MetroViewerHostMsg_SelectFolderDone( | 823 ui_channel_->Send(new MetroViewerHostMsg_SelectFolderDone( |
| 784 success, | 824 success, |
| 785 base::FilePath(folder_picker->result()))); | 825 base::FilePath(folder_picker->result()))); |
| 786 } | 826 } |
| 787 delete folder_picker; | 827 delete folder_picker; |
| 788 } | 828 } |
| 789 | 829 |
| 830 void ChromeAppViewAsh::OnImeCancelComposition() { |
| 831 text_service_->CancelComposition(); |
| 832 } |
| 833 |
| 834 void ChromeAppViewAsh::OnImeUpdateTextInputClient( |
| 835 const std::vector<int32>& input_scopes, |
| 836 const std::vector<metro_viewer::CharacterBounds>& character_bounds) { |
| 837 if (text_input_client_state_->input_scopes != input_scopes) { |
| 838 text_service_->OnDocumentTypeChanged(input_scopes); |
| 839 text_input_client_state_->input_scopes = input_scopes; |
| 840 } |
| 841 text_input_client_state_->composition_character_bounds = character_bounds; |
| 842 } |
| 843 |
| 844 void ChromeAppViewAsh::OnCandidatePopupChanged(bool shown) { |
| 845 ui_channel_->Send(new MetroViewerHostMsg_ImeCandidatePopupChanged(shown)); |
| 846 } |
| 847 |
| 848 void ChromeAppViewAsh::OnInputSourceChanged(LANGID langid, bool is_ime) { |
| 849 ui_channel_->Send(new MetroViewerHostMsg_ImeInputSourceChanged( |
| 850 langid, is_ime)); |
| 851 } |
| 852 |
| 853 void ChromeAppViewAsh::OnCompositionChanged( |
| 854 const string16& text, |
| 855 int32 selection_start, |
| 856 int32 selection_end, |
| 857 const std::vector<metro_viewer::UnderlineInfo>& underlines) { |
| 858 ui_channel_->Send(new MetroViewerHostMsg_ImeCompositionChanged( |
| 859 text, selection_start, selection_end, underlines)); |
| 860 } |
| 861 |
| 862 void ChromeAppViewAsh::OnTextCommitted(const string16& text) { |
| 863 ui_channel_->Send(new MetroViewerHostMsg_ImeTextCommitted(text)); |
| 864 } |
| 865 |
| 866 RECT ChromeAppViewAsh::GetCaretBounds() { |
| 867 if (text_input_client_state_->composition_character_bounds.empty()) { |
| 868 const RECT rect = {}; |
| 869 return rect; |
| 870 } |
| 871 const metro_viewer::CharacterBounds& bounds = |
| 872 text_input_client_state_->composition_character_bounds[0]; |
| 873 POINT left_top = {bounds.left, bounds.top}; |
| 874 POINT right_bottom = {bounds.right, bounds.bottom}; |
| 875 ::ClientToScreen(this->core_window_hwnd_, &left_top); |
| 876 ::ClientToScreen(this->core_window_hwnd_, &right_bottom); |
| 877 const RECT rect = { |
| 878 left_top.x, |
| 879 left_top.y, |
| 880 right_bottom.x, |
| 881 right_bottom.y, |
| 882 }; |
| 883 return rect; |
| 884 } |
| 885 |
| 886 bool ChromeAppViewAsh::GetCompositionCharacterBounds(uint32 index, RECT* rect) { |
| 887 if (index >= text_input_client_state_->composition_character_bounds.size()) { |
| 888 return false; |
| 889 } |
| 890 const metro_viewer::CharacterBounds& bounds = |
| 891 text_input_client_state_->composition_character_bounds[index]; |
| 892 POINT left_top = {bounds.left, bounds.top}; |
| 893 POINT right_bottom = {bounds.right, bounds.bottom}; |
| 894 ::ClientToScreen(this->core_window_hwnd_, &left_top); |
| 895 ::ClientToScreen(this->core_window_hwnd_, &right_bottom); |
| 896 ::SetRect(rect, left_top.x, left_top.y, right_bottom.x, right_bottom.y); |
| 897 return true; |
| 898 } |
| 899 |
| 790 HRESULT ChromeAppViewAsh::OnActivate( | 900 HRESULT ChromeAppViewAsh::OnActivate( |
| 791 winapp::Core::ICoreApplicationView*, | 901 winapp::Core::ICoreApplicationView*, |
| 792 winapp::Activation::IActivatedEventArgs* args) { | 902 winapp::Activation::IActivatedEventArgs* args) { |
| 793 DVLOG(1) << __FUNCTION__; | 903 DVLOG(1) << __FUNCTION__; |
| 794 // Note: If doing more work in this function, you migth need to call | 904 // Note: If doing more work in this function, you migth need to call |
| 795 // get_PreviousExecutionState() and skip the work if the result is | 905 // get_PreviousExecutionState() and skip the work if the result is |
| 796 // ApplicationExecutionState_Running and globals.previous_state is too. | 906 // ApplicationExecutionState_Running and globals.previous_state is too. |
| 797 args->get_PreviousExecutionState(&globals.previous_state); | 907 args->get_PreviousExecutionState(&globals.previous_state); |
| 798 DVLOG(1) << "Previous Execution State: " << globals.previous_state; | 908 DVLOG(1) << "Previous Execution State: " << globals.previous_state; |
| 799 | 909 |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1026 winui::Core::CoreWindowActivationState state; | 1136 winui::Core::CoreWindowActivationState state; |
| 1027 HRESULT hr = args->get_WindowActivationState(&state); | 1137 HRESULT hr = args->get_WindowActivationState(&state); |
| 1028 if (FAILED(hr)) | 1138 if (FAILED(hr)) |
| 1029 return hr; | 1139 return hr; |
| 1030 | 1140 |
| 1031 // Treat both full activation (Ash was reopened from the Start Screen or from | 1141 // Treat both full activation (Ash was reopened from the Start Screen or from |
| 1032 // any other Metro entry point in Windows) and pointer activation (user | 1142 // any other Metro entry point in Windows) and pointer activation (user |
| 1033 // clicked back in Ash after using another app on another monitor) the same. | 1143 // clicked back in Ash after using another app on another monitor) the same. |
| 1034 if (state == winui::Core::CoreWindowActivationState_CodeActivated || | 1144 if (state == winui::Core::CoreWindowActivationState_CodeActivated || |
| 1035 state == winui::Core::CoreWindowActivationState_PointerActivated) { | 1145 state == winui::Core::CoreWindowActivationState_PointerActivated) { |
| 1146 switch (state) { |
| 1147 case winui::Core::CoreWindowActivationState_CodeActivated: |
| 1148 case winui::Core::CoreWindowActivationState_PointerActivated: |
| 1149 text_service_->OnWindowActivated(); |
| 1150 break; |
| 1151 } |
| 1036 ui_channel_->Send(new MetroViewerHostMsg_WindowActivated()); | 1152 ui_channel_->Send(new MetroViewerHostMsg_WindowActivated()); |
| 1037 } | 1153 } |
| 1038 return S_OK; | 1154 return S_OK; |
| 1039 } | 1155 } |
| 1040 | 1156 |
| 1041 HRESULT ChromeAppViewAsh::HandleSearchRequest( | 1157 HRESULT ChromeAppViewAsh::HandleSearchRequest( |
| 1042 winapp::Activation::IActivatedEventArgs* args) { | 1158 winapp::Activation::IActivatedEventArgs* args) { |
| 1043 mswr::ComPtr<winapp::Activation::ISearchActivatedEventArgs> search_args; | 1159 mswr::ComPtr<winapp::Activation::ISearchActivatedEventArgs> search_args; |
| 1044 CheckHR(args->QueryInterface( | 1160 CheckHR(args->QueryInterface( |
| 1045 winapp::Activation::IID_ISearchActivatedEventArgs, &search_args)); | 1161 winapp::Activation::IID_ISearchActivatedEventArgs, &search_args)); |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1136 mswr::ComPtr<winapp::Core::ICoreApplicationExit> app_exit; | 1252 mswr::ComPtr<winapp::Core::ICoreApplicationExit> app_exit; |
| 1137 CheckHR(core_app.As(&app_exit)); | 1253 CheckHR(core_app.As(&app_exit)); |
| 1138 globals.app_exit = app_exit.Detach(); | 1254 globals.app_exit = app_exit.Detach(); |
| 1139 } | 1255 } |
| 1140 | 1256 |
| 1141 IFACEMETHODIMP | 1257 IFACEMETHODIMP |
| 1142 ChromeAppViewFactory::CreateView(winapp::Core::IFrameworkView** view) { | 1258 ChromeAppViewFactory::CreateView(winapp::Core::IFrameworkView** view) { |
| 1143 *view = mswr::Make<ChromeAppViewAsh>().Detach(); | 1259 *view = mswr::Make<ChromeAppViewAsh>().Detach(); |
| 1144 return (*view) ? S_OK : E_OUTOFMEMORY; | 1260 return (*view) ? S_OK : E_OUTOFMEMORY; |
| 1145 } | 1261 } |
| OLD | NEW |