From 5707c2f0518973c41ca33759919c97567f01cc81 Mon Sep 17 00:00:00 2001 From: Peter Kirmeier Date: Thu, 31 Aug 2023 22:34:47 +0200 Subject: [PATCH] Improve updates on file system watcher events Menu positions and sizes will be adjusted now Invalidated sub menus will be closed --- Business/Menus.cs | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/Business/Menus.cs b/Business/Menus.cs index 435d645..d308435 100644 --- a/Business/Menus.cs +++ b/Business/Menus.cs @@ -687,6 +687,7 @@ namespace SystemTrayMenu.Business List rowDatas = new(); foreach (RowData rowData in menu.GetDataGridView().Items.SourceCollection) { + // TODO: Check if this check is correct as it looks like wronge entries might be modified as well? if (rowData.Path.StartsWith($"{e.OldFullPath}")) { string path = rowData.Path.Replace(e.OldFullPath, e.FullPath); @@ -720,8 +721,16 @@ namespace SystemTrayMenu.Business } rowDatas = DirectoryHelpers.SortItems(rowDatas); - menu.SelectedItem = null; + + if (menu.SelectedItem != null) + { + menu.SelectedItem = null; + menu.SubMenu?.Close(); + menu.RefreshSelection(); + } + menu.AddItemsToMenu(rowDatas, null); + AdjustMenusSizeAndLocation(menu.Level); menu.OnWatcherUpdate(); } catch (Exception ex) @@ -747,12 +756,19 @@ namespace SystemTrayMenu.Business } } + if (menu.SelectedItem != null && rowsToRemove.Contains(menu.SelectedItem)) + { + menu.SelectedItem = null; + menu.SubMenu?.Close(); + menu.RefreshSelection(); + } + foreach (RowData rowToRemove in rowsToRemove) { ((List)dgv.ItemsSource).Remove(rowToRemove); } - menu.SelectedItem = null; + AdjustMenusSizeAndLocation(menu.Level); menu.OnWatcherUpdate(); } catch (Exception ex) @@ -786,8 +802,8 @@ namespace SystemTrayMenu.Business } rowDatas = DirectoryHelpers.SortItems(rowDatas); - menu.SelectedItem = null; menu.AddItemsToMenu(rowDatas, null); + AdjustMenusSizeAndLocation(menu.Level); menu.OnWatcherUpdate(); } catch (Exception ex)