At 11:17 am +0100 12/06/02, I wrote to MacPerl-Toolbox:
>The following script demonstrates the phenomenon:
>
> #!perl
> # exit via Cmd+period
>
> use Mac::Events;
> use Mac::Events qw(@Event);
>
> $Event[mouseDown] = sub { while (WaitMouseUp()) {} };
>
> WaitNextEvent while 1;
>
>
>About two seconds after mouse-down MacPerl switches to the
>spin-cursor and remains that way until mouse-up.
>
>IMO this behaviour is highly undesirable since it spoils any
>application involving a 'WaitMouseUp' event, such as
>button-tracking, auto-scrolling and similar regular GUI functions.
The attached patch appears to provide a solution. So far as I can
determine the normal functions of MacPerl are unaffected by this
change.
However I am a long long way from fully understanding the inner
workings of MacPerl in relation to the spin cursor, so the proposal
needs the scrutiny of wiser heads than mine -- to say the least.
Alan Fry
-----------
---
Millgate:Programming:BuildMacPerl:macperl_src:macperl:MPMain.c.orig
Mon Jan 7 14:36:34 2002
+++ Millgate:Programming:BuildMacPerl:macperl_src:macperl:MPMain.c
Tue Jun 11 16:54:12 2002
@@ -1182,6 +1182,7 @@
long now;
EventRecord myEvent;
Point mouse;
+ char up;
if (!gSacrificialGoat) /* Memory trouble */
if (gRunningPerl) /* This
script has gone too far */
@@ -1191,6 +1192,7 @@
exit(0); /* Save our
sorry ass. Shouldn't happen */
now = LMGetTicks();
+ up = LMGetMouseButtonState();
if (spinning = busy) {
if (now - lastNonBusy < (gInBackground ?
BACK_BUSY_WAIT : FRONT_BUSY_WAIT))
spinning = false;
@@ -1201,6 +1203,9 @@
events = activMask | updateMask | highLevelEventMask | osMask;
spinning = false;
}
+
+ if (!up)
+ spinning = false;
MaintainMenuBar();
-------------