@@ -871,37 +871,35 @@ private void AddClipboardDataItem(ClipboardData clipboardData)
871
871
public void RegisterEventsForWindowsClipboardHelper ( )
872
872
{
873
873
WindowsClipboardHelper . OnHistoryItemRemoved += WindowsClipboardHelper_OnHistoryItemRemoved ;
874
+ WindowsClipboardHelper . OnHistoryEnabledChanged += WindowsClipboardHelper_OnHistoryEnabledChanged ;
874
875
}
875
876
876
877
public void UnregisterEventsForWindowsClipboardHelper ( )
877
878
{
878
879
WindowsClipboardHelper . OnHistoryItemRemoved -= WindowsClipboardHelper_OnHistoryItemRemoved ;
880
+ WindowsClipboardHelper . OnHistoryEnabledChanged -= WindowsClipboardHelper_OnHistoryEnabledChanged ;
879
881
}
880
882
881
- private async void WindowsClipboardHelper_OnHistoryItemRemoved ( object ? sender , string [ ] e )
883
+ private void WindowsClipboardHelper_OnHistoryItemRemoved ( object ? sender , string [ ] e )
882
884
{
883
- await RecordsLock . WaitAsync ( ) ;
884
- try
885
+ _ = RemoveRecordsFromSystemAsync ( r => e . Contains ( r . HashId ) ) ;
886
+ }
887
+
888
+ private void WindowsClipboardHelper_OnHistoryEnabledChanged ( object ? sender , bool e )
889
+ {
890
+ if ( e )
885
891
{
886
- var recordsToRemove = RecordsList . Where ( r => r . ClipboardData . FromWindowsClipboardHistory ( ) && e . Contains ( r . ClipboardData . HashId ) ) . ToList ( ) ;
887
- while ( recordsToRemove . Any ( ) )
888
- {
889
- var record = recordsToRemove . First ( ) ;
890
- RecordsList . Remove ( record ) ;
891
- recordsToRemove . Remove ( record ) ;
892
- record . Dispose ( ) ;
893
- }
892
+ _ = InitRecordsFromSystemAsync ( ) ;
894
893
}
895
- finally
894
+ else
896
895
{
897
- RecordsLock . Release ( ) ;
898
- GarbageCollect ( ) ;
896
+ _ = RemoveRecordsFromSystemAsync ( ) ;
899
897
}
900
898
}
901
899
902
900
#endregion
903
901
904
- #region List & Database
902
+ #region List & Database & Windows History
905
903
906
904
public async Task InitRecordsFromDatabaseAndSystemAsync ( )
907
905
{
@@ -974,6 +972,35 @@ public async Task InitRecordsFromSystemAsync()
974
972
RecordsLock . Release ( ) ;
975
973
}
976
974
975
+ private async Task RemoveRecordsFromSystemAsync ( Func < ClipboardData , bool > ? func = null )
976
+ {
977
+ await RecordsLock . WaitAsync ( ) ;
978
+ try
979
+ {
980
+ List < ClipboardDataPair > recordsToRemove ;
981
+ if ( func == null )
982
+ {
983
+ recordsToRemove = RecordsList . Where ( r => r . ClipboardData . FromWindowsClipboardHistory ( ) ) . ToList ( ) ;
984
+ }
985
+ else
986
+ {
987
+ recordsToRemove = RecordsList . Where ( r => r . ClipboardData . FromWindowsClipboardHistory ( ) && func ( r . ClipboardData ) ) . ToList ( ) ;
988
+ }
989
+ while ( recordsToRemove . Any ( ) )
990
+ {
991
+ var record = recordsToRemove . First ( ) ;
992
+ RecordsList . Remove ( record ) ;
993
+ recordsToRemove . Remove ( record ) ;
994
+ record . Dispose ( ) ;
995
+ }
996
+ }
997
+ finally
998
+ {
999
+ RecordsLock . Release ( ) ;
1000
+ GarbageCollect ( ) ;
1001
+ }
1002
+ }
1003
+
977
1004
private async Task < int > DeleteAllRecordsFromList ( )
978
1005
{
979
1006
await RecordsLock . WaitAsync ( ) ;
0 commit comments