mirror of
https://github.com/Hofknecht/SystemTrayMenu.git
synced 2024-09-30 09:06:32 +13:00
Fix row selection loss when using keys
Remove some old drag and drop code (feature might be added later again) Refactored some events to work with Menu s instead of ListView s
This commit is contained in:
parent
c7066e67f7
commit
189e45099c
5 changed files with 25 additions and 91 deletions
|
@ -198,7 +198,7 @@ namespace SystemTrayMenu.Handler
|
|||
ListView dgv = menu.GetDataGridView();
|
||||
if (dgv.Items.Count > 0)
|
||||
{
|
||||
Select(dgv, (ListViewItemData)dgv.Items[0], true);
|
||||
Select(menu, (ListViewItemData)dgv.Items[0], true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -208,9 +208,8 @@ namespace SystemTrayMenu.Handler
|
|||
ClearIsSelectedByKey(focussedMenu, focussedRow);
|
||||
}
|
||||
|
||||
internal void Select(ListView dgv, ListViewItemData itemData, bool refreshview)
|
||||
internal void Select(Menu menu, ListViewItemData itemData, bool refreshview)
|
||||
{
|
||||
Menu menu = (Menu)dgv.GetParentWindow();
|
||||
if (itemData != focussedRow || menu != focussedMenu)
|
||||
{
|
||||
ClearIsSelectedByKey();
|
||||
|
@ -223,6 +222,7 @@ namespace SystemTrayMenu.Handler
|
|||
|
||||
if (refreshview)
|
||||
{
|
||||
ListView dgv = menu.GetDataGridView();
|
||||
if (dgv.SelectedItems.Contains(itemData))
|
||||
{
|
||||
dgv.SelectedItems.Remove(itemData);
|
||||
|
@ -253,21 +253,23 @@ namespace SystemTrayMenu.Handler
|
|||
Menu? menuBefore;
|
||||
ListView? dgvBefore;
|
||||
ListViewItemData? rowBefore = focussedRow;
|
||||
bool toClear = false;
|
||||
bool isSelected = focussedRow?.data.IsSelected ?? false;
|
||||
|
||||
menuFromSelected = focussedRow?.data.IsSelected ?? false ? focussedRow.data.SubMenu : null;
|
||||
if (menuFromSelected != null)
|
||||
if (isSelected)
|
||||
{
|
||||
menuFromSelected = focussedRow?.data.SubMenu;
|
||||
menuBefore = focussedMenu;
|
||||
dgvBefore = menuBefore?.GetDataGridView();
|
||||
}
|
||||
else
|
||||
{
|
||||
ResetSelectedByKey();
|
||||
menuFromSelected = null;
|
||||
menuBefore = null;
|
||||
dgvBefore = null;
|
||||
}
|
||||
|
||||
bool toClear = false;
|
||||
switch (key)
|
||||
{
|
||||
case Key.Enter:
|
||||
|
@ -349,9 +351,10 @@ namespace SystemTrayMenu.Handler
|
|||
if (nextMenuInKeyDirection || prevMenuAgainstKeyDirection)
|
||||
{
|
||||
// Next is in key direction or prev is opposite of key direction ==> TrySelect sub/next menu
|
||||
if (menuFromSelected != null)
|
||||
if (isSelected)
|
||||
{
|
||||
if (menuFromSelected == focussedMenu?.SubMenu)
|
||||
if (menuFromSelected != null &&
|
||||
menuFromSelected == focussedMenu?.SubMenu)
|
||||
{
|
||||
ListView dgv = menuFromSelected.GetDataGridView();
|
||||
if (dgv != null && dgv.Items.Count > 0)
|
||||
|
@ -419,7 +422,7 @@ namespace SystemTrayMenu.Handler
|
|||
break;
|
||||
}
|
||||
|
||||
if (menuFromSelected != null && toClear)
|
||||
if (isSelected && toClear)
|
||||
{
|
||||
ClearIsSelectedByKey(menuBefore, rowBefore);
|
||||
}
|
||||
|
|
|
@ -43,9 +43,6 @@ namespace SystemTrayMenu.Business
|
|||
private OpenCloseState openCloseState = OpenCloseState.Default;
|
||||
private TaskbarPosition taskbarPosition = new WindowsTaskbar().Position;
|
||||
private bool searchTextChanging;
|
||||
#if TODO // Misc MouseEvents
|
||||
private int lastMouseDownRowIndex = -1;
|
||||
#endif
|
||||
private bool showMenuAfterMainPreload;
|
||||
|
||||
public Menus()
|
||||
|
@ -100,6 +97,7 @@ namespace SystemTrayMenu.Business
|
|||
}
|
||||
}
|
||||
|
||||
waitToOpenMenu.MouseEnterOk += (menu, itemData) => MouseEnterOk(menu, itemData, false);
|
||||
waitToOpenMenu.CloseMenu += CloseMenu;
|
||||
void CloseMenu(int level)
|
||||
{
|
||||
|
@ -113,11 +111,6 @@ namespace SystemTrayMenu.Business
|
|||
}
|
||||
}
|
||||
|
||||
waitToOpenMenu.MouseEnterOk += MouseEnterOk;
|
||||
#if TODO // Misc MouseEvents
|
||||
dgvMouseRow.RowMouseLeave += Dgv_RowMouseLeave; // event moved to Menu.CellMouseLeave()
|
||||
#endif
|
||||
|
||||
if (Settings.Default.SupportGamepad)
|
||||
{
|
||||
joystickHelper = new();
|
||||
|
@ -537,9 +530,8 @@ namespace SystemTrayMenu.Business
|
|||
menu.IsVisibleChanged += (sender, _) => MenuVisibleChanged((Menu)sender);
|
||||
menu.CellMouseEnter += waitToOpenMenu.MouseEnter;
|
||||
menu.CellMouseLeave += waitToOpenMenu.MouseLeave;
|
||||
menu.CellMouseDown += Dgv_MouseDown;
|
||||
menu.CellMouseUp += Dgv_MouseUp;
|
||||
menu.CellOpenOnClick += Dgv_OpenItemOnClick;
|
||||
menu.CellMouseDown += (menu, itemData) => MouseEnterOk(menu, itemData, true);
|
||||
menu.CellOpenOnClick += waitToOpenMenu.ClickOpensInstantly;
|
||||
menu.ClosePressed += MenusFadeOut;
|
||||
|
||||
ListView dgv = menu.GetDataGridView();
|
||||
|
@ -594,31 +586,7 @@ namespace SystemTrayMenu.Business
|
|||
}
|
||||
}
|
||||
|
||||
private void Dgv_MouseDown(ListView dgv, ListViewItemData itemData, MouseButtonEventArgs e)
|
||||
{
|
||||
MouseEnterOk(dgv, itemData, true);
|
||||
|
||||
#if TODO // Misc MouseEvents
|
||||
if (e.LeftButton == MouseButtonState.Pressed)
|
||||
{
|
||||
lastMouseDownRowIndex = index;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
private void Dgv_MouseUp(object sender, ListViewItemData itemData, MouseButtonEventArgs e)
|
||||
{
|
||||
#if TODO // Misc MouseEvents
|
||||
lastMouseDownRowIndex = -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
private void MouseEnterOk(ListView dgv, ListViewItemData itemData)
|
||||
{
|
||||
MouseEnterOk(dgv, itemData, false);
|
||||
}
|
||||
|
||||
private void MouseEnterOk(ListView dgv, ListViewItemData itemData, bool refreshView)
|
||||
private void MouseEnterOk(Menu menu, ListViewItemData itemData, bool refreshView)
|
||||
{
|
||||
if (IsMainUsable)
|
||||
{
|
||||
|
@ -628,38 +596,9 @@ namespace SystemTrayMenu.Business
|
|||
keyboardInput.InUse = false;
|
||||
}
|
||||
|
||||
keyboardInput.Select(dgv, itemData, refreshView);
|
||||
keyboardInput.Select(menu, itemData, refreshView);
|
||||
}
|
||||
}
|
||||
#if TODO // Misc MouseEvents
|
||||
private void Dgv_RowMouseLeave(object sender, DataGridViewCellEventArgs e)
|
||||
{
|
||||
ListView dgv = (ListView)sender;
|
||||
|
||||
if (e.RowIndex == lastMouseDownRowIndex &&
|
||||
e.RowIndex > -1 &&
|
||||
e.RowIndex < dgv.Items.Count)
|
||||
{
|
||||
lastMouseDownRowIndex = -1;
|
||||
|
||||
RowData rowData = (RowData)dgv.Items[e.RowIndex].Cells[2].Value;
|
||||
string[] files = new string[] { rowData.Path };
|
||||
|
||||
// Update position raises move event which prevent DoDragDrop blocking UI when mouse not moved
|
||||
Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y);
|
||||
|
||||
dgv.DoDragDrop(new DataObject(DataFormats.FileDrop, files), DragDropEffects.Copy);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
private void Dgv_OpenItemOnClick(ListView sender, ListViewItemData itemData)
|
||||
{
|
||||
#if TODO // Misc MouseEvents
|
||||
lastMouseDownRowIndex = -1;
|
||||
#endif
|
||||
waitToOpenMenu.ClickOpensInstantly(sender, itemData);
|
||||
}
|
||||
|
||||
private void Dgv_SelectionChanged(object sender, EventArgs e)
|
||||
{
|
||||
|
|
|
@ -44,7 +44,7 @@ namespace SystemTrayMenu.Handler
|
|||
|
||||
internal event Action? StopLoadMenu;
|
||||
|
||||
internal event Action<ListView, ListViewItemData>? MouseEnterOk;
|
||||
internal event Action<Menu, ListViewItemData>? MouseEnterOk;
|
||||
|
||||
internal bool MouseActive { get; set; }
|
||||
|
||||
|
@ -53,15 +53,15 @@ namespace SystemTrayMenu.Handler
|
|||
timerStartLoad.Stop();
|
||||
}
|
||||
|
||||
internal void MouseEnter(ListView dgv, ListViewItemData itemData)
|
||||
internal void MouseEnter(Menu menu, ListViewItemData itemData)
|
||||
{
|
||||
if (MouseActive)
|
||||
{
|
||||
MouseEnterOk?.Invoke(dgv, itemData);
|
||||
MouseEnterOk?.Invoke(menu, itemData);
|
||||
timerStartLoad.Stop();
|
||||
StopLoadMenu?.Invoke();
|
||||
checkForMouseActive = true;
|
||||
SetData(dgv, itemData);
|
||||
SetData(menu.GetDataGridView(), itemData);
|
||||
timerStartLoad.Start();
|
||||
}
|
||||
#if TODO // Misc MouseEvents
|
||||
|
|
|
@ -193,7 +193,6 @@
|
|||
<EventSetter Event="MouseEnter" Handler="ListViewItem_MouseEnter" />
|
||||
<EventSetter Event="MouseLeave" Handler="ListViewItem_MouseLeave" />
|
||||
<EventSetter Event="PreviewMouseDown" Handler="ListViewItem_PreviewMouseDown" />
|
||||
<EventSetter Event="MouseUp" Handler="ListViewItem_MouseUp" />
|
||||
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListViewxItem_PreviewMouseLeftButtonDown" />
|
||||
</Style>
|
||||
</ListView.ItemContainerStyle>
|
||||
|
|
|
@ -277,13 +277,11 @@ namespace SystemTrayMenu.UserInterface
|
|||
|
||||
internal event Action? UserDragsMenu;
|
||||
|
||||
internal event Action<ListView, ListViewItemData>? CellMouseEnter;
|
||||
internal event Action<Menu, ListViewItemData>? CellMouseEnter;
|
||||
|
||||
internal event Action<ListView, ListViewItemData>? CellMouseLeave;
|
||||
|
||||
internal event Action<ListView, ListViewItemData, MouseButtonEventArgs>? CellMouseDown;
|
||||
|
||||
internal event Action<ListView, ListViewItemData, MouseButtonEventArgs>? CellMouseUp;
|
||||
internal event Action<Menu, ListViewItemData>? CellMouseDown;
|
||||
|
||||
internal event Action<ListView, ListViewItemData>? CellOpenOnClick;
|
||||
|
||||
|
@ -1192,7 +1190,7 @@ namespace SystemTrayMenu.UserInterface
|
|||
|
||||
private void ListViewItem_MouseEnter(object sender, MouseEventArgs e)
|
||||
{
|
||||
CellMouseEnter?.Invoke(dgv, (ListViewItemData)((ListViewItem)sender).Content);
|
||||
CellMouseEnter?.Invoke(this, (ListViewItemData)((ListViewItem)sender).Content);
|
||||
}
|
||||
|
||||
private void ListViewItem_MouseLeave(object sender, MouseEventArgs e)
|
||||
|
@ -1204,7 +1202,7 @@ namespace SystemTrayMenu.UserInterface
|
|||
{
|
||||
ListViewItemData itemData = (ListViewItemData)((ListViewItem)sender).Content;
|
||||
|
||||
CellMouseDown?.Invoke(dgv, itemData, e);
|
||||
CellMouseDown?.Invoke(this, itemData);
|
||||
|
||||
if (e.LeftButton == MouseButtonState.Pressed)
|
||||
{
|
||||
|
@ -1219,11 +1217,6 @@ namespace SystemTrayMenu.UserInterface
|
|||
}
|
||||
}
|
||||
|
||||
private void ListViewItem_MouseUp(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
CellMouseUp?.Invoke(dgv, (ListViewItemData)((ListViewItem)sender).Content, e);
|
||||
}
|
||||
|
||||
private void ListViewxItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
ListViewItemData itemData = (ListViewItemData)((ListViewItem)sender).Content;
|
||||
|
|
Loading…
Reference in a new issue