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