add quit button to contextual tab bar

This commit is contained in:
Fabian Freund
2026-03-18 10:14:49 +01:00
parent c6be4f92ba
commit f09f201054
3 changed files with 34 additions and 0 deletions
@@ -42,4 +42,5 @@ enum ToolbarButtonId {
pageDown, pageDown,
font, font,
extensionShortcut, extensionShortcut,
quit,
} }
@@ -158,6 +158,12 @@ const extensionShortcutToolbarButtonSpec = ToolbarButtonSpec(
canBeFallbackTarget: false, canBeFallbackTarget: false,
); );
const quitToolbarButtonSpec = ToolbarButtonSpec(
id: ToolbarButtonId.quit,
defaultVisible: false,
canBeFallbackTarget: false,
);
const toolbarButtonSpecs = [ const toolbarButtonSpecs = [
backToolbarButtonSpec, backToolbarButtonSpec,
forwardToolbarButtonSpec, forwardToolbarButtonSpec,
@@ -182,6 +188,7 @@ const toolbarButtonSpecs = [
pageDownToolbarButtonSpec, pageDownToolbarButtonSpec,
fontToolbarButtonSpec, fontToolbarButtonSpec,
extensionShortcutToolbarButtonSpec, extensionShortcutToolbarButtonSpec,
quitToolbarButtonSpec,
]; ];
final Map<String, ToolbarButtonSpec> toolbarButtonSpecsById = { final Map<String, ToolbarButtonSpec> toolbarButtonSpecsById = {
@@ -47,8 +47,10 @@ import 'package:weblibre/features/geckoview/features/readerview/presentation/con
import 'package:weblibre/features/geckoview/features/tabs/data/entities/tab_mode.dart'; import 'package:weblibre/features/geckoview/features/tabs/data/entities/tab_mode.dart';
import 'package:weblibre/features/settings/presentation/controllers/save_settings.dart'; import 'package:weblibre/features/settings/presentation/controllers/save_settings.dart';
import 'package:weblibre/features/user/data/models/engine_settings.dart'; import 'package:weblibre/features/user/data/models/engine_settings.dart';
import 'package:weblibre/features/user/domain/presentation/dialogs/quit_browser_dialog.dart';
import 'package:weblibre/features/user/domain/repositories/engine_settings.dart'; import 'package:weblibre/features/user/domain/repositories/engine_settings.dart';
import 'package:weblibre/features/user/domain/repositories/general_settings.dart'; import 'package:weblibre/features/user/domain/repositories/general_settings.dart';
import 'package:weblibre/utils/exit_app.dart';
import 'package:weblibre/utils/move_to_background.dart'; import 'package:weblibre/utils/move_to_background.dart';
import 'package:weblibre/utils/ui_helper.dart' as ui_helper; import 'package:weblibre/utils/ui_helper.dart' as ui_helper;
@@ -477,6 +479,30 @@ final List<ToolbarButtonDefinition> toolbarButtonRegistry = [
return const _ExtensionShortcutToolbarButton(); return const _ExtensionShortcutToolbarButton();
}, },
), ),
ToolbarButtonDefinition(
spec: quitToolbarButtonSpec,
label: 'Quit',
icon: MdiIcons.power,
longPressActions: ['Quit without confirmation'],
builder: (scope, context, ref) {
return IconButton(
onPressed: scope.isPreview
? () {}
: () async {
final result = await showQuitBrowserDialog(context);
if (result == true) {
await exitApp(ref.container);
}
},
onLongPress: scope.isPreview
? null
: () async {
await exitApp(ref.container);
},
icon: const Icon(MdiIcons.power),
);
},
),
]; ];
final Map<String, ToolbarButtonDefinition> toolbarButtonRegistryById = { final Map<String, ToolbarButtonDefinition> toolbarButtonRegistryById = {