Chromium Code Reviews| 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..dee2a2a84155992ce752da5fdf3d0759e75fa70f 100644 |
| --- a/mojo/services/public/cpp/view_manager/lib/view.cc |
| +++ b/mojo/services/public/cpp/view_manager/lib/view.cc |
| @@ -386,6 +386,16 @@ View::~View() { |
| // ViewManagerClientImpl. |
| if (manager_) |
| static_cast<ViewManagerClientImpl*>(manager_)->RemoveView(id_); |
| + |
| + // Clear properties. |
| + for (std::map<const void*, Value>::const_iterator iter = prop_map_.begin(); |
|
sky
2014/11/14 23:11:27
enhanced for loop? auto?
|
| + iter != prop_map_.end(); |
| + ++iter) { |
| + if (iter->second.deallocator) |
| + (*iter->second.deallocator)(iter->second.value); |
| + } |
| + prop_map_.clear(); |
| + |
| FOR_EACH_OBSERVER(ViewObserver, observers_, OnViewDestroyed(this)); |
| } |
| @@ -400,6 +410,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(WindowObserver, observers_, |
|
sky
2014/11/14 23:11:27
Seems reasonable to notify observers when the prop
|
| + // OnWindowPropertyChanged(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; |
| } |