aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Tismer <tismer@stackless.com>2021-01-28 15:17:49 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-01-29 17:22:48 +0000
commit3c55228a2c3d8938a83f34e6f430f392792ea887 (patch)
tree024cc588cdd12f3c4fc3b615dae5b2761e62cbf6
parent071a90d8e6d4b2642531957ab8201b6c3376f258 (diff)
feature: delete setter after creating property only if standard
Some features like QWidget.size are defined by Qt with a non-standard setter name. For size, the standard setter name would be setSize, and in the property creation process this setter would be deleted. We changed rules in this way: If a setter name is non-standard (like resize), the setter will not be removed but still can be used. Actually it would make more sense if "size" was a read-only property. Task-number: PYSIDE-1019 Change-Id: I9ded7e9c1dbd2932aa4c5616385b90ed673bfaee Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> (cherry picked from commit e675a51ce48875800c1f9137cedd49144c62af58) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--sources/pyside6/libpyside/feature_select.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/sources/pyside6/libpyside/feature_select.cpp b/sources/pyside6/libpyside/feature_select.cpp
index b87751271..db7fb1389 100644
--- a/sources/pyside6/libpyside/feature_select.cpp
+++ b/sources/pyside6/libpyside/feature_select.cpp
@@ -606,7 +606,7 @@ static PyObject *createProperty(PyTypeObject *type, PyObject *getter, PyObject *
return prop;
}
-static QStringList parseFields(const char *propstr)
+static QStringList parseFields(const char *propstr, bool *stdwrite)
{
/*
* Break the string into subfields at ':' and add defaults.
@@ -616,12 +616,14 @@ static QStringList parseFields(const char *propstr)
assert(list.size() == 2 || list.size() == 3);
auto name = list[0];
auto read = list[1];
- if (read.size() == 0)
+ if (read.isEmpty())
list[1] = name;
if (list.size() == 2)
return list;
auto write = list[2];
- if (write.size() == 0) {
+ if (stdwrite)
+ *stdwrite = write.isEmpty();
+ if (write.isEmpty()) {
list[2] = QLatin1String("set") + name;
list[2][3] = list[2][3].toUpper();
}
@@ -661,8 +663,9 @@ static bool feature_02_true_property(PyTypeObject *type, PyObject *prev_dict, in
if (props == nullptr || *props == nullptr)
return true;
for (; *props != nullptr; ++props) {
+ bool isStdWrite;
auto propstr = *props;
- auto fields = parseFields(propstr);
+ auto fields = parseFields(propstr, &isStdWrite);
bool haveWrite = fields.size() == 3;
PyObject *name = make_snake_case(fields[0], lower);
PyObject *read = make_snake_case(fields[1], lower);
@@ -685,9 +688,10 @@ static bool feature_02_true_property(PyTypeObject *type, PyObject *prev_dict, in
return false;
// Theoretically, we need to check for multiple signatures to be exact.
// But we don't do so intentionally because it would be confusing.
- if (haveWrite && PyDict_GetItem(prop_dict, write))
+ if (haveWrite && PyDict_GetItem(prop_dict, write) && isStdWrite) {
if (PyDict_DelItem(prop_dict, write) < 0)
return false;
+ }
}
return true;
}