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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_win.cc

Issue 11028144: touch: Cleanup touch-event mode switching on windows. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: tot-merge Created 8 years, 2 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
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 "content/browser/renderer_host/render_widget_host_view_win.h" 5 #include "content/browser/renderer_host/render_widget_host_view_win.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <peninputpanel_i.c> 9 #include <peninputpanel_i.c>
10 #include <stack> 10 #include <stack>
(...skipping 933 matching lines...) Expand 10 before | Expand all | Expand 10 after
944 output->GetBitmap().getPixels()); 944 output->GetBitmap().getPixels());
945 scoped_callback_runner.Release(); 945 scoped_callback_runner.Release();
946 callback.Run(result); 946 callback.Run(result);
947 } 947 }
948 948
949 void RenderWidgetHostViewWin::SetBackground(const SkBitmap& background) { 949 void RenderWidgetHostViewWin::SetBackground(const SkBitmap& background) {
950 RenderWidgetHostViewBase::SetBackground(background); 950 RenderWidgetHostViewBase::SetBackground(background);
951 render_widget_host_->SetBackground(background); 951 render_widget_host_->SetBackground(background);
952 } 952 }
953 953
954 void RenderWidgetHostViewWin::ProcessTouchAck( 954 void RenderWidgetHostViewWin::ProcessTouchAck(bool processed) {
955 WebKit::WebInputEvent::Type type, bool processed) {
956 955
957 DCHECK(render_widget_host_->has_touch_handler() && 956 DCHECK(render_widget_host_->has_touch_handler() &&
958 touch_events_enabled_); 957 touch_events_enabled_);
959 958
960 int touch_count = touch_state_->GetNextTouchCount(); 959 int touch_count = touch_state_->GetNextTouchCount();
961 for (int i = 0; i < touch_count; ++i) { 960 for (int i = 0; i < touch_count; ++i) {
962 scoped_ptr<ui::GestureRecognizer::Gestures> gestures; 961 scoped_ptr<ui::GestureRecognizer::Gestures> gestures;
963 gestures.reset(gesture_recognizer_->AdvanceTouchQueue(this, processed)); 962 gestures.reset(gesture_recognizer_->AdvanceTouchQueue(this, processed));
964 ProcessGestures(gestures.get()); 963 ProcessGestures(gestures.get());
965 } 964 }
966
967 if (type == WebKit::WebInputEvent::TouchStart)
968 UpdateDesiredTouchMode(processed);
969 } 965 }
970 966
971 void RenderWidgetHostViewWin::SetToGestureMode() { 967 void RenderWidgetHostViewWin::UpdateDesiredTouchMode() {
972 if (base::win::GetVersion() < base::win::VERSION_WIN7) 968 // Make sure that touch events even make sense.
973 return; 969 static bool touch_mode = base::win::GetVersion() >= base::win::VERSION_WIN7 &&
974 UnregisterTouchWindow(m_hWnd); 970 CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableTouchEvents);
975 // Single finger panning is consistent with other windows applications.
976 const DWORD gesture_allow = GC_PAN_WITH_SINGLE_FINGER_VERTICALLY |
977 GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY;
978 const DWORD gesture_block = GC_PAN_WITH_GUTTER;
979 GESTURECONFIG gc[] = {
980 { GID_ZOOM, GC_ZOOM, 0 },
981 { GID_PAN, gesture_allow , gesture_block},
982 { GID_TWOFINGERTAP, GC_TWOFINGERTAP , 0},
983 { GID_PRESSANDTAP, GC_PRESSANDTAP , 0}
984 };
985 if (!SetGestureConfig(m_hWnd, 0, arraysize(gc), gc,
986 sizeof(GESTURECONFIG))) {
987 NOTREACHED();
988 }
989 touch_events_enabled_ = false;
990 }
991 971
992 bool RenderWidgetHostViewWin::SetToTouchMode() { 972 if (!touch_mode)
993 if (base::win::GetVersion() < base::win::VERSION_WIN7)
994 return false;
995 bool touch_mode = RegisterTouchWindow(m_hWnd, TWF_WANTPALM) == TRUE;
996 touch_events_enabled_ = touch_mode;
997 return touch_mode;
998 }
999
1000 void RenderWidgetHostViewWin::UpdateDesiredTouchMode(bool touch_mode) {
1001 // Make sure that touch events even make sense.
1002 bool touch_mode_valid = base::win::GetVersion() >= base::win::VERSION_WIN7 &&
1003 CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableTouchEvents);
1004 touch_mode = touch_mode_valid;
1005
1006 // Already in correct mode, nothing to do.
1007 if ((touch_mode && touch_events_enabled_) ||
1008 (!touch_mode && !touch_events_enabled_))
1009 return; 973 return;
1010 974
1011 // Now we know that the window's current state doesn't match the desired 975 // Now we know that the window's current state doesn't match the desired
1012 // state. If we want touch mode, then we attempt to register for touch 976 // state. If we want touch mode, then we attempt to register for touch
1013 // events, and otherwise to unregister. 977 // events, and otherwise to unregister.
1014 if (touch_mode) { 978 touch_events_enabled_ = RegisterTouchWindow(m_hWnd, TWF_WANTPALM) == TRUE;
1015 touch_mode = SetToTouchMode(); 979
1016 } 980 if (!touch_events_enabled_) {
1017 if (!touch_mode) { 981 UnregisterTouchWindow(m_hWnd);
1018 SetToGestureMode(); 982 // Single finger panning is consistent with other windows applications.
983 const DWORD gesture_allow = GC_PAN_WITH_SINGLE_FINGER_VERTICALLY |
984 GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY;
985 const DWORD gesture_block = GC_PAN_WITH_GUTTER;
986 GESTURECONFIG gc[] = {
987 { GID_ZOOM, GC_ZOOM, 0 },
988 { GID_PAN, gesture_allow , gesture_block},
989 { GID_TWOFINGERTAP, GC_TWOFINGERTAP , 0},
990 { GID_PRESSANDTAP, GC_PRESSANDTAP , 0}
991 };
992 if (!SetGestureConfig(m_hWnd, 0, arraysize(gc), gc, sizeof(GESTURECONFIG)))
993 NOTREACHED();
1019 } 994 }
1020 } 995 }
1021 996
1022 bool RenderWidgetHostViewWin::DispatchLongPressGestureEvent( 997 bool RenderWidgetHostViewWin::DispatchLongPressGestureEvent(
1023 ui::GestureEvent* event) { 998 ui::GestureEvent* event) {
1024 return ForwardGestureEventToRenderer(event); 999 return ForwardGestureEventToRenderer(event);
1025 } 1000 }
1026 1001
1027 bool RenderWidgetHostViewWin::DispatchCancelTouchEvent( 1002 bool RenderWidgetHostViewWin::DispatchCancelTouchEvent(
1028 ui::TouchEvent* event) { 1003 ui::TouchEvent* event) {
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
1263 1238
1264 LRESULT RenderWidgetHostViewWin::OnCreate(CREATESTRUCT* create_struct) { 1239 LRESULT RenderWidgetHostViewWin::OnCreate(CREATESTRUCT* create_struct) {
1265 TRACE_EVENT0("browser", "RenderWidgetHostViewWin::OnCreate"); 1240 TRACE_EVENT0("browser", "RenderWidgetHostViewWin::OnCreate");
1266 // Call the WM_INPUTLANGCHANGE message handler to initialize the input locale 1241 // Call the WM_INPUTLANGCHANGE message handler to initialize the input locale
1267 // of a browser process. 1242 // of a browser process.
1268 OnInputLangChange(0, 0); 1243 OnInputLangChange(0, 0);
1269 // Marks that window as supporting mouse-wheel messages rerouting so it is 1244 // Marks that window as supporting mouse-wheel messages rerouting so it is
1270 // scrolled when under the mouse pointer even if inactive. 1245 // scrolled when under the mouse pointer even if inactive.
1271 props_.push_back(ui::SetWindowSupportsRerouteMouseWheel(m_hWnd)); 1246 props_.push_back(ui::SetWindowSupportsRerouteMouseWheel(m_hWnd));
1272 1247
1273 bool touch_enabled = base::win::GetVersion() >= base::win::VERSION_WIN7 && 1248 UpdateDesiredTouchMode();
1274 CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableTouchEvents);
1275 if (touch_enabled)
1276 SetToTouchMode();
1277 else
1278 SetToGestureMode();
1279
1280 UpdateIMEState(); 1249 UpdateIMEState();
1281 1250
1282 return 0; 1251 return 0;
1283 } 1252 }
1284 1253
1285 void RenderWidgetHostViewWin::OnActivate(UINT action, BOOL minimized, 1254 void RenderWidgetHostViewWin::OnActivate(UINT action, BOOL minimized,
1286 HWND window) { 1255 HWND window) {
1287 TRACE_EVENT0("browser", "RenderWidgetHostViewWin::OnActivate"); 1256 TRACE_EVENT0("browser", "RenderWidgetHostViewWin::OnActivate");
1288 // If the container is a popup, clicking elsewhere on screen should close the 1257 // If the container is a popup, clicking elsewhere on screen should close the
1289 // popup. 1258 // popup.
(...skipping 1840 matching lines...) Expand 10 before | Expand all | Expand 10 after
3130 // receive a focus change in the context of a pointer down message, it means 3099 // receive a focus change in the context of a pointer down message, it means
3131 // that the pointer down message occurred on the edit field and we should 3100 // that the pointer down message occurred on the edit field and we should
3132 // display the on screen keyboard 3101 // display the on screen keyboard
3133 if (!received_focus_change_after_pointer_down_ && virtual_keyboard_) 3102 if (!received_focus_change_after_pointer_down_ && virtual_keyboard_)
3134 DisplayOnScreenKeyboardIfNeeded(); 3103 DisplayOnScreenKeyboardIfNeeded();
3135 received_focus_change_after_pointer_down_ = false; 3104 received_focus_change_after_pointer_down_ = false;
3136 pointer_down_context_ = false; 3105 pointer_down_context_ = false;
3137 } 3106 }
3138 3107
3139 } // namespace content 3108 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_win.h ('k') | content/browser/renderer_host/test_render_view_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698