void Pipe::removeChild( const co::base::UUID& id ) { EQASSERT( getConfig()->isRunning( )); Window* window = _findWindow( id ); EQASSERT( window ); if( window ) window->postDelete(); }
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; }