I forgot to mention that both these issues can be worked around - but surprisingly, the second is easier than the first.

Using "wait 0 seconds with messages" after changing the hilitedItems allows the hiliteChanged message to be processed immediately; but even then testing the lockMessages is unhelpful - it's always false (presumably because it's in a different thread? Although I thought that lockMessages was a global property?)

So the complete solution is to have a global set to mirror lockMessages, and wait with messages whenever the state is changed by script.

Anyway, my real question is: is it just a bug, fixable in the widget definiton, that messages emitted by some widgets (at least Navbar is the same) are not handled in the same way as native controls? Or is this a fundamental limitation of LCB?

Ben

On 30/08/2019 09:30, Ben Rubinstein via use-livecode wrote:
I've been using this widget and found some issues. Before I report the bug(s) I want to check if I'm missing some knowledge or understanding.

At various times I need to change the hilitedItems on the control by script; at other times I need to react when the user does so. For the latter case I respond to the "hiliteChanged" message.

The problem came when I change the hilitedItems by script: it triggered hiliteChanged causing all sorts of hilarity. I had trouble tracking it down because when I stepped through the code I couldn't see any point when the problems occurred. Setting lockMessages didn't help.  And even when I checked the lockMessages in my hiliteChanged handler, the aberrant behaviour continued..

After further investigation, the upshot is that there are two issues:

- the widget pays no attention to the lockMessages in deciding to post "hiliteChanged"

- although it redraws immediately in response to a change in hilitedItems, the hiliteChanged message (or potentially multiple messages stacked up) is not sent until idle time.

(The latter issue explains my problem with spotting where the issue was occurring, and also why checking the lockMessages in my hiliteChanged handler didn't help - because by the time the handler was invoked, the lockMessages *was* false.)

The first issue is presumably straightforward to address.

Is there some fundamental property of widgets that make it impossible to fix the second issue?

TIA,

Ben

_______________________________________________
use-livecode mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode


_______________________________________________
use-livecode mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to