зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1485063 Part 4 - Move preferences used in AccessibleCaretManager to StaticPrefList.h r=mats
Differential Revision: https://phabricator.services.mozilla.com/D5474 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
4a7b7e1a11
Коммит
b5d9e05828
|
@ -18,7 +18,7 @@
|
|||
#include "mozilla/dom/TreeWalker.h"
|
||||
#include "mozilla/IMEStateManager.h"
|
||||
#include "mozilla/IntegerPrintfMacros.h"
|
||||
#include "mozilla/Preferences.h"
|
||||
#include "mozilla/StaticPrefs.h"
|
||||
#include "nsCaret.h"
|
||||
#include "nsContainerFrame.h"
|
||||
#include "nsContentUtils.h"
|
||||
|
@ -69,22 +69,6 @@ std::ostream& operator<<(std::ostream& aStream,
|
|||
}
|
||||
#undef AC_PROCESS_ENUM_TO_STREAM
|
||||
|
||||
/* static */ bool
|
||||
AccessibleCaretManager::sCaretShownWhenLongTappingOnEmptyContent = false;
|
||||
/* static */ bool
|
||||
AccessibleCaretManager::sCaretsAlwaysTilt = false;
|
||||
/* static */ int32_t
|
||||
AccessibleCaretManager::sCaretsScriptUpdates =
|
||||
AccessibleCaretManager::kScriptAlwaysHide;
|
||||
/* static */ bool
|
||||
AccessibleCaretManager::sCaretsAllowDraggingAcrossOtherCaret = true;
|
||||
/* static */ bool
|
||||
AccessibleCaretManager::sHapticFeedback = false;
|
||||
/* static */ bool
|
||||
AccessibleCaretManager::sExtendSelectionForPhoneNumber = false;
|
||||
/* static */ bool
|
||||
AccessibleCaretManager::sHideCaretsForMouseInput = true;
|
||||
|
||||
AccessibleCaretManager::AccessibleCaretManager(nsIPresShell* aPresShell)
|
||||
: mPresShell(aPresShell)
|
||||
{
|
||||
|
@ -94,25 +78,6 @@ AccessibleCaretManager::AccessibleCaretManager(nsIPresShell* aPresShell)
|
|||
|
||||
mFirstCaret = MakeUnique<AccessibleCaret>(mPresShell);
|
||||
mSecondCaret = MakeUnique<AccessibleCaret>(mPresShell);
|
||||
|
||||
static bool addedPrefs = false;
|
||||
if (!addedPrefs) {
|
||||
Preferences::AddBoolVarCache(&sCaretShownWhenLongTappingOnEmptyContent,
|
||||
"layout.accessiblecaret.caret_shown_when_long_tapping_on_empty_content");
|
||||
Preferences::AddBoolVarCache(&sCaretsAlwaysTilt,
|
||||
"layout.accessiblecaret.always_tilt");
|
||||
Preferences::AddIntVarCache(&sCaretsScriptUpdates,
|
||||
"layout.accessiblecaret.script_change_update_mode");
|
||||
Preferences::AddBoolVarCache(&sCaretsAllowDraggingAcrossOtherCaret,
|
||||
"layout.accessiblecaret.allow_dragging_across_other_caret", true);
|
||||
Preferences::AddBoolVarCache(&sHapticFeedback,
|
||||
"layout.accessiblecaret.hapticfeedback");
|
||||
Preferences::AddBoolVarCache(&sExtendSelectionForPhoneNumber,
|
||||
"layout.accessiblecaret.extend_selection_for_phone_number");
|
||||
Preferences::AddBoolVarCache(&sHideCaretsForMouseInput,
|
||||
"layout.accessiblecaret.hide_carets_for_mouse_input");
|
||||
addedPrefs = true;
|
||||
}
|
||||
}
|
||||
|
||||
AccessibleCaretManager::~AccessibleCaretManager()
|
||||
|
@ -150,8 +115,10 @@ AccessibleCaretManager::OnSelectionChanged(nsIDocument* aDoc,
|
|||
|
||||
// Move the cursor by JavaScript or unknown internal call.
|
||||
if (aReason == nsISelectionListener::NO_REASON) {
|
||||
if (sCaretsScriptUpdates == kScriptAlwaysShow ||
|
||||
(sCaretsScriptUpdates == kScriptUpdateVisible &&
|
||||
auto mode = static_cast<ScriptUpdateMode>(
|
||||
StaticPrefs::layout_accessiblecaret_script_change_update_mode());
|
||||
if (mode == kScriptAlwaysShow ||
|
||||
(mode == kScriptUpdateVisible &&
|
||||
(mFirstCaret->IsLogicallyVisible() ||
|
||||
mSecondCaret->IsLogicallyVisible()))) {
|
||||
UpdateCarets();
|
||||
|
@ -183,7 +150,7 @@ AccessibleCaretManager::OnSelectionChanged(nsIDocument* aDoc,
|
|||
}
|
||||
|
||||
// For mouse input we don't want to show the carets.
|
||||
if (sHideCaretsForMouseInput &&
|
||||
if (StaticPrefs::layout_accessiblecaret_hide_carets_for_mouse_input() &&
|
||||
mLastInputSource == MouseEvent_Binding::MOZ_SOURCE_MOUSE) {
|
||||
HideCarets();
|
||||
return NS_OK;
|
||||
|
@ -191,7 +158,7 @@ AccessibleCaretManager::OnSelectionChanged(nsIDocument* aDoc,
|
|||
|
||||
// When we want to hide the carets for mouse input, hide them for select
|
||||
// all action fired by keyboard as well.
|
||||
if (sHideCaretsForMouseInput &&
|
||||
if (StaticPrefs::layout_accessiblecaret_hide_carets_for_mouse_input() &&
|
||||
mLastInputSource == MouseEvent_Binding::MOZ_SOURCE_KEYBOARD &&
|
||||
(aReason & nsISelectionListener::SELECTALL_REASON)) {
|
||||
HideCarets();
|
||||
|
@ -293,7 +260,7 @@ AccessibleCaretManager::UpdateCaretsForCursorMode(const UpdateCaretsHintSet& aHi
|
|||
if (aHints == UpdateCaretsHint::Default) {
|
||||
if (HasNonEmptyTextContent(GetEditingHostForFrame(frame))) {
|
||||
mFirstCaret->SetAppearance(Appearance::Normal);
|
||||
} else if (sCaretShownWhenLongTappingOnEmptyContent) {
|
||||
} else if (StaticPrefs::layout_accessiblecaret_caret_shown_when_long_tapping_on_empty_content()) {
|
||||
if (mFirstCaret->IsLogicallyVisible()) {
|
||||
// Possible cases are: 1) SelectWordOrShortcut() sets the
|
||||
// appearance to Normal. 2) When the caret is out of viewport and
|
||||
|
@ -389,7 +356,7 @@ AccessibleCaretManager::UpdateCaretsForSelectionMode(const UpdateCaretsHintSet&
|
|||
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) {
|
||||
if (StaticPrefs::layout_accessiblecaret_always_tilt()) {
|
||||
UpdateCaretsForAlwaysTilt(startFrame, endFrame);
|
||||
} else {
|
||||
UpdateCaretsForOverlappingTilt();
|
||||
|
@ -452,7 +419,7 @@ AccessibleCaretManager::UpdateCaretsForAlwaysTilt(nsIFrame* aStartFrame,
|
|||
void
|
||||
AccessibleCaretManager::ProvideHapticFeedback()
|
||||
{
|
||||
if (sHapticFeedback) {
|
||||
if (StaticPrefs::layout_accessiblecaret_hapticfeedback()) {
|
||||
nsCOMPtr<nsIHapticFeedback> haptic =
|
||||
do_GetService("@mozilla.org/widget/hapticfeedback;1");
|
||||
haptic->PerformSimpleAction(haptic->LongPress);
|
||||
|
@ -589,7 +556,7 @@ AccessibleCaretManager::SelectWordOrShortcut(const nsPoint& aPoint)
|
|||
!HasNonEmptyTextContent(newFocusEditingHost)) {
|
||||
ChangeFocusToOrClearOldFocus(focusableFrame);
|
||||
|
||||
if (sCaretShownWhenLongTappingOnEmptyContent) {
|
||||
if (StaticPrefs::layout_accessiblecaret_caret_shown_when_long_tapping_on_empty_content()) {
|
||||
mFirstCaret->SetAppearance(Appearance::Normal);
|
||||
}
|
||||
// We need to update carets to get correct information before dispatching
|
||||
|
@ -667,7 +634,7 @@ AccessibleCaretManager::OnScrollEnd()
|
|||
}
|
||||
|
||||
// For mouse input we don't want to show the carets.
|
||||
if (sHideCaretsForMouseInput &&
|
||||
if (StaticPrefs::layout_accessiblecaret_hide_carets_for_mouse_input() &&
|
||||
mLastInputSource == MouseEvent_Binding::MOZ_SOURCE_MOUSE) {
|
||||
AC_LOG("%s: HideCarets()", __FUNCTION__);
|
||||
HideCarets();
|
||||
|
@ -877,7 +844,7 @@ AccessibleCaretManager::SelectWord(nsIFrame* aFrame, const nsPoint& aPoint) cons
|
|||
ClearMaintainedSelection();
|
||||
|
||||
// Smart-select phone numbers if possible.
|
||||
if (sExtendSelectionForPhoneNumber) {
|
||||
if (StaticPrefs::layout_accessiblecaret_extend_selection_for_phone_number()) {
|
||||
SelectMoreIfPhoneNumber();
|
||||
}
|
||||
|
||||
|
@ -1143,7 +1110,7 @@ AccessibleCaretManager::RestrictCaretDraggingOffsets(
|
|||
aOffsets.secondaryOffset = limit.mContentOffset;
|
||||
};
|
||||
|
||||
if (!sCaretsAllowDraggingAcrossOtherCaret) {
|
||||
if (!StaticPrefs::layout_accessiblecaret_allow_dragging_across_other_caret()) {
|
||||
if ((mActiveCaret == mFirstCaret.get() && cmpToLimit == 1) ||
|
||||
(mActiveCaret == mSecondCaret.get() && cmpToLimit == -1)) {
|
||||
// The active caret's position is past the limit, which we don't allow
|
||||
|
@ -1309,7 +1276,7 @@ AccessibleCaretManager::AdjustDragBoundary(const nsPoint& aPoint) const
|
|||
}
|
||||
|
||||
if (GetCaretMode() == CaretMode::Selection &&
|
||||
!sCaretsAllowDraggingAcrossOtherCaret) {
|
||||
!StaticPrefs::layout_accessiblecaret_allow_dragging_across_other_caret()) {
|
||||
// Bug 1068474: Adjust the Y-coordinate so that the carets won't be in tilt
|
||||
// mode when a caret is being dragged surpass the other caret.
|
||||
//
|
||||
|
|
|
@ -331,20 +331,6 @@ protected:
|
|||
// AppUnit.h.
|
||||
static const int32_t kBoundaryAppUnits = 61;
|
||||
|
||||
// Preference to allow smarter selection of phone numbers,
|
||||
// when user long presses text to start.
|
||||
static bool sExtendSelectionForPhoneNumber;
|
||||
|
||||
// Preference to show caret in cursor mode when long tapping on an empty
|
||||
// content. This also changes the default update behavior in cursor mode,
|
||||
// which is based on the emptiness of the content, into something more
|
||||
// heuristic. See UpdateCaretsForCursorMode() for the details.
|
||||
static bool sCaretShownWhenLongTappingOnEmptyContent;
|
||||
|
||||
// Preference to make carets always tilt in selection mode. By default, the
|
||||
// carets become tilt only when they are overlapping.
|
||||
static bool sCaretsAlwaysTilt;
|
||||
|
||||
enum ScriptUpdateMode : int32_t {
|
||||
// By default, always hide carets for selection changes due to JS calls.
|
||||
kScriptAlwaysHide,
|
||||
|
@ -354,22 +340,6 @@ protected:
|
|||
// Always show carets for selection changes due to JS calls.
|
||||
kScriptAlwaysShow
|
||||
};
|
||||
|
||||
// Preference to indicate how to update carets for selection changes due to
|
||||
// JS calls, as one of the ScriptUpdateMode constants.
|
||||
static int32_t sCaretsScriptUpdates;
|
||||
|
||||
// Preference to allow one caret to be dragged across the other caret without
|
||||
// any limitation. When set to false, one caret cannot be dragged across the
|
||||
// other one.
|
||||
static bool sCaretsAllowDraggingAcrossOtherCaret;
|
||||
|
||||
// AccessibleCaret pref for haptic feedback behaviour on longPress.
|
||||
static bool sHapticFeedback;
|
||||
|
||||
// Preference to keep carets hidden when the selection is being manipulated
|
||||
// by mouse input (as opposed to touch/pen/etc.).
|
||||
static bool sHideCaretsForMouseInput;
|
||||
};
|
||||
|
||||
std::ostream& operator<<(std::ostream& aStream,
|
||||
|
|
|
@ -11,7 +11,8 @@
|
|||
|
||||
#include "AccessibleCaret.h"
|
||||
#include "AccessibleCaretManager.h"
|
||||
#include "mozilla/AutoRestore.h"
|
||||
#include "mozilla/Preferences.h"
|
||||
#include "mozilla/StaticPrefs.h"
|
||||
|
||||
using ::testing::DefaultValue;
|
||||
using ::testing::Eq;
|
||||
|
@ -53,8 +54,6 @@ public:
|
|||
using CaretMode = AccessibleCaretManager::CaretMode;
|
||||
using AccessibleCaretManager::UpdateCarets;
|
||||
using AccessibleCaretManager::HideCarets;
|
||||
using AccessibleCaretManager::sCaretShownWhenLongTappingOnEmptyContent;
|
||||
using AccessibleCaretManager::sCaretsAlwaysTilt;
|
||||
|
||||
MockAccessibleCaretManager()
|
||||
: AccessibleCaretManager(nullptr)
|
||||
|
@ -434,9 +433,8 @@ TEST_F(AccessibleCaretManagerTester,
|
|||
MOZ_CAN_RUN_SCRIPT
|
||||
{
|
||||
// Simulate Firefox Android preference.
|
||||
AutoRestore<bool> saveCaretsAlwaysTilt(
|
||||
MockAccessibleCaretManager::sCaretsAlwaysTilt);
|
||||
MockAccessibleCaretManager::sCaretsAlwaysTilt = true;
|
||||
bool oldPref = StaticPrefs::layout_accessiblecaret_always_tilt();
|
||||
Preferences::SetBool("layout.accessiblecaret.always_tilt", true);
|
||||
|
||||
EXPECT_CALL(mManager, GetCaretMode())
|
||||
.WillRepeatedly(Return(CaretMode::Selection));
|
||||
|
@ -534,6 +532,8 @@ MOZ_CAN_RUN_SCRIPT
|
|||
EXPECT_EQ(FirstCaretAppearance(), Appearance::Left);
|
||||
EXPECT_EQ(SecondCaretAppearance(), Appearance::Right);
|
||||
check.Call("scrollend2");
|
||||
|
||||
Preferences::SetBool("layout.accessiblecaret.always_tilt", oldPref);
|
||||
}
|
||||
|
||||
TEST_F(AccessibleCaretManagerTester, TestScrollInCursorModeWhenLogicallyVisible)
|
||||
|
@ -728,9 +728,8 @@ TEST_F(AccessibleCaretManagerTester,
|
|||
MOZ_CAN_RUN_SCRIPT
|
||||
{
|
||||
// Simulate Firefox Android preference.
|
||||
AutoRestore<bool> savesCaretShownWhenLongTappingOnEmptyContent(
|
||||
MockAccessibleCaretManager::sCaretShownWhenLongTappingOnEmptyContent);
|
||||
MockAccessibleCaretManager::sCaretShownWhenLongTappingOnEmptyContent = true;
|
||||
bool oldPref = StaticPrefs::layout_accessiblecaret_caret_shown_when_long_tapping_on_empty_content();
|
||||
Preferences::SetBool("layout.accessiblecaret.caret_shown_when_long_tapping_on_empty_content", true);
|
||||
|
||||
EXPECT_CALL(mManager, GetCaretMode())
|
||||
.WillRepeatedly(Return(CaretMode::Cursor));
|
||||
|
@ -816,6 +815,8 @@ MOZ_CAN_RUN_SCRIPT
|
|||
mManager.OnScrollEnd();
|
||||
EXPECT_EQ(FirstCaretAppearance(), Appearance::Normal);
|
||||
check.Call("longtap scrollend3");
|
||||
|
||||
Preferences::SetBool("layout.accessiblecaret.caret_shown_when_long_tapping_on_empty_content", oldPref);
|
||||
}
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -476,6 +476,63 @@ VARCACHE_PREF(
|
|||
bool, true
|
||||
)
|
||||
|
||||
// By default, carets become tilt only when they are overlapping.
|
||||
VARCACHE_PREF(
|
||||
"layout.accessiblecaret.always_tilt",
|
||||
layout_accessiblecaret_always_tilt,
|
||||
bool, false
|
||||
)
|
||||
|
||||
// Show caret in cursor mode when long tapping on an empty content. This
|
||||
// also changes the default update behavior in cursor mode, which is based
|
||||
// on the emptiness of the content, into something more heuristic. See
|
||||
// AccessibleCaretManager::UpdateCaretsForCursorMode() for the details.
|
||||
VARCACHE_PREF(
|
||||
"layout.accessiblecaret.caret_shown_when_long_tapping_on_empty_content",
|
||||
layout_accessiblecaret_caret_shown_when_long_tapping_on_empty_content,
|
||||
bool, false
|
||||
)
|
||||
|
||||
// 0 = by default, always hide carets for selection changes due to JS calls.
|
||||
// 1 = update any visible carets for selection changes due to JS calls,
|
||||
// but don't show carets if carets are hidden.
|
||||
// 2 = always show carets for selection changes due to JS calls.
|
||||
VARCACHE_PREF(
|
||||
"layout.accessiblecaret.script_change_update_mode",
|
||||
layout_accessiblecaret_script_change_update_mode,
|
||||
int32_t, 0
|
||||
)
|
||||
|
||||
// Allow one caret to be dragged across the other caret without any limitation.
|
||||
// This matches the built-in convention for all desktop platforms.
|
||||
VARCACHE_PREF(
|
||||
"layout.accessiblecaret.allow_dragging_across_other_caret",
|
||||
layout_accessiblecaret_allow_dragging_across_other_caret,
|
||||
bool, true
|
||||
)
|
||||
|
||||
// Optionally provide haptic feedback on long-press selection events.
|
||||
VARCACHE_PREF(
|
||||
"layout.accessiblecaret.hapticfeedback",
|
||||
layout_accessiblecaret_hapticfeedback,
|
||||
bool, false
|
||||
)
|
||||
|
||||
// Smart phone-number selection on long-press is not enabled by default.
|
||||
VARCACHE_PREF(
|
||||
"layout.accessiblecaret.extend_selection_for_phone_number",
|
||||
layout_accessiblecaret_extend_selection_for_phone_number,
|
||||
bool, false
|
||||
)
|
||||
|
||||
// Keep the accessible carets hidden when the user is using mouse input (as
|
||||
// opposed to touch/pen/etc.).
|
||||
VARCACHE_PREF(
|
||||
"layout.accessiblecaret.hide_carets_for_mouse_input",
|
||||
layout_accessiblecaret_hide_carets_for_mouse_input,
|
||||
bool, true
|
||||
)
|
||||
|
||||
// CSS attributes (width, height, margin-left) of the AccessibleCaret in CSS
|
||||
// pixels.
|
||||
VARCACHE_PREF(
|
||||
|
|
|
@ -5542,31 +5542,6 @@ pref("plugins.flashBlock.enabled", false);
|
|||
// Turn off Spatial navigation by default.
|
||||
pref("snav.enabled", false);
|
||||
|
||||
// Show the caret when long tapping on an empty content.
|
||||
pref("layout.accessiblecaret.caret_shown_when_long_tapping_on_empty_content", false);
|
||||
|
||||
// By default, carets become tilt only when they are overlapping.
|
||||
pref("layout.accessiblecaret.always_tilt", false);
|
||||
|
||||
// 0 = by default, always hide carets for selection changes due to JS calls.
|
||||
// 1 = update any visible carets for selection changes due to JS calls,
|
||||
// but don't show carets if carets are hidden.
|
||||
// 2 = always show carets for selection changes due to JS calls.
|
||||
pref("layout.accessiblecaret.script_change_update_mode", 0);
|
||||
|
||||
// Allow one caret to be dragged across the other caret without any limitation.
|
||||
// This matches the built-in convention for all desktop platforms.
|
||||
pref("layout.accessiblecaret.allow_dragging_across_other_caret", true);
|
||||
|
||||
// Optionally provide haptic feedback on longPress selection events.
|
||||
pref("layout.accessiblecaret.hapticfeedback", false);
|
||||
|
||||
// Smart phone-number selection on long-press is not enabled by default.
|
||||
pref("layout.accessiblecaret.extend_selection_for_phone_number", false);
|
||||
|
||||
// Keep the accessible carets hidden when the user is using mouse input.
|
||||
pref("layout.accessiblecaret.hide_carets_for_mouse_input", true);
|
||||
|
||||
// Wakelock is disabled by default.
|
||||
pref("dom.wakelock.enabled", false);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче