On Fri Nov 22 15:47:04 2024 +0000, Gabriel Ivăncescu wrote:
Other than this, only CSS-related styles/stylesheets have a similar case like this, but those are more convoluted. I also don't see how introducing a private interface helps to simplify it. We'd still have to expose it (and forward) in comment elements, but now we'd also have to expose and forward it in text nodes, making it actually less simple, IMO. But is my forwarding a good idea?
The ugly part of forwarding to `IHTMLDOMTextNode2` is that you need to implement `IHTMLDOMTextNode2` in an object that's not a text node (comment node).
With a private interface, we could give it a proper set of properties, so no hooks would be needed, and just forward to it from both `IHTMLDOMTextNode*` and `IHTMLCommentElement*` interfaces. We could even share its entire implementation with something like:
``` struct HTMLCharacterData { IHTMLCharacterData IHTMLCharacterData_iface; DispatchEx *dispex; // used to forward IDispatch to comment's or text node's dispex nsIDOMCharacterData *character_data; // used for the actual implementation }; ```
You could then embed it both in both comment and text node structs and just use the single `IHTMLCharacterData` implementation.