Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / ui / views / widget / desktop_aura / x11_topmost_window_finder.h
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef UI_VIEWS_WIDGET_DESKTOP_AURA_X11_TOPMOST_WINDOW_FINDER_H_
6 #define UI_VIEWS_WIDGET_DESKTOP_AURA_X11_TOPMOST_WINDOW_FINDER_H_
7
8 #include <set>
9
10 #include "ui/base/x/x11_util.h"
11 #include "ui/gfx/point.h"
12 #include "ui/views/views_export.h"
13
14 namespace aura {
15 class Window;
16 }
17
18 namespace views {
19
20 // Utility class for finding the topmost window at a given screen position.
21 class VIEWS_EXPORT X11TopmostWindowFinder
22     : public ui::EnumerateWindowsDelegate {
23  public:
24   X11TopmostWindowFinder();
25   ~X11TopmostWindowFinder() override;
26
27   // Returns the topmost window at |screen_loc|, ignoring the windows in
28   // |ignore|. Returns NULL if the topmost window at |screen_loc| does not
29   // belong to Chrome.
30   aura::Window* FindLocalProcessWindowAt(const gfx::Point& screen_loc,
31                                          const std::set<aura::Window*>& ignore);
32
33   // Returns the topmost window at |screen_loc|.
34   XID FindWindowAt(const gfx::Point& screen_loc);
35
36  private:
37   // ui::EnumerateWindowsDelegate:
38   bool ShouldStopIterating(XID xid) override;
39
40   // Returns true if |window| does not not belong to |ignore|, is visible and
41   // contains |screen_loc_|.
42   bool ShouldStopIteratingAtLocalProcessWindow(aura::Window* window);
43
44   gfx::Point screen_loc_;
45   std::set<aura::Window*> ignore_;
46   XID toplevel_;
47
48   DISALLOW_COPY_AND_ASSIGN(X11TopmostWindowFinder);
49 };
50
51 }  // namespace
52
53 #endif  // UI_VIEWS_WIDGET_DESKTOP_AURA_X11_TOPMOST_WINDOW_FINDER_H_