diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index 96bdbf143..93f8d4ad2 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -266,7 +266,7 @@ class ChatListController extends State }); } - void onSearchEnter(String text) { + void onSearchEnter(String text, {bool globalSearch = true}) { if (text.isEmpty) { cancelSearch(unfocus: false); return; @@ -276,7 +276,9 @@ class ChatListController extends State isSearchMode = true; }); _coolDown?.cancel(); - _coolDown = Timer(const Duration(milliseconds: 500), _search); + if (globalSearch) { + _coolDown = Timer(const Duration(milliseconds: 500), _search); + } } void startSearch() { diff --git a/lib/pages/chat_list/chat_list_header.dart b/lib/pages/chat_list/chat_list_header.dart index bfbc2056f..5e76e780f 100644 --- a/lib/pages/chat_list/chat_list_header.dart +++ b/lib/pages/chat_list/chat_list_header.dart @@ -9,8 +9,13 @@ import '../../widgets/matrix.dart'; class ChatListHeader extends StatelessWidget implements PreferredSizeWidget { final ChatListController controller; + final bool globalSearch; - const ChatListHeader({super.key, required this.controller}); + const ChatListHeader({ + super.key, + required this.controller, + this.globalSearch = true, + }); @override Widget build(BuildContext context) { @@ -47,7 +52,10 @@ class ChatListHeader extends StatelessWidget implements PreferredSizeWidget { controller: controller.searchController, focusNode: controller.searchFocusNode, textInputAction: TextInputAction.search, - onChanged: controller.onSearchEnter, + onChanged: (text) => controller.onSearchEnter( + text, + globalSearch: globalSearch, + ), decoration: InputDecoration( fillColor: Theme.of(context).colorScheme.secondaryContainer, border: OutlineInputBorder( @@ -79,7 +87,7 @@ class ChatListHeader extends StatelessWidget implements PreferredSizeWidget { .onPrimaryContainer, ), ), - suffixIcon: controller.isSearchMode + suffixIcon: controller.isSearchMode && globalSearch ? controller.isSearching ? const Padding( padding: EdgeInsets.symmetric( diff --git a/lib/pages/chat_list/space_view.dart b/lib/pages/chat_list/space_view.dart index d0b57a83f..53a681d35 100644 --- a/lib/pages/chat_list/space_view.dart +++ b/lib/pages/chat_list/space_view.dart @@ -279,10 +279,17 @@ class _SpaceViewState extends State { if (activeSpaceId == null) { final rootSpaces = allSpaces .where( - (space) => !allSpaces.any( - (parentSpace) => parentSpace.spaceChildren - .any((child) => child.roomId == space.id), - ), + (space) => + !allSpaces.any( + (parentSpace) => parentSpace.spaceChildren + .any((child) => child.roomId == space.id), + ) && + space + .getLocalizedDisplayname(MatrixLocals(L10n.of(context)!)) + .toLowerCase() + .contains( + widget.controller.searchController.text.toLowerCase(), + ), ) .toList(); @@ -347,7 +354,7 @@ class _SpaceViewState extends State { child: CustomScrollView( controller: widget.scrollController, slivers: [ - ChatListHeader(controller: widget.controller), + ChatListHeader(controller: widget.controller, globalSearch: false), SliverAppBar( automaticallyImplyLeading: false, primary: false, @@ -490,7 +497,8 @@ class _SpaceViewState extends State { L10n.of(context)!.chat; if (widget.controller.isSearchMode && !name.toLowerCase().contains( - widget.controller.searchController.text, + widget.controller.searchController.text + .toLowerCase(), )) { return const SizedBox.shrink(); }