[Feature] DragDrop a file into a application (#34), version 1.1.0.5

This commit is contained in:
Markus Hofknecht 2021-11-23 23:08:19 +01:00
parent 08c6b09b2f
commit 898768ce71
4 changed files with 57 additions and 10 deletions

View file

@ -156,7 +156,7 @@ namespace SystemTrayMenu.Handler
Point pt = dgv.GetCellDisplayRectangle(2, iRowKey, false).Location;
RowData trigger = (RowData)dgv.Rows[iRowKey].Cells[2].Value;
MouseEventArgs mea = new(MouseButtons.Right, 1, pt.X, pt.Y, 0);
trigger.MouseDown(dgv, mea, out bool toCloseByDoubleClick);
trigger.MouseClick(dgv, mea, out bool toCloseByDoubleClick);
}
}
@ -319,14 +319,14 @@ namespace SystemTrayMenu.Handler
RowData trigger = (RowData)dgv.Rows[iRowKey].Cells[2].Value;
if (trigger.IsMenuOpen || !trigger.ContainsMenu)
{
trigger.MouseDown(
trigger.MouseClick(
dgv,
null,
out bool toCloseByMouseDown);
out bool toCloseByMouseClick);
trigger.DoubleClick(
new MouseEventArgs(MouseButtons.Left, 0, 0, 0, 0),
out bool toCloseByDoubleClick);
if (toCloseByMouseDown || toCloseByDoubleClick)
if (toCloseByMouseClick || toCloseByDoubleClick)
{
ClosePressed?.Invoke();
}

View file

@ -40,6 +40,7 @@ namespace SystemTrayMenu.Business
private TaskbarPosition taskbarPosition = new WindowsTaskbar().Position;
private bool searchTextChanging;
private bool waitingForReactivate;
private int rowIndexLastMouseDown = -1;
public Menus()
{
@ -268,6 +269,7 @@ namespace SystemTrayMenu.Business
dgvMouseRow.RowMouseEnter += waitToOpenMenu.MouseEnter;
dgvMouseRow.RowMouseLeave += waitToOpenMenu.MouseLeave;
dgvMouseRow.RowMouseLeave += Dgv_RowMouseLeave;
keyboardInput = new KeyboardInput(menus);
keyboardInput.RegisterHotKey();
@ -599,6 +601,8 @@ namespace SystemTrayMenu.Business
dgv.MouseLeave -= dgvMouseRow.MouseLeave;
dgv.MouseMove -= waitToOpenMenu.MouseMove;
dgv.MouseDown -= Dgv_MouseDown;
dgv.MouseUp -= Dgv_MouseUp;
dgv.MouseClick -= Dgv_MouseClick;
dgv.MouseDoubleClick -= Dgv_MouseDoubleClick;
dgv.SelectionChanged -= Dgv_SelectionChanged;
dgv.RowPostPaint -= Dgv_RowPostPaint;
@ -889,6 +893,8 @@ namespace SystemTrayMenu.Business
dgv.MouseLeave += dgvMouseRow.MouseLeave;
dgv.MouseMove += waitToOpenMenu.MouseMove;
dgv.MouseDown += Dgv_MouseDown;
dgv.MouseUp += Dgv_MouseUp;
dgv.MouseClick += Dgv_MouseClick;
dgv.MouseDoubleClick += Dgv_MouseDoubleClick;
dgv.SelectionChanged += Dgv_SelectionChanged;
dgv.RowPostPaint += Dgv_RowPostPaint;
@ -939,17 +945,56 @@ namespace SystemTrayMenu.Business
DataGridView dgv = (DataGridView)sender;
DataGridView.HitTestInfo hitTestInfo;
hitTestInfo = dgv.HitTest(e.X, e.Y);
if (hitTestInfo.RowIndex > -1 &&
dgv.Rows.Count > hitTestInfo.RowIndex)
if (e.Button == MouseButtons.Left)
{
rowIndexLastMouseDown = hitTestInfo.RowIndex;
}
}
private void Dgv_MouseUp(object sender, MouseEventArgs e)
{
rowIndexLastMouseDown = -1;
}
private void Dgv_RowMouseLeave(object sender, DataGridViewCellEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
if (e.RowIndex == rowIndexLastMouseDown &&
e.RowIndex > -1 &&
e.RowIndex < dgv.Rows.Count)
{
rowIndexLastMouseDown = -1;
RowData rowData = (RowData)dgv.Rows[e.RowIndex].Cells[2].Value;
string[] files = new string[] { rowData.TargetFilePathOrig };
// 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);
}
}
private void Dgv_MouseClick(object sender, MouseEventArgs e)
{
DataGridView dgv = (DataGridView)sender;
DataGridView.HitTestInfo hitTestInfo;
hitTestInfo = dgv.HitTest(e.X, e.Y);
if (hitTestInfo.RowIndex == rowIndexLastMouseDown &&
hitTestInfo.RowIndex > -1 &&
hitTestInfo.RowIndex < dgv.Rows.Count)
{
RowData rowData = (RowData)dgv.Rows[hitTestInfo.RowIndex].Cells[2].Value;
rowData.MouseDown(dgv, e, out bool toCloseByClick);
rowData.MouseClick(dgv, e, out bool toCloseByClick);
waitToOpenMenu.ClickOpensInstantly(dgv, hitTestInfo.RowIndex);
if (toCloseByClick)
{
MenusFadeOut();
}
}
rowIndexLastMouseDown = -1;
}
private void Dgv_MouseDoubleClick(object sender, MouseEventArgs e)
@ -967,6 +1012,8 @@ namespace SystemTrayMenu.Business
MenusFadeOut();
}
}
rowIndexLastMouseDown = -1;
}
private void Dgv_SelectionChanged(object sender, EventArgs e)

View file

@ -147,7 +147,7 @@ namespace SystemTrayMenu.DataClasses
return isLnkDirectory;
}
internal void MouseDown(DataGridView dgv, MouseEventArgs e, out bool toCloseByDoubleClick)
internal void MouseClick(DataGridView dgv, MouseEventArgs e, out bool toCloseByDoubleClick)
{
toCloseByDoubleClick = false;

View file

@ -39,5 +39,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.1.0.4")]
[assembly: AssemblyFileVersion("1.1.0.4")]
[assembly: AssemblyVersion("1.1.0.5")]
[assembly: AssemblyFileVersion("1.1.0.5")]