Move item execution into mouse button up event

This commit is contained in:
Peter Kirmeier 2023-09-11 18:44:56 +02:00
parent bfd50ae141
commit 72c225a912
2 changed files with 18 additions and 1 deletions

View file

@ -205,6 +205,7 @@
<EventSetter Event="MouseLeave" Handler="ListViewItem_MouseLeave" />
<EventSetter Event="PreviewMouseDown" Handler="ListViewItem_PreviewMouseDown" />
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListViewItem_PreviewMouseLeftButtonDown" />
<EventSetter Event="PreviewMouseLeftButtonUp" Handler="ListViewItem_PreviewMouseLeftButtonUp" />
<EventSetter Event="MouseRightButtonUp" Handler="ListViewItem_MouseRightButtonUp" />
</Style>
</ListView.ItemContainerStyle>

View file

@ -38,6 +38,7 @@ namespace SystemTrayMenu.UserInterface
private readonly string folderPath;
private Tuple<ListViewItem?, int> detectLeftMouseButtonClicked = new(null, 0);
private bool isShellContextMenuOpen;
private bool directionToRight;
private Point lastLocation;
@ -1154,6 +1155,8 @@ namespace SystemTrayMenu.UserInterface
private void ListViewItem_MouseLeave(object sender, MouseEventArgs e)
{
detectLeftMouseButtonClicked = new (null, 0);
if (!isShellContextMenuOpen)
{
CellMouseLeave?.Invoke();
@ -1170,7 +1173,20 @@ namespace SystemTrayMenu.UserInterface
CellMouseDown?.Invoke((RowData)((ListViewItem)sender).Content);
private void ListViewItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) =>
((RowData)((ListViewItem)sender).Content).OpenItem(e.ClickCount);
detectLeftMouseButtonClicked = new((ListViewItem)sender, e.ClickCount);
private void ListViewItem_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
ListViewItem lvi = (ListViewItem)sender;
if (detectLeftMouseButtonClicked.Item1 == lvi)
{
// Same row has been called with PreviewMouseLeftButtonDown without leaving the item, so we can call it a "click".
// The click count is also taken from Down event as it seems not being correct in Up event.
((RowData)lvi.Content).OpenItem(detectLeftMouseButtonClicked.Item2);
}
detectLeftMouseButtonClicked = new(null, 0);
}
private void ListViewItem_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
{