Hi Michael. Welcome to the list.
On May 17, 2007, at 10:21 AM, Michael Binder wrote:
Hi everyone,
This is my first post to this list. I'm new to Rev (but much
hypercard experience). I have just spent a couple of days figuring
something out (it may be a bug) so I thought I'd share it. I am
developing with Studio 2.81 and testing on an mac ibook G4 running
10.3.9.
To demonstrate the bug:
Step 1) create a new main stack and call it "myApp".
Step 2) Put this handler into the stack script:
on shutdownrequest
answer "This stack: "& the name of this stack &cr& "Quit now?"
with "Yes" or "No"
if it is "Yes" then pass shutdownrequest
end shutdownrequest
Step 3) Save myApp, and then save it as a mac OS X standalone.
Step 4) Launch the standalone.
Step 5) Quit (by menu or commandkey Q) and choose "No". (the
behavior is as expected)
Step 6) Quit again. This time the bug is evident...
On my system, the second (and all subsequent) quit brings up a
dialog box with an unexpected result: This stack: stack "answer
dialog"
This is probably more an unexpected result than a bug. The problem
seems to be caused by the nature of the message hierarchy. Every
window in Rev is a stack, including the answer dialog, and every time
you try to quit the Rev engine, a shutdownrequest will be sent to the
current stack. If it's not handled by that stack it'll pass up the
hierarchy until it finds a handler.
You might try this and see what happens:
answer "This stack: " & the mainstack of this stack & cr & "Quit
now?" etc.
You could also try putting one or more exceptions in your
shutdownrequest handler:
if the style of this stack is topLevel then -- would only execute
if the stack receiving the shutdownrequest was non-modal.
if the visible of this stack then -- would ensure shutdownrequest
would only be handled in a visible stack
Or a combination of the above.
I discovered this bug in myBigComplexApp, and the bug there is a
bit different. The first time I quit myBigComplexApp, "This stack"
is "revExternalLibrary". On the second and all subsequent quits
"this stack" is "answer dialog". (as in the example above)
This is a problem for me because when a user quits myBigComplexApp
I need to validate data and offer the user a chance to save the
changes. In order to do this I need to determine what data entry
card the user is viewing when the quit request occurs:
on shutdownrequest -- this does not work as expected because of
the bug
if the short name of this cd is "dataEntry1" then
validateData1
else if the short name of this cd is "dataEntry2" then
validateData2
end if
offerChanceToSave
end shutdownrequest
My workaround for the bug is as follows:
on shutdownrequest
put line 1 of the recentcards of stack "myBigComplexApp" into
whichcard
if the short name of whichcard is "dataEntry1" then
validateData1
else if the short name of whichcard is "dataEntry2" then
validateData2
end if
offerChanceToSave
end shutdownrequest
I am not all that confident in my workaround because I am not
confident that I understand the nature of the bug. As I mentioned
above, the bug in (simple) myApp is a bit different than in
myBigComplexApp.
Do any of you have any thoughts on whether this is a bug, whether
it occurs on other platforms, and whether my workaround could be
improved?
Would it work to do data vaildation on closeStack instead of
shutdownrequest?
HTH
Devin
Devin Asay
Humanities Technology and Research Support Center
Brigham Young University
_______________________________________________
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution