From f78f78c659bc9795c291c7e6eec247051fd97185 Mon Sep 17 00:00:00 2001 From: Martin Kask Date: Tue, 20 Jan 2026 18:37:21 +0200 Subject: [PATCH] Add ESC keyboard shortcut to close email detail view Adds the ability to close the email detail/thread detail view by pressing the ESC key, following the same pattern used for closing the composer. Changes: - Add closeThreadDetail to MailViewActionShortcutType enum - Map ESC key to closeThreadDetail in AppShortcutManager - Handle closeThreadDetail action in HandleMailShortcutActionsExtension Co-Authored-By: Claude Opus 4.5 --- lib/features/base/shortcut/app_shortcut_manager.dart | 2 ++ .../base/shortcut/mail/mail_view_action_shortcut_type.dart | 5 ++++- .../extension/handle_mail_shortcut_actions_extension.dart | 7 +++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/features/base/shortcut/app_shortcut_manager.dart b/lib/features/base/shortcut/app_shortcut_manager.dart index 45fc9fd4d..24857a404 100644 --- a/lib/features/base/shortcut/app_shortcut_manager.dart +++ b/lib/features/base/shortcut/app_shortcut_manager.dart @@ -25,6 +25,8 @@ class AppShortcutManager { return MailViewActionShortcutType.newMessage; } else if (keysPressed.isOnly(LogicalKeyboardKey.keyU)) { return MailViewActionShortcutType.markAsUnread; + } else if (keysPressed.isOnly(LogicalKeyboardKey.escape)) { + return MailViewActionShortcutType.closeThreadDetail; } else { return null; } diff --git a/lib/features/base/shortcut/mail/mail_view_action_shortcut_type.dart b/lib/features/base/shortcut/mail/mail_view_action_shortcut_type.dart index 08ba43cb2..c90b57e4a 100644 --- a/lib/features/base/shortcut/mail/mail_view_action_shortcut_type.dart +++ b/lib/features/base/shortcut/mail/mail_view_action_shortcut_type.dart @@ -9,7 +9,8 @@ enum MailViewActionShortcutType { forward, delete, newMessage, - markAsUnread; + markAsUnread, + closeThreadDetail; EmailActionType? getEmailActionType({ required PresentationEmail currentEmail, @@ -34,6 +35,8 @@ enum MailViewActionShortcutType { return EmailActionType.compose; case MailViewActionShortcutType.markAsUnread: return EmailActionType.markAsUnread; + case MailViewActionShortcutType.closeThreadDetail: + return null; } } } \ No newline at end of file diff --git a/lib/features/thread_detail/presentation/extension/handle_mail_shortcut_actions_extension.dart b/lib/features/thread_detail/presentation/extension/handle_mail_shortcut_actions_extension.dart index 9e213bdc3..7f42f62a2 100644 --- a/lib/features/thread_detail/presentation/extension/handle_mail_shortcut_actions_extension.dart +++ b/lib/features/thread_detail/presentation/extension/handle_mail_shortcut_actions_extension.dart @@ -9,6 +9,7 @@ import 'package:rxdart/rxdart.dart'; import 'package:tmail_ui_user/features/base/shortcut/app_shortcut_manager.dart'; import 'package:tmail_ui_user/features/base/shortcut/mail/mail_view_action_shortcut_type.dart'; import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart'; +import 'package:tmail_ui_user/features/thread_detail/presentation/extension/close_thread_detail_action.dart'; import 'package:tmail_ui_user/features/thread_detail/presentation/extension/key_shortcut_extension.dart'; import 'package:tmail_ui_user/features/thread_detail/presentation/model/mail_view_shortcut_action_view_event.dart'; import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.dart'; @@ -64,6 +65,12 @@ extension HandleMailShortcutActionsExtension on ThreadDetailController { void handleMailShortcutAction(MailViewActionShortcutType shortcutType) { log('$runtimeType::handleMailShortcutAction:🔥ShortcutType: $shortcutType'); + + if (shortcutType == MailViewActionShortcutType.closeThreadDetail) { + closeThreadDetailAction(); + return; + } + final expandedEmail = currentExpandedEmail; if (expandedEmail == null) return;