Skip to content

Commit

Permalink
Bug 1273045 Part 1 - Convert UpdateCaretsHint to use EnumSet. r=mtseng
Browse files Browse the repository at this point in the history
Part 2 is going to add a new hint which will use with RespectOldAppearance.
Hence this patch.

Remove #include "mozilla/WeakPtr.h" and "nsWeakReference.h" because they're
not used in the header.

MozReview-Commit-ID: KiNv0M0v8iO
  • Loading branch information
aethanyc committed Mar 14, 2017
1 parent 5729073 commit dda710e
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 50 deletions.
74 changes: 33 additions & 41 deletions layout/base/AccessibleCaretManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ AccessibleCaretManager::HideCarets()
}

void
AccessibleCaretManager::UpdateCarets(UpdateCaretsHint aHint)
AccessibleCaretManager::UpdateCarets(UpdateCaretsHintSet aHint)
{
FlushLayout();
if (IsTerminated()) {
Expand Down Expand Up @@ -284,7 +284,7 @@ AccessibleCaretManager::HasNonEmptyTextContent(nsINode* aNode) const
}

void
AccessibleCaretManager::UpdateCaretsForCursorMode(UpdateCaretsHint aHint)
AccessibleCaretManager::UpdateCaretsForCursorMode(UpdateCaretsHintSet aHints)
{
AC_LOG("%s, selection: %p", __FUNCTION__, GetSelection());

Expand All @@ -304,35 +304,31 @@ AccessibleCaretManager::UpdateCaretsForCursorMode(UpdateCaretsHint aHint)
break;

case PositionChangedResult::Changed:
switch (aHint) {
case UpdateCaretsHint::Default:
if (HasNonEmptyTextContent(GetEditingHostForFrame(frame))) {
if (aHints == UpdateCaretsHint::Default) {
if (HasNonEmptyTextContent(GetEditingHostForFrame(frame))) {
mFirstCaret->SetAppearance(Appearance::Normal);
} else if (sCaretShownWhenLongTappingOnEmptyContent) {
if (mFirstCaret->IsLogicallyVisible()) {
// Possible cases are: 1) SelectWordOrShortcut() sets the
// appearance to Normal. 2) When the caret is out of viewport and
// now scrolling into viewport, it has appearance NormalNotShown.
mFirstCaret->SetAppearance(Appearance::Normal);
} else if (sCaretShownWhenLongTappingOnEmptyContent) {
if (mFirstCaret->IsLogicallyVisible()) {
// Possible cases are: 1) SelectWordOrShortcut() sets the
// appearance to Normal. 2) When the caret is out of viewport and
// now scrolling into viewport, it has appearance NormalNotShown.
mFirstCaret->SetAppearance(Appearance::Normal);
} else {
// Possible cases are: a) Single tap on current empty content;
// OnSelectionChanged() sets the appearance to None due to
// MOUSEDOWN_REASON. b) Single tap on other empty content;
// OnBlur() sets the appearance to None.
//
// Do nothing to make the appearance remains None so that it can
// be distinguished from case 2). Also do not set the appearance
// to NormalNotShown here like the default update behavior.
}
} else {
mFirstCaret->SetAppearance(Appearance::NormalNotShown);
// Possible cases are: a) Single tap on current empty content;
// OnSelectionChanged() sets the appearance to None due to
// MOUSEDOWN_REASON. b) Single tap on other empty content;
// OnBlur() sets the appearance to None.
//
// Do nothing to make the appearance remains None so that it can
// be distinguished from case 2). Also do not set the appearance
// to NormalNotShown here like the default update behavior.
}
break;

case UpdateCaretsHint::RespectOldAppearance:
// Do nothing to preserve the appearance of the caret set by the
// caller.
break;
} else {
mFirstCaret->SetAppearance(Appearance::NormalNotShown);
}
} else if (aHints.contains(UpdateCaretsHint::RespectOldAppearance)) {
// Do nothing to preserve the appearance of the caret set by the
// caller.
}
break;

Expand All @@ -353,7 +349,7 @@ AccessibleCaretManager::UpdateCaretsForCursorMode(UpdateCaretsHint aHint)
}

void
AccessibleCaretManager::UpdateCaretsForSelectionMode(UpdateCaretsHint aHint)
AccessibleCaretManager::UpdateCaretsForSelectionMode(UpdateCaretsHintSet aHints)
{
AC_LOG("%s: selection: %p", __FUNCTION__, GetSelection());

Expand All @@ -371,8 +367,8 @@ AccessibleCaretManager::UpdateCaretsForSelectionMode(UpdateCaretsHint aHint)
return;
}

auto updateSingleCaret = [aHint](AccessibleCaret* aCaret, nsIFrame* aFrame,
int32_t aOffset) -> PositionChangedResult
auto updateSingleCaret = [aHints](AccessibleCaret* aCaret, nsIFrame* aFrame,
int32_t aOffset) -> PositionChangedResult
{
PositionChangedResult result = aCaret->SetPosition(aFrame, aOffset);
aCaret->SetSelectionBarEnabled(sSelectionBarEnabled);
Expand All @@ -383,15 +379,11 @@ AccessibleCaretManager::UpdateCaretsForSelectionMode(UpdateCaretsHint aHint)
break;

case PositionChangedResult::Changed:
switch (aHint) {
case UpdateCaretsHint::Default:
aCaret->SetAppearance(Appearance::Normal);
break;

case UpdateCaretsHint::RespectOldAppearance:
// Do nothing to preserve the appearance of the caret set by the
// caller.
break;
if (aHints == UpdateCaretsHint::Default) {
aCaret->SetAppearance(Appearance::Normal);
} else if (aHints.contains(UpdateCaretsHint::RespectOldAppearance)) {
// Do nothing to preserve the appearance of the caret set by the
// caller.
}
break;

Expand All @@ -416,7 +408,7 @@ AccessibleCaretManager::UpdateCaretsForSelectionMode(UpdateCaretsHint aHint)
}
}

if (aHint == UpdateCaretsHint::Default) {
if (aHints == UpdateCaretsHint::Default) {
// Only check for tilt carets with default update hint. Otherwise we might
// override the appearance set by the caller.
if (sCaretsAlwaysTilt) {
Expand Down
20 changes: 11 additions & 9 deletions layout/base/AccessibleCaretManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,17 @@
#define AccessibleCaretManager_h

#include "AccessibleCaret.h"

#include "mozilla/dom/CaretStateChangedEvent.h"
#include "mozilla/EnumSet.h"
#include "mozilla/EventForwards.h"
#include "mozilla/RefPtr.h"
#include "mozilla/UniquePtr.h"
#include "nsCOMPtr.h"
#include "nsCoord.h"
#include "nsIDOMMouseEvent.h"
#include "nsIFrame.h"
#include "nsISelectionListener.h"
#include "mozilla/RefPtr.h"
#include "nsWeakReference.h"
#include "mozilla/dom/CaretStateChangedEvent.h"
#include "mozilla/EventForwards.h"
#include "mozilla/UniquePtr.h"
#include "mozilla/WeakPtr.h"

class nsFrameSelection;
class nsIContent;
Expand Down Expand Up @@ -133,19 +133,21 @@ class AccessibleCaretManager
RespectOldAppearance
};

using UpdateCaretsHintSet = mozilla::EnumSet<UpdateCaretsHint>;

friend std::ostream& operator<<(std::ostream& aStream,
const UpdateCaretsHint& aResult);

// Update carets based on current selection status. This function will flush
// layout, so caller must ensure the PresShell is still valid after calling
// this method.
void UpdateCarets(UpdateCaretsHint aHint = UpdateCaretsHint::Default);
void UpdateCarets(UpdateCaretsHintSet aHints = UpdateCaretsHint::Default);

// Force hiding all carets regardless of the current selection status.
void HideCarets();

void UpdateCaretsForCursorMode(UpdateCaretsHint aHint);
void UpdateCaretsForSelectionMode(UpdateCaretsHint aHint);
void UpdateCaretsForCursorMode(UpdateCaretsHintSet aHints);
void UpdateCaretsForSelectionMode(UpdateCaretsHintSet aHints);

// Provide haptic / touch feedback, primarily for select on longpress.
void ProvideHapticFeedback();
Expand Down

0 comments on commit dda710e

Please sign in to comment.