pidgin/pidgin

Split network prefs into a separate widget

2022-05-13, Elliott Sales de Andrade
70144e5e0a89
Parents 54d7cfc990eb
Children 0ae2dfa4a5cf
Split network prefs into a separate widget

No re-designing, but did switch `GtkFrame` to `HdyPreferencesGroup` to work in a `HdyPreferencesPage`.

Testing Done:
Opened Preferences and saw no errors; changed all settings and saw the prefs being saved in debug window.

Reviewed at https://reviews.imfreedom.org/r/1441/
--- a/pidgin/meson.build Fri May 13 03:16:36 2022 -0500
+++ b/pidgin/meson.build Fri May 13 03:17:59 2022 -0500
@@ -63,6 +63,7 @@
'prefs/pidginawaypage.c',
'prefs/pidgincredentialproviderrow.c',
'prefs/pidgincredentialspage.c',
+ 'prefs/pidginnetworkpage.c',
]
libpidgin_headers = [
@@ -132,6 +133,7 @@
'prefs/pidginawaypage.h',
'prefs/pidgincredentialproviderrow.h',
'prefs/pidgincredentialspage.h',
+ 'prefs/pidginnetworkpage.h',
]
libpidgin_enum_headers = [
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/prefs/pidginnetworkpage.c Fri May 13 03:17:59 2022 -0500
@@ -0,0 +1,262 @@
+/*
+ * Pidgin - Internet Messenger
+ * Copyright (C) Pidgin Developers <devel@pidgin.im>
+ *
+ * Pidgin is the legal property of its developers, whose names are too numerous
+ * to list here. Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <glib/gi18n-lib.h>
+
+#include <purple.h>
+
+#include <handy.h>
+#include <nice.h>
+
+#include "pidginnetworkpage.h"
+#include "pidginprefsinternal.h"
+
+struct _PidginNetworkPage {
+ HdyPreferencesPage parent;
+
+ GtkWidget *stun_server;
+ GtkWidget *auto_ip;
+ GtkWidget *public_ip;
+ GtkWidget *public_ip_hbox;
+ GtkWidget *map_ports;
+ GtkWidget *ports_range_use;
+ GtkWidget *ports_range_hbox;
+ GtkWidget *ports_range_start;
+ GtkWidget *ports_range_end;
+ GtkWidget *turn_server;
+ GtkWidget *turn_port_udp;
+ GtkWidget *turn_port_tcp;
+ GtkWidget *turn_username;
+ GtkWidget *turn_password;
+};
+
+G_DEFINE_TYPE(PidginNetworkPage, pidgin_network_page, HDY_TYPE_PREFERENCES_PAGE)
+
+/******************************************************************************
+ * Helpers
+ *****************************************************************************/
+static void
+network_ip_changed(GtkEntry *entry, gpointer data)
+{
+ const gchar *text = gtk_entry_get_text(entry);
+ GtkStyleContext *context = gtk_widget_get_style_context(GTK_WIDGET(entry));
+
+ if (text && *text) {
+ if (g_hostname_is_ip_address(text)) {
+ purple_network_set_public_ip(text);
+ gtk_style_context_add_class(context, "good-ip");
+ gtk_style_context_remove_class(context, "bad-ip");
+ } else {
+ gtk_style_context_add_class(context, "bad-ip");
+ gtk_style_context_remove_class(context, "good-ip");
+ }
+
+ } else {
+ purple_network_set_public_ip("");
+ gtk_style_context_remove_class(context, "bad-ip");
+ gtk_style_context_remove_class(context, "good-ip");
+ }
+}
+
+static gboolean
+network_stun_server_changed_cb(GtkWidget *widget,
+ GdkEventFocus *event, gpointer data)
+{
+ GtkEntry *entry = GTK_ENTRY(widget);
+ purple_prefs_set_string("/purple/network/stun_server",
+ gtk_entry_get_text(entry));
+ purple_network_set_stun_server(gtk_entry_get_text(entry));
+
+ return FALSE;
+}
+
+static gboolean
+network_turn_server_changed_cb(GtkWidget *widget,
+ GdkEventFocus *event, gpointer data)
+{
+ GtkEntry *entry = GTK_ENTRY(widget);
+ purple_prefs_set_string("/purple/network/turn_server",
+ gtk_entry_get_text(entry));
+ purple_network_set_turn_server(gtk_entry_get_text(entry));
+
+ return FALSE;
+}
+
+static void
+auto_ip_button_clicked_cb(GtkWidget *button, gpointer null)
+{
+ const char *ip;
+ PurpleStunNatDiscovery *stun;
+ char *auto_ip_text;
+ GList *list = NULL;
+
+ /* Make a lookup for the auto-detected IP ourselves. */
+ if (purple_prefs_get_bool("/purple/network/auto_ip")) {
+ /* Check if STUN discovery was already done */
+ stun = purple_stun_discover(NULL);
+ if ((stun != NULL) && (stun->status == PURPLE_STUN_STATUS_DISCOVERED)) {
+ ip = stun->publicip;
+ } else {
+ /* Attempt to get the IP from a NAT device using UPnP */
+ ip = purple_upnp_get_public_ip();
+ if (ip == NULL) {
+ /* Attempt to get the IP from a NAT device using NAT-PMP */
+ ip = purple_pmp_get_public_ip();
+ if (ip == NULL) {
+ /* Just fetch the first IP of the local system */
+ list = nice_interfaces_get_local_ips(FALSE);
+ if (list) {
+ ip = list->data;
+ } else {
+ ip = "0.0.0.0";
+ }
+ }
+ }
+ }
+ } else {
+ ip = _("Disabled");
+ }
+
+ auto_ip_text = g_strdup_printf(_("Use _automatically detected IP address: %s"), ip);
+ gtk_button_set_label(GTK_BUTTON(button), auto_ip_text);
+ g_free(auto_ip_text);
+ g_list_free_full(list, g_free);
+}
+
+/******************************************************************************
+ * GObject Implementation
+ *****************************************************************************/
+static void
+pidgin_network_page_class_init(PidginNetworkPageClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
+
+ gtk_widget_class_set_template_from_resource(
+ widget_class,
+ "/im/pidgin/Pidgin3/Prefs/network.ui"
+ );
+
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginNetworkPage, stun_server);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginNetworkPage, auto_ip);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginNetworkPage, public_ip);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginNetworkPage, public_ip_hbox);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginNetworkPage, map_ports);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginNetworkPage, ports_range_use);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginNetworkPage, ports_range_hbox);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginNetworkPage, ports_range_start);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginNetworkPage, ports_range_end);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginNetworkPage, turn_server);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginNetworkPage, turn_port_udp);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginNetworkPage, turn_port_tcp);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginNetworkPage, turn_username);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginNetworkPage, turn_password);
+ gtk_widget_class_bind_template_callback(widget_class,
+ network_stun_server_changed_cb);
+ gtk_widget_class_bind_template_callback(widget_class,
+ auto_ip_button_clicked_cb);
+ gtk_widget_class_bind_template_callback(widget_class,
+ network_ip_changed);
+ gtk_widget_class_bind_template_callback(widget_class,
+ network_turn_server_changed_cb);
+}
+
+static void
+pidgin_network_page_init(PidginNetworkPage *page)
+{
+ GtkStyleContext *context;
+ GtkCssProvider *ip_css;
+
+ gtk_widget_init_template(GTK_WIDGET(page));
+
+ gtk_entry_set_text(GTK_ENTRY(page->stun_server),
+ purple_prefs_get_string("/purple/network/stun_server"));
+
+ pidgin_prefs_bind_checkbox("/purple/network/auto_ip", page->auto_ip);
+ auto_ip_button_clicked_cb(page->auto_ip, NULL); /* Update label */
+
+ gtk_entry_set_text(GTK_ENTRY(page->public_ip),
+ purple_network_get_public_ip());
+
+ ip_css = gtk_css_provider_new();
+ gtk_css_provider_load_from_resource(ip_css,
+ "/im/pidgin/Pidgin3/Prefs/ip.css");
+
+ context = gtk_widget_get_style_context(page->public_ip);
+ gtk_style_context_add_provider(context,
+ GTK_STYLE_PROVIDER(ip_css),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+
+ g_object_bind_property(page->auto_ip, "active",
+ page->public_ip_hbox, "sensitive",
+ G_BINDING_SYNC_CREATE|G_BINDING_INVERT_BOOLEAN);
+
+ pidgin_prefs_bind_checkbox("/purple/network/map_ports",
+ page->map_ports);
+
+ pidgin_prefs_bind_checkbox("/purple/network/ports_range_use",
+ page->ports_range_use);
+ g_object_bind_property(page->ports_range_use, "active",
+ page->ports_range_hbox, "sensitive",
+ G_BINDING_SYNC_CREATE);
+
+ pidgin_prefs_bind_spin_button("/purple/network/ports_range_start",
+ page->ports_range_start);
+ pidgin_prefs_bind_spin_button("/purple/network/ports_range_end",
+ page->ports_range_end);
+
+ /* TURN server */
+ gtk_entry_set_text(GTK_ENTRY(page->turn_server),
+ purple_prefs_get_string("/purple/network/turn_server"));
+
+ pidgin_prefs_bind_spin_button("/purple/network/turn_port",
+ page->turn_port_udp);
+
+ pidgin_prefs_bind_spin_button("/purple/network/turn_port_tcp",
+ page->turn_port_tcp);
+
+ pidgin_prefs_bind_entry("/purple/network/turn_username",
+ page->turn_username);
+ pidgin_prefs_bind_entry("/purple/network/turn_password",
+ page->turn_password);
+}
+
+/******************************************************************************
+ * API
+ *****************************************************************************/
+GtkWidget *
+pidgin_network_page_new(void) {
+ return GTK_WIDGET(g_object_new(PIDGIN_TYPE_NETWORK_PAGE, NULL));
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/prefs/pidginnetworkpage.h Fri May 13 03:17:59 2022 -0500
@@ -0,0 +1,62 @@
+/*
+ * Pidgin - Internet Messenger
+ * Copyright (C) Pidgin Developers <devel@pidgin.im>
+ *
+ * Pidgin is the legal property of its developers, whose names are too numerous
+ * to list here. Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
+ */
+
+#if !defined(PIDGIN_GLOBAL_HEADER_INSIDE) && !defined(PIDGIN_COMPILATION)
+# error "only <pidgin.h> may be included directly"
+#endif
+
+#ifndef PIDGIN_NETWORK_PAGE_H
+#define PIDGIN_NETWORK_PAGE_H
+
+#include <glib.h>
+
+#include <gtk/gtk.h>
+#include <handy.h>
+
+G_BEGIN_DECLS
+
+/**
+ * PidginNetworkPage:
+ *
+ * #PidginNetworkPage is a widget for the preferences window to let users
+ * choose and configure their network settings.
+ *
+ * Since: 3.0.0
+ */
+#define PIDGIN_TYPE_NETWORK_PAGE (pidgin_network_page_get_type())
+G_DECLARE_FINAL_TYPE(PidginNetworkPage, pidgin_network_page,
+ PIDGIN, NETWORK_PAGE, HdyPreferencesPage)
+
+/**
+ * pidgin_network_page_new:
+ *
+ * Creates a new #PidginNetworkPage instance.
+ *
+ * Returns: (transfer full): The new #PidginNetworkPage instance.
+ *
+ * Since: 3.0.0
+ */
+GtkWidget *pidgin_network_page_new(void);
+
+G_END_DECLS
+
+#endif /* PIDGIN_NETWORK_PAGE_H */
--- a/pidgin/prefs/pidginprefs.c Fri May 13 03:16:36 2022 -0500
+++ b/pidgin/prefs/pidginprefs.c Fri May 13 03:17:59 2022 -0500
@@ -70,24 +70,6 @@
GtkWidget *format_view;
} conversations;
- /* Network page */
- struct {
- GtkWidget *stun_server;
- GtkWidget *auto_ip;
- GtkWidget *public_ip;
- GtkWidget *public_ip_hbox;
- GtkWidget *map_ports;
- GtkWidget *ports_range_use;
- GtkWidget *ports_range_hbox;
- GtkWidget *ports_range_start;
- GtkWidget *ports_range_end;
- GtkWidget *turn_server;
- GtkWidget *turn_port_udp;
- GtkWidget *turn_port_tcp;
- GtkWidget *turn_username;
- GtkWidget *turn_password;
- } network;
-
/* Proxy page */
struct {
GtkWidget *stack;
@@ -771,53 +753,6 @@
}
static void
-network_ip_changed(GtkEntry *entry, gpointer data)
-{
- const gchar *text = gtk_entry_get_text(entry);
- GtkStyleContext *context = gtk_widget_get_style_context(GTK_WIDGET(entry));
-
- if (text && *text) {
- if (g_hostname_is_ip_address(text)) {
- purple_network_set_public_ip(text);
- gtk_style_context_add_class(context, "good-ip");
- gtk_style_context_remove_class(context, "bad-ip");
- } else {
- gtk_style_context_add_class(context, "bad-ip");
- gtk_style_context_remove_class(context, "good-ip");
- }
-
- } else {
- purple_network_set_public_ip("");
- gtk_style_context_remove_class(context, "bad-ip");
- gtk_style_context_remove_class(context, "good-ip");
- }
-}
-
-static gboolean
-network_stun_server_changed_cb(GtkWidget *widget,
- GdkEventFocus *event, gpointer data)
-{
- GtkEntry *entry = GTK_ENTRY(widget);
- purple_prefs_set_string("/purple/network/stun_server",
- gtk_entry_get_text(entry));
- purple_network_set_stun_server(gtk_entry_get_text(entry));
-
- return FALSE;
-}
-
-static gboolean
-network_turn_server_changed_cb(GtkWidget *widget,
- GdkEventFocus *event, gpointer data)
-{
- GtkEntry *entry = GTK_ENTRY(widget);
- purple_prefs_set_string("/purple/network/turn_server",
- gtk_entry_get_text(entry));
- purple_network_set_turn_server(gtk_entry_get_text(entry));
-
- return FALSE;
-}
-
-static void
proxy_changed_cb(const char *name, PurplePrefType type,
gconstpointer value, gpointer data)
{
@@ -862,106 +797,6 @@
}
static void
-auto_ip_button_clicked_cb(GtkWidget *button, gpointer null)
-{
- const char *ip;
- PurpleStunNatDiscovery *stun;
- char *auto_ip_text;
- GList *list = NULL;
-
- /* Make a lookup for the auto-detected IP ourselves. */
- if (purple_prefs_get_bool("/purple/network/auto_ip")) {
- /* Check if STUN discovery was already done */
- stun = purple_stun_discover(NULL);
- if ((stun != NULL) && (stun->status == PURPLE_STUN_STATUS_DISCOVERED)) {
- ip = stun->publicip;
- } else {
- /* Attempt to get the IP from a NAT device using UPnP */
- ip = purple_upnp_get_public_ip();
- if (ip == NULL) {
- /* Attempt to get the IP from a NAT device using NAT-PMP */
- ip = purple_pmp_get_public_ip();
- if (ip == NULL) {
- /* Just fetch the first IP of the local system */
- list = nice_interfaces_get_local_ips(FALSE);
- if (list) {
- ip = list->data;
- } else {
- ip = "0.0.0.0";
- }
- }
- }
- }
- } else{
- ip = _("Disabled");
- }
-
- auto_ip_text = g_strdup_printf(_("Use _automatically detected IP address: %s"), ip);
- gtk_button_set_label(GTK_BUTTON(button), auto_ip_text);
- g_free(auto_ip_text);
- g_list_free_full(list, g_free);
-}
-
-static void
-bind_network_page(PidginPrefsWindow *win)
-{
- GtkStyleContext *context;
- GtkCssProvider *ip_css;
- const gchar *res = "/im/pidgin/Pidgin3/Prefs/ip.css";
-
- gtk_entry_set_text(GTK_ENTRY(win->network.stun_server),
- purple_prefs_get_string("/purple/network/stun_server"));
-
- pidgin_prefs_bind_checkbox("/purple/network/auto_ip",
- win->network.auto_ip);
- auto_ip_button_clicked_cb(win->network.auto_ip, NULL); /* Update label */
-
- gtk_entry_set_text(GTK_ENTRY(win->network.public_ip),
- purple_network_get_public_ip());
-
- ip_css = gtk_css_provider_new();
- gtk_css_provider_load_from_resource(ip_css, res);
-
- context = gtk_widget_get_style_context(win->network.public_ip);
- gtk_style_context_add_provider(context,
- GTK_STYLE_PROVIDER(ip_css),
- GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
-
- g_object_bind_property(win->network.auto_ip, "active",
- win->network.public_ip_hbox, "sensitive",
- G_BINDING_SYNC_CREATE|G_BINDING_INVERT_BOOLEAN);
-
- pidgin_prefs_bind_checkbox("/purple/network/map_ports",
- win->network.map_ports);
-
- pidgin_prefs_bind_checkbox("/purple/network/ports_range_use",
- win->network.ports_range_use);
- g_object_bind_property(win->network.ports_range_use, "active",
- win->network.ports_range_hbox, "sensitive",
- G_BINDING_SYNC_CREATE);
-
- pidgin_prefs_bind_spin_button("/purple/network/ports_range_start",
- win->network.ports_range_start);
- pidgin_prefs_bind_spin_button("/purple/network/ports_range_end",
- win->network.ports_range_end);
-
- /* TURN server */
- gtk_entry_set_text(GTK_ENTRY(win->network.turn_server),
- purple_prefs_get_string("/purple/network/turn_server"));
-
- pidgin_prefs_bind_spin_button("/purple/network/turn_port",
- win->network.turn_port_udp);
-
- pidgin_prefs_bind_spin_button("/purple/network/turn_port_tcp",
- win->network.turn_port_tcp);
-
- pidgin_prefs_bind_entry("/purple/network/turn_username",
- win->network.turn_username);
- pidgin_prefs_bind_entry("/purple/network/turn_password",
- win->network.turn_password);
-}
-
-static void
bind_proxy_page(PidginPrefsWindow *win)
{
PurpleProxyInfo *proxy_info;
@@ -1551,7 +1386,6 @@
#endif
bind_conv_page(win);
- bind_network_page(win);
bind_proxy_page(win);
#ifdef USE_VV
vv = vv_page(win);
@@ -1600,53 +1434,6 @@
widget_class, PidginPrefsWindow,
conversations.format_view);
- /* Network page */
- gtk_widget_class_bind_template_child(
- widget_class, PidginPrefsWindow, network.stun_server);
- gtk_widget_class_bind_template_child(
- widget_class, PidginPrefsWindow, network.auto_ip);
- gtk_widget_class_bind_template_child(
- widget_class, PidginPrefsWindow, network.public_ip);
- gtk_widget_class_bind_template_child(
- widget_class, PidginPrefsWindow,
- network.public_ip_hbox);
- gtk_widget_class_bind_template_child(
- widget_class, PidginPrefsWindow, network.map_ports);
- gtk_widget_class_bind_template_child(
- widget_class, PidginPrefsWindow,
- network.ports_range_use);
- gtk_widget_class_bind_template_child(
- widget_class, PidginPrefsWindow,
- network.ports_range_hbox);
- gtk_widget_class_bind_template_child(
- widget_class, PidginPrefsWindow,
- network.ports_range_start);
- gtk_widget_class_bind_template_child(
- widget_class, PidginPrefsWindow,
- network.ports_range_end);
- gtk_widget_class_bind_template_child(
- widget_class, PidginPrefsWindow, network.turn_server);
- gtk_widget_class_bind_template_child(
- widget_class, PidginPrefsWindow,
- network.turn_port_udp);
- gtk_widget_class_bind_template_child(
- widget_class, PidginPrefsWindow,
- network.turn_port_tcp);
- gtk_widget_class_bind_template_child(
- widget_class, PidginPrefsWindow,
- network.turn_username);
- gtk_widget_class_bind_template_child(
- widget_class, PidginPrefsWindow,
- network.turn_password);
- gtk_widget_class_bind_template_callback(widget_class,
- network_stun_server_changed_cb);
- gtk_widget_class_bind_template_callback(widget_class,
- auto_ip_button_clicked_cb);
- gtk_widget_class_bind_template_callback(widget_class,
- network_ip_changed);
- gtk_widget_class_bind_template_callback(widget_class,
- network_turn_server_changed_cb);
-
/* Proxy page */
gtk_widget_class_bind_template_child(
widget_class, PidginPrefsWindow, proxy.stack);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/resources/Prefs/network.ui Fri May 13 03:17:59 2022 -0500
@@ -0,0 +1,503 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.38.2
+
+Pidgin - Internet Messenger
+Copyright (C) Pidgin Developers <devel@pidgin.im>
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, see <https://www.gnu.org/licenses/>.
+
+-->
+<interface>
+ <requires lib="gtk+" version="3.22"/>
+ <!-- interface-license-type gplv2 -->
+ <!-- interface-name Pidgin -->
+ <!-- interface-description Internet Messenger -->
+ <!-- interface-copyright Pidgin Developers <devel@pidgin.im> -->
+ <object class="GtkAdjustment" id="ports_range_end.adjustment">
+ <property name="upper">65535</property>
+ <property name="step-increment">1</property>
+ <property name="page-increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="ports_range_start.adjustment">
+ <property name="upper">65535</property>
+ <property name="step-increment">1</property>
+ <property name="page-increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="turn_port_tcp.adjustment">
+ <property name="upper">65535</property>
+ <property name="step-increment">1</property>
+ <property name="page-increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="turn_port_udp.adjustment">
+ <property name="upper">65535</property>
+ <property name="step-increment">1</property>
+ <property name="page-increment">10</property>
+ </object>
+ <template class="PidginNetworkPage" parent="HdyPreferencesPage">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <child>
+ <object class="HdyPreferencesGroup">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="title" translatable="yes">IP Address</property>
+ <child>
+ <object class="GtkAlignment">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="left-padding">12</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label8">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes">ST_UN server:</property>
+ <property name="use-underline">True</property>
+ <property name="mnemonic-widget">stun_server</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="stun_server">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="placeholder-text" translatable="yes">Example: stunserver.org</property>
+ <property name="input-purpose">url</property>
+ <signal name="focus-out-event" handler="network_stun_server_changed_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="auto_ip">
+ <property name="label" translatable="yes">Use _automatically detected IP address</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="use-underline">True</property>
+ <property name="draw-indicator">True</property>
+ <signal name="toggled" handler="auto_ip_button_clicked_cb" after="yes" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="public_ip_hbox">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label9">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes">Public _IP:</property>
+ <property name="use-underline">True</property>
+ <property name="mnemonic-widget">public_ip</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="public_ip">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <signal name="changed" handler="network_ip_changed" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="HdyPreferencesGroup">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="title" translatable="yes">Ports</property>
+ <child>
+ <object class="GtkAlignment">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="left-padding">12</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkCheckButton" id="map_ports">
+ <property name="label" translatable="yes">_Enable automatic router port forwarding</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="use-underline">True</property>
+ <property name="draw-indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkCheckButton" id="ports_range_use">
+ <property name="label" translatable="yes">_Manually specify range of ports to listen on:</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="use-underline">True</property>
+ <property name="draw-indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="ports_range_hbox">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes">_Start:</property>
+ <property name="use-underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="ports_range_start">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="text" translatable="yes">0</property>
+ <property name="adjustment">ports_range_start.adjustment</property>
+ <property name="numeric">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes">_End:</property>
+ <property name="use-underline">True</property>
+ <property name="mnemonic-widget">ports_range_end</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="ports_range_end">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="text" translatable="yes">0</property>
+ <property name="adjustment">ports_range_end.adjustment</property>
+ <property name="numeric">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="HdyPreferencesGroup">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="title" translatable="yes">Relay Server (TURN)</property>
+ <child>
+ <object class="GtkAlignment">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="left-padding">12</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes">_TURN server:</property>
+ <property name="use-underline">True</property>
+ <property name="mnemonic-widget">turn_server</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="turn_server">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <signal name="focus-out-event" handler="network_turn_server_changed_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes">_UDP Port:</property>
+ <property name="use-underline">True</property>
+ <property name="mnemonic-widget">turn_port_udp</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="turn_port_udp">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="adjustment">turn_port_udp.adjustment</property>
+ <property name="numeric">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes">T_CP Port:</property>
+ <property name="use-underline">True</property>
+ <property name="mnemonic-widget">turn_port_tcp</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="turn_port_tcp">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="adjustment">turn_port_tcp.adjustment</property>
+ <property name="numeric">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label11">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes">Use_rname:</property>
+ <property name="use-underline">True</property>
+ <property name="mnemonic-widget">turn_username</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="turn_username">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes">Pass_word:</property>
+ <property name="use-underline">True</property>
+ <property name="mnemonic-widget">turn_password</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="turn_password">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="visibility">False</property>
+ <property name="invisible-char">●</property>
+ <property name="input-purpose">password</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </template>
+ <object class="GtkSizeGroup" id="sg">
+ <widgets>
+ <widget name="label8"/>
+ <widget name="label9"/>
+ <widget name="label10"/>
+ <widget name="label11"/>
+ </widgets>
+ </object>
+</interface>
--- a/pidgin/resources/Prefs/prefs.ui Fri May 13 03:16:36 2022 -0500
+++ b/pidgin/resources/Prefs/prefs.ui Fri May 13 03:17:59 2022 -0500
@@ -41,26 +41,6 @@
<property name="page-increment">1</property>
</object>
<object class="GtkSizeGroup" id="iface.sg"/>
- <object class="GtkAdjustment" id="network.ports_range_end.adjustment">
- <property name="upper">65535</property>
- <property name="step-increment">1</property>
- <property name="page-increment">10</property>
- </object>
- <object class="GtkAdjustment" id="network.ports_range_start.adjustment">
- <property name="upper">65535</property>
- <property name="step-increment">1</property>
- <property name="page-increment">10</property>
- </object>
- <object class="GtkAdjustment" id="network.turn_port_tcp.adjustment">
- <property name="upper">65535</property>
- <property name="step-increment">1</property>
- <property name="page-increment">10</property>
- </object>
- <object class="GtkAdjustment" id="network.turn_port_udp.adjustment">
- <property name="upper">65535</property>
- <property name="step-increment">1</property>
- <property name="page-increment">10</property>
- </object>
<object class="GtkAdjustment" id="proxy.port.adjustment">
<property name="upper">65535</property>
<property name="step-increment">1</property>
@@ -393,489 +373,9 @@
</packing>
</child>
<child>
- <object class="GtkBox" id="network.page">
+ <object class="PidginNetworkPage">
<property name="visible">True</property>
<property name="can-focus">False</property>
- <property name="border-width">12</property>
- <property name="orientation">vertical</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkFrame">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label-xalign">0</property>
- <property name="shadow-type">none</property>
- <child>
- <object class="GtkAlignment">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="left-padding">12</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label8">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">ST_UN server:</property>
- <property name="use-underline">True</property>
- <property name="mnemonic-widget">network.stun_server</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="network.stun_server">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="placeholder-text" translatable="yes">Example: stunserver.org</property>
- <property name="input-purpose">url</property>
- <signal name="focus-out-event" handler="network_stun_server_changed_cb" swapped="no"/>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="network.auto_ip">
- <property name="label" translatable="yes">Use _automatically detected IP address</property>
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="receives-default">False</property>
- <property name="use-underline">True</property>
- <property name="draw-indicator">True</property>
- <signal name="toggled" handler="auto_ip_button_clicked_cb" after="yes" swapped="no"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="network.public_ip_hbox">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label9">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">Public _IP:</property>
- <property name="use-underline">True</property>
- <property name="mnemonic-widget">network.public_ip</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="network.public_ip">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <signal name="changed" handler="network_ip_changed" swapped="no"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">IP Address</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkFrame">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label-xalign">0</property>
- <property name="shadow-type">none</property>
- <child>
- <object class="GtkAlignment">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="left-padding">12</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="network.map_ports">
- <property name="label" translatable="yes">_Enable automatic router port forwarding</property>
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="receives-default">False</property>
- <property name="use-underline">True</property>
- <property name="draw-indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="network.ports_range_use">
- <property name="label" translatable="yes">_Manually specify range of ports to listen on:</property>
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="receives-default">False</property>
- <property name="use-underline">True</property>
- <property name="draw-indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="network.ports_range_hbox">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">_Start:</property>
- <property name="use-underline">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkSpinButton" id="network.ports_range_start">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="text" translatable="yes">0</property>
- <property name="adjustment">network.ports_range_start.adjustment</property>
- <property name="numeric">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">_End:</property>
- <property name="use-underline">True</property>
- <property name="mnemonic-widget">network.ports_range_end</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkSpinButton" id="network.ports_range_end">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="text" translatable="yes">0</property>
- <property name="adjustment">network.ports_range_end.adjustment</property>
- <property name="numeric">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">Ports</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkFrame">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label-xalign">0</property>
- <property name="shadow-type">none</property>
- <child>
- <object class="GtkAlignment">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="left-padding">12</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label10">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">_TURN server:</property>
- <property name="use-underline">True</property>
- <property name="mnemonic-widget">network.turn_server</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="network.turn_server">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <signal name="focus-out-event" handler="network_turn_server_changed_cb" swapped="no"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">_UDP Port:</property>
- <property name="use-underline">True</property>
- <property name="mnemonic-widget">network.turn_port_udp</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkSpinButton" id="network.turn_port_udp">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="adjustment">network.turn_port_udp.adjustment</property>
- <property name="numeric">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">T_CP Port:</property>
- <property name="use-underline">True</property>
- <property name="mnemonic-widget">network.turn_port_tcp</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">4</property>
- </packing>
- </child>
- <child>
- <object class="GtkSpinButton" id="network.turn_port_tcp">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="adjustment">network.turn_port_tcp.adjustment</property>
- <property name="numeric">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">5</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label11">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">Use_rname:</property>
- <property name="use-underline">True</property>
- <property name="mnemonic-widget">network.turn_username</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="network.turn_username">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">Pass_word:</property>
- <property name="use-underline">True</property>
- <property name="mnemonic-widget">network.turn_password</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="network.turn_password">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="visibility">False</property>
- <property name="invisible-char">●</property>
- <property name="input-purpose">password</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">Relay Server (TURN)</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
</object>
<packing>
<property name="name">network</property>
@@ -1254,12 +754,4 @@
</object>
</child>
</template>
- <object class="GtkSizeGroup" id="network.sg">
- <widgets>
- <widget name="label8"/>
- <widget name="label9"/>
- <widget name="label10"/>
- <widget name="label11"/>
- </widgets>
- </object>
</interface>
--- a/pidgin/resources/pidgin.gresource.xml Fri May 13 03:16:36 2022 -0500
+++ b/pidgin/resources/pidgin.gresource.xml Fri May 13 03:17:59 2022 -0500
@@ -27,6 +27,7 @@
<file compressed="true">Prefs/credentials.ui</file>
<file compressed="true">Prefs/credentialprovider.ui</file>
<file compressed="true">Prefs/ip.css</file>
+ <file compressed="true">Prefs/network.ui</file>
<file compressed="true">Prefs/prefs.ui</file>
<file compressed="true">Prefs/vv.ui</file>
<file compressed="true">Privacy/dialog.ui</file>
--- a/po/POTFILES.in Fri May 13 03:16:36 2022 -0500
+++ b/po/POTFILES.in Fri May 13 03:17:59 2022 -0500
@@ -391,6 +391,7 @@
pidgin/prefs/pidginawaypage.c
pidgin/prefs/pidgincredentialproviderrow.c
pidgin/prefs/pidgincredentialspage.c
+pidgin/prefs/pidginnetworkpage.c
pidgin/prefs/pidginprefs.c
pidgin/resources/About/about.ui
pidgin/resources/Accounts/actionsmenu.ui
@@ -412,6 +413,7 @@
pidgin/resources/Prefs/away.ui
pidgin/resources/Prefs/credentialprovider.ui
pidgin/resources/Prefs/credentials.ui
+pidgin/resources/Prefs/network.ui
pidgin/resources/Prefs/prefs.ui
pidgin/resources/Prefs/vv.ui
pidgin/resources/Privacy/dialog.ui