Index: remoting/host/disconnect_window_win.cc |
=================================================================== |
--- remoting/host/disconnect_window_win.cc (revision 96410) |
+++ remoting/host/disconnect_window_win.cc (working copy) |
@@ -25,6 +25,8 @@ |
// SimpleHost: simple_host_process.cc |
extern HMODULE g_hModule; |
+const int DISCONNECT_HOTKEY_ID = 1000; |
Wez
2011/08/11 22:15:24
Is there any significance to this choice of value?
garykac
2011/08/11 23:04:49
It must be between 0x0000 and 0xbfff.
Having a na
|
+ |
namespace remoting { |
class DisconnectWindowWin : public DisconnectWindow { |
@@ -42,11 +44,14 @@ |
BOOL OnDialogMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); |
+ void ShutdownHost(); |
void EndDialog(); |
+ void RemoveKeyHandler(); |
remoting::ChromotingHost* host_; |
std::string username_; |
HWND hwnd_; |
+ bool has_hotkey_; |
DISALLOW_COPY_AND_ASSIGN(DisconnectWindowWin); |
}; |
@@ -54,7 +59,8 @@ |
DisconnectWindowWin::DisconnectWindowWin() |
: host_(NULL), |
username_(""), |
- hwnd_(NULL) { |
+ hwnd_(NULL), |
+ has_hotkey_(false) { |
} |
DisconnectWindowWin::~DisconnectWindowWin() { |
@@ -89,7 +95,8 @@ |
HWND hwndButton = GetDlgItem(hwnd, IDC_DISCONNECT); |
CHECK(hwndButton); |
std::wstring w_button = UTF8ToWide(kDisconnectButton); |
- w_button += UTF8ToWide(kDisconnectKeysWin); |
+ if (has_hotkey_) |
+ w_button += UTF8ToWide(kDisconnectKeysWin); |
SetWindowText(hwndButton, w_button.c_str()); |
HWND hwndSharingWith = GetDlgItem(hwnd, IDC_DISCONNECT_SHARINGWITH); |
@@ -104,6 +111,12 @@ |
SetWindowText(hwndUsername, w_username.c_str()); |
} |
return TRUE; |
+ case WM_HOTKEY: |
+ { |
+ ShutdownHost(); |
+ EndDialog(); |
+ } |
+ return TRUE; |
case WM_CLOSE: |
// Ignore close messages. |
return TRUE; |
@@ -115,8 +128,8 @@ |
switch (LOWORD(wParam)) { |
case IDC_DISCONNECT: |
{ |
- CHECK(host_); |
- host_->Shutdown(NULL); |
+ ShutdownHost(); |
+ RemoveKeyHandler(); |
::EndDialog(hwnd, LOWORD(wParam)); |
hwnd_ = NULL; |
Wez
2011/08/11 22:15:24
These lines look almost identical to EndDialog() b
garykac
2011/08/11 23:04:49
I was sortof trying to avoid having a |result| par
garykac
2011/08/11 23:04:49
I was sortof trying to avoid having a |result| par
|
} |
@@ -140,19 +153,37 @@ |
} |
ShowWindow(hwnd_, SW_SHOW); |
+ |
+ // Set up handler for Ctrl-Alt-Esc shortcut. |
+ if (!has_hotkey_) { |
+ RegisterHotKey(hwnd_, DISCONNECT_HOTKEY_ID, MOD_ALT | MOD_CONTROL, |
+ VK_ESCAPE); |
Wez
2011/08/11 22:15:24
I thought we were going to not display the hot-key
garykac
2011/08/11 23:04:49
Added SetDisconnectButtonText call here. Previousl
Wez
2011/08/11 23:58:30
My point is not about when you set the button text
garykac
2011/08/12 00:23:16
Argh. I completely missed that point (which Jamie
|
+ has_hotkey_ = true; |
+ } |
} |
+void DisconnectWindowWin::ShutdownHost() { |
+ CHECK(host_); |
+ host_->Shutdown(NULL); |
+} |
+ |
void DisconnectWindowWin::Hide() { |
EndDialog(); |
} |
void DisconnectWindowWin::EndDialog() { |
+ RemoveKeyHandler(); |
if (hwnd_) { |
::EndDialog(hwnd_, 0); |
hwnd_ = NULL; |
} |
} |
+void DisconnectWindowWin::RemoveKeyHandler() { |
Wez
2011/08/11 22:15:24
nit: Does this really need to be a separate functi
garykac
2011/08/11 23:04:49
*need*? No. But it's called from multiple places
Wez
2011/08/11 23:58:30
It's called from two places, both of which then do
garykac
2011/08/12 00:23:16
Actually it's called in 1 place now that EndDialog
|
+ UnregisterHotKey(hwnd_, DISCONNECT_HOTKEY_ID); |
+ has_hotkey_ = false; |
+} |
+ |
DisconnectWindow* DisconnectWindow::Create() { |
return new DisconnectWindowWin; |
} |