| Index: remoting/host/continue_window_win.cc
|
| ===================================================================
|
| --- remoting/host/continue_window_win.cc (revision 89904)
|
| +++ remoting/host/continue_window_win.cc (working copy)
|
| @@ -4,31 +4,125 @@
|
|
|
| #include "remoting/host/continue_window.h"
|
|
|
| +#include <windows.h>
|
| +
|
| #include "base/compiler_specific.h"
|
| #include "base/logging.h"
|
| +#include "remoting/host/chromoting_host.h"
|
| +#include "remoting/host/host_plugin_resource.h"
|
|
|
| +// TODO(garykac): Lots of duplicated code in this file and
|
| +// disconnect_window_win.cc. These global floating windows are temporary so
|
| +// they should be deleted soon. If we need to expand this then we should
|
| +// create a class with the shared code.
|
| +
|
| +// HMODULE from DllMain/WinMain. This is needed to find our dialog resource.
|
| +// This is defined in:
|
| +// Plugin: host_plugin.cc
|
| +// SimpleHost: simple_host_process.cc
|
| +extern HMODULE g_hModule;
|
| +
|
| namespace remoting {
|
|
|
| -class ContinueWindowWin : public remoting::ContinueWindow {
|
| +class ContinueWindowWin : public ContinueWindow {
|
| public:
|
| - ContinueWindowWin() {}
|
| - virtual ~ContinueWindowWin() {}
|
| + ContinueWindowWin();
|
| + virtual ~ContinueWindowWin();
|
|
|
| virtual void Show(remoting::ChromotingHost* host) OVERRIDE;
|
| virtual void Hide() OVERRIDE;
|
|
|
| private:
|
| + static BOOL CALLBACK DialogProc(HWND hwmd, UINT msg, WPARAM wParam,
|
| + LPARAM lParam);
|
| +
|
| + BOOL OnDialogMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
| +
|
| + void EndDialog();
|
| +
|
| + remoting::ChromotingHost* host_;
|
| + HWND hwnd_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(ContinueWindowWin);
|
| };
|
|
|
| -void ContinueWindowWin::Show(remoting::ChromotingHost* host) {
|
| - NOTIMPLEMENTED();
|
| +ContinueWindowWin::ContinueWindowWin()
|
| + : host_(NULL),
|
| + hwnd_(NULL) {
|
| }
|
|
|
| +ContinueWindowWin::~ContinueWindowWin() {
|
| + EndDialog();
|
| +}
|
| +
|
| +BOOL CALLBACK ContinueWindowWin::DialogProc(HWND hwnd, UINT msg,
|
| + WPARAM wParam, LPARAM lParam) {
|
| + ContinueWindowWin* win = NULL;
|
| + if (msg == WM_INITDIALOG) {
|
| + win = reinterpret_cast<ContinueWindowWin*>(lParam);
|
| + CHECK(win);
|
| + SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR)win);
|
| + } else {
|
| + LONG_PTR lp = GetWindowLongPtr(hwnd, DWLP_USER);
|
| + win = reinterpret_cast<ContinueWindowWin*>(lp);
|
| + }
|
| + if (win == NULL)
|
| + return FALSE;
|
| + return win->OnDialogMessage(hwnd, msg, wParam, lParam);
|
| +}
|
| +
|
| +BOOL ContinueWindowWin::OnDialogMessage(HWND hwnd, UINT msg,
|
| + WPARAM wParam, LPARAM lParam) {
|
| + switch (msg) {
|
| + case WM_INITDIALOG:
|
| + return TRUE;
|
| + case WM_CLOSE:
|
| + // Ignore close messages.
|
| + return TRUE;
|
| + case WM_DESTROY:
|
| + // Ensure we don't try to use the HWND anymore.
|
| + hwnd_ = NULL;
|
| + return TRUE;
|
| + case WM_COMMAND:
|
| + switch (LOWORD(wParam)) {
|
| + case IDC_CONTINUE:
|
| + {
|
| + CHECK(host_);
|
| + host_->PauseSession(false);
|
| + ::EndDialog(hwnd, LOWORD(wParam));
|
| + hwnd_ = NULL;
|
| + }
|
| + return TRUE;
|
| + }
|
| + }
|
| + return FALSE;
|
| +}
|
| +
|
| +void ContinueWindowWin::Show(ChromotingHost* host) {
|
| + host_ = host;
|
| +
|
| + CHECK(!hwnd_);
|
| + hwnd_ = CreateDialogParam(g_hModule, MAKEINTRESOURCE(IDD_CONTINUE), NULL,
|
| + (DLGPROC)DialogProc, (LPARAM)this);
|
| + if (!hwnd_) {
|
| + LOG(ERROR) << "Unable to create Disconnect dialog for remoting.";
|
| + return;
|
| + }
|
| +
|
| + ShowWindow(hwnd_, SW_SHOW);
|
| +}
|
| +
|
| void ContinueWindowWin::Hide() {
|
| - NOTIMPLEMENTED();
|
| + EndDialog();
|
| }
|
|
|
| +void ContinueWindowWin::EndDialog() {
|
| + if (hwnd_) {
|
| + ::EndDialog(hwnd_, 0);
|
| + hwnd_ = NULL;
|
| + }
|
| +}
|
| +
|
| ContinueWindow* ContinueWindow::Create() {
|
| return new ContinueWindowWin();
|
| }
|
|
|