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,
font,
extensionShortcut,
quit,
}
@@ -158,6 +158,12 @@ const extensionShortcutToolbarButtonSpec = ToolbarButtonSpec(
canBeFallbackTarget: false,
);
const quitToolbarButtonSpec = ToolbarButtonSpec(
id: ToolbarButtonId.quit,
defaultVisible: false,
canBeFallbackTarget: false,
);
const toolbarButtonSpecs = [
backToolbarButtonSpec,
forwardToolbarButtonSpec,
@@ -182,6 +188,7 @@ const toolbarButtonSpecs = [
pageDownToolbarButtonSpec,
fontToolbarButtonSpec,
extensionShortcutToolbarButtonSpec,
quitToolbarButtonSpec,
];
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/settings/presentation/controllers/save_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/general_settings.dart';
import 'package:weblibre/utils/exit_app.dart';
import 'package:weblibre/utils/move_to_background.dart';
import 'package:weblibre/utils/ui_helper.dart' as ui_helper;
@@ -477,6 +479,30 @@ final List<ToolbarButtonDefinition> toolbarButtonRegistry = [
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 = {