Obscure Multiple Window Issue

Note: Thank you to Colleen Hammersley for bringing this issue to my attention, and to Howard Schlossberg for proposing a clever and elegant work around that addresses the issue on the Windows platform. (We’ll also look at another fix that works cross-platform.)

Today we’re going to explore a windowing behavior change that was introduced in FileMaker 12. If your solutions display multiple on-screen windows, then you may at some point find yourself facing this issue.

2016-01-31_16-47-32

The problem manifests in different ways on the Windows vs. Mac platforms; we’re going to start out by looking at what happens in FMP/Win via the Window Focus, v1 demo.

Imagine you have salespeople processing multiple orders simultaneously, with each order in its own window. When an order window is closed you want certain scripted actions to occur, so you have installed a custom menu set with a special “close window” script to replace the standard “File > Close” menu item.

Reminder: this menu item also governs the behavior of the the close widget (i.e., the “x” at the top right of the window).

Here’s the custom menu item…

2016-01-31_223206

…which invokes this script:

2016-01-31_22-48-23

So, assuming there are five open “order” windows, with window #5 frontmost, what happens if the user clicks the close box on window #3?

BEFORE CLICK

2016-01-31_22-06-13

AFTER CLICK

2016-01-31_23-13-35.png

What the heck? The “close window” script executed in the original foreground window (#5), rather than the intended window (#3). Even though window #3 moved to the foreground, it did not become “active” until after window #5 had closed.

By contrast, if we conduct the same experiment in FM 10 or 11 (i.e., in the Window Focus.fp7 demo), we will see the expected result (window #3 closes). And incidentally, this pre-FM12 behavior is identical on the Macintosh platform.

2016-01-31_23-26-02

Returning to the FMP 12/13/14 demo, what can be done? Well the obvious idea of adding a “Select Window [current window]” step, like so…

2016-01-31_23-36-18

…doesn’t help at all, unfortunately. Nor does “Select Window [Get (WindowName)]” since window #5 is the active window as far as FileMaker is concerned.

Surely there must be some way to convince FileMaker to run the “close window” script in the desired window? Fortunately there is, and you can see it in action in Window Focus, v2. One simple change to the close window script is all it takes.

2016-01-31_23-52-36

Howard Schlossberg’s insight was that the WindowNames function a ) updates whenever the window stack order changes, and b ) lists the windows in z-axis order with the frontmost at the top of the list. So in Window Focus, v2, if you click window #3’s close box with the debugger running…

2016-02-01_0-03-23

…and view WindowNames in the Data Viewer, here’s what you will see:

2016-02-01_0-14-49

[At this point a less perceptive author might refer to Howard as a genius, but I suspect he wouldn’t appreciate that, so I won’t.]

Okay, we’ve looked at the behavior on the Windows side… what about on the Mac?

On the Macintosh, when you click the close widget of the foreground window (window #5) in either of the first two demos, as expected, the “close window” script runs and all is well.

But when you click the close widget on any background window… the custom menu is ignored and the window simply closes without the “close window” script executing. (!!!!)

[If you have a copy of FM 10 or 11 handy, you can open Window Focus.fp7 and confirm that this was not the case prior to FM 12.]

The work around, as you can see in the Window Focus, v3 demo, is to not rely on a custom menu at all, but instead go the script trigger route, like so.

2016-02-01_0-26-12

Since OnWindowClose is a file-level trigger, it will run any time any window is closed, so you’ll want to branch your “close window” script accordingly, e.g.,

2016-02-01_0-49-46

Does it work? Indeed it does, and no need to invoke “Select Window”.

2016-02-01_0-55-24.png

[For the sake of simplicity, I used Get(LayoutName) in the above script, but of course layout names can easily be changed and one might forget to correspondingly update the script. In reality I would instead target the internal layout id using the technique discussed here: Avoiding Brittleness.]

6 thoughts on “Obscure Multiple Window Issue

    1. Kevin Frank Post author

      Hi Daniel,

      FMI is aware of the issue. I don’t know what their position is with regards to it.

      Regards,
      Kevin

      Reply
  1. John Wolff

    Hi Kevin,

    It’s been my practice now when creating a New Window, when invoked from a button in List View or a Portal, to make that a Modal window so that the actions that can be subsequently invoked are far more restrained.

    Does this not mitigate some of the issues you’ve addressed in this article (at least on the Mac)??

    Regards,

    John

    Reply
    1. Kevin Frank Post author

      Hi John,

      Yes, it would, and I’m a huge fan of modality myself… but… my impression in this case is that users need to have multiple Order windows open simultaneously and be able to bounce back and forth between them freely (i.e., without modal restrictions).

      Regards,
      Kevin

      Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s