Пример #1
0
void Pipe::removeChild( const co::base::UUID& id )
{
    EQASSERT( getConfig()->isRunning( ));

    Window* window = _findWindow( id );
    EQASSERT( window );
    if( window )
        window->postDelete();
}
Пример #2
0
bool Pipe::_cmdDestroyWindow( co::ICommand& cmd )
{
    co::ObjectICommand command( cmd );

    LBLOG( LOG_INIT ) << "Destroy window " << command << std::endl;

    Window* window = _findWindow( command.get< UUID >( ));
    LBASSERT( window );

    // re-set shared windows accordingly
    Window* newSharedWindow = 0;
    const Windows& windows = getWindows();
    for( Windows::const_iterator i = windows.begin(); i != windows.end(); ++i )
    {
        Window* candidate = *i;

        if( candidate == window )
            continue; // ignore

        if( candidate->getSharedContextWindow() == window )
        {
            if( newSharedWindow )
                candidate->setSharedContextWindow( newSharedWindow );
            else
            {
                newSharedWindow = candidate;
                newSharedWindow->setSharedContextWindow( candidate );
            }
        }

        LBASSERT( candidate->getSharedContextWindow() != window );
    }

    const bool stopped = window->isStopped();
    window->send( getServer(),
                  fabric::CMD_WINDOW_CONFIG_EXIT_REPLY ) << stopped;

    Config* config = getConfig();
    config->unmapObject( window );
    Global::getNodeFactory()->releaseWindow( window );

    return true;
}