blob: 5e3567a75283df63acd21ddfd4c70f2aa6f40e4e [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_VIEWS_WIDGET_DESKTOP_AURA_X11_TOPMOST_WINDOW_FINDER_H_
#define UI_VIEWS_WIDGET_DESKTOP_AURA_X11_TOPMOST_WINDOW_FINDER_H_
#include <set>
#include "ui/base/x/x11_util.h"
#include "ui/gfx/geometry/point.h"
#include "ui/views/views_export.h"
namespace aura {
class Window;
}
namespace views {
// Utility class for finding the topmost window at a given screen position.
class VIEWS_EXPORT X11TopmostWindowFinder
: public ui::EnumerateWindowsDelegate {
public:
X11TopmostWindowFinder();
~X11TopmostWindowFinder() override;
// Returns the topmost window at |screen_loc_in_pixels|, ignoring the windows
// in |ignore|. Returns NULL if the topmost window at |screen_loc_in_pixels|
// does not belong to Chrome.
aura::Window* FindLocalProcessWindowAt(const gfx::Point& screen_loc_in_pixels,
const std::set<aura::Window*>& ignore);
// Returns the topmost window at |screen_loc_in_pixels|.
XID FindWindowAt(const gfx::Point& screen_loc_in_pixels);
private:
// ui::EnumerateWindowsDelegate:
bool ShouldStopIterating(XID xid) override;
// Returns true if |window| does not not belong to |ignore|, is visible and
// contains |screen_loc_|.
bool ShouldStopIteratingAtLocalProcessWindow(aura::Window* window);
gfx::Point screen_loc_in_pixels_;
std::set<aura::Window*> ignore_;
XID toplevel_;
DISALLOW_COPY_AND_ASSIGN(X11TopmostWindowFinder);
};
} // namespace
#endif // UI_VIEWS_WIDGET_DESKTOP_AURA_X11_TOPMOST_WINDOW_FINDER_H_