It turns out that there is a lot of publicly readable code behind linkaxes, or really, linkprop. After some debugging I discovered the MarkedClean event. More info on this interesting event can be found at: https://undocumentedmatlab.com/blog/undocumented-hg2-graphics-events
I now have the following code:
%Updated to point to XRuler instead of just axes_handle
%per Yair's recommendation
obj.L3 = ...
addlistener(axes_handle.XRuler,'MarkedClean',@(~,~) obj.cleanListen);
end
function cleanListen(obj)
if isequal(obj.xlim,get(obj.axes_handle,'XLim'))
return
end
obj.listenerCallback();
It seems like MarkedClean is perhaps one of the ultimate 'Always tell me about things' events.
I'm not entirely sure what the answers to my questions are, but this serves as a decent workaround for what I need.