summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Gratton <mike@vee.net>2020-05-11 21:34:47 +1000
committerMichael Gratton <mike@vee.net>2020-05-11 21:34:47 +1000
commit93c33740ad0ce309f1fd1d29e2fcbf0b509b8403 (patch)
treeddd84696120ebada93e712354d890587b4d3739b
parentb9cee7bbfb27d62a578b642ff2aad2dbb161a5f3 (diff)
downloadglib-mjog/2104-short-gtypes.tar.gz
gio: Map short GValues to int16 GVariants and vice versa in GSettingsmjog/2104-short-gtypes
-rw-r--r--gio/gsettings-mapping.c54
1 files changed, 46 insertions, 8 deletions
diff --git a/gio/gsettings-mapping.c b/gio/gsettings-mapping.c
index 8c64b02a5..93c06b7e5 100644
--- a/gio/gsettings-mapping.c
+++ b/gio/gsettings-mapping.c
@@ -28,7 +28,9 @@ g_settings_set_mapping_int (const GValue *value,
GVariant *variant = NULL;
gint64 l;
- if (G_VALUE_HOLDS_INT (value))
+ if (G_VALUE_HOLDS_SHORT (value))
+ l = g_value_get_short (value);
+ else if (G_VALUE_HOLDS_INT (value))
l = g_value_get_int (value);
else if (G_VALUE_HOLDS_INT64 (value))
l = g_value_get_int64 (value);
@@ -137,7 +139,9 @@ g_settings_set_mapping_unsigned_int (const GValue *value,
GVariant *variant = NULL;
guint64 u;
- if (G_VALUE_HOLDS_UINT (value))
+ if (G_VALUE_HOLDS_USHORT (value))
+ u = g_value_get_ushort (value);
+ else if (G_VALUE_HOLDS_UINT (value))
u = g_value_get_uint (value);
else if (G_VALUE_HOLDS_UINT64 (value))
u = g_value_get_uint64 (value);
@@ -203,7 +207,17 @@ g_settings_get_mapping_int (GValue *value,
else
return FALSE;
- if (G_VALUE_HOLDS_INT (value))
+ if (G_VALUE_HOLDS_SHORT (value))
+ {
+ g_value_set_short (value, l);
+ return (G_MINSHORT <= l && l <= G_MAXSHORT);
+ }
+ else if (G_VALUE_HOLDS_USHORT (value))
+ {
+ g_value_set_ushort (value, l);
+ return (0 <= l && l <= G_MAXUSHORT);
+ }
+ else if (G_VALUE_HOLDS_INT (value))
{
g_value_set_int (value, l);
return (G_MININT32 <= l && l <= G_MAXINT32);
@@ -248,7 +262,17 @@ g_settings_get_mapping_float (GValue *value,
return FALSE;
l = (gint64)d;
- if (G_VALUE_HOLDS_INT (value))
+ if (G_VALUE_HOLDS_SHORT (value))
+ {
+ g_value_set_short (value, l);
+ return (G_MINSHORT <= l && l <= G_MAXSHORT);
+ }
+ else if (G_VALUE_HOLDS_USHORT (value))
+ {
+ g_value_set_ushort (value, l);
+ return (0 <= l && l <= G_MAXUSHORT);
+ }
+ else if (G_VALUE_HOLDS_INT (value))
{
g_value_set_int (value, l);
return (G_MININT32 <= l && l <= G_MAXINT32);
@@ -296,7 +320,17 @@ g_settings_get_mapping_unsigned_int (GValue *value,
else
return FALSE;
- if (G_VALUE_HOLDS_INT (value))
+ if (G_VALUE_HOLDS_SHORT (value))
+ {
+ g_value_set_short (value, u);
+ return (G_MINSHORT <= u && u <= G_MAXSHORT);
+ }
+ else if (G_VALUE_HOLDS_USHORT (value))
+ {
+ g_value_set_ushort (value, u);
+ return (0 <= u && u <= G_MAXUSHORT);
+ }
+ else if (G_VALUE_HOLDS_INT (value))
{
g_value_set_int (value, u);
return (u <= G_MAXINT32);
@@ -350,14 +384,16 @@ g_settings_set_mapping (const GValue *value,
}
}
- else if (G_VALUE_HOLDS_INT (value) ||
+ else if (G_VALUE_HOLDS_SHORT (value) ||
+ G_VALUE_HOLDS_INT (value) ||
G_VALUE_HOLDS_INT64 (value))
return g_settings_set_mapping_int (value, expected_type);
else if (G_VALUE_HOLDS_DOUBLE (value))
return g_settings_set_mapping_float (value, expected_type);
- else if (G_VALUE_HOLDS_UINT (value) ||
+ else if (G_VALUE_HOLDS_USHORT (value) ||
+ G_VALUE_HOLDS_UINT (value) ||
G_VALUE_HOLDS_UINT64 (value))
return g_settings_set_mapping_unsigned_int (value, expected_type);
@@ -563,7 +599,9 @@ g_settings_mapping_is_compatible (GType gvalue_type,
else if (gvalue_type == G_TYPE_CHAR ||
gvalue_type == G_TYPE_UCHAR)
ok = g_variant_type_equal (variant_type, G_VARIANT_TYPE_BYTE);
- else if (gvalue_type == G_TYPE_INT ||
+ else if (gvalue_type == G_TYPE_SHORT ||
+ gvalue_type == G_TYPE_USHORT ||
+ gvalue_type == G_TYPE_INT ||
gvalue_type == G_TYPE_UINT ||
gvalue_type == G_TYPE_INT64 ||
gvalue_type == G_TYPE_UINT64 ||