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

Side by Side Diff: third_party/WebKit/Source/web/WebViewImpl.cpp

Issue 2558113002: Drop-down closes via tap/touch again. (Closed)
Patch Set: Always reset the m_lastHiddenPopUp at the end of a GestureTap Created 4 years 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 | « third_party/WebKit/Source/web/WebViewImpl.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 /* 1 /*
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 798 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 case WebInputEvent::GestureLongPress: 809 case WebInputEvent::GestureLongPress:
810 for (size_t i = 0; i < m_linkHighlights.size(); ++i) 810 for (size_t i = 0; i < m_linkHighlights.size(); ++i)
811 m_linkHighlights[i]->startHighlightAnimationIfNeeded(); 811 m_linkHighlights[i]->startHighlightAnimationIfNeeded();
812 break; 812 break;
813 default: 813 default:
814 break; 814 break;
815 } 815 }
816 816
817 switch (event.type) { 817 switch (event.type) {
818 case WebInputEvent::GestureTap: { 818 case WebInputEvent::GestureTap: {
819 // If there is a popup open, close it as the user is clicking on the page
820 // (outside of the popup). We also save it so we can prevent a tap on an
821 // element from immediately reopening the same popup.
822 RefPtr<WebPagePopupImpl> pagePopup = m_pagePopup;
823 hidePopups();
824 DCHECK(!m_pagePopup);
825
826 m_client->cancelScheduledContentIntents(); 819 m_client->cancelScheduledContentIntents();
827 if (detectContentOnTouch(targetedEvent)) { 820 if (detectContentOnTouch(targetedEvent)) {
828 eventResult = WebInputEventResult::HandledSystem; 821 eventResult = WebInputEventResult::HandledSystem;
829 break; 822 break;
830 } 823 }
831 824
832 // Don't trigger a disambiguation popup on sites designed for mobile 825 // Don't trigger a disambiguation popup on sites designed for mobile
833 // devices. Instead, assume that the page has been designed with big 826 // devices. Instead, assume that the page has been designed with big
834 // enough buttons and links. Don't trigger a disambiguation popup when 827 // enough buttons and links. Don't trigger a disambiguation popup when
835 // screencasting, since it's implemented outside of compositor pipeline 828 // screencasting, since it's implemented outside of compositor pipeline
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 m_linkHighlights[i]->startHighlightAnimationIfNeeded(); 860 m_linkHighlights[i]->startHighlightAnimationIfNeeded();
868 eventResult = WebInputEventResult::HandledSystem; 861 eventResult = WebInputEventResult::HandledSystem;
869 eventCancelled = true; 862 eventCancelled = true;
870 break; 863 break;
871 } 864 }
872 } 865 }
873 } 866 }
874 867
875 eventResult = mainFrameImpl()->frame()->eventHandler().handleGestureEvent( 868 eventResult = mainFrameImpl()->frame()->eventHandler().handleGestureEvent(
876 targetedEvent); 869 targetedEvent);
877 870 if (m_pagePopup && m_lastHiddenPagePopup &&
878 if (m_pagePopup && pagePopup && 871 m_pagePopup->hasSamePopupClient(m_lastHiddenPagePopup.get())) {
879 m_pagePopup->hasSamePopupClient(pagePopup.get())) {
880 // The tap triggered a page popup that is the same as the one we just 872 // The tap triggered a page popup that is the same as the one we just
881 // closed. It needs to be closed. 873 // closed. It needs to be closed.
882 cancelPagePopup(); 874 cancelPagePopup();
883 } 875 }
876 m_lastHiddenPagePopup = nullptr;
884 break; 877 break;
885 } 878 }
886 case WebInputEvent::GestureTwoFingerTap: 879 case WebInputEvent::GestureTwoFingerTap:
887 case WebInputEvent::GestureLongPress: 880 case WebInputEvent::GestureLongPress:
888 case WebInputEvent::GestureLongTap: { 881 case WebInputEvent::GestureLongTap: {
889 if (!mainFrameImpl() || !mainFrameImpl()->frameView()) 882 if (!mainFrameImpl() || !mainFrameImpl()->frameView())
890 break; 883 break;
891 884
892 m_client->cancelScheduledContentIntents(); 885 m_client->cancelScheduledContentIntents();
893 m_page->contextMenuController().clearContextMenu(); 886 m_page->contextMenuController().clearContextMenu();
894 { 887 {
895 ContextMenuAllowedScope scope; 888 ContextMenuAllowedScope scope;
896 eventResult = 889 eventResult =
897 mainFrameImpl()->frame()->eventHandler().handleGestureEvent( 890 mainFrameImpl()->frame()->eventHandler().handleGestureEvent(
898 targetedEvent); 891 targetedEvent);
899 } 892 }
900 893
901 break; 894 break;
902 } 895 }
903 case WebInputEvent::GestureShowPress: 896 case WebInputEvent::GestureTapDown: {
897 // Touch pinch zoom and scroll on the page (outside of a popup) must hide
898 // the popup. In case of a touch scroll or pinch zoom, this function is
899 // called with GestureTapDown rather than a GSB/GSU/GSE or GPB/GPU/GPE.
900 // When we close a popup because of a GestureTapDown, we also save it so
901 // we can prevent the following GestureTap from immediately reopening the
902 // same popup.
903 m_lastHiddenPagePopup = m_pagePopup;
904 hidePopups();
905 DCHECK(!m_pagePopup);
906 eventResult = mainFrameImpl()->frame()->eventHandler().handleGestureEvent(
907 targetedEvent);
908 break;
909 }
910 case WebInputEvent::GestureTapCancel: {
911 m_lastHiddenPagePopup = nullptr;
912 eventResult = mainFrameImpl()->frame()->eventHandler().handleGestureEvent(
913 targetedEvent);
914 break;
915 }
916 case WebInputEvent::GestureShowPress: {
904 m_client->cancelScheduledContentIntents(); 917 m_client->cancelScheduledContentIntents();
905 case WebInputEvent::GestureTapDown: 918 eventResult = mainFrameImpl()->frame()->eventHandler().handleGestureEvent(
906 // Touch pinch zoom and scroll must hide the popup. In case of a touch 919 targetedEvent);
907 // scroll or pinch zoom, this function is called with GestureTapDown 920 break;
908 // rather than a GSB/GSU/GSE or GPB/GPU/GPE. 921 }
909 hidePopups();
910 case WebInputEvent::GestureTapCancel:
911 case WebInputEvent::GestureTapUnconfirmed: { 922 case WebInputEvent::GestureTapUnconfirmed: {
912 eventResult = mainFrameImpl()->frame()->eventHandler().handleGestureEvent( 923 eventResult = mainFrameImpl()->frame()->eventHandler().handleGestureEvent(
913 targetedEvent); 924 targetedEvent);
914 break; 925 break;
915 } 926 }
916 default: 927 default: { NOTREACHED(); }
917 NOTREACHED();
918 } 928 }
919 m_client->didHandleGestureEvent(event, eventCancelled); 929 m_client->didHandleGestureEvent(event, eventCancelled);
920 return eventResult; 930 return eventResult;
921 } 931 }
922 932
923 WebInputEventResult WebViewImpl::handleSyntheticWheelFromTouchpadPinchEvent( 933 WebInputEventResult WebViewImpl::handleSyntheticWheelFromTouchpadPinchEvent(
924 const WebGestureEvent& pinchEvent) { 934 const WebGestureEvent& pinchEvent) {
925 DCHECK_EQ(pinchEvent.type, WebInputEvent::GesturePinchUpdate); 935 DCHECK_EQ(pinchEvent.type, WebInputEvent::GesturePinchUpdate);
926 936
927 // For pinch gesture events, match typical trackpad behavior on Windows by 937 // For pinch gesture events, match typical trackpad behavior on Windows by
(...skipping 3276 matching lines...) Expand 10 before | Expand all | Expand 10 after
4204 if (focusedFrame->localFrameRoot() != mainFrameImpl()->frame()) 4214 if (focusedFrame->localFrameRoot() != mainFrameImpl()->frame())
4205 return nullptr; 4215 return nullptr;
4206 return focusedFrame; 4216 return focusedFrame;
4207 } 4217 }
4208 4218
4209 LocalFrame* WebViewImpl::focusedLocalFrameAvailableForIme() const { 4219 LocalFrame* WebViewImpl::focusedLocalFrameAvailableForIme() const {
4210 return m_imeAcceptEvents ? focusedLocalFrameInWidget() : nullptr; 4220 return m_imeAcceptEvents ? focusedLocalFrameInWidget() : nullptr;
4211 } 4221 }
4212 4222
4213 } // namespace blink 4223 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/web/WebViewImpl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698