wlr-output-management lacks mirrored outputs
Created by: AdrianVovk
There is currently no way to tell if an output is a clone/is mirroring another output. This is important to know, because without this it's impossible to make a distinction between real, physical displays and logical outputs in compositor coordinate space. I ran into this trying to make a client that translates the wlroots protocol into the DBus API gnome-control-center expects. Without knowing that an output is a mirror of another, my code just told g-c-c that there are two physical displays (and their various properties), and that there are two logical outputs stacked on top of each other at 0,0. This broke the UI.
Due to the lack of support in protocol, Wayfire is supposed to just disable the mirror output and stop sending valid x/y coordinates, but this doesn't currently work correctly and so it sends even weirder state to the client. When/if this does get fixed in Wayfire, it'll be even worse because then there will be no distinction between a mirror output and a disabled output. @ammen99 suggested I open an issue here to fix this in-protocol, so that Wayfire doesn't have to do any hacks to support mirror outputs.
The way I envision this working is that heads have a new mirroring signal, with a reference to another head object passed in. If the reference is null, then the head is no longer a mirror. If the reference is another head, the client now knows that this head is mirroring another head. Compositors that don't support output mirroring can simply never send this signal with a reference to another head.