pidgin/prefs/pidginproxyprefs.c

changeset 41859
ed82ab63d15a
parent 41856
3c3901fbe549
child 42575
580339aa47cc
--- a/pidgin/prefs/pidginproxyprefs.c	Sat Oct 29 00:53:33 2022 -0500
+++ b/pidgin/prefs/pidginproxyprefs.c	Sat Oct 29 01:14:13 2022 -0500
@@ -158,6 +158,30 @@
 	return g_variant_new_string(map[position]);
 }
 
+static gboolean
+pidgin_proxy_prefs_get_port_mapping(GValue *value, GVariant *variant,
+                                    G_GNUC_UNUSED gpointer data)
+{
+	g_value_take_string(value,
+	                    g_strdup_printf("%d", g_variant_get_uint16(variant)));
+
+	return TRUE;
+}
+
+static GVariant *
+pidgin_proxy_prefs_set_port_mapping(const GValue *value,
+                                    G_GNUC_UNUSED const GVariantType *expected_type,
+                                    G_GNUC_UNUSED gpointer data)
+{
+	const char *current = g_value_get_string(value);
+
+	if(current != NULL) {
+		return g_variant_new_uint16(atoi(current) & 0xFFFF);
+	}
+
+	return NULL;
+}
+
 static void
 pidgin_proxy_prefs_init_gnome(PidginProxyPrefs *prefs) {
 	gchar *path = NULL;
@@ -205,8 +229,13 @@
 
 	g_settings_bind(settings, "host", prefs->host, "text",
 	                G_SETTINGS_BIND_DEFAULT);
-	g_settings_bind(settings, "port", prefs->port, "value",
-	                G_SETTINGS_BIND_DEFAULT);
+	g_settings_bind_with_mapping(settings, "port",
+	                             prefs->port, "text",
+	                             G_SETTINGS_BIND_DEFAULT,
+	                             pidgin_proxy_prefs_get_port_mapping,
+	                             pidgin_proxy_prefs_set_port_mapping,
+	                             NULL,
+	                             NULL);
 	g_settings_bind(settings, "username", prefs->username, "text",
 	                G_SETTINGS_BIND_DEFAULT);
 	g_settings_bind(settings, "password", prefs->password, "text",

mercurial