| Index: mojo/services/public/cpp/view_manager/lib/view.cc
|
| diff --git a/mojo/services/public/cpp/view_manager/lib/view.cc b/mojo/services/public/cpp/view_manager/lib/view.cc
|
| index b371000ee798c25e46bd83667c09743b52a1dec6..90a36636192335c16a6808a67a55a36208d66c02 100644
|
| --- a/mojo/services/public/cpp/view_manager/lib/view.cc
|
| +++ b/mojo/services/public/cpp/view_manager/lib/view.cc
|
| @@ -225,8 +225,8 @@ void View::SetVisible(bool value) {
|
| FOR_EACH_OBSERVER(ViewObserver, observers_, OnViewVisibilityChanged(this));
|
| }
|
|
|
| -void View::SetProperty(const std::string& name,
|
| - const std::vector<uint8_t>* value) {
|
| +void View::SetSharedProperty(const std::string& name,
|
| + const std::vector<uint8_t>* value) {
|
| std::vector<uint8_t> old_value;
|
| std::vector<uint8_t>* old_value_ptr = nullptr;
|
| auto it = properties_.find(name);
|
| @@ -248,8 +248,9 @@ void View::SetProperty(const std::string& name,
|
| properties_.erase(it);
|
| }
|
|
|
| - FOR_EACH_OBSERVER(ViewObserver, observers_,
|
| - OnViewPropertyChanged(this, name, old_value_ptr, value));
|
| + FOR_EACH_OBSERVER(
|
| + ViewObserver, observers_,
|
| + OnViewSharedPropertyChanged(this, name, old_value_ptr, value));
|
| }
|
|
|
| bool View::IsDrawn() const {
|
| @@ -386,6 +387,14 @@ View::~View() {
|
| // ViewManagerClientImpl.
|
| if (manager_)
|
| static_cast<ViewManagerClientImpl*>(manager_)->RemoveView(id_);
|
| +
|
| + // Clear properties.
|
| + for (auto& pair : prop_map_) {
|
| + if (pair.second.deallocator)
|
| + (*pair.second.deallocator)(pair.second.value);
|
| + }
|
| + prop_map_.clear();
|
| +
|
| FOR_EACH_OBSERVER(ViewObserver, observers_, OnViewDestroyed(this));
|
| }
|
|
|
| @@ -400,6 +409,34 @@ View::View(ViewManager* manager)
|
| drawn_(false) {
|
| }
|
|
|
| +int64 View::SetLocalPropertyInternal(const void* key,
|
| + const char* name,
|
| + PropertyDeallocator deallocator,
|
| + int64 value,
|
| + int64 default_value) {
|
| + int64 old = GetLocalPropertyInternal(key, default_value);
|
| + if (value == default_value) {
|
| + prop_map_.erase(key);
|
| + } else {
|
| + Value prop_value;
|
| + prop_value.name = name;
|
| + prop_value.value = value;
|
| + prop_value.deallocator = deallocator;
|
| + prop_map_[key] = prop_value;
|
| + }
|
| + FOR_EACH_OBSERVER(ViewObserver, observers_,
|
| + OnViewLocalPropertyChanged(this, key, old));
|
| + return old;
|
| +}
|
| +
|
| +int64 View::GetLocalPropertyInternal(const void* key,
|
| + int64 default_value) const {
|
| + std::map<const void*, Value>::const_iterator iter = prop_map_.find(key);
|
| + if (iter == prop_map_.end())
|
| + return default_value;
|
| + return iter->second.value;
|
| +}
|
| +
|
| void View::LocalDestroy() {
|
| delete this;
|
| }
|
|
|