diff --git a/lib/features/base/widget/popup_menu_overlay_widget.dart b/lib/features/base/widget/popup_menu_overlay_widget.dart index dd29bf7aa..7e9ace410 100644 --- a/lib/features/base/widget/popup_menu_overlay_widget.dart +++ b/lib/features/base/widget/popup_menu_overlay_widget.dart @@ -3,6 +3,8 @@ import 'package:custom_pop_up_menu/custom_pop_up_menu.dart'; import 'package:flutter/material.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; +typedef OnMenuChanged = void Function(bool isShowing); + class PopupMenuOverlayWidget extends StatelessWidget { final List listButtonAction; @@ -14,6 +16,7 @@ class PopupMenuOverlayWidget extends StatelessWidget { final bool arrangeAsList; final PreferredPosition? position; final EdgeInsetsGeometry? padding; + final OnMenuChanged? onMenuChanged; const PopupMenuOverlayWidget({ Key? key, @@ -26,6 +29,7 @@ class PopupMenuOverlayWidget extends StatelessWidget { this.position = PreferredPosition.bottom, this.arrangeAsList = false, this.padding, + this.onMenuChanged, }) : super(key: key); @override @@ -59,6 +63,7 @@ class PopupMenuOverlayWidget extends StatelessWidget { barrierColor: Colors.transparent, arrowSize: 0.0, verticalMargin: 2.0, + menuOnChange: onMenuChanged, child: iconButton, ); } diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index 0a639e00e..a60d59543 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -1551,6 +1551,17 @@ class ComposerController extends BaseController replyToRecipientState.value = PrefixRecipientState.disabled; } + void clearFocusRecipients() { + toAddressFocusNode?.unfocus(); + ccAddressFocusNode?.unfocus(); + bccAddressFocusNode?.unfocus(); + replyToAddressFocusNode?.unfocus(); + } + + void clearFocusSubject() { + subjectEmailInputFocusNode?.unfocus(); + } + void _closeSuggestionBox() { if (toEmailAddressController.text.isEmpty) { keyToEmailTagEditor.currentState?.closeSuggestionBox(); @@ -1899,8 +1910,12 @@ class ComposerController extends BaseController } void handleOnFocusHtmlEditorWeb() { + clearFocusRecipients(); + clearFocusSubject(); FocusManager.instance.primaryFocus?.unfocus(); - richTextWebController?.editorController.setFocus(); + if (richTextWebController?.codeViewEnabled != true) { + richTextWebController?.editorController.setFocus(); + } richTextWebController?.closeAllMenuPopup(); if (menuMoreOptionController?.menuIsShowing == true) { menuMoreOptionController?.hideMenu(); @@ -2428,4 +2443,11 @@ class ComposerController extends BaseController void onCompleteSetupComposer() { initEmailDraftHash(); } + + void onPopupMenuChanged(bool isShowing) { + if (isShowing) { + clearFocusRecipients(); + clearFocusSubject(); + } + } } \ No newline at end of file diff --git a/lib/features/composer/presentation/composer_view_web.dart b/lib/features/composer/presentation/composer_view_web.dart index 333ba8445..e40e01d11 100644 --- a/lib/features/composer/presentation/composer_view_web.dart +++ b/lib/features/composer/presentation/composer_view_web.dart @@ -619,6 +619,7 @@ class ComposerView extends GetWidget { isEmailChanged: controller.isEmailChanged.isTrue, toggleCodeViewAction: controller.richTextWebController!.toggleCodeView, menuMoreOptionController: controller.menuMoreOptionController!, + onPopupMenuChanged: controller.onPopupMenuChanged, printDraftAction: () => controller.printDraft(context), toggleRequestReadReceiptAction: () => controller.toggleRequestReadReceipt(context), toggleMarkAsImportantAction: () => controller.toggleMarkAsImportant(context), @@ -940,6 +941,7 @@ class ComposerView extends GetWidget { isEmailChanged: controller.isEmailChanged.isTrue, toggleCodeViewAction: controller.richTextWebController!.toggleCodeView, menuMoreOptionController: controller.menuMoreOptionController!, + onPopupMenuChanged: controller.onPopupMenuChanged, printDraftAction: () => controller.printDraft(context), toggleRequestReadReceiptAction: () => controller.toggleRequestReadReceipt(context), toggleMarkAsImportantAction: () => controller.toggleMarkAsImportant(context), diff --git a/lib/features/composer/presentation/widgets/web/bottom_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/web/bottom_bar_composer_widget.dart index d560cdfbc..c1f23d552 100644 --- a/lib/features/composer/presentation/widgets/web/bottom_bar_composer_widget.dart +++ b/lib/features/composer/presentation/widgets/web/bottom_bar_composer_widget.dart @@ -30,6 +30,7 @@ class BottomBarComposerWidget extends StatelessWidget { final VoidCallback printDraftAction; final VoidCallback toggleMarkAsImportantAction; final VoidCallback saveAsTemplateAction; + final OnMenuChanged? onPopupMenuChanged; const BottomBarComposerWidget({ super.key, @@ -51,6 +52,7 @@ class BottomBarComposerWidget extends StatelessWidget { required this.printDraftAction, required this.toggleMarkAsImportantAction, required this.saveAsTemplateAction, + this.onPopupMenuChanged, }); @override @@ -182,6 +184,7 @@ class BottomBarComposerWidget extends StatelessWidget { ], arrangeAsList: true, position: null, + onMenuChanged: onPopupMenuChanged, ), const Spacer(), TMailButtonWidget.fromIcon(