Index: ui/aura/window.cc |
diff --git a/ui/aura/window.cc b/ui/aura/window.cc |
index db48036f84dc875517ff0b947db2daa4eb65fb7f..dc384b7b9fbbedafb86e2fd654d092afa063e9e3 100644 |
--- a/ui/aura/window.cc |
+++ b/ui/aura/window.cc |
@@ -124,13 +124,7 @@ Window::~Window() { |
layout_manager_.reset(); |
// Clear properties. |
- for (std::map<const void*, Value>::const_iterator iter = prop_map_.begin(); |
- iter != prop_map_.end(); |
- ++iter) { |
- if (iter->second.deallocator) |
- (*iter->second.deallocator)(iter->second.value); |
- } |
- prop_map_.clear(); |
+ ClearProperties(); |
// The layer will either be destroyed by |layer_owner_|'s dtor, or by whoever |
// acquired it. |
@@ -599,12 +593,13 @@ void Window::SuppressPaint() { |
layer()->SuppressPaint(); |
} |
+/* |
std::set<const void*> Window::GetAllPropertKeys() const { |
std::set<const void*> keys; |
for (auto& pair : prop_map_) |
keys.insert(pair.first); |
return keys; |
-} |
+}*/ |
// {Set,Get,Clear}Property are implemented in window_property.h. |
@@ -661,40 +656,35 @@ void Window::RemoveOrDestroyChildren() { |
} |
} |
+std::unique_ptr<ui::PropertyData> Window::BeforePropertyChange( |
+ const void* key) { |
+ return port_ ? port_->OnWillChangeProperty(key) : nullptr; |
+} |
+ |
+void Window::AfterPropertyChange(const void* key, |
+ int64_t old_value, |
+ std::unique_ptr<ui::PropertyData> data) { |
+ if (port_) |
+ port_->OnPropertyChanged(key, std::move(data)); |
+ for (WindowObserver& observer : observers_) |
+ observer.OnWindowPropertyChanged(this, key, old_value); |
+} |
+ |
/////////////////////////////////////////////////////////////////////////////// |
// Window, private: |
int64_t Window::SetPropertyInternal(const void* key, |
const char* name, |
- PropertyDeallocator deallocator, |
+ ui::PropertyDeallocator deallocator, |
int64_t value, |
int64_t default_value) { |
- // This code may be called before |port_| has been created. |
- std::unique_ptr<WindowPortPropertyData> data = |
- port_ ? port_->OnWillChangeProperty(key) : nullptr; |
- int64_t old = GetPropertyInternal(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; |
- } |
- if (port_) |
- port_->OnPropertyChanged(key, std::move(data)); |
- for (WindowObserver& observer : observers_) |
- observer.OnWindowPropertyChanged(this, key, old); |
- return old; |
+ return PropertyHandler::SetPropertyInternal(key, name, deallocator, value, |
+ default_value); |
} |
int64_t Window::GetPropertyInternal(const void* key, |
int64_t 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; |
+ return PropertyHandler::GetPropertyInternal(key, default_value); |
} |
bool Window::HitTest(const gfx::Point& local_point) { |