improve menu anchor show/hide controls

This commit is contained in:
Fabian Freund
2026-03-12 08:51:16 +01:00
parent 573bddff7e
commit a4cb08a12f
5 changed files with 74 additions and 12 deletions
@@ -453,7 +453,13 @@ class _ExtensionShortcutToolbarButton extends HookConsumerWidget {
return ExtensionShortcutMenu( return ExtensionShortcutMenu(
controller: menuController, controller: menuController,
child: IconButton( child: IconButton(
onPressed: menuController.open, onPressed: () {
if (menuController.isOpen) {
menuController.close();
} else {
menuController.open();
}
},
icon: const Icon(MdiIcons.puzzle), icon: const Icon(MdiIcons.puzzle),
), ),
); );
@@ -497,7 +503,15 @@ class _ReloadToolbarButton extends HookConsumerWidget {
.reload(); .reload();
} }
}, },
onLongPress: scope.isPreview ? null : menuController.open, onLongPress: scope.isPreview
? null
: () {
if (menuController.isOpen) {
menuController.close();
} else {
menuController.open();
}
},
icon: const Icon(Icons.refresh), icon: const Icon(Icons.refresh),
), ),
); );
@@ -557,7 +571,15 @@ class _CloseTabToolbarButton extends HookConsumerWidget {
onPressed: scope.isPreview onPressed: scope.isPreview
? () {} ? () {}
: () => _closeTab(context, ref, scope.selectedTabId), : () => _closeTab(context, ref, scope.selectedTabId),
onLongPress: scope.isPreview ? null : menuController.open, onLongPress: scope.isPreview
? null
: () {
if (menuController.isOpen) {
menuController.close();
} else {
menuController.open();
}
},
icon: const Icon(MdiIcons.tabMinus), icon: const Icon(MdiIcons.tabMinus),
), ),
); );
@@ -654,7 +676,15 @@ class _BookmarkToolbarButton extends HookConsumerWidget {
entryGuid: BookmarkRoot.root.id, entryGuid: BookmarkRoot.root.id,
).push(context); ).push(context);
}, },
onLongPress: scope.isPreview ? null : menuController.open, onLongPress: scope.isPreview
? null
: () {
if (menuController.isOpen) {
menuController.close();
} else {
menuController.open();
}
},
icon: const Icon(MdiIcons.bookmarkMultiple), icon: const Icon(MdiIcons.bookmarkMultiple),
), ),
); );
@@ -274,7 +274,9 @@ class _NavigationRow extends HookConsumerWidget {
onLongPress: isLoading || history?.canGoBack != true onLongPress: isLoading || history?.canGoBack != true
? null ? null
: () { : () {
if (!backMenuController.isOpen) { if (backMenuController.isOpen) {
backMenuController.close();
} else {
backMenuController.open(); backMenuController.open();
} }
}, },
@@ -297,7 +299,9 @@ class _NavigationRow extends HookConsumerWidget {
onLongPress: history?.canGoForward != true onLongPress: history?.canGoForward != true
? null ? null
: () { : () {
if (!forwardMenuController.isOpen) { if (forwardMenuController.isOpen) {
forwardMenuController.close();
} else {
forwardMenuController.open(); forwardMenuController.open();
} }
}, },
@@ -379,7 +383,13 @@ class _NavigationRow extends HookConsumerWidget {
); );
} }
}, },
onLongPress: closeMenuController.open, onLongPress: () {
if (closeMenuController.isOpen) {
closeMenuController.close();
} else {
closeMenuController.open();
}
},
), ),
), ),
MenuAnchor( MenuAnchor(
@@ -408,7 +418,13 @@ class _NavigationRow extends HookConsumerWidget {
.reload(); .reload();
if (context.mounted) Navigator.pop(context); if (context.mounted) Navigator.pop(context);
}, },
onLongPress: reloadMenuController.open, onLongPress: () {
if (reloadMenuController.isOpen) {
reloadMenuController.close();
} else {
reloadMenuController.open();
}
},
), ),
), ),
], ],
@@ -102,7 +102,9 @@ class NavigateForwardButton extends HookConsumerWidget {
menuControllerToClose?.close(); menuControllerToClose?.close();
}, },
onLongPress: () { onLongPress: () {
if (!historyMenuController.isOpen) { if (historyMenuController.isOpen) {
historyMenuController.close();
} else {
historyMenuController.open(); historyMenuController.open();
} }
}, },
@@ -160,7 +162,9 @@ class NavigateBackButton extends HookConsumerWidget {
menuControllerToClose?.close(); menuControllerToClose?.close();
}, },
onLongPress: () { onLongPress: () {
if (!historyMenuController.isOpen) { if (historyMenuController.isOpen) {
historyMenuController.close();
} else {
historyMenuController.open(); historyMenuController.open();
} }
}, },
@@ -429,7 +429,15 @@ class _TopSiteGridTileState extends State<_TopSiteGridTile> {
child: InkWell( child: InkWell(
borderRadius: _TopSiteGridTile._borderRadius, borderRadius: _TopSiteGridTile._borderRadius,
onTap: widget.onTap, onTap: widget.onTap,
onLongPress: _hasMenu ? () => _menuController.open() : null, onLongPress: _hasMenu
? () {
if (_menuController.isOpen) {
_menuController.close();
} else {
_menuController.open();
}
}
: null,
child: Stack( child: Stack(
fit: StackFit.expand, fit: StackFit.expand,
children: [ children: [
@@ -44,7 +44,11 @@ class FingerprintSettingsScreen extends HookConsumerWidget {
builder: (context, controller, child) { builder: (context, controller, child) {
return IconButton( return IconButton(
onPressed: () { onPressed: () {
controller.open(); if (controller.isOpen) {
controller.close();
} else {
controller.open();
}
}, },
icon: const Icon(Icons.more_vert), icon: const Icon(Icons.more_vert),
); );