@@ -118,25 +118,25 @@ public bool IsMouseOverApplicationList
118118 }
119119 }
120120
121- private CollectionViewSource _applicationViewCollectionSource ;
122- public ICollectionView ApplicationViewCollection
121+ private ICollectionView _applications ;
122+ public ICollectionView Applications
123123 {
124- get { return _applicationViewCollectionSource . View ; }
124+ get { return _applications ; }
125125 }
126126
127- private ApplicationViewInfo _selectedApplicationViewInfo ;
128- public ApplicationViewInfo SelectedApplicationViewInfo
127+ private ApplicationViewInfo _selectedApplication ;
128+ public ApplicationViewInfo SelectedApplication
129129 {
130- get { return _selectedApplicationViewInfo ; }
130+ get { return _selectedApplication ; }
131131 set
132132 {
133- if ( value == _selectedApplicationViewInfo )
133+ if ( value == _selectedApplication )
134134 return ;
135135
136136 if ( value != null )
137137 ChangeApplicationView ( value . Name ) ;
138138
139- _selectedApplicationViewInfo = value ;
139+ _selectedApplication = value ;
140140 OnPropertyChanged ( ) ;
141141 }
142142 }
@@ -155,13 +155,13 @@ public string Search
155155
156156 _search = value ;
157157
158- if ( SelectedApplicationViewInfo != null )
159- filterLastViewName = SelectedApplicationViewInfo . Name ;
158+ if ( SelectedApplication != null )
159+ filterLastViewName = SelectedApplication . Name ;
160160
161- ApplicationViewCollection . Refresh ( ) ;
161+ Applications . Refresh ( ) ;
162162
163- IEnumerable < ApplicationViewInfo > sourceCollection = ApplicationViewCollection . SourceCollection . Cast < ApplicationViewInfo > ( ) ;
164- IEnumerable < ApplicationViewInfo > filteredCollection = ApplicationViewCollection . Cast < ApplicationViewInfo > ( ) ;
163+ IEnumerable < ApplicationViewInfo > sourceCollection = Applications . SourceCollection . Cast < ApplicationViewInfo > ( ) ;
164+ IEnumerable < ApplicationViewInfo > filteredCollection = Applications . Cast < ApplicationViewInfo > ( ) ;
165165
166166 int sourceCollectionCount = sourceCollection . Count ( ) ;
167167 int filteredCollectionCount = filteredCollection . Count ( ) ;
@@ -170,9 +170,9 @@ public string Search
170170 filterLastCount = sourceCollectionCount ;
171171
172172 if ( filterLastCount > filteredCollectionCount )
173- SelectedApplicationViewInfo = filteredCollection . FirstOrDefault ( ) ;
173+ SelectedApplication = filteredCollection . FirstOrDefault ( ) ;
174174 else
175- SelectedApplicationViewInfo = sourceCollection . FirstOrDefault ( x => x . Name == filterLastViewName ) ;
175+ SelectedApplication = sourceCollection . FirstOrDefault ( x => x . Name == filterLastViewName ) ;
176176
177177 filterLastCount = filteredCollectionCount ;
178178
@@ -269,15 +269,25 @@ public MainWindow()
269269
270270 private void LoadApplicationList ( )
271271 {
272- _applicationViewCollectionSource = new CollectionViewSource ( )
272+ _applications = CollectionViewSource . GetDefaultView ( ApplicationViewManager . List ) ;
273+ _applications . SortDescriptions . Add ( new SortDescription ( "Name" , ListSortDirection . Ascending ) ) ; // Always have the same order, even if it is translated
274+ _applications . Filter = o =>
273275 {
274- Source = ApplicationViewManager . List
275- } ;
276+ if ( string . IsNullOrEmpty ( Search ) )
277+ return true ;
278+
279+ // Search for application name and description without "-" and " "
280+ ApplicationViewInfo info = o as ApplicationViewInfo ;
281+
282+ Regex regex = new Regex ( @" |-" ) ;
276283
277- _applicationViewCollectionSource . Filter += ApplicationView_Search ;
278- _applicationViewCollectionSource . SortDescriptions . Add ( new SortDescription ( "Name" , ListSortDirection . Ascending ) ) ;
284+ string search = regex . Replace ( Search , "" ) ;
285+
286+ // Search by TranslatedName and Name
287+ return ( regex . Replace ( info . TranslatedName , "" ) . IndexOf ( search , StringComparison . OrdinalIgnoreCase ) >= 0 ) || ( regex . Replace ( info . Name . ToString ( ) , "" ) . IndexOf ( search , StringComparison . OrdinalIgnoreCase ) >= 0 ) ;
288+ } ;
279289
280- SelectedApplicationViewInfo = ApplicationViewCollection . SourceCollection . Cast < ApplicationViewInfo > ( ) . FirstOrDefault ( x => x . Name == SettingsManager . Current . Application_DefaultApplicationViewName ) ;
290+ SelectedApplication = Applications . SourceCollection . Cast < ApplicationViewInfo > ( ) . FirstOrDefault ( x => x . Name == SettingsManager . Current . Application_DefaultApplicationViewName ) ;
281291 }
282292
283293 private async void MetroWindowMain_Closing ( object sender , CancelEventArgs e )
@@ -418,27 +428,7 @@ private void ChangeApplicationView(ApplicationViewManager.Name name)
418428
419429 #endregion
420430
421- #region ListView Search/Filter
422- private void ApplicationView_Search ( object sender , FilterEventArgs e )
423- {
424- if ( string . IsNullOrEmpty ( Search ) )
425- {
426- e . Accepted = true ;
427- return ;
428- }
429-
430- // Search for application name and description without "-" and " "
431- ApplicationViewInfo info = e . Item as ApplicationViewInfo ;
432-
433- Regex regex = new Regex ( @" |-" ) ;
434-
435- // Try to find the translated application view name first --> it's faster when the language ist different than english and equal when it's english
436- if ( ( regex . Replace ( info . TranslatedName , "" ) . IndexOf ( regex . Replace ( Search , "" ) , StringComparison . OrdinalIgnoreCase ) >= 0 ) || ( regex . Replace ( info . Name . ToString ( ) , "" ) . IndexOf ( regex . Replace ( Search , "" ) , StringComparison . OrdinalIgnoreCase ) >= 0 ) )
437- e . Accepted = true ;
438- else
439- e . Accepted = false ;
440- }
441-
431+ #region ListView Search/Filter
442432 private void ClearSearchFilterOnApplicationListMinimize ( )
443433 {
444434 if ( ApplicationView_Expand )
@@ -643,7 +633,7 @@ private void OpenSettingsAction()
643633 }
644634
645635 // Change selected settings view
646- _settingsView . SelectedApplicationName = _isInTray ? ApplicationViewManager . Name . None : SelectedApplicationViewInfo . Name ;
636+ _settingsView . SelectedApplicationName = _isInTray ? ApplicationViewManager . Name . None : SelectedApplication . Name ;
647637
648638 // Show the view (this will hide other content)
649639 ShowSettingsView = true ;
@@ -761,19 +751,6 @@ private void RestartApplication(bool closeApplication = true)
761751 }
762752 }
763753
764- public ICommand TextBoxSearchCommand
765- {
766- get { return new RelayCommand ( p => TextBoxSearchAction ( ) ) ; }
767- }
768-
769- private void TextBoxSearchAction ( )
770- {
771- if ( string . IsNullOrEmpty ( Search ) )
772- txtSearch . Focus ( ) ;
773- else
774- Search = string . Empty ;
775- }
776-
777754 public ICommand ApplicationListMouseEnterCommand
778755 {
779756 get { return new RelayCommand ( p => ApplicationListMouseEnterAction ( ) ) ; }
0 commit comments