Commit Graph

50 Commits

Author SHA1 Message Date
Ting-Yu Lin
e84cf763d7 Bug 1273045 Part 2 - Update carets when scrolling in subframes without APZ. r=mtseng
Override OnScrollPositionChanged() in ScrollState because we want to update
carets during scrolling in subframes without APZ.

Due to the observation in bug 1273045 comment 8, we do not distinguish
PositionChangedResult::NotChanged and PositionChangedResult::Changed.
Instead, we always update caret even if its position is not changed.

To avoid excessive CaretStateChangedEvents are dispatched in
OnScrollPositionChanged(), we add IsScrollStarted to distinguish whether
OnScrollStart() is called or not.

MozReview-Commit-ID: KNi9Mct4dSk
2017-03-14 17:50:03 +08:00
Phil Ringnalda
9a09bc8ce5 Backed out changeset 079ee7b41c3a (bug 1156160) for selection reftest failures
CLOSED TREE
2016-11-30 21:34:42 -08:00
Ting-Yu Lin
6bafa31645 Bug 1156160 - Update carets when document becomes visible. r=mtseng
When the user switches back to a tab which has the selection highlight on
the document, call UpdateCarets() to bring the carets back.

MozReview-Commit-ID: LxNoNRl4FHZ
2016-11-25 17:51:40 +08:00
Kartikaya Gupta
994d0be804 Bug 1304263 - On Windows, fire the eMouseLongTap event as soon as APZ detects the long-press. r=TYLin
On Windows, the contextmenu event is fired when the finger is lifted after a
long-press. However, there are various bits of code, such as the AccessibleCaret
or potential fixes for bug 1147335, which would benefit from knowing when the
long-press gesture was detected. By moving eMouseLongTap event up we can satisfy
that need. An alternative approach considered was to fire the eMouseLongTap
before the contextmenu on all platforms unconditionally, but that makes it harder
to implement platform-specific text selection behaviour the way we want. In
particular we would have to add an extra message or notification for non-Windows
platforms that initiated text selection if the contextmenu event was not
consumed.

MozReview-Commit-ID: 2lmwxmmGrVD
2016-10-04 09:31:15 -04:00
Kartikaya Gupta
f4b14dcf26 Bug 1293483 - Keep the carets hidden when the user is using a mouse to modify the selection. r=TYLin
MozReview-Commit-ID: FJwODLk6XMS
2016-10-03 08:57:44 -04:00
Ting-Yu Lin
896c402330 Bug 1298704 - Use flag to avoid calling AccessibleCaretEventHub::Reflow() recursively. r=mats
MozReview-Commit-ID: Jkf7sSqxG2d
2016-08-29 15:36:45 +08:00
Ting-Yu Lin
e7b43b14e8 Bug 1292904 Part 3 - Use only caret image for touch area if event is a mouse type. r=mtseng
That is, exclude the text overlay to fix the double clicking and triple
clicking on a word in editable text area.

MozReview-Commit-ID: 5bELcNSRo2A
2016-08-14 21:39:30 +08:00
Kartikaya Gupta
335eb7ee2f Bug 1195722 - On desktop, allow the context menu to pop up concurrently with text selection. r=tylin
On desktop, the context menu is shown when the user lifts their finger after
a long press, but only if the eMouseLongTap event is not cancelled. So by
not cancelling it, we allow both the text selection and the context menu.

On Android, the context menu takes priority over text selection, so this
has no effect (i.e. if the context menu is shown, then the AccessibleCaret
code never even gets the eMouseLongTap event). Also on Android nothing
else relies on the cancellation of the eMouseLongTap event, so this change
is a no-op.

