Skip to content
  • Neil Roberts's avatar
    Don't use ClutterX11TexturePixmap directly to embed docked windows · 5001bd88
    Neil Roberts authored
    Previously when a client requests that a window should be docked the
    shell would reparent the socket window onto the stage's window and
    then use ClutterX11TexturePixmap to get a texture to represent the
    window. This will not work if Clutter is no longer using the X11
    winsys for example if it becomes its own display server. Instead this
    patch leaves the socket window as a child of the root window and lets
    mutter create a MetaWindow out of it. If Mutter is acting as a display
    server then this mechanism will still work via the headless x server.
    
    The ShellGtkEmbed instance now registers for notification of the
    ‘window-created’ signal of the display so that it can find the
    MetaWindow that gets created to represent the socket window. When this
    window is found it is prevented from being displayed on the screen by
    setting the actor's opacity to 0. An input shape is then set on the
    window to prevent it receiving any input.
    
    Instead of being a subclass of ClutterX11TexturePixmap, ShellGtkEmbed
    is now a subclass of ClutterClone. When the MetaWindow is found for
    the socket window the clone's source is set to the invisible actor for
    the window so it can be displayed in the panel as before.
    
    The ShellEmbeddedWindow no longer needs to know what the stage is
    because it no longer reparents the socket window. Therefore the
    ShellTrayManager doesn't need to know the stage either so
    shell_tray_manager_manage_stage has been replaced with just
    shell_tray_manager_manage_screen.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=693438
    5001bd88