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

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

Issue 1565013002: Don't send touch events to windows like menus when the touch occurs outside the menu bounds. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove include Created 4 years, 11 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
« no previous file with comments | « ui/views/widget/desktop_aura/desktop_window_tree_host_win.h ('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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/desktop_window_tree_host_win.h" 5 #include "ui/views/widget/desktop_aura/desktop_window_tree_host_win.h"
6 6
7 #include "base/win/metro.h" 7 #include "base/win/metro.h"
8 #include "third_party/skia/include/core/SkPath.h" 8 #include "third_party/skia/include/core/SkPath.h"
9 #include "third_party/skia/include/core/SkRegion.h" 9 #include "third_party/skia/include/core/SkRegion.h"
10 #include "ui/aura/client/aura_constants.h" 10 #include "ui/aura/client/aura_constants.h"
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 internal::NativeWidgetDelegate* native_widget_delegate, 78 internal::NativeWidgetDelegate* native_widget_delegate,
79 DesktopNativeWidgetAura* desktop_native_widget_aura) 79 DesktopNativeWidgetAura* desktop_native_widget_aura)
80 : message_handler_(new HWNDMessageHandler(this)), 80 : message_handler_(new HWNDMessageHandler(this)),
81 native_widget_delegate_(native_widget_delegate), 81 native_widget_delegate_(native_widget_delegate),
82 desktop_native_widget_aura_(desktop_native_widget_aura), 82 desktop_native_widget_aura_(desktop_native_widget_aura),
83 content_window_(NULL), 83 content_window_(NULL),
84 drag_drop_client_(NULL), 84 drag_drop_client_(NULL),
85 should_animate_window_close_(false), 85 should_animate_window_close_(false),
86 pending_close_(false), 86 pending_close_(false),
87 has_non_client_view_(false), 87 has_non_client_view_(false),
88 tooltip_(NULL) { 88 tooltip_(NULL),
89 weak_factory_(this) {
89 } 90 }
90 91
91 DesktopWindowTreeHostWin::~DesktopWindowTreeHostWin() { 92 DesktopWindowTreeHostWin::~DesktopWindowTreeHostWin() {
92 // WARNING: |content_window_| has been destroyed by the time we get here. 93 // WARNING: |content_window_| has been destroyed by the time we get here.
93 desktop_native_widget_aura_->OnDesktopWindowTreeHostDestroyed(this); 94 desktop_native_widget_aura_->OnDesktopWindowTreeHostDestroyed(this);
94 DestroyDispatcher(); 95 DestroyDispatcher();
95 } 96 }
96 97
97 // static 98 // static
98 aura::Window* DesktopWindowTreeHostWin::GetContentWindowForHWND(HWND hwnd) { 99 aura::Window* DesktopWindowTreeHostWin::GetContentWindowForHWND(HWND hwnd) {
(...skipping 718 matching lines...) Expand 10 before | Expand all | Expand 10 after
817 if (!GetWidget()->GetNativeView()) 818 if (!GetWidget()->GetNativeView())
818 return; 819 return;
819 820
820 // Currently we assume the window that has capture gets touch events too. 821 // Currently we assume the window that has capture gets touch events too.
821 aura::WindowTreeHost* host = 822 aura::WindowTreeHost* host =
822 aura::WindowTreeHost::GetForAcceleratedWidget(GetCapture()); 823 aura::WindowTreeHost::GetForAcceleratedWidget(GetCapture());
823 if (host) { 824 if (host) {
824 DesktopWindowTreeHostWin* target = 825 DesktopWindowTreeHostWin* target =
825 host->window()->GetProperty(kDesktopWindowTreeHostKey); 826 host->window()->GetProperty(kDesktopWindowTreeHostKey);
826 if (target && target->HasCapture() && target != this) { 827 if (target && target->HasCapture() && target != this) {
828 // Windows like menus need to be closed if a touch occurs outside the
829 // bounds of the window.
830 if ((event.type() == ui::ET_TOUCH_PRESSED) &&
831 GetWidget()->GetNativeView()->GetProperty(
832 aura::client::kReleaseCaptureOnTouchOutside)) {
833 target->ReleaseCapture();
834 // We should send the touch to the correct window. We use PostTask here
835 // as we don't want to send the touch event in the context of the
836 // nested loop if any.
837 base::MessageLoop::current()->PostTask(
sky 2016/01/08 23:51:56 Is there no way to have the menu code do the posti
ananta 2016/01/09 00:01:15 The touch events are handled by the gesture recogn
838 FROM_HERE,
839 base::Bind(&DesktopWindowTreeHostWin::PostEventToProcessor,
840 weak_factory_.GetWeakPtr(),
841 event));
842 return;
843 }
844
827 POINT target_location(event.location().ToPOINT()); 845 POINT target_location(event.location().ToPOINT());
828 ClientToScreen(GetHWND(), &target_location); 846 ClientToScreen(GetHWND(), &target_location);
829 ScreenToClient(target->GetHWND(), &target_location); 847 ScreenToClient(target->GetHWND(), &target_location);
830 ui::TouchEvent target_event(event, static_cast<View*>(NULL), 848 ui::TouchEvent target_event(event, static_cast<View*>(NULL),
831 static_cast<View*>(NULL)); 849 static_cast<View*>(NULL));
832 target_event.set_location(gfx::Point(target_location)); 850 target_event.set_location(gfx::Point(target_location));
833 target_event.set_root_location(target_event.location()); 851 target_event.set_root_location(target_event.location());
834 target->SendEventToProcessor(&target_event); 852 target->SendEventToProcessor(&target_event);
835 return; 853 return;
836 } 854 }
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
942 for (index = window()->children().begin(); 960 for (index = window()->children().begin();
943 index != window()->children().end(); 961 index != window()->children().end();
944 ++index) { 962 ++index) {
945 if ((*index)->GetProperty(aura::client::kModalKey) != 963 if ((*index)->GetProperty(aura::client::kModalKey) !=
946 ui:: MODAL_TYPE_NONE && (*index)->TargetVisibility()) 964 ui:: MODAL_TYPE_NONE && (*index)->TargetVisibility())
947 return true; 965 return true;
948 } 966 }
949 return false; 967 return false;
950 } 968 }
951 969
970 void DesktopWindowTreeHostWin::PostEventToProcessor(
971 const ui::Event& event) {
972 SendEventToProcessor(const_cast<ui::Event*>(&event));
973 }
974
952 //////////////////////////////////////////////////////////////////////////////// 975 ////////////////////////////////////////////////////////////////////////////////
953 // DesktopWindowTreeHost, public: 976 // DesktopWindowTreeHost, public:
954 977
955 // static 978 // static
956 DesktopWindowTreeHost* DesktopWindowTreeHost::Create( 979 DesktopWindowTreeHost* DesktopWindowTreeHost::Create(
957 internal::NativeWidgetDelegate* native_widget_delegate, 980 internal::NativeWidgetDelegate* native_widget_delegate,
958 DesktopNativeWidgetAura* desktop_native_widget_aura) { 981 DesktopNativeWidgetAura* desktop_native_widget_aura) {
959 return new DesktopWindowTreeHostWin(native_widget_delegate, 982 return new DesktopWindowTreeHostWin(native_widget_delegate,
960 desktop_native_widget_aura); 983 desktop_native_widget_aura);
961 } 984 }
962 985
963 } // namespace views 986 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/widget/desktop_aura/desktop_window_tree_host_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698