diff options
Diffstat (limited to 'src/libnmc-setting/nm-meta-setting-desc.c')
| -rw-r--r-- | src/libnmc-setting/nm-meta-setting-desc.c | 86 |
1 files changed, 41 insertions, 45 deletions
diff --git a/src/libnmc-setting/nm-meta-setting-desc.c b/src/libnmc-setting/nm-meta-setting-desc.c index 103b844e..2871ccb6 100644 --- a/src/libnmc-setting/nm-meta-setting-desc.c +++ b/src/libnmc-setting/nm-meta-setting-desc.c @@ -1073,7 +1073,6 @@ _get_fcn_gobject_enum(ARGS_GET_FCN) { GType gtype = 0; const NMUtilsEnumValueInfo *value_infos = NULL; - gboolean has_gtype = FALSE; nm_auto_unset_gvalue GValue gval = G_VALUE_INIT; gint64 v; gboolean format_numeric = FALSE; @@ -1087,13 +1086,6 @@ _get_fcn_gobject_enum(ARGS_GET_FCN) RETURN_UNSUPPORTED_GET_TYPE(); - if (property_info->property_typ_data) { - if (property_info->property_typ_data->subtype.gobject_enum.get_gtype) { - gtype = property_info->property_typ_data->subtype.gobject_enum.get_gtype(); - has_gtype = TRUE; - } - } - if (property_info->property_typ_data && get_type == NM_META_ACCESSOR_GET_TYPE_PRETTY && NM_FLAGS_ANY(property_info->property_typ_data->typ_flags, NM_META_PROPERTY_TYP_FLAG_ENUM_GET_PRETTY_NUMERIC @@ -1136,18 +1128,12 @@ _get_fcn_gobject_enum(ARGS_GET_FCN) nm_assert(format_text || format_numeric); + gtype = nm_meta_property_enum_get_type(property_info); + g_return_val_if_fail(gtype != G_TYPE_INVALID, NULL); + pspec = g_object_class_find_property(G_OBJECT_GET_CLASS(setting), property_info->property_name); g_return_val_if_fail(pspec, NULL); - if (has_gtype) { - /* if the property is already enum, don't set get_gtype: it's redundant and error prone */ - g_return_val_if_fail(NM_IN_SET(pspec->value_type, G_TYPE_INT, G_TYPE_UINT), FALSE); - } else { - gtype = pspec->value_type; - } - - g_return_val_if_fail(G_TYPE_IS_ENUM(gtype) || G_TYPE_IS_FLAGS(gtype), NULL); - g_value_init(&gval, pspec->value_type); g_object_get_property(G_OBJECT(setting), property_info->property_name, &gval); NM_SET_OUT(out_is_default, g_param_value_defaults(pspec, &gval)); @@ -1255,17 +1241,19 @@ nm_meta_property_int_get_range(const NMMetaPropertyInfo *property_info, GType nm_meta_property_enum_get_type(const NMMetaPropertyInfo *property_info) { - GType gtype = _property_get_spec(property_info)->value_type; + GType setting_gtype = property_info->setting_info->general->get_setting_gtype(); + GType prop_gtype = + nm_setting_get_enum_property_type(setting_gtype, property_info->property_name); if (property_info->property_typ_data && property_info->property_typ_data->subtype.gobject_enum.get_gtype) { /* if the property is already enum, don't set get_gtype: it's redundant and error prone */ - g_return_val_if_fail(NM_IN_SET(gtype, G_TYPE_INT, G_TYPE_UINT), G_TYPE_INVALID); + g_return_val_if_fail(prop_gtype == G_TYPE_INVALID, G_TYPE_INVALID); return property_info->property_typ_data->subtype.gobject_enum.get_gtype(); } - g_return_val_if_fail(G_TYPE_IS_ENUM(gtype) || G_TYPE_IS_FLAGS(gtype), G_TYPE_INVALID); - return gtype; + g_return_val_if_fail(G_TYPE_IS_ENUM(prop_gtype) || G_TYPE_IS_FLAGS(prop_gtype), G_TYPE_INVALID); + return prop_gtype; } /** @@ -1579,33 +1567,18 @@ _set_fcn_gobject_mac(ARGS_SET_FCN) static gboolean _set_fcn_gobject_enum(ARGS_SET_FCN) { - GType gtype = 0; - GType gtype_prop; - gboolean has_gtype = FALSE; - nm_auto_unset_gvalue GValue gval = G_VALUE_INIT; + GType gtype; + GType gtype_gobj; + nm_auto_unset_gvalue GValue gval = G_VALUE_INIT; gboolean is_flags; int v; if (_SET_FCN_DO_RESET_DEFAULT_WITH_SUPPORTS_REMOVE(property_info, modifier, value)) return _gobject_property_reset_default(setting, property_info->property_name); - if (property_info->property_typ_data) { - if (property_info->property_typ_data->subtype.gobject_enum.get_gtype) { - gtype = property_info->property_typ_data->subtype.gobject_enum.get_gtype(); - has_gtype = TRUE; - } - } - - gtype_prop = _gobject_property_get_gtype(G_OBJECT(setting), property_info->property_name); - - if (has_gtype) { - /* if the property is already enum, don't set get_gtype: it's redundant and error prone */ - g_return_val_if_fail(NM_IN_SET(gtype_prop, G_TYPE_INT, G_TYPE_UINT), FALSE); - } else { - gtype = gtype_prop; - } + gtype = nm_meta_property_enum_get_type(property_info); + g_return_val_if_fail(gtype != G_TYPE_INVALID, FALSE); - g_return_val_if_fail(G_TYPE_IS_FLAGS(gtype) || G_TYPE_IS_ENUM(gtype), FALSE); is_flags = G_TYPE_IS_FLAGS(gtype); if (!_nm_utils_enum_from_str_full( @@ -1641,10 +1614,12 @@ _set_fcn_gobject_enum(ARGS_SET_FCN) v = (int) (v_flag | ((guint) v)); } - g_value_init(&gval, gtype_prop); - if (gtype_prop == G_TYPE_INT) + gtype_gobj = _gobject_property_get_gtype(G_OBJECT(setting), property_info->property_name); + + g_value_init(&gval, gtype_gobj); + if (gtype_gobj == G_TYPE_INT) g_value_set_int(&gval, v); - else if (gtype_prop == G_TYPE_UINT) + else if (gtype_gobj == G_TYPE_UINT) g_value_set_uint(&gval, v); else if (is_flags) g_value_set_flags(&gval, v); @@ -6011,6 +5986,15 @@ static const NMMetaPropertyInfo *const property_infos_ETHTOOL[] = { }; #undef _CURRENT_NM_META_SETTING_TYPE +#define _CURRENT_NM_META_SETTING_TYPE NM_META_SETTING_TYPE_GENERIC +static const NMMetaPropertyInfo *const property_infos_GENERIC[] = { + PROPERTY_INFO_WITH_DESC (NM_SETTING_GENERIC_DEVICE_HANDLER, + .property_type = &_pt_gobject_string, + ), + NULL +}; + +#undef _CURRENT_NM_META_SETTING_TYPE #define _CURRENT_NM_META_SETTING_TYPE NM_META_SETTING_TYPE_GSM static const NMMetaPropertyInfo *const property_infos_GSM[] = { PROPERTY_INFO_WITH_DESC (NM_SETTING_GSM_AUTO_CONFIG, @@ -6934,6 +6918,9 @@ static const NMMetaPropertyInfo *const property_infos_MACSEC[] = { PROPERTY_INFO_WITH_DESC (NM_SETTING_MACSEC_SEND_SCI, .property_type = &_pt_gobject_bool, ), + PROPERTY_INFO_WITH_DESC (NM_SETTING_MACSEC_OFFLOAD, + .property_type = &_pt_gobject_enum, + ), NULL }; @@ -7388,6 +7375,15 @@ static const NMMetaPropertyInfo *const property_infos_SRIOV[] = { PROPERTY_INFO_WITH_DESC (NM_SETTING_SRIOV_AUTOPROBE_DRIVERS, .property_type = &_pt_gobject_ternary, ), + PROPERTY_INFO_WITH_DESC (NM_SETTING_SRIOV_ESWITCH_MODE, + .property_type = &_pt_gobject_enum, + ), + PROPERTY_INFO_WITH_DESC (NM_SETTING_SRIOV_ESWITCH_INLINE_MODE, + .property_type = &_pt_gobject_enum, + ), + PROPERTY_INFO_WITH_DESC (NM_SETTING_SRIOV_ESWITCH_ENCAP_MODE, + .property_type = &_pt_gobject_enum, + ), NULL }; @@ -8795,7 +8791,7 @@ const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[] = { NM_META_SETTING_VALID_PART_ITEM (ETHTOOL, FALSE), ), ), - SETTING_INFO_EMPTY (GENERIC, + SETTING_INFO (GENERIC, .valid_parts = NM_META_SETTING_VALID_PARTS ( NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE), NM_META_SETTING_VALID_PART_ITEM (GENERIC, TRUE), |