new setting: Zoom on All Websites

This commit is contained in:
Fabian Freund
2026-07-30 14:59:14 +02:00
parent da6a4e751e
commit 74c9d9c81b
12 changed files with 120 additions and 21 deletions
@@ -375,6 +375,12 @@ class EngineSettingsReplicationService
settings.inputAutoZoomEnabled,
);
}
if (previous.value?.forceUserScalableContent !=
settings.forceUserScalableContent) {
await _service.forceUserScalableContent(
settings.forceUserScalableContent,
);
}
// LNA Settings
if (previous.value?.lnaBlocking != settings.lnaBlocking) {
await _service.lnaBlocking(settings.lnaBlocking);
@@ -44,7 +44,7 @@ final class EngineSettingsReplicationServiceProvider
}
String _$engineSettingsReplicationServiceHash() =>
r'41c07a48bbc90a90dd6f5a0bd48d55a3e02a1b64';
r'cceb6359fd11a1e570208615fde0e9cb5e5f7ba3';
abstract class _$EngineSettingsReplicationService extends $Notifier<void> {
void build();
@@ -62,6 +62,14 @@ const List<SettingsSectionDefinition> webContentSettingsSections = [
keywords: ['forms'],
child: _InputAutoZoomEnabledTile(),
),
SettingsEntryDefinition(
title: 'Zoom on All Websites',
subtitle:
'Allow pinch and zoom, even on websites that prevent this '
'gesture',
keywords: ['pinch', 'accessibility'],
child: _ForceUserScalableContentTile(),
),
],
),
SettingsSectionDefinition(
@@ -308,6 +316,36 @@ class _InputAutoZoomEnabledTile extends HookConsumerWidget {
}
}
class _ForceUserScalableContentTile extends HookConsumerWidget {
const _ForceUserScalableContentTile();
@override
Widget build(BuildContext context, WidgetRef ref) {
final forceUserScalableContent = ref.watch(
engineSettingsWithDefaultsProvider.select(
(s) => s.forceUserScalableContent,
),
);
return SwitchListTile.adaptive(
title: const Text('Zoom on All Websites'),
subtitle: const Text(
'Allow pinch and zoom, even on websites that prevent this gesture',
),
secondary: const Icon(MdiIcons.gesturePinch),
value: forceUserScalableContent,
onChanged: (value) async {
await ref
.read(saveEngineSettingsControllerProvider.notifier)
.save(
(currentSettings) =>
currentSettings.copyWith.forceUserScalableContent(value),
);
},
);
}
}
class _PdfViewerTile extends HookConsumerWidget {
const _PdfViewerTile();
@@ -122,6 +122,8 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
bool get fontInflationEnabled => super.fontInflationEnabled!;
@override
bool get inputAutoZoomEnabled => super.inputAutoZoomEnabled!;
@override
bool get forceUserScalableContent => super.forceUserScalableContent!;
// Process Isolation Settings (require app restart)
@override
@@ -223,6 +225,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
required super.screenWidthOverride,
required super.screenHeightOverride,
required super.inputAutoZoomEnabled,
required super.forceUserScalableContent,
required super.fissionEnabled,
required super.isolatedProcessEnabled,
required super.appZygoteProcessEnabled,
@@ -279,6 +282,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
super.screenWidthOverride,
super.screenHeightOverride,
bool? inputAutoZoomEnabled,
bool? forceUserScalableContent,
bool? fissionEnabled,
bool? isolatedProcessEnabled,
bool? appZygoteProcessEnabled,
@@ -349,6 +353,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
fontSizeFactor: fontSizeFactor ?? 1.0,
fontInflationEnabled: fontInflationEnabled ?? false,
inputAutoZoomEnabled: inputAutoZoomEnabled ?? true,
forceUserScalableContent: forceUserScalableContent ?? false,
fissionEnabled: fissionEnabled ?? true,
isolatedProcessEnabled: isolatedProcessEnabled ?? false,
appZygoteProcessEnabled: appZygoteProcessEnabled ?? false,
@@ -432,6 +437,7 @@ class EngineSettings extends GeckoEngineSettings with FastEquatable {
screenWidthOverride,
screenHeightOverride,
inputAutoZoomEnabled,
forceUserScalableContent,
fissionEnabled,
isolatedProcessEnabled,
appZygoteProcessEnabled,
@@ -125,6 +125,8 @@ abstract class _$EngineSettingsCWProxy {
EngineSettings inputAutoZoomEnabled(bool? inputAutoZoomEnabled);
EngineSettings forceUserScalableContent(bool? forceUserScalableContent);
EngineSettings fissionEnabled(bool? fissionEnabled);
EngineSettings isolatedProcessEnabled(bool? isolatedProcessEnabled);
@@ -193,6 +195,7 @@ abstract class _$EngineSettingsCWProxy {
int? screenWidthOverride,
int? screenHeightOverride,
bool? inputAutoZoomEnabled,
bool? forceUserScalableContent,
bool? fissionEnabled,
bool? isolatedProcessEnabled,
bool? appZygoteProcessEnabled,
@@ -416,6 +419,10 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy {
EngineSettings inputAutoZoomEnabled(bool? inputAutoZoomEnabled) =>
call(inputAutoZoomEnabled: inputAutoZoomEnabled);
@override
EngineSettings forceUserScalableContent(bool? forceUserScalableContent) =>
call(forceUserScalableContent: forceUserScalableContent);
@override
EngineSettings fissionEnabled(bool? fissionEnabled) =>
call(fissionEnabled: fissionEnabled);
@@ -500,6 +507,7 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy {
Object? screenWidthOverride = const $CopyWithPlaceholder(),
Object? screenHeightOverride = const $CopyWithPlaceholder(),
Object? inputAutoZoomEnabled = const $CopyWithPlaceholder(),
Object? forceUserScalableContent = const $CopyWithPlaceholder(),
Object? fissionEnabled = const $CopyWithPlaceholder(),
Object? isolatedProcessEnabled = const $CopyWithPlaceholder(),
Object? appZygoteProcessEnabled = const $CopyWithPlaceholder(),
@@ -731,6 +739,11 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy {
? _value.inputAutoZoomEnabled
// ignore: cast_nullable_to_non_nullable
: inputAutoZoomEnabled as bool?,
forceUserScalableContent:
forceUserScalableContent == const $CopyWithPlaceholder()
? _value.forceUserScalableContent
// ignore: cast_nullable_to_non_nullable
: forceUserScalableContent as bool?,
fissionEnabled: fissionEnabled == const $CopyWithPlaceholder()
? _value.fissionEnabled
// ignore: cast_nullable_to_non_nullable
@@ -874,6 +887,7 @@ EngineSettings _$EngineSettingsFromJson(
screenWidthOverride: (json['screenWidthOverride'] as num?)?.toInt(),
screenHeightOverride: (json['screenHeightOverride'] as num?)?.toInt(),
inputAutoZoomEnabled: json['inputAutoZoomEnabled'] as bool?,
forceUserScalableContent: json['forceUserScalableContent'] as bool?,
fissionEnabled: json['fissionEnabled'] as bool?,
isolatedProcessEnabled: json['isolatedProcessEnabled'] as bool?,
appZygoteProcessEnabled: json['appZygoteProcessEnabled'] as bool?,
@@ -935,6 +949,7 @@ Map<String, dynamic> _$EngineSettingsToJson(
'fontSizeFactor': instance.fontSizeFactor,
'fontInflationEnabled': instance.fontInflationEnabled,
'inputAutoZoomEnabled': instance.inputAutoZoomEnabled,
'forceUserScalableContent': instance.forceUserScalableContent,
'fissionEnabled': instance.fissionEnabled,
'isolatedProcessEnabled': instance.isolatedProcessEnabled,
'appZygoteProcessEnabled': instance.appZygoteProcessEnabled,
@@ -214,6 +214,8 @@ class EngineSettingsRepository extends _$EngineSettingsRepository {
DriftSqlType.bool,
db.typeMapping,
),
'forceUserScalableContent': settings['forceUserScalableContent']
?.readAs(DriftSqlType.bool, db.typeMapping),
// Process Isolation Settings
'fissionEnabled': settings['fissionEnabled']?.readAs(
DriftSqlType.bool,
@@ -34,7 +34,7 @@ final class EngineSettingsRepositoryProvider
}
String _$engineSettingsRepositoryHash() =>
r'db077d5aa6a7aec5cdb019308cc942079567bab9';
r'1442aa09d8f77bacaed9265e59c16dc555c74b16';
abstract class _$EngineSettingsRepository
extends $StreamNotifier<EngineSettings> {