* fix for bug #2246, zero events surpressed by moving compression into handler

This commit is contained in:
marco 2004-11-21 15:24:35 +00:00
parent af1ab052af
commit 859d1e05bb

View File

@ -28,6 +28,7 @@ uses
var
ChangeMouseEvents : TCriticalSection;
LastHandlerMouseEvent : TMouseEvent;
procedure MouseEventHandler(var ir:INPUT_RECORD);
@ -47,8 +48,26 @@ procedure MouseEventHandler(var ir:INPUT_RECORD);
if (ir.Event.MouseEvent.dwButtonState and RIGHTMOST_BUTTON_PRESSED<>0) then
e.buttons:=e.buttons or MouseRightButton;
{ can we compress the events? }
if (PendingMouseEvents>0) and
if (Lasthandlermouseevent.x<>e.x) or (LasthandlerMouseEvent.y<>e.y) then
e.Action:=MouseActionMove;
if (LastHandlerMouseEvent.Buttons<>e.Buttons) then
begin
if (LasthandlerMouseEvent.Buttons=0) then
e.Action:=MouseActionDown
else
e.Action:=MouseActionUp;
end;
//
// The mouse event compression here was flawed and could lead
// to "zero" mouse actions if the new (x,y) was the same as the
// previous one. (bug 2312)
//
{ can we compress the events? }
if (PendingMouseEvents>0) and
(e.buttons=PendingMouseTail^.buttons) and
(e.action=PendingMouseTail^.action) then
begin
@ -57,7 +76,12 @@ procedure MouseEventHandler(var ir:INPUT_RECORD);
end
else
begin
PutMouseEvent(e);
if e.action<>0 then
begin
LastHandlermouseEvent:=e;
PutMouseEvent(e);
end;
// this should be done in PutMouseEvent, now it is PM
// inc(PendingMouseEvents);
end;
@ -139,6 +163,7 @@ begin
else
MouseEvent.Action:=MouseActionUp;
end;
if MouseEvent.action=0 then MousEevent.action:=MouseActionMove; // can sometimes happen due to compression of events.
LastMouseEvent:=MouseEvent;
LeaveCriticalSection(ChangeMouseEvents);
end;
@ -218,7 +243,10 @@ Begin
end.
{
$Log$
Revision 1.7 2004-11-04 10:21:07 peter
Revision 1.8 2004-11-21 15:24:35 marco
* fix for bug 2246, zero events surpressed by moving compression into handler
Revision 1.7 2004/11/04 10:21:07 peter
GetMouse[X,Y,Buttons] based on LastMouseEvent
Revision 1.6 2002/09/07 16:01:29 peter