# HG changeset patch
# User sl
# Date 1419416265 -3600
# Node ID 219e9a4184563e0d3e51b993dd7d15067ee32b31
# Parent dd603eba46ca6c7dcd7949da8f6e402e6acae98f
Fixing stray event issues.
diff -r dd603eba46ca -r 219e9a418456 HidEvent.cs
--- a/HidEvent.cs Tue Dec 23 23:05:23 2014 +0100
+++ b/HidEvent.cs Wed Dec 24 11:17:45 2014 +0100
@@ -17,13 +17,14 @@
public class HidEvent: IDisposable
{
public bool IsValid { get; private set; }
- public bool IsForeground { get; private set; }
+ public bool IsForeground { get; private set; }
public bool IsBackground { get{return !IsForeground;} }
public bool IsMouse { get; private set; }
public bool IsKeyboard { get; private set; }
public bool IsGeneric { get; private set; }
public bool IsButtonDown { get { return Usages.Count == 1 && Usages[0] != 0; } }
public bool IsButtonUp { get { return Usages.Count == 1 && Usages[0] == 0; } }
+ public bool IsRepeat { get; private set; }
public HidDevice Device { get; private set; }
@@ -36,6 +37,12 @@
private System.Timers.Timer Timer { get; set; }
+ ///
+ /// Tells whether this event has already been disposed of.
+ ///
+ public bool IsStray { get { return Timer == null; } }
+
+
public void Dispose()
{
@@ -50,6 +57,7 @@
/// Device Handle as provided by RAWINPUTHEADER.hDevice, typically accessed as rawinput.header.hDevice
public HidEvent(Message aMessage, HidEventRepeatDelegate aRepeatDelegate)
{
+ IsRepeat = false;
IsValid = false;
IsKeyboard = false;
IsGeneric = false;
@@ -220,31 +228,6 @@
}
}
-
- public ListViewItem ListViewItem
- {
- get
- {
- //TODO: What to do with multiple usage
- string usage="";
- UsagePage usagePage=(UsagePage)UsagePage;
- switch (usagePage)
- {
- case Hid.UsagePage.Consumer:
- usage= ((Hid.UsageTables.ConsumerControl)Usages[0]).ToString();
- break;
-
- case Hid.UsagePage.WindowsMediaCenterRemoteControl:
- usage= ((Hid.UsageTables.WindowsMediaCenterRemoteControl)Usages[0]).ToString();
- break;
-
- }
-
- ListViewItem item = new ListViewItem(new[] { usage, UsagePage.ToString("X2"), UsageCollection.ToString("X2") });
- return item;
- }
- }
-
public void StartRepeatTimer(double aInterval)
{
if (Timer == null)
@@ -260,10 +243,37 @@
private void OnRepeatTimerElapsed(object sender, ElapsedEventArgs e, HidEvent aHidEvent)
{
+ if (aHidEvent.IsStray)
+ {
+ //Skip events if canceled
+ return;
+ }
+ aHidEvent.IsRepeat = true;
StartRepeatTimer(1000/(SystemInformation.KeyboardSpeed+2.5));
OnHidEventRepeat(aHidEvent);
}
+ public ListViewItem ToListViewItem()
+ {
+ //TODO: What to do with multiple usage
+ string usage = "";
+ UsagePage usagePage = (UsagePage)UsagePage;
+ switch (usagePage)
+ {
+ case Hid.UsagePage.Consumer:
+ usage = ((Hid.UsageTables.ConsumerControl)Usages[0]).ToString();
+ break;
+
+ case Hid.UsagePage.WindowsMediaCenterRemoteControl:
+ usage = ((Hid.UsageTables.WindowsMediaCenterRemoteControl)Usages[0]).ToString();
+ break;
+
+ }
+
+ ListViewItem item = new ListViewItem(new[] { usage, UsagePage.ToString("X2"), UsageCollection.ToString("X2"), IsRepeat.ToString() });
+ return item;
+ }
+
}
}
\ No newline at end of file
diff -r dd603eba46ca -r 219e9a418456 MainForm.cs
--- a/MainForm.cs Tue Dec 23 23:05:23 2014 +0100
+++ b/MainForm.cs Wed Dec 24 11:17:45 2014 +0100
@@ -24,6 +24,7 @@
private ColumnHeader columnHeaderUsage;
private ColumnHeader columnHeaderUsagePage;
private ColumnHeader columnHeaderUsageCollection;
+ private ColumnHeader columnHeaderRepeat;
private Timer _timer;
public delegate void OnHidEventDelegate(object aSender, Hid.HidEvent aHidEvent);
@@ -69,6 +70,7 @@
this.columnHeaderUsage = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeaderUsagePage = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeaderUsageCollection = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.columnHeaderRepeat = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.SuspendLayout();
//
// labelButtonName
@@ -100,7 +102,8 @@
this.listViewEvents.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeaderUsage,
this.columnHeaderUsagePage,
- this.columnHeaderUsageCollection});
+ this.columnHeaderUsageCollection,
+ this.columnHeaderRepeat});
this.listViewEvents.GridLines = true;
this.listViewEvents.Location = new System.Drawing.Point(12, 12);
this.listViewEvents.Name = "listViewEvents";
@@ -124,6 +127,10 @@
this.columnHeaderUsageCollection.Text = "Usage Collection";
this.columnHeaderUsageCollection.Width = 120;
//
+ // columnHeaderRepeat
+ //
+ this.columnHeaderRepeat.Text = "Repeat";
+ //
// MainForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
@@ -159,6 +166,12 @@
public void HandleHidEventThreadSafe(object aSender, Hid.HidEvent aHidEvent)
{
+ if (aHidEvent.IsStray)
+ {
+ //Stray event just ignore it
+ return;
+ }
+
if (this.InvokeRequired)
{
//Not in the proper thread, invoke ourselves
@@ -168,7 +181,7 @@
else
{
//We are in the proper thread
- listViewEvents.Items.Insert(0, aHidEvent.ListViewItem);
+ listViewEvents.Items.Insert(0, aHidEvent.ToListViewItem());
}
}