MozReview-Commit-ID: peFzB2afha
2016-08-03 12:00:19 -04:00
Kartikaya Gupta
c7f9770ada Bug 1255555 - When a frame reconstruction triggers caret elements to be cloned, ensure the dummy touch listeners are re-registered on the clones. r=tylin
MozReview-Commit-ID: 8txWmd64LC9
2016-07-11 08:16:39 -04:00
Masayuki Nakano
99eab530eb Bug 1259656 part.1 Rename WidgetEvent::refPoint to WidgetEvent::mRefPoint r=smaug
MozReview-Commit-ID: ESWM5ZyBpSR
2016-04-18 23:09:02 +09:00
Masayuki Nakano
93fc327cc4 Bug 1259668 Rename WidgetTouchEvent::touches to WidgetTouchEvent::mTouches r=smaug
MozReview-Commit-ID: FLbows8davI
2016-03-30 18:44:28 +09:00
Ting-Yu Lin
1739c1849a Bug 1251915 - Ignore handling eTouchCancel events. r=roc
In my original design, I treat eTouchCancel to be like eTouchEnd for
ending a caret dragging procedure.

However when pointer events is enabled, it sents an eTouchCancel event
after the eTouchStart event whose primary usage is to be converted to
pointer events, which then cancels the normal caret dragging procedure.

Moreover, when pointer events is disabled, we don't get eTouchCancel
during a normal caret dragging scenario, so we don't really need to
handle eTouchCancel anyway.

MozReview-Commit-ID: GKju2Tp0q3Q
2016-02-29 15:51:44 +08:00
Ting-Yu Lin
a7af0f027a Bug 1251915 - Correct AccessibleCaretEventHub coding style by clang-format. r=roc
This patch is generatedy by applying clang-format on
AccessibleCaretEventHub.cpp.

MozReview-Commit-ID: 10qPJ47CVMH
2016-02-29 15:51:44 +08:00
Ting-Yu Lin
eee2cb20a9 Bug 1250560 - Fix crash in HandleTouchEvent. r=roc
When enabling "dom.w3c_pointer_events.enabled", we might get a
eTouchCancel event without any touch data. That is, aEvent->touches is
an empty array. We need to make sure it's non-empty before accessing
aEvent->touches[0].

MozReview-Commit-ID: BQUsrJjHHEl
2016-02-28 23:16:45 +08:00
Ting-Yu Lin
1bcc00125a Bug 1248847 - Assert AccessibleCaretEventHub mRefCnt > 1 in all its entry points. r=mats
Also I removed the 'explicit' keywords from the constructor since they have no
argument so nothing can be implicited converted to them.

MozReview-Commit-ID: GrFcqO0Uf1o
2016-02-19 18:21:16 +08:00
Carsten "Tomcat" Book
b6ca4c24ee Backed out changeset a27cd3e26cc1 (bug 1248847) for bustage 2016-02-19 09:38:59 +01:00
Ting-Yu Lin
173b2f8472 Bug 1248847 - Assert AccessibleCaretEventHub mRefCnt > 1 in all its entry points. r=mats
Also I removed the 'explicit' keywords from the constructor since they have no
argument so nothing can be implicited converted to them.

MozReview-Commit-ID: GrFcqO0Uf1o
2016-02-18 18:38:44 +08:00
Ting-Yu Lin
23bd2e9abc Bug 1246918 - Handle PresShell gone after FlushLayout(). r=roc
After calling FlushLayout(), PresShell::Destroy() might be called and we
should consider PresShell and other resources will be no longer valid.

Before this patch, AccessibleCaretManager and AccessibleCaret(s) are
deallocated in PresShell::Destroy(). However FlushLayout() are all
invoked in AccessibleCaretManager, we need to keep manager alive to
clean up after PresShell::Destroy().

This patch makes AccessibleCaretManager live after PresShell::Destroy(),
and use IsTerminated() to check whether PreShell is vaild after each
FlushLayout() calls.

Note that event though AccessibleCaretEventHub will be unref in
PresShell::Destroy(), all the callers to AccessibleCaretEventHub's
public methods already add a ref to AccessibleCaretEventHub. So we don't
need to worry about AccessibleCaretEventHub and AccessibleCaretManager
die immediately after PresShell::Destroy().

