Skip to content
  • Carlos Garnacho's avatar
    x11: Integrate frames client into Mutter · 39942974
    Carlos Garnacho authored and Marge Bot's avatar Marge Bot committed
    Replace the in-process implementation of frames with the external
    frames client.
    
    When a client window is created and managed by Mutter, Mutter will
    determine whether it is a window that requires decorations and
    hint the creation of a frame for it by setting the _MUTTER_NEEDS_FRAME
    property on the client window.
    
    After the frames client created a window that has the _MUTTER_FRAME_FOR
    property, Mutter will proceed to reparent the client window on the
    frame window, and show them as a single unit.
    
    Rendering and event handling on the frame window will be performed by
    the external client, Mutter is still responsible for everything else,
    namely resizing client and frame window in synchronization, and
    managing updates on the MetaWindowActor.
    
    In order to let the frame be managed by the external client, Mutter
    needs to change the way some properties are forwarded to the client
    and/or frame windows. Some properties are necessary to keep propagating
    to the client window only, some others need to happen on the frame
    window now, and some others needs to be propagated on both so they
    are synchronized about the behavior.
    
    Also, some events that were previously totally unexpected in frame
    windows are now susceptible to happen, so must be allowed now.
    
    MetaFrame in src/core/frame.c now acts as the wrapper of foreign
    windows created by the frames client, from the Mutter side. Location,
    size, and lifetime are still largely in control of Mutter, some
    details like visible/invisible borders are obtained from the client
    instead (through the _MUTTER_FRAME_EXTENTS and _GTK_FRAME_EXTENTS
    properties, respectively).
    
    Part-of: <!2175>
    39942974