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

Unified Diff: win8/metro_driver/metro_driver_win7.cc

Issue 227573007: Third part of porting Chrome Ash to Windows 7 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: lf Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: win8/metro_driver/metro_driver_win7.cc
diff --git a/win8/metro_driver/metro_driver_win7.cc b/win8/metro_driver/metro_driver_win7.cc
index 2e5aba73fc4d6b2f9a065af77522ca5cce87dacb..76dc617d543052d064721479ed9d136011da0af5 100644
--- a/win8/metro_driver/metro_driver_win7.cc
+++ b/win8/metro_driver/metro_driver_win7.cc
@@ -5,25 +5,31 @@
#include "stdafx.h"
#include <corewindow.h>
+#include "base/command_line.h"
#include "base/logging.h"
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
+int g_window_count = 0;
LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
WPARAM wparam, LPARAM lparam) {
PAINTSTRUCT ps;
HDC hdc;
switch (message) {
ananta 2014/04/11 02:25:24 Please add some comments here about why we need th
+ case WM_CREATE:
+ ++g_window_count;
+ break;
case WM_PAINT:
hdc = ::BeginPaint(hwnd, &ps);
EndPaint(hwnd, &ps);
break;
- case WM_LBUTTONUP:
- // TODO(cpu): Remove this test code.
- ::InvalidateRect(hwnd, NULL, TRUE);
+ case WM_CLOSE:
+ DestroyWindow(hwnd);
break;
case WM_DESTROY:
- PostQuitMessage(0);
+ --g_window_count;
+ if (!g_window_count)
+ PostQuitMessage(0);
break;
default:
return ::DefWindowProc(hwnd, message, wparam, lparam);
@@ -51,7 +57,7 @@ HWND CreateMetroTopLevelWindow() {
MAKEINTATOM(::RegisterClassExW(&wcex)),
L"metro_win7",
WS_POPUP | WS_VISIBLE,
- 0, 0, 1024, 1024,
+ 0, 0, 1600, 900,
NULL, NULL, hInst, NULL);
return hwnd;
}
@@ -146,7 +152,7 @@ class CoreDispacherEmulation :
return E_FAIL;
MSG msg = {0};
- while(::GetMessage(&msg, NULL, 0, 0) != 0) {
+ while((::GetMessage(&msg, NULL, 0, 0) != 0) && g_window_count > 0) {
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
@@ -194,7 +200,8 @@ class CoreWindowEmulation
}
~CoreWindowEmulation() {
- ::DestroyWindow(core_hwnd_);
+ if (core_hwnd_)
+ ::DestroyWindow(core_hwnd_);
}
// ICoreWindow implementation:
@@ -269,6 +276,8 @@ class CoreWindowEmulation
}
virtual HRESULT STDMETHODCALLTYPE Close(void) {
+ ::PostMessage(core_hwnd_, WM_CLOSE, 0, 0);
+ core_hwnd_ = NULL;
return S_OK;
}
@@ -542,6 +551,10 @@ class CoreApplicationViewEmulation
HRESULT Activate() {
if (activated_handler_) {
+ // This form means chrome or a test has launched the viewer.
+ if (CommandLine::ForCurrentProcess()->HasSwitch("connect"))
+ return activated_handler_->Invoke(this, nullptr);
+ // This form used to reach other integration code paths.
auto ae = mswr::Make<ActivatedEvent>(
winapp::Activation::ActivationKind_File);
return activated_handler_->Invoke(this, ae.Get());
@@ -550,6 +563,10 @@ class CoreApplicationViewEmulation
}
}
+ HRESULT Close() {
+ return core_window_->Close();
+ }
+
// ICoreApplicationView implementation:
virtual HRESULT STDMETHODCALLTYPE get_CoreWindow(
winui::Core::ICoreWindow** value) {
@@ -585,7 +602,7 @@ class CoreApplicationViewEmulation
}
private:
- mswr::ComPtr<winui::Core::ICoreWindow> core_window_;
+ mswr::ComPtr<CoreWindowEmulation> core_window_;
mswr::ComPtr<ActivatedHandler> activated_handler_;
};
@@ -664,8 +681,8 @@ class CoreApplicationWin7Emulation
// ICoreApplicationExit implementation:
- virtual HRESULT STDMETHODCALLTYPE Exit(void) {
- return S_OK;
+ virtual HRESULT STDMETHODCALLTYPE Exit() {
+ return view_emulation_->Close();
}
virtual HRESULT STDMETHODCALLTYPE add_Exiting(

Powered by Google App Engine
This is Rietveld 408576698