MozReview-Commit-ID: DDpXZ7v3zyo
2016-02-15 15:12:35 +08:00
Carsten "Tomcat" Book
4dbbf7e132 Backed out changeset 10e71da98b14 (bug 1246918) 2016-02-17 14:34:49 +01:00
Ting-Yu Lin
f458321cee Bug 1246918 - Handle PresShell gone after FlushLayout(). r=roc
After calling FlushLayout(), PresShell::Destroy() might be called and we
should consider PresShell and other resources will be no longer valid.

Before this patch, AccessibleCaretManager and AccessibleCaret(s) are
deallocated in PresShell::Destroy(). However FlushLayout() are all
invoked in AccessibleCaretManager, we need to keep manager alive to
clean up after PresShell::Destroy().

This patch makes AccessibleCaretManager live after PresShell::Destroy(),
and use IsTerminated() to check whether PreShell is vaild after each
FlushLayout() calls.

Note that event though AccessibleCaretEventHub will be unref in
PresShell::Destroy(), all the callers to AccessibleCaretEventHub's
public methods already add a ref to AccessibleCaretEventHub. So we don't
need to worry about AccessibleCaretEventHub and AccessibleCaretManager
die immediately after PresShell::Destroy().

MozReview-Commit-ID: DDpXZ7v3zyo
2016-02-15 15:12:35 +08:00
Ting-Yu Lin
b51b671a52 Bug 1246477 - Fix carets not updated by scroll events in LongTapState. r=roc
This is a regression by "Bug 1121468 - Go to NoActionState after
receiving release on LongTapState."

When receiving a scroll event in LongTapState, i.e. apz starts, we
should call OnScrollStart() and move to the ScrollState.
2016-02-08 16:08:45 +08:00
Ting-Yu Lin
a75f4b4465 Bug 1121468 - Go to NoActionState after receiving release on LongTapState. r=roc
This makes the state change match the user action. No functionality
changes is expected.
2016-01-25 15:50:28 +08:00
Ting-Yu Lin
6cc3899eed Bug 1121468 - Use auto* to explicit declare 'self' as a pointer. r=roc
Both 'auto' and 'auto*' do not change the type inference. However, auto*
make 'self' only accept a pointer which is our intent here.
2016-01-25 15:50:28 +08:00
Tooru Fujisawa
1b5f79d9ec Bug 382721 - Part 0: Add missing includes and namespaces. r=jrmuizel 2015-09-10 19:24:34 +09:00
Ting-Yu Lin
892fb82643 Bug 1206545 - Store nsIPresShell pointer in constructor instead of Init(). r=roc
When constructing AccessibleCaretEventHub, bypass and store the
nsIPresShell pointer. This is a preparation for later patches.

Also, remove 'virtual' for Init() and Terminate() since the mock object
in gtest does not need to override them.
2015-11-16 18:16:43 +08:00
Nathan Froyd
4e6d8f6705 Bug 1207245 - part 6 - rename nsRefPtr<T> to RefPtr<T>; r=ehsan; a=Tomcat
The bulk of this commit was generated with a script, executed at the top
level of a typical source code checkout.  The only non-machine-generated
part was modifying MFBT's moz.build to reflect the new naming.

CLOSED TREE makes big refactorings like this a piece of cake.

 # The main substitution.
find . -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.mm' -o -name '*.idl'| \
    xargs perl -p -i -e '
 s/nsRefPtr\.h/RefPtr\.h/g; # handle includes
 s/nsRefPtr ?</RefPtr</g;   # handle declarations and variables
'

 # Handle a special friend declaration in gfx/layers/AtomicRefCountedWithFinalize.h.
