summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorerg@chromium.org <erg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-14 20:34:58 +0000
committererg@chromium.org <erg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-14 20:34:58 +0000
commit19d02e07b8c964d9cb95fda001ae186a7f0e3f36 (patch)
tree9826d7b33b8385bc725032623fd38b16cc28d42d
parent9066f2add856dc2d43fe790b22657c61c7c3c34b (diff)
downloadchromium_src-19d02e07b8c964d9cb95fda001ae186a7f0e3f36.zip
chromium_src-19d02e07b8c964d9cb95fda001ae186a7f0e3f36.tar.gz
chromium_src-19d02e07b8c964d9cb95fda001ae186a7f0e3f36.tar.bz2
Desktop Aura: Reset the mouse pressed handler when capture changes.
This bug has two parts: (a) RootWindow holds state about mouse{up,down} that isn't reflected in the capture state, (b) The DefaultCaptureClient isn't aware of all instances of the CaptureClient. This creates a DesktopCaptureClient that, when one takes capture, also messages each other DesktopCaptureClient making them drop their capture and reset their extra mouse state. BUG=181275, 181101 Review URL: https://chromiumcodereview.appspot.com/12723002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@188179 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--ui/aura/root_window.cc10
-rw-r--r--ui/aura/root_window.h4
-rw-r--r--ui/aura/root_window_unittest.cc37
-rw-r--r--ui/aura/test/aura_test_base.cc14
-rw-r--r--ui/aura/test/aura_test_base.h5
-rw-r--r--ui/views/views.gyp8
-rw-r--r--ui/views/widget/desktop_aura/desktop_capture_client.cc67
-rw-r--r--ui/views/widget/desktop_aura/desktop_capture_client.h44
-rw-r--r--ui/views/widget/desktop_aura/desktop_capture_client_unittest.cc65
-rw-r--r--ui/views/widget/desktop_aura/desktop_root_window_host_linux.cc4
-rw-r--r--ui/views/widget/desktop_aura/desktop_root_window_host_linux.h4
-rw-r--r--ui/views/widget/desktop_aura/desktop_root_window_host_win.cc4
-rw-r--r--ui/views/widget/desktop_aura/desktop_root_window_host_win.h4
13 files changed, 231 insertions, 39 deletions
diff --git a/ui/aura/root_window.cc b/ui/aura/root_window.cc
index 13988b2..729ceab 100644
--- a/ui/aura/root_window.cc
+++ b/ui/aura/root_window.cc
@@ -630,6 +630,12 @@ bool RootWindow::QueryMouseLocationForTest(gfx::Point* point) const {
return host_->QueryMouseLocation(point);
}
+void RootWindow::ClearMouseHandlers() {
+ mouse_pressed_handler_ = NULL;
+ mouse_moved_handler_ = NULL;
+ mouse_event_dispatch_target_ = NULL;
+}
+
////////////////////////////////////////////////////////////////////////////////
// RootWindow, private:
@@ -958,9 +964,7 @@ void RootWindow::OnHostLostWindowCapture() {
}
void RootWindow::OnHostLostMouseGrab() {
- mouse_pressed_handler_ = NULL;
- mouse_moved_handler_ = NULL;
- mouse_event_dispatch_target_ = NULL;
+ ClearMouseHandlers();
}
void RootWindow::OnHostPaint() {
diff --git a/ui/aura/root_window.h b/ui/aura/root_window.h
index de9f034..a1d6358 100644
--- a/ui/aura/root_window.h
+++ b/ui/aura/root_window.h
@@ -277,6 +277,10 @@ class AURA_EXPORT RootWindow : public ui::CompositorDelegate,
// Exposes RootWindowHost::QueryMouseLocation() for test purposes.
bool QueryMouseLocationForTest(gfx::Point* point) const;
+ // Clears internal mouse state (such as mouse ups should be sent to the same
+ // window that ate mouse downs).
+ void ClearMouseHandlers();
+
private:
friend class Window;
friend class TestScreen;
diff --git a/ui/aura/root_window_unittest.cc b/ui/aura/root_window_unittest.cc
index cc2a857..cb52b1b 100644
--- a/ui/aura/root_window_unittest.cc
+++ b/ui/aura/root_window_unittest.cc
@@ -26,13 +26,6 @@
#include "ui/gfx/rect.h"
#include "ui/gfx/screen.h"
-#if defined(OS_WIN)
-// Windows headers define macros for these function names which screw with us.
-#if defined(CreateWindow)
-#undef CreateWindow
-#endif
-#endif
-
namespace aura {
namespace {
@@ -91,18 +84,6 @@ class ConsumeKeyHandler : public test::TestEventHandler {
DISALLOW_COPY_AND_ASSIGN(ConsumeKeyHandler);
};
-Window* CreateWindow(int id, Window* parent, WindowDelegate* delegate) {
- Window* window = new Window(
- delegate ? delegate :
- test::TestWindowDelegate::CreateSelfDestroyingDelegate());
- window->set_id(id);
- window->Init(ui::LAYER_TEXTURED);
- parent->AddChild(window);
- window->SetBounds(gfx::Rect(0, 0, 100, 100));
- window->Show();
- return window;
-}
-
bool IsFocusedWindow(aura::Window* window) {
return client::GetFocusClient(window)->GetFocusedWindow() == window;
}
@@ -376,7 +357,7 @@ TEST_F(RootWindowTest, ScrollEventDispatch) {
root_window()->SetEventFilter(filter);
test::TestWindowDelegate delegate;
- scoped_ptr<Window> w1(CreateWindow(1, root_window(), &delegate));
+ scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), &delegate));
w1->SetBounds(gfx::Rect(20, 20, 40, 40));
// A scroll event on the root-window itself is dispatched.
@@ -666,9 +647,9 @@ TEST_F(RootWindowTest, DeleteWindowDuringDispatch) {
// Verifies that we can delete a window during each phase of event handling.
// Deleting the window should not cause a crash, only prevent further
// processing from occurring.
- scoped_ptr<Window> w1(CreateWindow(1, root_window(), NULL));
+ scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), NULL));
DeletingWindowDelegate d11;
- Window* w11 = CreateWindow(11, w1.get(), &d11);
+ Window* w11 = CreateNormalWindow(11, w1.get(), &d11);
WindowTracker tracker;
DeletingEventFilter* w1_filter = new DeletingEventFilter;
w1->SetEventFilter(w1_filter);
@@ -694,7 +675,7 @@ TEST_F(RootWindowTest, DeleteWindowDuringDispatch) {
// Pre-handle step deletes w11. This will prevent the delegate and the post-
// handle steps from applying.
- w11 = CreateWindow(11, w1.get(), &d11);
+ w11 = CreateNormalWindow(11, w1.get(), &d11);
w1_filter->Reset(true);
d11.Reset(w11, false);
generator.PressLeftButton();
@@ -733,10 +714,10 @@ class DetachesParentOnTapDelegate : public test::TestWindowDelegate {
// Tests that the gesture recognizer is reset for all child windows when a
// window hides. No expectations, just checks that the test does not crash.
TEST_F(RootWindowTest, GestureRecognizerResetsTargetWhenParentHides) {
- scoped_ptr<Window> w1(CreateWindow(1, root_window(), NULL));
+ scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), NULL));
DetachesParentOnTapDelegate delegate;
- scoped_ptr<Window> parent(CreateWindow(22, w1.get(), NULL));
- Window* child = CreateWindow(11, parent.get(), &delegate);
+ scoped_ptr<Window> parent(CreateNormalWindow(22, w1.get(), NULL));
+ Window* child = CreateNormalWindow(11, parent.get(), &delegate);
test::EventGenerator generator(root_window(), child);
generator.GestureTapAt(gfx::Point(40, 40));
}
@@ -785,12 +766,12 @@ class NestedGestureDelegate : public test::TestWindowDelegate {
// Tests that gesture end is delivered after nested gesture processing.
TEST_F(RootWindowTest, GestureEndDeliveredAfterNestedGestures) {
NestedGestureDelegate d1(NULL, gfx::Point());
- scoped_ptr<Window> w1(CreateWindow(1, root_window(), &d1));
+ scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), &d1));
w1->SetBounds(gfx::Rect(0, 0, 100, 100));
test::EventGenerator nested_generator(root_window(), w1.get());
NestedGestureDelegate d2(&nested_generator, w1->bounds().CenterPoint());
- scoped_ptr<Window> w2(CreateWindow(1, root_window(), &d2));
+ scoped_ptr<Window> w2(CreateNormalWindow(1, root_window(), &d2));
w2->SetBounds(gfx::Rect(100, 0, 100, 100));
// Tap on w2 which triggers nested gestures for w1.
diff --git a/ui/aura/test/aura_test_base.cc b/ui/aura/test/aura_test_base.cc
index c507439..f6ad08c 100644
--- a/ui/aura/test/aura_test_base.cc
+++ b/ui/aura/test/aura_test_base.cc
@@ -5,6 +5,7 @@
#include "ui/aura/test/aura_test_base.h"
#include "ui/aura/test/aura_test_helper.h"
+#include "ui/aura/test/test_window_delegate.h"
#include "ui/aura/window.h"
#include "ui/base/gestures/gesture_configuration.h"
#include "ui/base/ime/text_input_test_support.h"
@@ -78,6 +79,19 @@ void AuraTestBase::TearDown() {
#endif
}
+Window* AuraTestBase::CreateNormalWindow(int id, Window* parent,
+ WindowDelegate* delegate) {
+ Window* window = new Window(
+ delegate ? delegate :
+ test::TestWindowDelegate::CreateSelfDestroyingDelegate());
+ window->set_id(id);
+ window->Init(ui::LAYER_TEXTURED);
+ parent->AddChild(window);
+ window->SetBounds(gfx::Rect(0, 0, 100, 100));
+ window->Show();
+ return window;
+}
+
Window* AuraTestBase::CreateTransientChild(int id, Window* parent) {
Window* window = new Window(NULL);
window->set_id(id);
diff --git a/ui/aura/test/aura_test_base.h b/ui/aura/test/aura_test_base.h
index c7daec3..58e4647 100644
--- a/ui/aura/test/aura_test_base.h
+++ b/ui/aura/test/aura_test_base.h
@@ -14,6 +14,7 @@
namespace aura {
class RootWindow;
class Window;
+class WindowDelegate;
namespace test {
// A base class for aura unit tests.
@@ -27,6 +28,10 @@ class AuraTestBase : public testing::Test {
virtual void SetUp() OVERRIDE;
virtual void TearDown() OVERRIDE;
+ // Creates a normal window parented to |parent|.
+ aura::Window* CreateNormalWindow(int id, Window* parent,
+ aura::WindowDelegate* delegate);
+
// Creates a transient window that is transient to |parent|.
aura::Window* CreateTransientChild(int id, aura::Window* parent);
diff --git a/ui/views/views.gyp b/ui/views/views.gyp
index 032f819..e4b1cc8e 100644
--- a/ui/views/views.gyp
+++ b/ui/views/views.gyp
@@ -343,6 +343,8 @@
'widget/default_theme_provider.h',
'widget/desktop_aura/desktop_activation_client.cc',
'widget/desktop_aura/desktop_activation_client.h',
+ 'widget/desktop_aura/desktop_capture_client.cc',
+ 'widget/desktop_aura/desktop_capture_client.h',
'widget/desktop_aura/desktop_dispatcher_client.cc',
'widget/desktop_aura/desktop_dispatcher_client.h',
'widget/desktop_aura/desktop_drag_drop_client_win.cc',
@@ -699,6 +701,7 @@
'view_model_unittest.cc',
'view_model_utils_unittest.cc',
'view_unittest.cc',
+ 'widget/desktop_aura/desktop_capture_client_unittest.cc',
'widget/native_widget_aura_unittest.cc',
'widget/native_widget_unittest.cc',
'widget/native_widget_win_unittest.cc',
@@ -710,6 +713,10 @@
'sources!': [
'touchui/touch_selection_controller_impl_unittest.cc',
],
+ }, { # use_aura==0
+ 'sources/': [
+ ['exclude', 'widget/desktop_aura'],
+ ],
}],
['OS=="win"', {
'link_settings': {
@@ -741,6 +748,7 @@
],
'sources/': [
['exclude', 'corewm'],
+ ['exclude', 'widget/desktop_aura'],
],
}],
],
diff --git a/ui/views/widget/desktop_aura/desktop_capture_client.cc b/ui/views/widget/desktop_aura/desktop_capture_client.cc
new file mode 100644
index 0000000..f52d00a
--- /dev/null
+++ b/ui/views/widget/desktop_aura/desktop_capture_client.cc
@@ -0,0 +1,67 @@
+// Copyright (c) 2012 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.
+
+#include "ui/views/widget/desktop_aura/desktop_capture_client.h"
+
+#include "ui/aura/root_window.h"
+
+namespace views {
+
+std::set<DesktopCaptureClient*> DesktopCaptureClient::live_capture_clients_;
+
+DesktopCaptureClient::DesktopCaptureClient(aura::RootWindow* root_window)
+ : root_window_(root_window),
+ capture_window_(NULL) {
+ aura::client::SetCaptureClient(root_window_, this);
+ live_capture_clients_.insert(this);
+}
+
+DesktopCaptureClient::~DesktopCaptureClient() {
+ live_capture_clients_.erase(this);
+ aura::client::SetCaptureClient(root_window_, NULL);
+}
+
+void DesktopCaptureClient::OnOtherCaptureClientTookCapture() {
+ if (capture_window_ == NULL) {
+ // While RootWindow may not technically have capture, it will store state
+ // that needs to be cleared on capture changed regarding mouse up/down.
+ root_window_->ClearMouseHandlers();
+ }
+}
+
+void DesktopCaptureClient::SetCapture(aura::Window* window) {
+ if (capture_window_ == window)
+ return;
+ root_window_->gesture_recognizer()->TransferEventsTo(capture_window_, window);
+
+ aura::Window* old_capture_window = capture_window_;
+ capture_window_ = window;
+
+ if (capture_window_) {
+ root_window_->SetNativeCapture();
+
+ for (std::set<DesktopCaptureClient*>::iterator it =
+ live_capture_clients_.begin(); it != live_capture_clients_.end();
+ ++it) {
+ if (*it != this)
+ (*it)->OnOtherCaptureClientTookCapture();
+ }
+ } else {
+ root_window_->ReleaseNativeCapture();
+ }
+
+ root_window_->UpdateCapture(old_capture_window, capture_window_);
+}
+
+void DesktopCaptureClient::ReleaseCapture(aura::Window* window) {
+ if (capture_window_ != window)
+ return;
+ SetCapture(NULL);
+}
+
+aura::Window* DesktopCaptureClient::GetCaptureWindow() {
+ return capture_window_;
+}
+
+} // namespace views
diff --git a/ui/views/widget/desktop_aura/desktop_capture_client.h b/ui/views/widget/desktop_aura/desktop_capture_client.h
new file mode 100644
index 0000000..6ba64be
--- /dev/null
+++ b/ui/views/widget/desktop_aura/desktop_capture_client.h
@@ -0,0 +1,44 @@
+// Copyright (c) 2013 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_DESKTOP_CAPTURE_CLIENT_H_
+#define UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_CAPTURE_CLIENT_H_
+
+#include <set>
+
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
+#include "ui/aura/client/capture_client.h"
+#include "ui/views/views_export.h"
+
+namespace views {
+
+// A capture client which will collaborate with all other capture clients of
+// its class. When capture is changed in an instance of this capture client,
+// capture is released in all other windows.
+class VIEWS_EXPORT DesktopCaptureClient : public aura::client::CaptureClient {
+ public:
+ explicit DesktopCaptureClient(aura::RootWindow* root_window);
+ virtual ~DesktopCaptureClient();
+
+ private:
+ // Called when another instance of the capture client takes capture.
+ void OnOtherCaptureClientTookCapture();
+
+ // Overridden from client::CaptureClient:
+ virtual void SetCapture(aura::Window* window) OVERRIDE;
+ virtual void ReleaseCapture(aura::Window* window) OVERRIDE;
+ virtual aura::Window* GetCaptureWindow() OVERRIDE;
+
+ aura::RootWindow* root_window_;
+ aura::Window* capture_window_;
+
+ static std::set<DesktopCaptureClient*> live_capture_clients_;
+
+ DISALLOW_COPY_AND_ASSIGN(DesktopCaptureClient);
+};
+
+} // namespace views
+
+#endif // UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_CAPTURE_CLIENT_H_
diff --git a/ui/views/widget/desktop_aura/desktop_capture_client_unittest.cc b/ui/views/widget/desktop_aura/desktop_capture_client_unittest.cc
new file mode 100644
index 0000000..4d78a65
--- /dev/null
+++ b/ui/views/widget/desktop_aura/desktop_capture_client_unittest.cc
@@ -0,0 +1,65 @@
+// Copyright (c) 2013 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.
+
+#include "ui/views/widget/desktop_aura/desktop_capture_client.h"
+
+#include "ui/aura/root_window.h"
+#include "ui/aura/test/aura_test_base.h"
+#include "ui/aura/test/test_screen.h"
+#include "ui/aura/test/test_window_delegate.h"
+#include "ui/base/events/event.h"
+
+namespace views {
+
+class DesktopCaptureClientTest : public aura::test::AuraTestBase {
+ public:
+ virtual void SetUp() OVERRIDE {
+ AuraTestBase::SetUp();
+ desktop_capture_client_.reset(new DesktopCaptureClient(root_window()));
+
+ second_root_.reset(new aura::RootWindow(
+ aura::RootWindow::CreateParams(gfx::Rect(0, 0, 800, 600))));
+ second_root_->Init();
+ second_root_->Show();
+ second_root_->SetHostSize(gfx::Size(800, 600));
+ second_desktop_capture_client_.reset(
+ new DesktopCaptureClient(second_root_.get()));
+ }
+
+ virtual void TearDown() OVERRIDE {
+ RunAllPendingInMessageLoop();
+ desktop_capture_client_.reset();
+
+ AuraTestBase::TearDown();
+ }
+
+ scoped_ptr<DesktopCaptureClient> desktop_capture_client_;
+ scoped_ptr<aura::RootWindow> second_root_;
+ scoped_ptr<DesktopCaptureClient> second_desktop_capture_client_;
+};
+
+// Makes sure that internal details that are set on mouse down (such as
+// mouse_pressed_handler()) are cleared when another root window takes capture.
+TEST_F(DesktopCaptureClientTest, ResetMouseEventHandlerOnCapture) {
+ // Create a window inside the RootWindow.
+ scoped_ptr<aura::Window> w1(CreateNormalWindow(1, root_window(), NULL));
+
+ // Make a synthesized mouse down event. Ensure that the RootWindow will
+ // dispatch further mouse events to |w1|.
+ ui::MouseEvent mouse_pressed_event(ui::ET_MOUSE_PRESSED, gfx::Point(5, 5),
+ gfx::Point(5, 5), 0);
+ root_window()->AsRootWindowHostDelegate()->OnHostMouseEvent(
+ &mouse_pressed_event);
+ EXPECT_EQ(w1.get(), root_window()->mouse_pressed_handler());
+
+ // Build a window in the second RootWindow.
+ scoped_ptr<aura::Window> w2(CreateNormalWindow(2, second_root_.get(), NULL));
+
+ // The act of having the second window take capture should clear out mouse
+ // pressed handler in the first RootWindow.
+ w2->SetCapture();
+ EXPECT_EQ(NULL, root_window()->mouse_pressed_handler());
+}
+
+} // namespace views
diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host_linux.cc b/ui/views/widget/desktop_aura/desktop_root_window_host_linux.cc
index a402d72..b95095e 100644
--- a/ui/views/widget/desktop_aura/desktop_root_window_host_linux.cc
+++ b/ui/views/widget/desktop_aura/desktop_root_window_host_linux.cc
@@ -11,7 +11,6 @@
#include "base/message_pump_aurax11.h"
#include "base/stringprintf.h"
#include "base/utf_string_conversions.h"
-#include "ui/aura/client/default_capture_client.h"
#include "ui/aura/client/screen_position_client.h"
#include "ui/aura/client/user_action_client.h"
#include "ui/aura/focus_manager.h"
@@ -29,6 +28,7 @@
#include "ui/views/corewm/focus_controller.h"
#include "ui/views/ime/input_method.h"
#include "ui/views/widget/desktop_aura/desktop_activation_client.h"
+#include "ui/views/widget/desktop_aura/desktop_capture_client.h"
#include "ui/views/widget/desktop_aura/desktop_dispatcher_client.h"
#include "ui/views/widget/desktop_aura/desktop_focus_rules.h"
#include "ui/views/widget/desktop_aura/desktop_layout_manager.h"
@@ -221,7 +221,7 @@ aura::RootWindow* DesktopRootWindowHostLinux::InitRootWindow(
native_widget_delegate_->OnNativeWidgetCreated();
- capture_client_.reset(new aura::client::DefaultCaptureClient(root_window_));
+ capture_client_.reset(new views::DesktopCaptureClient(root_window_));
aura::client::SetCaptureClient(root_window_, capture_client_.get());
// Ensure that the X11DesktopHandler exists so that it dispatches activation
diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host_linux.h b/ui/views/widget/desktop_aura/desktop_root_window_host_linux.h
index 8c4a97f..6d56ff9 100644
--- a/ui/views/widget/desktop_aura/desktop_root_window_host_linux.h
+++ b/ui/views/widget/desktop_aura/desktop_root_window_host_linux.h
@@ -22,7 +22,6 @@
namespace aura {
namespace client {
-class DefaultCaptureClient;
class FocusClient;
class ScreenPositionClient;
}
@@ -30,6 +29,7 @@ class ScreenPositionClient;
namespace views {
class DesktopActivationClient;
+class DesktopCaptureClient;
class DesktopDispatcherClient;
class X11DesktopWindowMoveClient;
class X11WindowEventFilter;
@@ -201,7 +201,7 @@ class VIEWS_EXPORT DesktopRootWindowHostLinux
aura::RootWindow* root_window_;
// aura:: objects that we own.
- scoped_ptr<aura::client::DefaultCaptureClient> capture_client_;
+ scoped_ptr<DesktopCaptureClient> capture_client_;
scoped_ptr<aura::client::FocusClient> focus_client_;
scoped_ptr<DesktopActivationClient> activation_client_;
scoped_ptr<views::corewm::CursorManager> cursor_client_;
diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host_win.cc b/ui/views/widget/desktop_aura/desktop_root_window_host_win.cc
index 5997cf1..199a9e1 100644
--- a/ui/views/widget/desktop_aura/desktop_root_window_host_win.cc
+++ b/ui/views/widget/desktop_aura/desktop_root_window_host_win.cc
@@ -7,7 +7,6 @@
#include "third_party/skia/include/core/SkPath.h"
#include "third_party/skia/include/core/SkRegion.h"
#include "ui/aura/client/aura_constants.h"
-#include "ui/aura/client/default_capture_client.h"
#include "ui/aura/focus_manager.h"
#include "ui/aura/root_window.h"
#include "ui/aura/window_property.h"
@@ -26,6 +25,7 @@
#include "ui/views/corewm/input_method_event_filter.h"
#include "ui/views/ime/input_method_bridge.h"
#include "ui/views/widget/desktop_aura/desktop_activation_client.h"
+#include "ui/views/widget/desktop_aura/desktop_capture_client.h"
#include "ui/views/widget/desktop_aura/desktop_dispatcher_client.h"
#include "ui/views/widget/desktop_aura/desktop_drag_drop_client_win.h"
#include "ui/views/widget/desktop_aura/desktop_focus_rules.h"
@@ -124,7 +124,7 @@ aura::RootWindow* DesktopRootWindowHostWin::Init(
native_widget_delegate_->OnNativeWidgetCreated();
- capture_client_.reset(new aura::client::DefaultCaptureClient(root_window_));
+ capture_client_.reset(new views::DesktopCaptureClient(root_window_));
aura::client::SetCaptureClient(root_window_, capture_client_.get());
if (corewm::UseFocusControllerOnDesktop()) {
diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host_win.h b/ui/views/widget/desktop_aura/desktop_root_window_host_win.h
index 0ef05d5..6e4ae8a 100644
--- a/ui/views/widget/desktop_aura/desktop_root_window_host_win.h
+++ b/ui/views/widget/desktop_aura/desktop_root_window_host_win.h
@@ -12,7 +12,6 @@
namespace aura {
namespace client {
-class DefaultCaptureClient;
class FocusClient;
class ScreenPositionClient;
}
@@ -20,6 +19,7 @@ class ScreenPositionClient;
namespace views {
class DesktopActivationClient;
+class DesktopCaptureClient;
class DesktopCursorClient;
class DesktopDispatcherClient;
class DesktopDragDropClientWin;
@@ -210,7 +210,7 @@ class VIEWS_EXPORT DesktopRootWindowHostWin
aura::RootWindow* root_window_;
scoped_ptr<HWNDMessageHandler> message_handler_;
- scoped_ptr<aura::client::DefaultCaptureClient> capture_client_;
+ scoped_ptr<DesktopCaptureClient> capture_client_;
scoped_ptr<DesktopDispatcherClient> dispatcher_client_;
scoped_ptr<aura::client::FocusClient> focus_client_;
// Depends on focus_manager_.