1ce0537b80087a6225273040a987414b1dd081aa0Romain Guy// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2ce0537b80087a6225273040a987414b1dd081aa0Romain Guy// Use of this source code is governed by a BSD-style license that can be 3ce0537b80087a6225273040a987414b1dd081aa0Romain Guy// found in the LICENSE file. 4ce0537b80087a6225273040a987414b1dd081aa0Romain Guy 5ce0537b80087a6225273040a987414b1dd081aa0Romain Guy#include "ui/views/widget/monitor_win.h" 6ce0537b80087a6225273040a987414b1dd081aa0Romain Guy 7ce0537b80087a6225273040a987414b1dd081aa0Romain Guy#include <shellapi.h> 8ce0537b80087a6225273040a987414b1dd081aa0Romain Guy 9ce0537b80087a6225273040a987414b1dd081aa0Romain Guy#include "base/logging.h" 10ce0537b80087a6225273040a987414b1dd081aa0Romain Guy#include "base/win/win_util.h" 11ce0537b80087a6225273040a987414b1dd081aa0Romain Guy#include "ui/gfx/rect.h" 12ce0537b80087a6225273040a987414b1dd081aa0Romain Guy 13ce0537b80087a6225273040a987414b1dd081aa0Romain Guynamespace views { 14ce0537b80087a6225273040a987414b1dd081aa0Romain Guy 15ce0537b80087a6225273040a987414b1dd081aa0Romain Guygfx::Rect GetMonitorBoundsForRect(const gfx::Rect& rect) { 16ce0537b80087a6225273040a987414b1dd081aa0Romain Guy RECT p_rect = rect.ToRECT(); 175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy HMONITOR monitor = MonitorFromRect(&p_rect, MONITOR_DEFAULTTONEAREST); 185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy if (monitor) { 19ce0537b80087a6225273040a987414b1dd081aa0Romain Guy MONITORINFO mi = {0}; 20ce0537b80087a6225273040a987414b1dd081aa0Romain Guy mi.cbSize = sizeof(mi); 21ce0537b80087a6225273040a987414b1dd081aa0Romain Guy base::win::GetMonitorInfoWrapper(monitor, &mi); 22059e12ccd20f5c249724a8362d6bac325334ea76Romain Guy return gfx::Rect(mi.rcWork); 23029f64303b8fe506ef34c12777da86b830d3bf7aDerek Sollenberger } 24fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy NOTREACHED(); 25fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy return gfx::Rect(); 26c15008e72ec00ca20a271c3006dac649fd07533bRomain Guy} 27ce0537b80087a6225273040a987414b1dd081aa0Romain Guy 28ce0537b80087a6225273040a987414b1dd081aa0Romain GuyHWND GetTopmostAutoHideTaskbarForEdge(UINT edge, HMONITOR monitor) { 29ce0537b80087a6225273040a987414b1dd081aa0Romain Guy // NOTE: this may be invoked on a background thread. 30ce0537b80087a6225273040a987414b1dd081aa0Romain Guy APPBARDATA taskbar_data = { sizeof(APPBARDATA), NULL, 0, edge }; 31ce0537b80087a6225273040a987414b1dd081aa0Romain Guy HWND taskbar = reinterpret_cast<HWND>(SHAppBarMessage(ABM_GETAUTOHIDEBAR, 32d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase &taskbar_data)); 33d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase return (::IsWindow(taskbar) && (monitor != NULL) && 34d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase (MonitorFromWindow(taskbar, MONITOR_DEFAULTTONULL) == monitor) && 35d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase (GetWindowLong(taskbar, GWL_EXSTYLE) & WS_EX_TOPMOST)) ? 36d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase taskbar : NULL; 37d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase} 385baa3a62a97544669fba6d65a11c07f252e654ddSteve Block 39d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase} // namespace views 40d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase