Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: ui/views/widget/desktop_aura/x11_topmost_window_finder.cc

Issue 291583003: Revert of Fix X11TopmostWindowFinder (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/views/widget/desktop_aura/desktop_window_tree_host_x11_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/views/widget/desktop_aura/x11_topmost_window_finder.h" 5 #include "ui/views/widget/desktop_aura/x11_topmost_window_finder.h"
6 6
7 #include <X11/Xutil.h>
8
9 #include "ui/aura/client/screen_position_client.h"
10 #include "ui/aura/window.h" 7 #include "ui/aura/window.h"
11 #include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h" 8 #include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h"
12 9
13 namespace views { 10 namespace views {
14 11
15 X11TopmostWindowFinder::X11TopmostWindowFinder() : toplevel_(None) { 12 X11TopmostWindowFinder::X11TopmostWindowFinder() : toplevel_(None) {
16 } 13 }
17 14
18 X11TopmostWindowFinder::~X11TopmostWindowFinder() { 15 X11TopmostWindowFinder::~X11TopmostWindowFinder() {
19 } 16 }
(...skipping 10 matching lines...) Expand all
30 for (size_t i = 0; i < local_process_windows.size(); ++i) { 27 for (size_t i = 0; i < local_process_windows.size(); ++i) {
31 if (ShouldStopIteratingAtLocalProcessWindow(local_process_windows[i])) { 28 if (ShouldStopIteratingAtLocalProcessWindow(local_process_windows[i])) {
32 found_local_process_window = true; 29 found_local_process_window = true;
33 break; 30 break;
34 } 31 }
35 } 32 }
36 if (!found_local_process_window) 33 if (!found_local_process_window)
37 return NULL; 34 return NULL;
38 35
39 ui::EnumerateTopLevelWindows(this); 36 ui::EnumerateTopLevelWindows(this);
40 return DesktopWindowTreeHostX11::GetContentWindowForXID(toplevel_); 37 return views::DesktopWindowTreeHostX11::GetContentWindowForXID(toplevel_);
41 } 38 }
42 39
43 XID X11TopmostWindowFinder::FindWindowAt(const gfx::Point& screen_loc) { 40 XID X11TopmostWindowFinder::FindWindowAt(const gfx::Point& screen_loc) {
44 screen_loc_ = screen_loc; 41 screen_loc_ = screen_loc;
45 ui::EnumerateTopLevelWindows(this); 42 ui::EnumerateTopLevelWindows(this);
46 return toplevel_; 43 return toplevel_;
47 } 44 }
48 45
49 bool X11TopmostWindowFinder::ShouldStopIterating(XID xid) { 46 bool X11TopmostWindowFinder::ShouldStopIterating(XID xid) {
50 if (!ui::IsWindowVisible(xid)) 47 if (!ui::IsWindowVisible(xid))
(...skipping 16 matching lines...) Expand all
67 return false; 64 return false;
68 } 65 }
69 66
70 bool X11TopmostWindowFinder::ShouldStopIteratingAtLocalProcessWindow( 67 bool X11TopmostWindowFinder::ShouldStopIteratingAtLocalProcessWindow(
71 aura::Window* window) { 68 aura::Window* window) {
72 if (ignore_.find(window) != ignore_.end()) 69 if (ignore_.find(window) != ignore_.end())
73 return false; 70 return false;
74 71
75 // Currently |window|->IsVisible() always returns true. 72 // Currently |window|->IsVisible() always returns true.
76 // TODO(pkotwicz): Fix this. crbug.com/353038 73 // TODO(pkotwicz): Fix this. crbug.com/353038
77 if (!window->IsVisible()) 74 return window->IsVisible() &&
78 return false; 75 window->GetBoundsInScreen().Contains(screen_loc_);
79
80 DesktopWindowTreeHostX11* host =
81 DesktopWindowTreeHostX11::GetHostForXID(
82 window->GetHost()->GetAcceleratedWidget());
83 if (!host->GetX11RootWindowOuterBounds().Contains(screen_loc_))
84 return false;
85
86 ::Region shape = host->GetWindowShape();
87 if (!shape)
88 return true;
89
90 aura::client::ScreenPositionClient* screen_position_client =
91 aura::client::GetScreenPositionClient(window->GetRootWindow());
92 gfx::Point window_loc(screen_loc_);
93 screen_position_client->ConvertPointFromScreen(window, &window_loc);
94 return XPointInRegion(shape, window_loc.x(), window_loc.y()) == True;
95 } 76 }
96 77
97 } // namespace views 78 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/widget/desktop_aura/desktop_window_tree_host_x11_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698