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

Reply via email to