summaryrefslogtreecommitdiffstats
path: root/remoting
diff options
context:
space:
mode:
authorwez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-13 18:24:41 +0000
committerwez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-13 18:24:41 +0000
commit1bb2cf695b8c33bbcbaf5fbec87a5c5d922b8276 (patch)
treef40a13a2eedeeb53e2d2ac6a865dfe9c1e465072 /remoting
parent3419fa77a302e13a42f783c2466c2fde91d4cd95 (diff)
downloadchromium_src-1bb2cf695b8c33bbcbaf5fbec87a5c5d922b8276.zip
chromium_src-1bb2cf695b8c33bbcbaf5fbec87a5c5d922b8276.tar.gz
chromium_src-1bb2cf695b8c33bbcbaf5fbec87a5c5d922b8276.tar.bz2
Reposition the Disconnect dialog when work area dimensions change.
This prevents the Disconnect dialog from becoming hidden by the Windows task bar, or falling off-screen when the display resolution is made smaller. BUG=129907,129835 Review URL: https://chromiumcodereview.appspot.com/10825251 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@151313 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting')
-rw-r--r--remoting/host/disconnect_window_win.cc77
1 files changed, 48 insertions, 29 deletions
diff --git a/remoting/host/disconnect_window_win.cc b/remoting/host/disconnect_window_win.cc
index 06434a8..c033619 100644
--- a/remoting/host/disconnect_window_win.cc
+++ b/remoting/host/disconnect_window_win.cc
@@ -27,8 +27,13 @@
// SimpleHost: simple_host_process.cc
extern HMODULE g_hModule;
+namespace {
+
const int DISCONNECT_HOTKEY_ID = 1000;
const int kWindowBorderRadius = 14;
+const wchar_t kShellTrayWindowName[] = L"Shell_TrayWnd";
+
+} // namespace anonymous
namespace remoting {
@@ -51,6 +56,7 @@ private:
void ShutdownHost();
void EndDialog();
void SetStrings(const UiStrings& strings, const std::string& username);
+ void SetDialogPosition();
DisconnectCallback disconnect_callback_;
HWND hwnd_;
@@ -109,6 +115,17 @@ BOOL DisconnectWindowWin::OnDialogMessage(HWND hwnd, UINT msg,
hwnd_ = NULL;
return TRUE;
+ // Ensure the dialog stays visible if the work area dimensions change.
+ case WM_SETTINGCHANGE:
+ if (wParam == SPI_SETWORKAREA)
+ SetDialogPosition();
+ return TRUE;
+
+ // Ensure the dialog stays visible if the display dimensions change.
+ case WM_DISPLAYCHANGE:
+ SetDialogPosition();
+ return TRUE;
+
// Handle the disconnect hot-key.
case WM_HOTKEY:
EndDialog();
@@ -121,21 +138,20 @@ BOOL DisconnectWindowWin::OnDialogMessage(HWND hwnd, UINT msg,
SetWindowLong(hwnd, DWL_MSGRESULT, HTCAPTION);
return TRUE;
- case WM_PAINT:
+ case WM_PAINT: {
+ PAINTSTRUCT ps;
+ HDC hdc = BeginPaint(hwnd_, &ps);
+ RECT rect;
+ GetClientRect(hwnd_, &rect);
{
- PAINTSTRUCT ps;
- HDC hdc = BeginPaint(hwnd_, &ps);
- RECT rect;
- GetClientRect(hwnd_, &rect);
- {
- base::win::ScopedSelectObject border(hdc, border_pen_);
- base::win::ScopedSelectObject brush(hdc, GetStockObject(NULL_BRUSH));
- RoundRect(hdc, rect.left, rect.top, rect.right - 1, rect.bottom - 1,
- kWindowBorderRadius, kWindowBorderRadius);
- }
- EndPaint(hwnd_, &ps);
- return TRUE;
+ base::win::ScopedSelectObject border(hdc, border_pen_);
+ base::win::ScopedSelectObject brush(hdc, GetStockObject(NULL_BRUSH));
+ RoundRect(hdc, rect.left, rect.top, rect.right - 1, rect.bottom - 1,
+ kWindowBorderRadius, kWindowBorderRadius);
}
+ EndPaint(hwnd_, &ps);
+ return TRUE;
+ }
}
return FALSE;
}
@@ -182,22 +198,7 @@ void DisconnectWindowWin::Show(ChromotingHost* host,
}
SetStrings(host->ui_strings(), username);
-
- // Try to center the window above the task-bar. If that fails, use the
- // primary monitor. If that fails (very unlikely), use the default position.
- HWND taskbar = FindWindow(L"Shell_TrayWnd", NULL);
- HMONITOR monitor = MonitorFromWindow(taskbar, MONITOR_DEFAULTTOPRIMARY);
- MONITORINFO monitor_info = {sizeof(monitor_info)};
- RECT window_rect;
- if (GetMonitorInfo(monitor, &monitor_info) &&
- GetWindowRect(hwnd_, &window_rect)) {
- int window_width = window_rect.right - window_rect.left;
- int window_height = window_rect.bottom - window_rect.top;
- int top = monitor_info.rcWork.bottom - window_height;
- int left = (monitor_info.rcWork.right + monitor_info.rcWork.left -
- window_width) / 2;
- SetWindowPos(hwnd_, NULL, left, top, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
- }
+ SetDialogPosition();
ShowWindow(hwnd_, SW_SHOW);
}
@@ -273,6 +274,24 @@ void DisconnectWindowWin::SetStrings(const UiStrings& strings,
SetWindowRgn(hwnd_, rgn, TRUE);
}
+void DisconnectWindowWin::SetDialogPosition() {
+ // Try to center the window above the task-bar. If that fails, use the
+ // primary monitor. If that fails (very unlikely), use the default position.
+ HWND taskbar = FindWindow(kShellTrayWindowName, NULL);
+ HMONITOR monitor = MonitorFromWindow(taskbar, MONITOR_DEFAULTTOPRIMARY);
+ MONITORINFO monitor_info = {sizeof(monitor_info)};
+ RECT window_rect;
+ if (GetMonitorInfo(monitor, &monitor_info) &&
+ GetWindowRect(hwnd_, &window_rect)) {
+ int window_width = window_rect.right - window_rect.left;
+ int window_height = window_rect.bottom - window_rect.top;
+ int top = monitor_info.rcWork.bottom - window_height;
+ int left = (monitor_info.rcWork.right + monitor_info.rcWork.left -
+ window_width) / 2;
+ SetWindowPos(hwnd_, NULL, left, top, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
+ }
+}
+
void DisconnectWindowWin::Hide() {
EndDialog();
}