std::string comp_id, std::string inst_id)
: parent_(parent), type_(std::move(type)),
comp_id_(std::move(comp_id)), inst_id_(std::move(inst_id)),
- sys_ev_(new internal::SystemEvent(this)),
- content_mgr_(new internal::ContentManager(inst_id_)) {
+ sys_ev_(new internal::SystemEvent(this)) {
auto& mgr = internal::ComponentManager::GetInst();
+ if (mgr.IsSingleInstance(inst_id_))
+ content_mgr_.reset(new (std::nothrow) internal::ContentManager(comp_id_));
+ else
+ content_mgr_.reset(new (std::nothrow) internal::ContentManager(inst_id_));
+
mgr.AddEventListener(inst_id_, this);
}
* limitations under the License.
*/
+#include <aul.h>
#include <aul_app_group.h>
#include <app_control_internal.h>
+#include <bundle_internal.h>
+#include <algorithm>
#include <memory>
#include <string>
LOGE("Failed to find factory map. %s", comp_id.c_str());
return;
}
+
+ const char *val = bundle_get_val(b, AUL_K_NEW_INSTANCE);
+ std::string new_inst(val ? val : "");
+ if (new_inst == "true")
+ multi_inst_list_.push_back(inst_id);
+
std::unique_ptr<Component> component = fac_map_[comp_id]->Create(comp_id,
inst_id);
if (component == nullptr || component.get() == nullptr) {
}
}
+bool ComponentManager::IsSingleInstance(const std::string& inst_id) {
+ auto it = std::find(multi_inst_list_.begin(), multi_inst_list_.end(),
+ inst_id);
+ if (it == multi_inst_list_.end())
+ return true;
+
+ return false;
+}
+
Ecore_Wl2_Window* ComponentManager::GetWl2Window(const std::string& inst_id) {
auto win_iter = win_map_.find(inst_id);
if (win_iter == win_map_.end())
}
void ComponentManager::Remove(const std::string& inst_id) {
+ multi_inst_list_.remove(inst_id);
RemoveGroup(inst_id);
ev_map_.erase(inst_id);
inst_map_.erase(inst_id);
bool IsEmpty();
void ResumeAll();
void PauseAll();
+ bool IsSingleInstance(const std::string& inst_id);
private:
IEventListener* GetEventListener(const std::string& inst_id);
std::map<std::string, std::unique_ptr<Component>> inst_map_;
std::map<std::string, std::unique_ptr<IWindow>> win_map_;
std::map<std::string, int> group_map_;
+ std::list<std::string> multi_inst_list_;
};
} // namespace internal
namespace component_based {
namespace internal {
-ContentManager::ContentManager(std::string inst_id) {
+ContentManager::ContentManager(std::string name) {
auto& path = ContentManager::Path::GetInst();
- file_ = std::unique_ptr<File>(new File(path.GetPath(inst_id)));
+ file_ = std::unique_ptr<File>(new File(path.GetPath(name)));
}
ContentManager::~ContentManager() = default;
class ContentManager {
public:
- explicit ContentManager(std::string inst_id);
+ explicit ContentManager(std::string name);
virtual ~ContentManager();
void SetContent(tizen_base::Bundle content);