Richard. So glad to have you in this world.
Craig > On May 7, 2022, at 5:35 PM, Bob Sneidar via use-livecode > <use-livecode@lists.runrev.com> wrote: > > 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 _______________________________________________ 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