Well put. I wonder what the real world effect of the order of messages is, and 
whether or not it could be compensated for by send in time?

Sent from my iPhone

> On May 7, 2022, at 13:44, Richard Gaskin via use-livecode 
> <use-livecode@lists.runrev.com> wrote:
> 
> It's definitely an inconsistency, but the bug's status as requiring "EXPERT 
> REVIEW" prompts us to consider why these differences exist, and which, if 
> any, should be considered "wrong" or "right".  It may not be as simple as it 
> seems at first glance.
> 
> 
> Background:
> ----------
> MetaCard (the engine we now call LiveCode) was born on Unix, later ported to 
> Windows, Linux, and then MacOS.
> 
> On all platforms menus are implemented as selector buttons, buttons which 
> provide the appearance and behavior of OS-provided menu objects.
> 
> And until the port to MacOS, all platforms behaved consistently.
> 
> So why the Mac change?
> 
> Mac is unique among popular GUI OSes in its use of a global menu bar, 
> attached to the top of the display; other OSes place the menu bar attached to 
> the top of the window.
> 
> Internally, LC menus are implemented as temporary dynamically-instantiated 
> nameless stacks, which may seem counterintuitive until you realize that a 
> menu is in essence a highly specialized form of window, a viewport 
> independent of other windows with its own buffer, contents, and like all 
> windows needs to use a common compositor for rendering them all together. 
> (Indeed you can even use stacks as menus explicitly when you need a 
> non-standard look, like a graphical picker, but that's another topic).
> 
> So the engine's method of using a subclass of the stack object for rendering 
> menus worked well and consistently for a great many years - until the port to 
> MacOS.
> 
> The Mac global menubar required a deep rethink on how menus are handled, not 
> only in terms of detaching them from the window but also in terms of the 
> nuances of display and interaction.
> 
> So Dr Raney special-cased menus on MacOS, so the engine uses OS routines to 
> render those, fed by the menu button properties for things like the menu name 
> as parameters to those OS routines. On every other platform you're 
> interacting with a LiveCode object, but on Mac you're interacting with a 
> system object into which the engine has inserted some hooks to tie it in with 
> your scripting so you can at least know when an item has been selected.
> 
> This rewiring of properties and messages is no small feat, and has pervasive 
> effects.  So from time to time you'll find Mac-specific things needed to 
> conform to that platform like adding an "About" item to a menu that doesn't 
> exist in your stack (the Mac's "Application" menu belongs to the OS).
> 
> It's not surprising that messages related to menu objects also have some 
> inconsistencies along with everything else.
> 
> If we consider that on all other platforms the menu object we're interacting 
> with is a button, and the menus that appear are a stack, the messaging you 
> see with Windows and Linux is consistent with other button object messaging: 
> once the mouse leaves the control the mouseLeave message is sent.
> 
> On Mac we have an exception to LC's normal button messaging because we're not 
> interacting with an LC button at all, but with a system object, into which 
> the engine devs have grafted just enough messaging to trigger actions from 
> scripts.
> 
> I have no opinion on qualitative labels like "right" or "wrong" on this; that 
> seems a matter of personal familiarity and taste. It may even be somewhat 
> philosophical: is a menu a single thing that expands, or two things (menu and 
> items) where one triggers the appearance of the other?
> 
> All I can do is help describe the under-the-hood parts to help makes sense of 
> how the difference came about.
> 
> 
> 
> The Here-And-Now:
> ----------------
> Whether or not we prefer it, the menu architecture is what it is, at least at 
> the moment. Changing the behavior on all other platforms to be like Mac, or 
> Mac to be like all other platforms, would be a scope of work that I'd guess 
> the team would not be in a position to make a priority any time soon, even if 
> they felt strongly about this one way or another.
> 
> They have a lot on their plates, and for all the questions we see regarding 
> Mac-specific menu differences (like the auto-migration of the "About", "Help" 
> and "Preferences" items to system menus separate from the menu objects where 
> we're asked to put them), I can't recall seeing a message here before about 
> mouseLeave.
> 
> I'm not saying it isn't important. It might well be. But observably this 
> affects few; AFAIK this is the first such request in the 23 years I've been 
> using this engine and participating in its communities. Just the same, let's 
> roll up our sleeves and see what can be done:
> 
> 
> 
> Looking Forward:
> ---------------
> Edge case or not, let's see what we can do to get a solution for you sooner 
> than the engine team would be able to even thinking about revisions as 
> sweeping as would be needed to satisfy the engine request.
> 
> What do you need from mouseLeave during a menu drop? What are you doing in 
> response to that message?
> 
> There are some clever people on this list. I'll bet we can find a solution 
> for your need once we more fully understand the goals.
> 
> -- 
> Richard Gaskin
> Fourth World Systems
> 
> 
> 
> Neville Smythe wrote:
> > The pulldownmenu bug I reported has been confirmed: bug 23693
> > <https://quality.livecode.com/show_bug.cgi?id=23693>
> >
> > To remind the reader: On a Mac, when a user select a menu item from
> > a pulldown menu button, the menuPick message is sent first followed
> > by a mouseLeave message (generated as the mouse leaves the button
> > rect to select the menu item). On Windows, the mouseLeave is sent
> > immediately, followed by menuPick.
> >
> > The Mac order is correct, the mouseLeave should be delayed until the
> > displayed menu is dismissed.
> >
> > Linux has the same incorrect behaviour as Windows.
> >
> > The same situation applies to popupmenus and option menu buttons:
> > the Mac has the correct order, Windows and Linux incorrect.
> >
> > However for the combobox button, all three platforms give the wrong
> > message order!
> >
> > And one last twist, although the Mac implementation gives the correct
> > order for 3 menu buttons, it sends the mouseLeave message twice, once
> > immediately after the menuPick, and then again when the mouse is
> > released.
> >
> > Neville
> 
> 
> 
> _______________________________________________
> use-livecode mailing list
> use-livecode@lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription 
> preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to