summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-14 18:38:31 +0000
committerpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-14 18:38:31 +0000
commitdf9fd0d0bfef305243b90b193a6211ae64193fd5 (patch)
treee07b282802e4474502b35246439d8048eff4ba06 /chrome
parenta5f9bded7d8d8ff47ba62507c188106dba40229c (diff)
downloadchromium_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.cc8
-rw-r--r--chrome/common/win_util.cc5
-rw-r--r--chrome/common/win_util.h4
-rw-r--r--chrome/views/window/window_win.cc8
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