| 31 |
{ |
{ |
| 32 |
private delegate void ProcessHotkeys(); |
private delegate void ProcessHotkeys(); |
| 33 |
private FrameworkElement _eventSource; |
private FrameworkElement _eventSource; |
| 34 |
|
|
| 35 |
|
//store the pressed keys and used for process them all together. |
| 36 |
private Stack<XKeyEventArgs> m_Hotkeys = new Stack<XKeyEventArgs>(); |
private Stack<XKeyEventArgs> m_Hotkeys = new Stack<XKeyEventArgs>(); |
| 37 |
|
|
| 38 |
|
//this thread has something wrong so not use it right now. |
| 39 |
private Thread KeyPressThread; |
private Thread KeyPressThread; |
| 40 |
|
|
| 41 |
private EventWaitHandle wh = new AutoResetEvent(false); |
private EventWaitHandle wh = new AutoResetEvent(false); |
| 42 |
private ReaderWriterLockSlim rw = new ReaderWriterLockSlim(); |
private ReaderWriterLockSlim rw = new ReaderWriterLockSlim(); |
| 43 |
private object locker = new object(); |
private object locker = new object(); |
| 126 |
} |
} |
| 127 |
} |
} |
| 128 |
|
|
| 129 |
|
//process all the stacked keys. |
| 130 |
public void StartHandleKeyEvent() |
public void StartHandleKeyEvent() |
| 131 |
{ |
{ |
| 132 |
try |
try |
| 263 |
|
|
| 264 |
void _eventSource_MouseMove(object sender, MouseEventArgs e) |
void _eventSource_MouseMove(object sender, MouseEventArgs e) |
| 265 |
{ |
{ |
|
//if (IsTrackingMouse) |
|
|
//{ |
|
|
//XMouseEventArgs arg = new XMouseEventArgs(e); |
|
|
//arg.MouseClicked = e.GetPosition(EventSource); |
|
|
|
|
| 266 |
if (OnMouseMove != null) |
if (OnMouseMove != null) |
| 267 |
OnMouseMove(sender,e); |
OnMouseMove(sender,e); |
|
//} |
|
| 268 |
|
|
| 269 |
e.Handled = true; |
e.Handled = true; |
| 270 |
} |
} |
| 273 |
private void Push(XKeyEventArgs arg) |
private void Push(XKeyEventArgs arg) |
| 274 |
{ |
{ |
| 275 |
|
|
|
//lock (locker) |
|
|
{ |
|
| 276 |
rw.EnterWriteLock(); |
rw.EnterWriteLock(); |
| 277 |
Console.WriteLine("push : " + arg.KeyeventArgs.Key.ToString()); |
Console.WriteLine("push : " + arg.KeyeventArgs.Key.ToString()); |
| 278 |
if (m_Hotkeys.Count == 0) |
if (m_Hotkeys.Count == 0) |
| 283 |
rw.ExitWriteLock(); |
rw.ExitWriteLock(); |
| 284 |
wh.Set(); |
wh.Set(); |
| 285 |
Console.WriteLine("notify keyprocess"); |
Console.WriteLine("notify keyprocess"); |
|
} |
|
|
|
|
| 286 |
|
|
| 287 |
} |
} |
| 288 |
|
|
| 290 |
{ |
{ |
| 291 |
XKeyEventArgs ret =null; |
XKeyEventArgs ret =null; |
| 292 |
|
|
|
//wh.WaitOne(10); |
|
|
//lock (locker) |
|
|
{ |
|
| 293 |
wh.WaitOne(); |
wh.WaitOne(); |
| 294 |
rw.EnterWriteLock(); |
rw.EnterWriteLock(); |
| 295 |
Console.WriteLine("enter pop"); |
Console.WriteLine("enter pop"); |
| 299 |
rw.ExitWriteLock(); |
rw.ExitWriteLock(); |
| 300 |
wh.Set(); |
wh.Set(); |
| 301 |
Console.WriteLine("pop complish"); |
Console.WriteLine("pop complish"); |
|
} |
|
| 302 |
|
|
| 303 |
return ret; |
return ret; |
| 304 |
} |
} |