perl -p -i -e 's/::nsRefPtr;/::RefPtr;/' gfx/layers/AtomicRefCountedWithFinalize.h

 # Handle nsRefPtr.h itself, a couple places that define constructors
 # from nsRefPtr, and code generators specially.  We do this here, rather
 # than indiscriminantly s/nsRefPtr/RefPtr/, because that would rename
 # things like nsRefPtrHashtable.
perl -p -i -e 's/nsRefPtr/RefPtr/g' \
     mfbt/nsRefPtr.h \
     xpcom/glue/nsCOMPtr.h \
     xpcom/base/OwningNonNull.h \
     ipc/ipdl/ipdl/lower.py \
     ipc/ipdl/ipdl/builtin.py \
     dom/bindings/Codegen.py \
     python/lldbutils/lldbutils/utils.py

 # In our indiscriminate substitution above, we renamed
 # nsRefPtrGetterAddRefs, the class behind getter_AddRefs.  Fix that up.
find . -name '*.cpp' -o -name '*.h' -o -name '*.idl' | \
    xargs perl -p -i -e 's/nsRefPtrGetterAddRefs/RefPtrGetterAddRefs/g'

if [ -d .git ]; then
    git mv mfbt/nsRefPtr.h mfbt/RefPtr.h
else
    hg mv mfbt/nsRefPtr.h mfbt/RefPtr.h
fi
2015-10-18 01:24:48 -04:00
Ting-Yu Lin
02531153a1 Bug 1211365 - Delete wheel event handling. r=mtseng
All desktop platforms support APZ now. eWheelOperationStart and
eWheelOperationEnd are superseded by AsyncPanZoomStarted and
AsyncPanZoomStopped respectively.
2015-10-05 16:52:29 +08:00
Ting-Yu Lin
25354bbce2 Bug 1211365 - Remove NS_IMPL_STATE_UTILITIES. r=mtseng
This macro was used to implement Name() and Singleton() for state
classes. Instead of enforcing the state class to be a singleton, we can
implement singleton pattern in MOZ_IMPL_STATE_CLASS_GETTER directly.
2015-10-05 16:52:29 +08:00
Ting-Yu Lin
27534620af Bug 1210315 - Use preference to control whether to use long tap injector. r=roc
In AccessibleCaretEventHub, it is not accurate to use APZ enabled to
determine whether to use long tap injector. On desktop browser, there's
no long tap events even if APZ is enabled. We should use a preference to
control that.

Since it's a fact the APZ on b2g has long tap events, we should use
preference to disable long tap injector so that when long tap events
stop dispatching to AccessibleCaretEventHub, we'll know immediately.

Delete SetUseAsyncPanZoom() usage in gtest since APZ is not related to
scrolling in AccessibleCaretEventHub.
2015-10-02 23:10:29 +08:00
Masayuki Nakano
0eb5af44b6 Bug 895274 part.244 Rename NS_TOUCH_CANCEL to eTouchCancel r=smaug 2015-09-15 00:14:35 +09:00
Masayuki Nakano
c52e0f004e Bug 895274 part.243 Rename NS_TOUCH_END to eTouchEnd r=smaug 2015-09-15 00:14:35 +09:00
Masayuki Nakano
c9e937321c Bug 895274 part.242 Rename NS_TOUCH_MOVE to eTouchMove r=smaug 2015-09-15 00:14:35 +09:00
Masayuki Nakano
27a41ba675 Bug 895274 part.241 Rename NS_TOUCH_START to eTouchStart r=smaug 2015-09-15 00:14:34 +09:00
Masayuki Nakano
22630518dc Bug 895274 part.186 Rename NS_WHEEL_END to eWheelOperationEnd r=smaug 2015-09-11 01:59:55 +09:00
Masayuki Nakano
d3b8156939 Bug 895274 part.185 Rename NS_WHEEL_START to eWheelOperationStart r=smaug 2015-09-11 01:59:55 +09:00
Masayuki Nakano
417d87fd39 Bug 895274 part.184 Rename NS_WHEEL_WHEEL to eWheel r=smaug 2015-09-11 01:59:54 +09:00
Ting-Yu Lin
fece1697ea Bug 1200194 - Remove unneeded AccessibleCaretManager::OnScrolling(). r=roc
This functions is for hiding caret in cursor mode on desktop browser
when receiving NS_WHEEL_WHEEL, which is never used on B2G in production.

