--- a/pidgin/prefs/pidginprefs.c Mon Sep 05 23:36:14 2022 -0500
+++ b/pidgin/prefs/pidginprefs.c Mon Sep 05 23:54:17 2022 -0500
@@ -367,6 +367,44 @@
+bind_combo_row_set(GObject *obj, G_GNUC_UNUSED GParamSpec *pspec, + const gchar *key = data; + GtkStringObject *item = NULL; + const gchar *value = NULL; + item = adw_combo_row_get_selected_item(ADW_COMBO_ROW(obj)); + value = gtk_string_object_get_string(item); + purple_prefs_set_string(key, value); +pidgin_prefs_bind_combo_row(const gchar *key, GtkWidget *widget) { + GListModel *model = NULL; + const char *pref_value = NULL; + guint selected = GTK_INVALID_LIST_POSITION; + pref_value = purple_prefs_get_string(key); + model = adw_combo_row_get_model(ADW_COMBO_ROW(widget)); + for(guint i = 0; i < g_list_model_get_n_items(model); i++) { + GtkStringObject *obj = g_list_model_get_item(model, i); + const gchar *value = gtk_string_object_get_string(obj); + if (purple_strequal(pref_value, value)) { + adw_combo_row_set_selected(ADW_COMBO_ROW(widget), selected); + g_signal_connect(widget, "notify::selected", + G_CALLBACK(bind_combo_row_set), (gpointer)key); set_bool_pref(GtkWidget *w, const char *key)
purple_prefs_set_bool(key,
--- a/pidgin/prefs/pidginprefsinternal.h Mon Sep 05 23:36:14 2022 -0500
+++ b/pidgin/prefs/pidginprefsinternal.h Mon Sep 05 23:54:17 2022 -0500
@@ -49,6 +49,9 @@
void pidgin_prefs_bind_checkbox(const char *key, GtkWidget *button);
+void pidgin_prefs_bind_combo_row(const gchar *key, GtkWidget *widget); void pidgin_prefs_bind_dropdown(PidginPrefCombo *combo);
--- a/pidgin/prefs/pidginproxyprefs.c Mon Sep 05 23:36:14 2022 -0500
+++ b/pidgin/prefs/pidginproxyprefs.c Mon Sep 05 23:54:17 2022 -0500
@@ -41,7 +41,7 @@
GtkWidget *socks4_remotedns;
@@ -54,6 +54,30 @@
/******************************************************************************
*****************************************************************************/
+proxy_type_expression_cb(GObject *self, G_GNUC_UNUSED gpointer data) + const gchar *text = ""; + const gchar *value = NULL; + value = gtk_string_object_get_string(GTK_STRING_OBJECT(self)); + if(purple_strequal(value, "none")) { + } else if(purple_strequal(value, "socks4")) { + } else if(purple_strequal(value, "socks5")) { + } else if(purple_strequal(value, "tor")) { + text = _("Tor/Privacy (SOCKS 5)"); + } else if(purple_strequal(value, "http")) { + } else if(purple_strequal(value, "envvar")) { + text = _("Use Environmental Settings"); proxy_changed_cb(const gchar *name, PurplePrefType type, gconstpointer value,
@@ -141,7 +165,7 @@
gtk_widget_class_bind_template_child(
widget_class, PidginProxyPrefs, socks4_remotedns);
gtk_widget_class_bind_template_child(
- widget_class, PidginProxyPrefs, type.combo);
+ widget_class, PidginProxyPrefs, type); gtk_widget_class_bind_template_child(
widget_class, PidginProxyPrefs, options);
gtk_widget_class_bind_template_child(
@@ -153,6 +177,8 @@
gtk_widget_class_bind_template_child(
widget_class, PidginProxyPrefs, password);
gtk_widget_class_bind_template_callback(widget_class,
+ proxy_type_expression_cb); + gtk_widget_class_bind_template_callback(widget_class, gtk_widget_class_bind_template_callback(widget_class,
@@ -197,9 +223,8 @@
pidgin_prefs_bind_switch("/purple/proxy/socks4_remotedns",
prefs->socks4_remotedns);
- prefs->type.type = PURPLE_PREF_STRING;
- prefs->type.key = "/purple/proxy/type";
- pidgin_prefs_bind_dropdown(&prefs->type);
+ pidgin_prefs_bind_combo_row("/purple/proxy/type", prefs->type); proxy_info = purple_global_proxy_get_info();
purple_prefs_connect_callback(prefs, "/purple/proxy/type",
--- a/pidgin/resources/Prefs/proxy.ui Mon Sep 05 23:36:14 2022 -0500
+++ b/pidgin/resources/Prefs/proxy.ui Mon Sep 05 23:54:17 2022 -0500
@@ -23,45 +23,6 @@
<!-- interface-name Pidgin -->
<!-- interface-description Internet Messenger -->
<!-- interface-copyright Pidgin Developers <devel@pidgin.im> -->
- <object class="GtkAdjustment" id="port.adjustment">
- <property name="upper">65535</property>
- <property name="step-increment">1</property>
- <property name="page-increment">10</property>
- <object class="GtkListStore" id="type.store">
- <!-- column-name text -->
- <column type="gchararray"/>
- <!-- column-name value -->
- <column type="gchararray"/>
- <col id="0" translatable="yes">No proxy</col>
- <col id="0" translatable="yes">SOCKS 4</col>
- <col id="1">socks4</col>
- <col id="0" translatable="yes">SOCKS 5</col>
- <col id="1">socks5</col>
- <col id="0" translatable="yes">Tor/Privacy (SOCKS 5)</col>
- <col id="0" translatable="yes">HTTP</col>
- <col id="0" translatable="yes">Use Environmental Settings</col>
- <col id="1">envvar</col>
<template class="PidginProxyPrefs" parent="AdwPreferencesPage">
<object class="AdwPreferencesGroup" id="gnome">
@@ -106,22 +67,24 @@
- <object class="AdwActionRow">
- <property name="activatable-widget">type.combo</property>
+ <object class="AdwComboRow" id="type"> <property name="title" translatable="1">Proxy t_ype</property>
<property name="use-underline">1</property>
- <object class="GtkComboBox" id="type.combo">
- <property name="model">type.store</property>
- <property name="valign">center</property>
- <object class="GtkCellRendererText"/>
- <attribute name="text">0</attribute>
+ <property name="model"> + <object class="GtkStringList">
+ <property name="expression"> + <closure type="gchararray" function="proxy_type_expression_cb"/> @@ -152,7 +115,13 @@
<object class="GtkSpinButton" id="port">
<property name="focusable">1</property>
<property name="text" translatable="1">0</property>
- <property name="adjustment">port.adjustment</property>
+ <property name="adjustment"> + <object class="GtkAdjustment"> + <property name="upper">65535</property> + <property name="step-increment">1</property> + <property name="page-increment">10</property> <property name="numeric">1</property>
<property name="hexpand">1</property>
<property name="valign">center</property>