Ver Fonte

isActive for TerminalSearchTask that disables it completely

devmil há 4 anos atrás
pai
commit
95c46509bb

+ 2 - 4
lib/terminal/terminal.dart

@@ -768,13 +768,11 @@ class Terminal with Observable implements TerminalUiInteraction {
     refresh();
   }
 
-  var _isUserSearchActive = false;
-
   @override
-  bool get isUserSearchActive => _isUserSearchActive;
+  bool get isUserSearchActive => _userSearchTask.isActive;
 
   @override
   void set isUserSearchActive(bool isUserSearchActive) {
-    _isUserSearchActive = isUserSearchActive;
+    _userSearchTask.isActive = isUserSearchActive;
   }
 }

+ 12 - 19
lib/terminal/terminal_isolate.dart

@@ -37,6 +37,7 @@ enum _IsolateCommand {
   updateSearchPattern,
   updateSearchOptions,
   updateCurrentSearchHit,
+  updateIsUserSearchActive,
 }
 
 enum _IsolateEvent {
@@ -153,6 +154,7 @@ void terminalMain(SendPort port) async {
             _terminal.userSearchResult,
             _terminal.userSearchPattern,
             _terminal.userSearchOptions,
+            _terminal.isUserSearchActive,
           );
           port.send([_IsolateEvent.newState, newState]);
           _needNotify = true;
@@ -176,6 +178,9 @@ void terminalMain(SendPort port) async {
       case _IsolateCommand.updateCurrentSearchHit:
         _terminal?.currentSearchHit = msg[1];
         break;
+      case _IsolateCommand.updateIsUserSearchActive:
+        _terminal?.isUserSearchActive = msg[1];
+        break;
     }
   }
 }
@@ -224,6 +229,7 @@ class TerminalState {
   TerminalSearchResult searchResult;
   String? userSearchPattern;
   TerminalSearchOptions userSearchOptions;
+  bool isUserSearchActive;
 
   TerminalState(
     this.scrollOffsetFromBottom,
@@ -244,6 +250,7 @@ class TerminalState {
     this.searchResult,
     this.userSearchPattern,
     this.userSearchOptions,
+    this.isUserSearchActive,
   );
 }
 
@@ -410,7 +417,6 @@ class TerminalIsolate with Observable implements TerminalUiInteraction {
           break;
         case _IsolateEvent.newState:
           _lastState = message[1];
-          _updateLocalCaches();
           if (!initialRefreshCompleted.isCompleted) {
             initialRefreshCompleted.complete(true);
           }
@@ -570,42 +576,29 @@ class TerminalIsolate with Observable implements TerminalUiInteraction {
     _sendPort?.send([_IsolateCommand.updateCurrentSearchHit, currentSearchHit]);
   }
 
-  TerminalSearchOptions? _localUserSearchOptionsCache;
-
   @override
   TerminalSearchOptions get userSearchOptions =>
-      _localUserSearchOptionsCache ?? TerminalSearchOptions();
+      _lastState?.userSearchOptions ?? TerminalSearchOptions();
 
   @override
   void set userSearchOptions(TerminalSearchOptions options) {
-    _localUserSearchOptionsCache = options;
     _sendPort?.send([_IsolateCommand.updateSearchOptions, options]);
   }
 
-  String? _localUserSearchPatternCache;
-
   @override
-  String? get userSearchPattern => _localUserSearchPatternCache;
+  String? get userSearchPattern => _lastState?.userSearchPattern;
 
   @override
   void set userSearchPattern(String? newValue) {
-    _localUserSearchPatternCache = newValue;
     _sendPort?.send([_IsolateCommand.updateSearchPattern, newValue]);
   }
 
-  var _isUserSearchActive = false;
-
   @override
-  bool get isUserSearchActive => _isUserSearchActive;
+  bool get isUserSearchActive => _lastState?.isUserSearchActive ?? false;
 
   @override
   void set isUserSearchActive(bool isUserSearchActive) {
-    _isUserSearchActive = isUserSearchActive;
-  }
-
-  void _updateLocalCaches() {
-    _localUserSearchPatternCache = _lastState?.userSearchPattern;
-    _localUserSearchOptionsCache =
-        _lastState?.userSearchOptions ?? TerminalSearchOptions();
+    _sendPort
+        ?.send([_IsolateCommand.updateIsUserSearchActive, isUserSearchActive]);
   }
 }

+ 15 - 3
lib/terminal/terminal_search.dart

@@ -128,6 +128,15 @@ class TerminalSearchTask {
   final String _dirtyTagName;
   TerminalSearchOptions _terminalSearchOptions;
 
+  bool _isActive = false;
+  bool get isActive => _isActive;
+  void set isActive(bool isActive) {
+    _isActive = isActive;
+    if (isActive) {
+      _invalidate();
+    }
+  }
+
   bool? _hasBeenUsingAltBuffer;
   TerminalSearchResult? _lastSearchResult = null;
 
@@ -170,8 +179,7 @@ class TerminalSearchTask {
   void set pattern(String? newPattern) {
     if (newPattern != _pattern) {
       _pattern = newPattern;
-      _isPatternDirty = true;
-      _searchRegexp = null;
+      _invalidate();
     }
   }
 
@@ -181,12 +189,16 @@ class TerminalSearchTask {
       return;
     }
     _terminalSearchOptions = newOptions;
+    _invalidate();
+  }
+
+  void _invalidate() {
     _isPatternDirty = true;
     _searchRegexp = null;
   }
 
   TerminalSearchResult get searchResult {
-    if (_pattern == null) {
+    if (_pattern == null || !_isActive) {
       return TerminalSearchResult.empty();
     }
     if (_lastSearchResult != null && !_isDirty) {