2007-08-20 Everaldo Canuto <ecanuto@novell.com>
authorEveraldo Canuto <everaldo@mono-cvs.ximian.com>
Mon, 20 Aug 2007 23:10:38 +0000 (23:10 -0000)
committerEveraldo Canuto <everaldo@mono-cvs.ximian.com>
Mon, 20 Aug 2007 23:10:38 +0000 (23:10 -0000)
* XplatUIX11.cs: Apply patch from #81588, it makes use of PointerMotionHintMask
flag to make fast handle of mouse events, without this the mouse move is
handled in some manner, whether it is a mouse move or not. Fixes #81588.

svn path=/trunk/mcs/; revision=84518

mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUIX11.cs

index b80d6943e8143829b79eb0e9f5f2c5c5256a2618..89545cd7bc0559f6100faa521e6b2c50244fad12 100644 (file)
@@ -1,3 +1,9 @@
+2007-08-20  Everaldo Canuto  <ecanuto@novell.com>
+
+       * XplatUIX11.cs: Apply patch from #81588, it makes use of PointerMotionHintMask
+       flag to make fast handle of mouse events, without this the mouse move is
+       handled in some manner, whether it is a mouse move or not. Fixes #81588.
+
 2007-08-20  Carlos Alberto Cortez <calberto.cortez@gmail.com>
 
        * ListView.cs: When doing layout calculations don't use a ref
index a7945249602fc2332a67193836dfda1688954fd0..7535bcfc2ce3b97fee0b7284ed79bc2fcfd83639 100644 (file)
@@ -226,6 +226,7 @@ namespace System.Windows.Forms {
                                                   EventMask.ExposureMask |
                                                   EventMask.FocusChangeMask |
                                                   EventMask.PointerMotionMask | 
+                                                  EventMask.PointerMotionHintMask | 
                                                   EventMask.SubstructureNotifyMask);
 
                static readonly object lockobj = new object ();
@@ -3860,6 +3861,18 @@ namespace System.Windows.Forms {
                                                        }
                                                }
 
+                                               if (xevent.MotionEvent.is_hint != 0)
+                                               {
+                                                       IntPtr root, child;
+                                                       int mask;
+                                                       XQueryPointer (DisplayHandle, xevent.AnyEvent.window,
+                                                                                       out root, out child,
+                                                                                       out xevent.MotionEvent.x_root, 
+                                                                                       out xevent.MotionEvent.y_root,
+                                                                                       out xevent.MotionEvent.x,      
+                                                                                       out xevent.MotionEvent.y, out mask);
+                                               }
+
                                                msg.message = Msg.WM_MOUSEMOVE;
                                                msg.wParam = GetMousewParam(0);
                                                msg.lParam = (IntPtr) (xevent.MotionEvent.y << 16 | xevent.MotionEvent.x & 0xFFFF);
@@ -4395,7 +4408,7 @@ namespace System.Windows.Forms {
                                XGrabPointer(DisplayHandle, hwnd.client_window, false, 
                                        EventMask.ButtonPressMask | EventMask.ButtonMotionMask |
                                        EventMask.ButtonReleaseMask | EventMask.PointerMotionMask | 
-                                       EventMask.LeaveWindowMask,
+                                       EventMask.PointerMotionHintMask | EventMask.LeaveWindowMask,
                                        GrabMode.GrabModeAsync, GrabMode.GrabModeAsync, confine_to_window, IntPtr.Zero, IntPtr.Zero);
                        }
                }
@@ -4494,6 +4507,7 @@ namespace System.Windows.Forms {
                                XChangeActivePointerGrab (DisplayHandle,
                                                EventMask.ButtonMotionMask |
                                                EventMask.PointerMotionMask |
+                                               EventMask.PointerMotionHintMask |
                                                EventMask.ButtonPressMask |
                                                EventMask.ButtonReleaseMask,
                                                cursor, IntPtr.Zero);