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

Side by Side Diff: ui/views/widget/widget_interactive_uitest.cc

Issue 334933008: Enable setting capture to a non-toplevel widget when the widget is activated on Linux (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix test on CrOS Created 6 years, 5 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.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 (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/path_service.h" 8 #include "base/path_service.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
(...skipping 912 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 EXPECT_EQ(0, mouse_view1->ExitedCalls()); 923 EXPECT_EQ(0, mouse_view1->ExitedCalls());
924 924
925 widget2.SetCapture(NULL); 925 widget2.SetCapture(NULL);
926 EXPECT_EQ(0, mouse_view1->EnteredCalls()); 926 EXPECT_EQ(0, mouse_view1->EnteredCalls());
927 // Grabbing native capture on Windows generates a ui::ET_MOUSE_EXITED event 927 // Grabbing native capture on Windows generates a ui::ET_MOUSE_EXITED event
928 // in addition to the one generated by Chrome. 928 // in addition to the one generated by Chrome.
929 EXPECT_LT(0, mouse_view1->ExitedCalls()); 929 EXPECT_LT(0, mouse_view1->ExitedCalls());
930 } 930 }
931 #endif 931 #endif
932 932
933 namespace {
934
935 // Widget observer which grabs capture when the widget is activated.
936 class CaptureOnActivationObserver : public WidgetObserver {
937 public:
938 CaptureOnActivationObserver() {
939 }
940 virtual ~CaptureOnActivationObserver() {
941 }
942
943 // WidgetObserver:
944 virtual void OnWidgetActivationChanged(Widget* widget, bool active) OVERRIDE {
945 if (active)
946 widget->SetCapture(NULL);
947 }
948
949 private:
950 DISALLOW_COPY_AND_ASSIGN(CaptureOnActivationObserver);
951 };
952
953 } // namespace
954
955 // Test that setting capture on widget activation of a non-toplevel widget
956 // (e.g. a bubble on Linux) succeeds.
957 TEST_F(WidgetCaptureTest, SetCaptureToNonToplevel) {
958 Widget toplevel;
959 Widget::InitParams toplevel_params =
960 CreateParams(Widget::InitParams::TYPE_WINDOW_FRAMELESS);
961 toplevel_params.native_widget = CreateNativeWidget(true, &toplevel);
962 toplevel_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
963 toplevel.Init(toplevel_params);
964 toplevel.Show();
965
966 Widget* child = new Widget;
967 Widget::InitParams child_params =
968 CreateParams(Widget::InitParams::TYPE_WINDOW_FRAMELESS);
969 child_params.parent = toplevel.GetNativeView();
970 child_params.context = toplevel.GetNativeView();
971 child->Init(child_params);
972
973 CaptureOnActivationObserver observer;
974 child->AddObserver(&observer);
975 child->Show();
976
977 EXPECT_TRUE(child->HasCapture());
978 }
979
980
933 #if defined(OS_WIN) 981 #if defined(OS_WIN)
934 namespace { 982 namespace {
935 983
936 // Used to verify OnMouseEvent() has been invoked. 984 // Used to verify OnMouseEvent() has been invoked.
937 class MouseEventTrackingWidget : public Widget { 985 class MouseEventTrackingWidget : public Widget {
938 public: 986 public:
939 MouseEventTrackingWidget() : got_mouse_event_(false) {} 987 MouseEventTrackingWidget() : got_mouse_event_(false) {}
940 virtual ~MouseEventTrackingWidget() {} 988 virtual ~MouseEventTrackingWidget() {}
941 989
942 bool GetAndClearGotMouseEvent() { 990 bool GetAndClearGotMouseEvent() {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
993 ui::EventDispatchDetails details = widget1.GetNativeWindow()-> 1041 ui::EventDispatchDetails details = widget1.GetNativeWindow()->
994 GetHost()->event_processor()->OnEventFromSource(&mouse_event); 1042 GetHost()->event_processor()->OnEventFromSource(&mouse_event);
995 ASSERT_FALSE(details.dispatcher_destroyed); 1043 ASSERT_FALSE(details.dispatcher_destroyed);
996 EXPECT_TRUE(widget1.GetAndClearGotMouseEvent()); 1044 EXPECT_TRUE(widget1.GetAndClearGotMouseEvent());
997 EXPECT_FALSE(widget2.GetAndClearGotMouseEvent()); 1045 EXPECT_FALSE(widget2.GetAndClearGotMouseEvent());
998 } 1046 }
999 #endif 1047 #endif
1000 1048
1001 } // namespace test 1049 } // namespace test
1002 } // namespace views 1050 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698