| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/events/ozone/evdev/libgestures_glue/gesture_property_provider.h" | 5 #include "ui/events/ozone/evdev/libgestures_glue/gesture_property_provider.h" |
| 6 | 6 |
| 7 #include <fnmatch.h> |
| 7 #include <gestures/gestures.h> | 8 #include <gestures/gestures.h> |
| 8 #include <libevdev/libevdev.h> | 9 #include <libevdev/libevdev.h> |
| 9 | |
| 10 #include <fnmatch.h> | |
| 11 #include <stdint.h> | 10 #include <stdint.h> |
| 12 #include <string.h> | 11 #include <string.h> |
| 12 |
| 13 #include <algorithm> | 13 #include <algorithm> |
| 14 | 14 |
| 15 #include "base/containers/hash_tables.h" | 15 #include "base/containers/hash_tables.h" |
| 16 #include "base/files/file_enumerator.h" | 16 #include "base/files/file_enumerator.h" |
| 17 #include "base/files/file_util.h" | 17 #include "base/files/file_util.h" |
| 18 #include "base/logging.h" | 18 #include "base/logging.h" |
| 19 #include "base/macros.h" | 19 #include "base/macros.h" |
| 20 #include "base/memory/ptr_util.h" |
| 20 #include "base/strings/string_number_conversions.h" | 21 #include "base/strings/string_number_conversions.h" |
| 21 #include "base/strings/string_split.h" | 22 #include "base/strings/string_split.h" |
| 22 #include "base/strings/string_tokenizer.h" | 23 #include "base/strings/string_tokenizer.h" |
| 23 #include "base/strings/string_util.h" | 24 #include "base/strings/string_util.h" |
| 24 #include "base/strings/stringize_macros.h" | 25 #include "base/strings/stringize_macros.h" |
| 25 #include "base/strings/stringprintf.h" | 26 #include "base/strings/stringprintf.h" |
| 26 #include "ui/events/ozone/evdev/libgestures_glue/gesture_feedback.h" | 27 #include "ui/events/ozone/evdev/libgestures_glue/gesture_feedback.h" |
| 27 #include "ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cr
os.h" | 28 #include "ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cr
os.h" |
| 28 | 29 |
| 29 // GesturesProp implementation. | 30 // GesturesProp implementation. |
| (...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 604 } | 605 } |
| 605 return os; | 606 return os; |
| 606 } | 607 } |
| 607 | 608 |
| 608 namespace ui { | 609 namespace ui { |
| 609 namespace internal { | 610 namespace internal { |
| 610 | 611 |
| 611 // Mapping table from a property name to its corresponding GesturesProp | 612 // Mapping table from a property name to its corresponding GesturesProp |
| 612 // object pointer. | 613 // object pointer. |
| 613 typedef base::hash_map<std::string, GesturesProp*> PropertiesMap; | 614 typedef base::hash_map<std::string, GesturesProp*> PropertiesMap; |
| 614 typedef base::ScopedPtrHashMap<std::string, scoped_ptr<GesturesProp>> | 615 typedef base::ScopedPtrHashMap<std::string, std::unique_ptr<GesturesProp>> |
| 615 ScopedPropertiesMap; | 616 ScopedPropertiesMap; |
| 616 | 617 |
| 617 // Struct holding properties of a device. | 618 // Struct holding properties of a device. |
| 618 // | 619 // |
| 619 // Note that we can't define it in GesturePropertyProvider as a nested class | 620 // Note that we can't define it in GesturePropertyProvider as a nested class |
| 620 // because ScopedPtrHashMap will require us to expose the GestureProp's | 621 // because ScopedPtrHashMap will require us to expose the GestureProp's |
| 621 // destructor so that it can instantiate the object. This is something we | 622 // destructor so that it can instantiate the object. This is something we |
| 622 // don't want to do. | 623 // don't want to do. |
| 623 struct GestureDevicePropertyData { | 624 struct GestureDevicePropertyData { |
| 624 GestureDevicePropertyData() {} | 625 GestureDevicePropertyData() {} |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 709 ~MatchIsTouchscreen() override {} | 710 ~MatchIsTouchscreen() override {} |
| 710 bool Match(const DevicePtr device) override; | 711 bool Match(const DevicePtr device) override; |
| 711 }; | 712 }; |
| 712 | 713 |
| 713 // Struct for sections in xorg conf files. | 714 // Struct for sections in xorg conf files. |
| 714 struct ConfigurationSection { | 715 struct ConfigurationSection { |
| 715 typedef ui::GesturePropertyProvider::DevicePtr DevicePtr; | 716 typedef ui::GesturePropertyProvider::DevicePtr DevicePtr; |
| 716 ConfigurationSection() {} | 717 ConfigurationSection() {} |
| 717 bool Match(const DevicePtr device); | 718 bool Match(const DevicePtr device); |
| 718 std::string identifier; | 719 std::string identifier; |
| 719 std::vector<scoped_ptr<MatchCriteria>> criterias; | 720 std::vector<std::unique_ptr<MatchCriteria>> criterias; |
| 720 std::vector<scoped_ptr<GesturesProp>> properties; | 721 std::vector<std::unique_ptr<GesturesProp>> properties; |
| 721 }; | 722 }; |
| 722 | 723 |
| 723 MatchCriteria::MatchCriteria(const std::string& arg) { | 724 MatchCriteria::MatchCriteria(const std::string& arg) { |
| 724 // TODO(sheckylin): Should we trim all tokens here? | 725 // TODO(sheckylin): Should we trim all tokens here? |
| 725 args_ = base::SplitString( | 726 args_ = base::SplitString( |
| 726 arg, "|", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); | 727 arg, "|", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); |
| 727 if (args_.empty()) { | 728 if (args_.empty()) { |
| 728 LOG(ERROR) << "Empty match pattern found, will evaluate to the default " | 729 LOG(ERROR) << "Empty match pattern found, will evaluate to the default " |
| 729 "value (true): \"" << arg << "\""; | 730 "value (true): \"" << arg << "\""; |
| 730 } | 731 } |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 925 } | 926 } |
| 926 | 927 |
| 927 void GesturePropertyProvider::RegisterDevice(const DeviceId id, | 928 void GesturePropertyProvider::RegisterDevice(const DeviceId id, |
| 928 const DevicePtr device) { | 929 const DevicePtr device) { |
| 929 DeviceMap::const_iterator it = device_map_.find(id); | 930 DeviceMap::const_iterator it = device_map_.find(id); |
| 930 if (it != device_map_.end()) | 931 if (it != device_map_.end()) |
| 931 return; | 932 return; |
| 932 | 933 |
| 933 // Setup data-structures. | 934 // Setup data-structures. |
| 934 device_map_[id] = device; | 935 device_map_[id] = device; |
| 935 device_data_map_.set(id, | 936 device_data_map_.set(id, std::unique_ptr<internal::GestureDevicePropertyData>( |
| 936 scoped_ptr<internal::GestureDevicePropertyData>( | 937 new internal::GestureDevicePropertyData)); |
| 937 new internal::GestureDevicePropertyData)); | |
| 938 | 938 |
| 939 // Gather default property values for the device from the parsed conf files. | 939 // Gather default property values for the device from the parsed conf files. |
| 940 SetupDefaultProperties(id, device); | 940 SetupDefaultProperties(id, device); |
| 941 return; | 941 return; |
| 942 } | 942 } |
| 943 | 943 |
| 944 void GesturePropertyProvider::UnregisterDevice(const DeviceId id) { | 944 void GesturePropertyProvider::UnregisterDevice(const DeviceId id) { |
| 945 DeviceMap::const_iterator it = device_map_.find(id); | 945 DeviceMap::const_iterator it = device_map_.find(id); |
| 946 if (it == device_map_.end()) | 946 if (it == device_map_.end()) |
| 947 return; | 947 return; |
| 948 device_data_map_.erase(id); | 948 device_data_map_.erase(id); |
| 949 device_map_.erase(it); | 949 device_map_.erase(it); |
| 950 } | 950 } |
| 951 | 951 |
| 952 void GesturePropertyProvider::AddProperty(const DeviceId device_id, | 952 void GesturePropertyProvider::AddProperty( |
| 953 const std::string& name, | 953 const DeviceId device_id, |
| 954 scoped_ptr<GesturesProp> property) { | 954 const std::string& name, |
| 955 std::unique_ptr<GesturesProp> property) { |
| 955 // The look-up should never fail because ideally a property can only be | 956 // The look-up should never fail because ideally a property can only be |
| 956 // created with GesturesPropCreate* functions from the gesture lib side. | 957 // created with GesturesPropCreate* functions from the gesture lib side. |
| 957 // Therefore, we simply return on failure. | 958 // Therefore, we simply return on failure. |
| 958 internal::GestureDevicePropertyData* device_data = | 959 internal::GestureDevicePropertyData* device_data = |
| 959 device_data_map_.get(device_id); | 960 device_data_map_.get(device_id); |
| 960 if (device_data) | 961 if (device_data) |
| 961 device_data->properties.set(name, std::move(property)); | 962 device_data->properties.set(name, std::move(property)); |
| 962 } | 963 } |
| 963 | 964 |
| 964 void GesturePropertyProvider::DeleteProperty(const DeviceId device_id, | 965 void GesturePropertyProvider::DeleteProperty(const DeviceId device_id, |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1033 | 1034 |
| 1034 // Break the content into sections, lines and then pieces. | 1035 // Break the content into sections, lines and then pieces. |
| 1035 // Sections are delimited by the "EndSection" keyword. | 1036 // Sections are delimited by the "EndSection" keyword. |
| 1036 // Lines are delimited by "\n". | 1037 // Lines are delimited by "\n". |
| 1037 // Pieces are delimited by all white-spaces. | 1038 // Pieces are delimited by all white-spaces. |
| 1038 std::vector<std::string> sections; | 1039 std::vector<std::string> sections; |
| 1039 base::SplitStringUsingSubstr(content, "EndSection", §ions); | 1040 base::SplitStringUsingSubstr(content, "EndSection", §ions); |
| 1040 for (size_t i = 0; i < sections.size(); ++i) { | 1041 for (size_t i = 0; i < sections.size(); ++i) { |
| 1041 // Create a new configuration section. | 1042 // Create a new configuration section. |
| 1042 configurations_.push_back( | 1043 configurations_.push_back( |
| 1043 make_scoped_ptr(new internal::ConfigurationSection())); | 1044 base::WrapUnique(new internal::ConfigurationSection())); |
| 1044 internal::ConfigurationSection* config = configurations_.back().get(); | 1045 internal::ConfigurationSection* config = configurations_.back().get(); |
| 1045 | 1046 |
| 1046 // Break the section into lines. | 1047 // Break the section into lines. |
| 1047 base::StringTokenizer lines(sections[i], "\n"); | 1048 base::StringTokenizer lines(sections[i], "\n"); |
| 1048 bool is_input_class_section = true; | 1049 bool is_input_class_section = true; |
| 1049 bool has_checked_section_type = false; | 1050 bool has_checked_section_type = false; |
| 1050 while (is_input_class_section && lines.GetNext()) { | 1051 while (is_input_class_section && lines.GetNext()) { |
| 1051 // Parse the line w.r.t. the xorg-conf format. | 1052 // Parse the line w.r.t. the xorg-conf format. |
| 1052 std::string line(lines.token()); | 1053 std::string line(lines.token()); |
| 1053 | 1054 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1106 DVLOG(2) << "Identifier: " << arg; | 1107 DVLOG(2) << "Identifier: " << arg; |
| 1107 config->identifier = arg; | 1108 config->identifier = arg; |
| 1108 next_is_identifier = false; | 1109 next_is_identifier = false; |
| 1109 break; | 1110 break; |
| 1110 } else if (next_is_option_name) { | 1111 } else if (next_is_option_name) { |
| 1111 // TODO(sheckylin): Support option "Ignore". | 1112 // TODO(sheckylin): Support option "Ignore". |
| 1112 option_name = arg; | 1113 option_name = arg; |
| 1113 next_is_option_value = true; | 1114 next_is_option_value = true; |
| 1114 next_is_option_name = false; | 1115 next_is_option_name = false; |
| 1115 } else if (next_is_option_value) { | 1116 } else if (next_is_option_value) { |
| 1116 scoped_ptr<GesturesProp> property = | 1117 std::unique_ptr<GesturesProp> property = |
| 1117 CreateDefaultProperty(option_name, arg); | 1118 CreateDefaultProperty(option_name, arg); |
| 1118 if (property) | 1119 if (property) |
| 1119 config->properties.push_back(std::move(property)); | 1120 config->properties.push_back(std::move(property)); |
| 1120 next_is_option_value = false; | 1121 next_is_option_value = false; |
| 1121 break; | 1122 break; |
| 1122 } else if (next_is_match_criteria) { | 1123 } else if (next_is_match_criteria) { |
| 1123 // Skip all match types that are not supported. | 1124 // Skip all match types that are not supported. |
| 1124 if (IsMatchTypeSupported(match_type)) { | 1125 if (IsMatchTypeSupported(match_type)) { |
| 1125 scoped_ptr<internal::MatchCriteria> criteria = | 1126 std::unique_ptr<internal::MatchCriteria> criteria = |
| 1126 CreateMatchCriteria(match_type, arg); | 1127 CreateMatchCriteria(match_type, arg); |
| 1127 if (criteria) | 1128 if (criteria) |
| 1128 config->criterias.push_back(std::move(criteria)); | 1129 config->criterias.push_back(std::move(criteria)); |
| 1129 } | 1130 } |
| 1130 next_is_match_criteria = false; | 1131 next_is_match_criteria = false; |
| 1131 break; | 1132 break; |
| 1132 } | 1133 } |
| 1133 } else { | 1134 } else { |
| 1134 // If the section type hasn't been decided yet, look for it. | 1135 // If the section type hasn't been decided yet, look for it. |
| 1135 // Otherwise, look for valid entries according to the spec. | 1136 // Otherwise, look for valid entries according to the spec. |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1163 LOG(ERROR) << "Error parsing line: " << lines.token(); | 1164 LOG(ERROR) << "Error parsing line: " << lines.token(); |
| 1164 has_error = true; | 1165 has_error = true; |
| 1165 } | 1166 } |
| 1166 break; | 1167 break; |
| 1167 } | 1168 } |
| 1168 } | 1169 } |
| 1169 | 1170 |
| 1170 // The value of a boolean option is skipped (default is true). | 1171 // The value of a boolean option is skipped (default is true). |
| 1171 if (!has_error && (next_is_option_value || next_is_match_criteria)) { | 1172 if (!has_error && (next_is_option_value || next_is_match_criteria)) { |
| 1172 if (next_is_option_value) { | 1173 if (next_is_option_value) { |
| 1173 scoped_ptr<GesturesProp> property = | 1174 std::unique_ptr<GesturesProp> property = |
| 1174 CreateDefaultProperty(option_name, "on"); | 1175 CreateDefaultProperty(option_name, "on"); |
| 1175 if (property) | 1176 if (property) |
| 1176 config->properties.push_back(std::move(property)); | 1177 config->properties.push_back(std::move(property)); |
| 1177 } else if (IsMatchTypeSupported(match_type) && | 1178 } else if (IsMatchTypeSupported(match_type) && |
| 1178 IsMatchDeviceType(match_type)) { | 1179 IsMatchDeviceType(match_type)) { |
| 1179 scoped_ptr<internal::MatchCriteria> criteria = | 1180 std::unique_ptr<internal::MatchCriteria> criteria = |
| 1180 CreateMatchCriteria(match_type, "on"); | 1181 CreateMatchCriteria(match_type, "on"); |
| 1181 if (criteria) | 1182 if (criteria) |
| 1182 config->criterias.push_back(std::move(criteria)); | 1183 config->criterias.push_back(std::move(criteria)); |
| 1183 } | 1184 } |
| 1184 } | 1185 } |
| 1185 } | 1186 } |
| 1186 | 1187 |
| 1187 // Remove useless config sections. | 1188 // Remove useless config sections. |
| 1188 if (!is_input_class_section || | 1189 if (!is_input_class_section || |
| 1189 (config->criterias.empty() && config->properties.empty())) { | 1190 (config->criterias.empty() && config->properties.empty())) { |
| 1190 configurations_.pop_back(); | 1191 configurations_.pop_back(); |
| 1191 } | 1192 } |
| 1192 } | 1193 } |
| 1193 } | 1194 } |
| 1194 | 1195 |
| 1195 scoped_ptr<internal::MatchCriteria> | 1196 std::unique_ptr<internal::MatchCriteria> |
| 1196 GesturePropertyProvider::CreateMatchCriteria(const std::string& match_type, | 1197 GesturePropertyProvider::CreateMatchCriteria(const std::string& match_type, |
| 1197 const std::string& arg) { | 1198 const std::string& arg) { |
| 1198 DVLOG(2) << "Creating match criteria: (" << match_type << ", " << arg << ")"; | 1199 DVLOG(2) << "Creating match criteria: (" << match_type << ", " << arg << ")"; |
| 1199 if (match_type == "MatchProduct") | 1200 if (match_type == "MatchProduct") |
| 1200 return make_scoped_ptr(new internal::MatchProduct(arg)); | 1201 return base::WrapUnique(new internal::MatchProduct(arg)); |
| 1201 if (match_type == "MatchDevicePath") | 1202 if (match_type == "MatchDevicePath") |
| 1202 return make_scoped_ptr(new internal::MatchDevicePath(arg)); | 1203 return base::WrapUnique(new internal::MatchDevicePath(arg)); |
| 1203 if (match_type == "MatchUSBID") | 1204 if (match_type == "MatchUSBID") |
| 1204 return make_scoped_ptr(new internal::MatchUSBID(arg)); | 1205 return base::WrapUnique(new internal::MatchUSBID(arg)); |
| 1205 if (match_type == "MatchIsPointer") | 1206 if (match_type == "MatchIsPointer") |
| 1206 return make_scoped_ptr(new internal::MatchIsPointer(arg)); | 1207 return base::WrapUnique(new internal::MatchIsPointer(arg)); |
| 1207 if (match_type == "MatchIsTouchpad") | 1208 if (match_type == "MatchIsTouchpad") |
| 1208 return make_scoped_ptr(new internal::MatchIsTouchpad(arg)); | 1209 return base::WrapUnique(new internal::MatchIsTouchpad(arg)); |
| 1209 if (match_type == "MatchIsTouchscreen") | 1210 if (match_type == "MatchIsTouchscreen") |
| 1210 return make_scoped_ptr(new internal::MatchIsTouchscreen(arg)); | 1211 return base::WrapUnique(new internal::MatchIsTouchscreen(arg)); |
| 1211 NOTREACHED(); | 1212 NOTREACHED(); |
| 1212 return NULL; | 1213 return NULL; |
| 1213 } | 1214 } |
| 1214 | 1215 |
| 1215 scoped_ptr<GesturesProp> GesturePropertyProvider::CreateDefaultProperty( | 1216 std::unique_ptr<GesturesProp> GesturePropertyProvider::CreateDefaultProperty( |
| 1216 const std::string& name, | 1217 const std::string& name, |
| 1217 const std::string& value) { | 1218 const std::string& value) { |
| 1218 // Our parsing rule: | 1219 // Our parsing rule: |
| 1219 // 1. No hex or oct number is accepted. | 1220 // 1. No hex or oct number is accepted. |
| 1220 // 2. All numbers will be stored as double. | 1221 // 2. All numbers will be stored as double. |
| 1221 // 3. Array elements can be separated by both white-spaces or commas. | 1222 // 3. Array elements can be separated by both white-spaces or commas. |
| 1222 // 4. A token is treated as numeric either if it is one of the special | 1223 // 4. A token is treated as numeric either if it is one of the special |
| 1223 // keywords for boolean values (on, true, yes, off, false, no) or if | 1224 // keywords for boolean values (on, true, yes, off, false, no) or if |
| 1224 // base::StringToDouble succeeds. | 1225 // base::StringToDouble succeeds. |
| 1225 // 5. The property is treated as numeric if and only if all of its elements | 1226 // 5. The property is treated as numeric if and only if all of its elements |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1251 bool success = base::StringToDouble(token, &real_result); | 1252 bool success = base::StringToDouble(token, &real_result); |
| 1252 if (!success) { | 1253 if (!success) { |
| 1253 is_all_numeric = false; | 1254 is_all_numeric = false; |
| 1254 break; | 1255 break; |
| 1255 } | 1256 } |
| 1256 numbers.push_back(real_result); | 1257 numbers.push_back(real_result); |
| 1257 } | 1258 } |
| 1258 | 1259 |
| 1259 // Create the GesturesProp. Array properties need to contain at least one | 1260 // Create the GesturesProp. Array properties need to contain at least one |
| 1260 // number and may contain numbers only. | 1261 // number and may contain numbers only. |
| 1261 scoped_ptr<GesturesProp> property; | 1262 std::unique_ptr<GesturesProp> property; |
| 1262 if (is_all_numeric && numbers.size()) { | 1263 if (is_all_numeric && numbers.size()) { |
| 1263 property.reset(new GesturesDoubleProp(name, numbers.size(), NULL, | 1264 property.reset(new GesturesDoubleProp(name, numbers.size(), NULL, |
| 1264 numbers.data(), NULL)); | 1265 numbers.data(), NULL)); |
| 1265 } else { | 1266 } else { |
| 1266 property.reset(new GesturesStringProp(name, NULL, value.c_str(), NULL)); | 1267 property.reset(new GesturesStringProp(name, NULL, value.c_str(), NULL)); |
| 1267 } | 1268 } |
| 1268 | 1269 |
| 1269 DVLOG(2) << "Prop: " << *property; | 1270 DVLOG(2) << "Prop: " << *property; |
| 1270 // The function will always succeed for now but it may change later if we | 1271 // The function will always succeed for now but it may change later if we |
| 1271 // specify some name or args as invalid. | 1272 // specify some name or args as invalid. |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1332 | 1333 |
| 1333 GesturesProp* GesturesPropFunctionsWrapper::CreateString(void* device_data, | 1334 GesturesProp* GesturesPropFunctionsWrapper::CreateString(void* device_data, |
| 1334 const char* name, | 1335 const char* name, |
| 1335 const char** value, | 1336 const char** value, |
| 1336 const char* init) { | 1337 const char* init) { |
| 1337 GesturesProp* default_property = NULL; | 1338 GesturesProp* default_property = NULL; |
| 1338 if (!PreCreateProperty(device_data, name, &default_property)) | 1339 if (!PreCreateProperty(device_data, name, &default_property)) |
| 1339 return NULL; | 1340 return NULL; |
| 1340 GesturesProp* property = | 1341 GesturesProp* property = |
| 1341 new GesturesStringProp(name, value, init, default_property); | 1342 new GesturesStringProp(name, value, init, default_property); |
| 1342 PostCreateProperty(device_data, name, make_scoped_ptr(property)); | 1343 PostCreateProperty(device_data, name, base::WrapUnique(property)); |
| 1343 return property; | 1344 return property; |
| 1344 } | 1345 } |
| 1345 | 1346 |
| 1346 void GesturesPropFunctionsWrapper::RegisterHandlers( | 1347 void GesturesPropFunctionsWrapper::RegisterHandlers( |
| 1347 void* device_data, | 1348 void* device_data, |
| 1348 GesturesProp* property, | 1349 GesturesProp* property, |
| 1349 void* handler_data, | 1350 void* handler_data, |
| 1350 GesturesPropGetHandler get, | 1351 GesturesPropGetHandler get, |
| 1351 GesturesPropSetHandler set) { | 1352 GesturesPropSetHandler set) { |
| 1352 // Sanity checks | 1353 // Sanity checks |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1454 size_t count, | 1455 size_t count, |
| 1455 const T* init) { | 1456 const T* init) { |
| 1456 // Create the property. Use the default property value if possible. | 1457 // Create the property. Use the default property value if possible. |
| 1457 GesturesProp* default_property = NULL; | 1458 GesturesProp* default_property = NULL; |
| 1458 if (!PreCreateProperty(device_data, name, &default_property)) | 1459 if (!PreCreateProperty(device_data, name, &default_property)) |
| 1459 return NULL; | 1460 return NULL; |
| 1460 GesturesProp* property = | 1461 GesturesProp* property = |
| 1461 new PROPTYPE(name, count, value, init, default_property); | 1462 new PROPTYPE(name, count, value, init, default_property); |
| 1462 | 1463 |
| 1463 // Start tracking the property in the provider. | 1464 // Start tracking the property in the provider. |
| 1464 PostCreateProperty(device_data, name, make_scoped_ptr(property)); | 1465 PostCreateProperty(device_data, name, base::WrapUnique(property)); |
| 1465 return property; | 1466 return property; |
| 1466 } | 1467 } |
| 1467 | 1468 |
| 1468 bool GesturesPropFunctionsWrapper::PreCreateProperty( | 1469 bool GesturesPropFunctionsWrapper::PreCreateProperty( |
| 1469 void* device_data, | 1470 void* device_data, |
| 1470 const char* name, | 1471 const char* name, |
| 1471 GesturesProp** default_property) { | 1472 GesturesProp** default_property) { |
| 1472 GesturePropertyProvider* provider = GetPropertyProvider(device_data); | 1473 GesturePropertyProvider* provider = GetPropertyProvider(device_data); |
| 1473 GesturePropertyProvider::DeviceId device_id = GetDeviceId(device_data); | 1474 GesturePropertyProvider::DeviceId device_id = GetDeviceId(device_data); |
| 1474 | 1475 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1489 } | 1490 } |
| 1490 | 1491 |
| 1491 // Return the found default property from conf files (could be NULL). | 1492 // Return the found default property from conf files (could be NULL). |
| 1492 *default_property = provider->GetDefaultProperty(device_id, name); | 1493 *default_property = provider->GetDefaultProperty(device_id, name); |
| 1493 return true; | 1494 return true; |
| 1494 } | 1495 } |
| 1495 | 1496 |
| 1496 void GesturesPropFunctionsWrapper::PostCreateProperty( | 1497 void GesturesPropFunctionsWrapper::PostCreateProperty( |
| 1497 void* device_data, | 1498 void* device_data, |
| 1498 const char* name, | 1499 const char* name, |
| 1499 scoped_ptr<GesturesProp> property) { | 1500 std::unique_ptr<GesturesProp> property) { |
| 1500 // Log the creation. | 1501 // Log the creation. |
| 1501 DVLOG(3) << "Created active prop: " << *property; | 1502 DVLOG(3) << "Created active prop: " << *property; |
| 1502 | 1503 |
| 1503 // Add the property to the gesture property provider. The gesture property | 1504 // Add the property to the gesture property provider. The gesture property |
| 1504 // provider will own it from now on. | 1505 // provider will own it from now on. |
| 1505 GesturePropertyProvider* provider = GetPropertyProvider(device_data); | 1506 GesturePropertyProvider* provider = GetPropertyProvider(device_data); |
| 1506 provider->AddProperty(GetDeviceId(device_data), name, std::move(property)); | 1507 provider->AddProperty(GetDeviceId(device_data), name, std::move(property)); |
| 1507 } | 1508 } |
| 1508 | 1509 |
| 1509 GesturesProp* GesturesPropFunctionsWrapper::CreateIntSingle(void* device_data, | 1510 GesturesProp* GesturesPropFunctionsWrapper::CreateIntSingle(void* device_data, |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1545 const GesturesPropProvider kGesturePropProvider = { | 1546 const GesturesPropProvider kGesturePropProvider = { |
| 1546 GesturesPropFunctionsWrapper::CreateInt, | 1547 GesturesPropFunctionsWrapper::CreateInt, |
| 1547 GesturesPropFunctionsWrapper::CreateShort, | 1548 GesturesPropFunctionsWrapper::CreateShort, |
| 1548 GesturesPropFunctionsWrapper::CreateBool, | 1549 GesturesPropFunctionsWrapper::CreateBool, |
| 1549 GesturesPropFunctionsWrapper::CreateString, | 1550 GesturesPropFunctionsWrapper::CreateString, |
| 1550 GesturesPropFunctionsWrapper::CreateReal, | 1551 GesturesPropFunctionsWrapper::CreateReal, |
| 1551 GesturesPropFunctionsWrapper::RegisterHandlers, | 1552 GesturesPropFunctionsWrapper::RegisterHandlers, |
| 1552 GesturesPropFunctionsWrapper::Free}; | 1553 GesturesPropFunctionsWrapper::Free}; |
| 1553 | 1554 |
| 1554 } // namespace ui | 1555 } // namespace ui |
| OLD | NEW |