diff --git a/app/lib/features/geckoview/features/browser/features/contextual_toolbar/presentation/toolbar_button_registry.dart b/app/lib/features/geckoview/features/browser/features/contextual_toolbar/presentation/toolbar_button_registry.dart index 6946685b..6d3d457f 100644 --- a/app/lib/features/geckoview/features/browser/features/contextual_toolbar/presentation/toolbar_button_registry.dart +++ b/app/lib/features/geckoview/features/browser/features/contextual_toolbar/presentation/toolbar_button_registry.dart @@ -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), ), ); diff --git a/app/lib/features/geckoview/features/browser/presentation/widgets/browser_menu_sheet.dart b/app/lib/features/geckoview/features/browser/presentation/widgets/browser_menu_sheet.dart index a72663c4..d9555ed3 100644 --- a/app/lib/features/geckoview/features/browser/presentation/widgets/browser_menu_sheet.dart +++ b/app/lib/features/geckoview/features/browser/presentation/widgets/browser_menu_sheet.dart @@ -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(); + } + }, ), ), ], diff --git a/app/lib/features/geckoview/features/browser/presentation/widgets/navigation_buttons.dart b/app/lib/features/geckoview/features/browser/presentation/widgets/navigation_buttons.dart index 9bf1ead0..e9571109 100644 --- a/app/lib/features/geckoview/features/browser/presentation/widgets/navigation_buttons.dart +++ b/app/lib/features/geckoview/features/browser/presentation/widgets/navigation_buttons.dart @@ -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(); } }, diff --git a/app/lib/features/geckoview/features/search/presentation/widgets/empty_state/top_sites_section.dart b/app/lib/features/geckoview/features/search/presentation/widgets/empty_state/top_sites_section.dart index 3dba6755..f3a28d31 100644 --- a/app/lib/features/geckoview/features/search/presentation/widgets/empty_state/top_sites_section.dart +++ b/app/lib/features/geckoview/features/search/presentation/widgets/empty_state/top_sites_section.dart @@ -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: [ diff --git a/app/lib/features/settings/presentation/screens/fingerprint_settings.dart b/app/lib/features/settings/presentation/screens/fingerprint_settings.dart index 5c4c22b6..c8364d1c 100644 --- a/app/lib/features/settings/presentation/screens/fingerprint_settings.dart +++ b/app/lib/features/settings/presentation/screens/fingerprint_settings.dart @@ -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), );