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(
controller: menuController,
child: IconButton(
onPressed: menuController.open,
onPressed: () {
if (menuController.isOpen) {
menuController.close();
} else {
menuController.open();
}
},
icon: const Icon(MdiIcons.puzzle),
),
);
@@ -497,7 +503,15 @@ class _ReloadToolbarButton extends HookConsumerWidget {
.reload();
}
},
onLongPress: scope.isPreview ? null : menuController.open,
onLongPress: scope.isPreview
? null
: () {
if (menuController.isOpen) {
menuController.close();
} else {
menuController.open();
}
},
icon: const Icon(Icons.refresh),
),
);
@@ -557,7 +571,15 @@ class _CloseTabToolbarButton extends HookConsumerWidget {
onPressed: scope.isPreview
? () {}
: () => _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),
),
);
@@ -654,7 +676,15 @@ class _BookmarkToolbarButton extends HookConsumerWidget {
entryGuid: BookmarkRoot.root.id,
).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),
),
);
@@ -274,7 +274,9 @@ class _NavigationRow extends HookConsumerWidget {
onLongPress: isLoading || history?.canGoBack != true
? null
: () {
if (!backMenuController.isOpen) {
if (backMenuController.isOpen) {
backMenuController.close();
} else {
backMenuController.open();
}
},
@@ -297,7 +299,9 @@ class _NavigationRow extends HookConsumerWidget {
onLongPress: history?.canGoForward != true
? null
: () {
if (!forwardMenuController.isOpen) {
if (forwardMenuController.isOpen) {
forwardMenuController.close();
} else {
forwardMenuController.open();
}
},
@@ -379,7 +383,13 @@ class _NavigationRow extends HookConsumerWidget {
);
}
},
onLongPress: closeMenuController.open,
onLongPress: () {
if (closeMenuController.isOpen) {
closeMenuController.close();
} else {
closeMenuController.open();
}
},
),
),
MenuAnchor(
@@ -408,7 +418,13 @@ class _NavigationRow extends HookConsumerWidget {
.reload();
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();
},
onLongPress: () {
if (!historyMenuController.isOpen) {
if (historyMenuController.isOpen) {
historyMenuController.close();
} else {
historyMenuController.open();
}
},
@@ -160,7 +162,9 @@ class NavigateBackButton extends HookConsumerWidget {
menuControllerToClose?.close();
},
onLongPress: () {
if (!historyMenuController.isOpen) {
if (historyMenuController.isOpen) {
historyMenuController.close();
} else {
historyMenuController.open();
}
},
@@ -429,7 +429,15 @@ class _TopSiteGridTileState extends State<_TopSiteGridTile> {
child: InkWell(
borderRadius: _TopSiteGridTile._borderRadius,
onTap: widget.onTap,
onLongPress: _hasMenu ? () => _menuController.open() : null,
onLongPress: _hasMenu
? () {
if (_menuController.isOpen) {
_menuController.close();
} else {
_menuController.open();
}
}
: null,
child: Stack(
fit: StackFit.expand,
children: [
@@ -44,7 +44,11 @@ class FingerprintSettingsScreen extends HookConsumerWidget {
builder: (context, controller, child) {
return IconButton(
onPressed: () {
controller.open();
if (controller.isOpen) {
controller.close();
} else {
controller.open();
}
},
icon: const Icon(Icons.more_vert),
);