On desktop browser, a proper wheel scroll cycle begins by NS_WHEEL_START
and ends by NS_WHEEL_STOP, which was covered by gtest. Move the three
marionette test for TouchCaret only.
2015-09-09 16:47:21 +08:00
Ting-Yu Lin
4134b085f4 Bug 1200194 - Tweak formatting and debug logging. r=roc
No logic change is involved.
2015-09-09 16:47:20 +08:00
Masayuki Nakano
304639f462 Bug 895274 part.38 Rename NS_MOUSE_MOZLONGTAP to eMouseLongTap r=smaug 2015-08-29 08:58:33 +09:00
Masayuki Nakano
5efe61139d Bug 895274 part.27 Rename NS_MOUSE_BUTTON_DOWN to eMouseDown r=smaug 2015-08-29 08:58:30 +09:00
Masayuki Nakano
00ded62efd Bug 895274 part.26 Rename NS_MOUSE_BUTTON_UP to eMouseUp r=smaug 2015-08-29 08:58:30 +09:00
Masayuki Nakano
329427650a Bug 895274 part.25 Rename NS_MOUSE_MOVE to eMouseMove r=smaug 2015-08-29 08:58:29 +09:00
Masayuki Nakano
3533e4ee27 Bug 895274 part.11 Rename NS_KEY_DOWN to eKeyDown r=smaug 2015-08-29 08:58:27 +09:00
Masayuki Nakano
f2d4e68851 Bug 895274 part.10 Rename NS_KEY_UP to eKeyUp r=smaug 2015-08-29 08:58:27 +09:00
Masayuki Nakano
fc091c723d Bug 895274 part.9 Rename NS_KEY_PRESS to eKeyPress r=smaug 2015-08-29 08:58:27 +09:00
Masayuki Nakano
5473d2dcb9 Bug 895274 part.1 Rename WidgetEvent::message to WidgetEvent::mMessage r=smaug 2015-08-22 10:34:51 +09:00
Ting-Yu Lin
ef1de2d8ec Bug 1189353 - Change NS_ macro prefix to MOZ_ in AccessibleCaretEventHub. r=mtseng 2015-07-30 08:07:00 -04:00
David Anderson
e4bdc9d5b3 Use widgets for APZ checks, rather than gfxPrefs. (bug 1162064, r=kats,mstange) 2015-06-04 16:51:10 -04:00
Eric Rahm
6fa2b13ee0 Bug 1164620 - Part 1: Remove instances of #ifdef PR_LOGGING in various places. r=froydnj
PR_LOGGING is now always defined, we can remove #ifdefs checking for it.
2015-05-14 10:13:24 -07:00
Ting-Yu Lin
d05337b719 Bug 1110039 - Part 2.4 - Add AccessibleCaretEventHub. r=roc
See AccessibleCaretEventHub.h for the class description.

Both TouchCaret and SelectionCarets have their event handling mechanism,
which lead to a lot of code duplication. Now AccessibleCaretEventHub
serves as the single entry point for all events and callbacks.

We also encountered performance issues in SelectionCarets because many
unnecessary events might be dispatched to Gaia driven by the selection
changed events. SelectionCarets did not have clear internal states to
avoid this. To solve it, AccessibleCaretEventHub implements state
classes, and rely on the current states to call the CopyPasteManager's
handler only when it's needed.

For example, when dragging a caret, we do not interest in
NotifySelectionChanged() for updating the carets. Since we've known a
caret is being dragging, we can call UpdateCarets() directly. Hence
DragCaretState does not override OnSelectionChanged().
2015-05-03 23:37:00 +02:00