bool System::openEntity(const EntityOpenRequest& req) { EntityManager* man = EntityManager::getInstance(); EntityHandler* handler = man->getEntityHandler(req); if (!handler) return false; QByteArray sig = handler->getEntitySignatureAheadOfTime(req); DisplayedEntity* oent = findSignatureOpenEntity(sig); if (oent) { changeCurrentEntity(oent); return false; } DisplayedEntity* entity = handler->openEntity(req); if (!entity) return false; sig = entity->getSignature(); oent = findSignatureOpenEntity(sig); if (oent) { changeCurrentEntity(oent); delete entity; return false; } openEntities << entity; try { emit entityOpened(entity); } catch (...) { closeEntity(entity, true); return false; } changeCurrentEntity(entity); return true; }