diff options
author | pkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-14 18:38:31 +0000 |
---|---|---|
committer | pkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-14 18:38:31 +0000 |
commit | df9fd0d0bfef305243b90b193a6211ae64193fd5 (patch) | |
tree | e07b282802e4474502b35246439d8048eff4ba06 /chrome | |
parent | a5f9bded7d8d8ff47ba62507c188106dba40229c (diff) | |
download | chromium_src-df9fd0d0bfef305243b90b193a6211ae64193fd5.zip chromium_src-df9fd0d0bfef305243b90b193a6211ae64193fd5.tar.gz chromium_src-df9fd0d0bfef305243b90b193a6211ae64193fd5.tar.bz2 |
Don't reserve space for an auto-hide taskbar that's not always-on-top. Windows native behavior is to cover these.
BUG=9976
Review URL: http://codereview.chromium.org/66055
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13683 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/views/frame/browser_frame.cc | 8 | ||||
-rw-r--r-- | chrome/common/win_util.cc | 5 | ||||
-rw-r--r-- | chrome/common/win_util.h | 4 | ||||
-rw-r--r-- | chrome/views/window/window_win.cc | 8 |
4 files changed, 13 insertions, 12 deletions
diff --git a/chrome/browser/views/frame/browser_frame.cc b/chrome/browser/views/frame/browser_frame.cc index 8255372..6e43b6c 100644 --- a/chrome/browser/views/frame/browser_frame.cc +++ b/chrome/browser/views/frame/browser_frame.cc @@ -138,13 +138,13 @@ LRESULT BrowserFrame::OnNCCalcSize(BOOL mode, LPARAM l_param) { // disappear. HMONITOR monitor = MonitorFromWindow(GetNativeView(), MONITOR_DEFAULTTONEAREST); - if (win_util::EdgeHasAutoHideTaskbar(ABE_LEFT, monitor)) + if (win_util::EdgeHasTopmostAutoHideTaskbar(ABE_LEFT, monitor)) client_rect->left += win_util::kAutoHideTaskbarThicknessPx; - if (win_util::EdgeHasAutoHideTaskbar(ABE_RIGHT, monitor)) + if (win_util::EdgeHasTopmostAutoHideTaskbar(ABE_RIGHT, monitor)) client_rect->right -= win_util::kAutoHideTaskbarThicknessPx; - if (win_util::EdgeHasAutoHideTaskbar(ABE_BOTTOM, monitor)) { + if (win_util::EdgeHasTopmostAutoHideTaskbar(ABE_BOTTOM, monitor)) { client_rect->bottom -= win_util::kAutoHideTaskbarThicknessPx; - } else if (win_util::EdgeHasAutoHideTaskbar(ABE_TOP, monitor)) { + } else if (win_util::EdgeHasTopmostAutoHideTaskbar(ABE_TOP, monitor)) { // Tricky bit. Due to a bug in DwmDefWindowProc()'s handling of // WM_NCHITTEST, having any nonclient area atop the window causes the // caption buttons to draw onscreen but not respond to mouse hover/clicks. diff --git a/chrome/common/win_util.cc b/chrome/common/win_util.cc index bf96cfb..3facfb8 100644 --- a/chrome/common/win_util.cc +++ b/chrome/common/win_util.cc @@ -524,14 +524,15 @@ void CenterAndSizeWindow(HWND parent, HWND window, const SIZE& pref, } } -bool EdgeHasAutoHideTaskbar(UINT edge, HMONITOR monitor) { +bool EdgeHasTopmostAutoHideTaskbar(UINT edge, HMONITOR monitor) { APPBARDATA taskbar_data = { 0 }; taskbar_data.cbSize = sizeof APPBARDATA; taskbar_data.uEdge = edge; HWND taskbar = reinterpret_cast<HWND>(SHAppBarMessage(ABM_GETAUTOHIDEBAR, &taskbar_data)); return ::IsWindow(taskbar) && - (MonitorFromWindow(taskbar, MONITOR_DEFAULTTONEAREST) == monitor); + (MonitorFromWindow(taskbar, MONITOR_DEFAULTTONULL) == monitor) && + (GetWindowLong(taskbar, GWL_EXSTYLE) & WS_EX_TOPMOST); } HANDLE GetSectionFromProcess(HANDLE section, HANDLE process, bool read_only) { diff --git a/chrome/common/win_util.h b/chrome/common/win_util.h index b30ef5c..1dbfe21 100644 --- a/chrome/common/win_util.h +++ b/chrome/common/win_util.h @@ -218,8 +218,8 @@ void CenterAndSizeWindow(HWND parent, HWND window, const SIZE& pref, bool pref_is_client); // Returns true if edge |edge| (one of ABE_LEFT, TOP, RIGHT, or BOTTOM) of -// monitor |monitor| has an auto-hiding taskbar. -bool EdgeHasAutoHideTaskbar(UINT edge, HMONITOR monitor); +// monitor |monitor| has an auto-hiding taskbar that's always-on-top. +bool EdgeHasTopmostAutoHideTaskbar(UINT edge, HMONITOR monitor); // Duplicates a section handle from another process to the current process. // Returns the new valid handle if the function succeed. NULL otherwise. diff --git a/chrome/views/window/window_win.cc b/chrome/views/window/window_win.cc index 7d1b3dc..87fa43f 100644 --- a/chrome/views/window/window_win.cc +++ b/chrome/views/window/window_win.cc @@ -627,13 +627,13 @@ LRESULT WindowWin::OnNCCalcSize(BOOL mode, LPARAM l_param) { // disappear. HMONITOR monitor = MonitorFromWindow(GetNativeView(), MONITOR_DEFAULTTONEAREST); - if (win_util::EdgeHasAutoHideTaskbar(ABE_LEFT, monitor)) + if (win_util::EdgeHasTopmostAutoHideTaskbar(ABE_LEFT, monitor)) client_rect->left += win_util::kAutoHideTaskbarThicknessPx; - if (win_util::EdgeHasAutoHideTaskbar(ABE_TOP, monitor)) + if (win_util::EdgeHasTopmostAutoHideTaskbar(ABE_TOP, monitor)) client_rect->top += win_util::kAutoHideTaskbarThicknessPx; - if (win_util::EdgeHasAutoHideTaskbar(ABE_RIGHT, monitor)) + if (win_util::EdgeHasTopmostAutoHideTaskbar(ABE_RIGHT, monitor)) client_rect->right -= win_util::kAutoHideTaskbarThicknessPx; - if (win_util::EdgeHasAutoHideTaskbar(ABE_BOTTOM, monitor)) + if (win_util::EdgeHasTopmostAutoHideTaskbar(ABE_BOTTOM, monitor)) client_rect->bottom -= win_util::kAutoHideTaskbarThicknessPx; // We cannot return WVR_REDRAW when there is nonclient area, or Windows |