diff --git a/pidgin/prefs/pidginproxyprefs.h b/pidgin/prefs/pidginproxyprefs.h
--- a/pidgin/prefs/pidginproxyprefs.h
+++ b/pidgin/prefs/pidginproxyprefs.h
@@ -30,7 +30,7 @@
 #include <glib.h>
 
 #include <gtk/gtk.h>
-#include <handy.h>
+#include <adwaita.h>
 
 G_BEGIN_DECLS
 
@@ -44,7 +44,7 @@ G_BEGIN_DECLS
  */
 #define PIDGIN_TYPE_PROXY_PREFS (pidgin_proxy_prefs_get_type())
 G_DECLARE_FINAL_TYPE(PidginProxyPrefs, pidgin_proxy_prefs,
-                     PIDGIN, PROXY_PREFS, HdyPreferencesPage)
+                     PIDGIN, PROXY_PREFS, AdwPreferencesPage)
 
 /**
  * pidgin_proxy_prefs_new:
# HG changeset patch
# Node ID e063831dfb16
# Parent  b15a244bb92b
diff --git a/pidgin/prefs/pidginproxyprefs.c b/pidgin/prefs/pidginproxyprefs.c
--- a/pidgin/prefs/pidginproxyprefs.c
+++ b/pidgin/prefs/pidginproxyprefs.c
@@ -24,13 +24,13 @@
 
 #include <purple.h>
 
-#include <handy.h>
+#include <adwaita.h>
 
 #include "pidginproxyprefs.h"
 #include "pidginprefsinternal.h"
 
 struct _PidginProxyPrefs {
-	HdyPreferencesPage parent;
+	AdwPreferencesPage parent;
 
 	GtkWidget *stack;
 	/* GNOME version */
@@ -47,7 +47,7 @@ struct _PidginProxyPrefs {
 	GtkWidget *password;
 };
 
-G_DEFINE_TYPE(PidginProxyPrefs, pidgin_proxy_prefs, HDY_TYPE_PREFERENCES_PAGE)
+G_DEFINE_TYPE(PidginProxyPrefs, pidgin_proxy_prefs, ADW_TYPE_PREFERENCES_PAGE)
 
 /******************************************************************************
  * Helpers
@@ -60,7 +60,7 @@ proxy_changed_cb(const gchar *name, Purp
 	const char *proxy = value;
 
 	if (!purple_strequal(proxy, "none") && !purple_strequal(proxy, "envvar")) {
-		gtk_widget_show_all(prefs->options);
+		gtk_widget_show(prefs->options);
 	} else {
 		gtk_widget_hide(prefs->options);
 	}
@@ -73,17 +73,17 @@ proxy_print_option(GtkWidget *entry, gpo
 
 	if (entry == prefs->host) {
 		purple_prefs_set_string("/purple/proxy/host",
-				gtk_entry_get_text(GTK_ENTRY(entry)));
+		                        gtk_editable_get_text(GTK_EDITABLE(entry)));
 	} else if (entry == prefs->port) {
 		purple_prefs_set_int("/purple/proxy/port",
 				gtk_spin_button_get_value_as_int(
 					GTK_SPIN_BUTTON(entry)));
 	} else if (entry == prefs->username) {
 		purple_prefs_set_string("/purple/proxy/username",
-				gtk_entry_get_text(GTK_ENTRY(entry)));
+		                        gtk_editable_get_text(GTK_EDITABLE(entry)));
 	} else if (entry == prefs->password) {
 		purple_prefs_set_string("/purple/proxy/password",
-				gtk_entry_get_text(GTK_ENTRY(entry)));
+		                        gtk_editable_get_text(GTK_EDITABLE(entry)));
 	}
 }
 
@@ -202,9 +202,11 @@ pidgin_proxy_prefs_init(PidginProxyPrefs
 				proxy_changed_cb, prefs);
 
 		if (proxy_info != NULL) {
-			if (purple_proxy_info_get_hostname(proxy_info)) {
-				gtk_entry_set_text(GTK_ENTRY(prefs->host),
-						purple_proxy_info_get_hostname(proxy_info));
+			const gchar *value = NULL;
+
+			value = purple_proxy_info_get_hostname(proxy_info);
+			if(value != NULL) {
+				gtk_editable_set_text(GTK_EDITABLE(prefs->host), value);
 			}
 
 			if (purple_proxy_info_get_port(proxy_info) != 0) {
@@ -213,14 +215,14 @@ pidgin_proxy_prefs_init(PidginProxyPrefs
 						purple_proxy_info_get_port(proxy_info));
 			}
 
-			if (purple_proxy_info_get_username(proxy_info) != NULL) {
-				gtk_entry_set_text(GTK_ENTRY(prefs->username),
-						purple_proxy_info_get_username(proxy_info));
+			value = purple_proxy_info_get_username(proxy_info);
+			if(value != NULL) {
+				gtk_editable_set_text(GTK_EDITABLE(prefs->username), value);
 			}
 
-			if (purple_proxy_info_get_password(proxy_info) != NULL) {
-				gtk_entry_set_text(GTK_ENTRY(prefs->password),
-						purple_proxy_info_get_password(proxy_info));
+			value = purple_proxy_info_get_password(proxy_info);
+			if(value != NULL) {
+				gtk_editable_set_text(GTK_EDITABLE(prefs->password), value);
 			}
 		}
 
diff --git a/pidgin/resources/Prefs/proxy.ui b/pidgin/resources/Prefs/proxy.ui
--- a/pidgin/resources/Prefs/proxy.ui
+++ b/pidgin/resources/Prefs/proxy.ui
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.38.2 
-
+<!--
 Pidgin - Internet Messenger
 Copyright (C) Pidgin Developers <devel@pidgin.im>
 
@@ -16,10 +15,10 @@ GNU General Public License for more deta
 
 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"/>
+  <requires lib="gtk" version="4.0"/>
+  <requires lib="Adw" version="1.0"/>
   <!-- interface-license-type gplv2 -->
   <!-- interface-name Pidgin -->
   <!-- interface-description Internet Messenger -->
@@ -63,306 +62,208 @@ along with this program; if not, see <ht
       </row>
     </data>
   </object>
-  <template class="PidginProxyPrefs" parent="HdyPreferencesPage">
-    <property name="visible">True</property>
-    <property name="can-focus">False</property>
+  <template class="PidginProxyPrefs" parent="AdwPreferencesPage">
     <child>
-      <object class="HdyPreferencesGroup">
-        <property name="visible">True</property>
-        <property name="can-focus">False</property>
+      <object class="AdwPreferencesGroup">
         <property name="title" translatable="yes">Proxy Server</property>
         <child>
           <object class="GtkStack" id="stack">
-            <property name="visible">True</property>
-            <property name="can-focus">False</property>
             <property name="margin-start">12</property>
-            <property name="hhomogeneous">False</property>
-            <property name="vhomogeneous">False</property>
+            <property name="hhomogeneous">0</property>
+            <property name="vhomogeneous">0</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="GtkLabel">
-                    <property name="visible">True</property>
-                    <property name="can-focus">False</property>
-                    <property name="label" translatable="yes">Proxy preferences are configured in GNOME preferences</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="GtkStackPage">
+                <property name="name">gnome</property>
+                <property name="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="gnome_not_found">
-                        <property name="visible">True</property>
-                        <property name="can-focus">False</property>
-                        <property name="label" translatable="yes">Proxy configuration program was not found.</property>
-                        <attributes>
-                          <attribute name="weight" value="bold"/>
-                        </attributes>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkButton" id="gnome_program">
-                        <property name="label" translatable="yes">Configure _Proxy</property>
-                        <property name="visible">True</property>
-                        <property name="can-focus">True</property>
-                        <property name="receives-default">True</property>
-                        <property name="use-underline">True</property>
-                        <signal name="clicked" handler="proxy_button_clicked_cb" object="PidginProxyPrefs" 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">1</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="name">gnome</property>
-              </packing>
-            </child>
-            <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="socks4_remotedns">
-                    <property name="label" translatable="yes">Use remote _DNS with SOCKS4 proxies</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="orientation">vertical</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">Proxy t_ype:</property>
-                        <property name="use-underline">True</property>
-                        <property name="mnemonic-widget">type.combo</property>
+                        <property name="label" translatable="yes">Proxy preferences are configured in GNOME preferences</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="GtkComboBox" id="type.combo">
-                        <property name="visible">True</property>
-                        <property name="can-focus">False</property>
-                        <property name="model">type.store</property>
+                      <object class="GtkBox">
+                        <property name="spacing">6</property>
                         <child>
-                          <object class="GtkCellRendererText"/>
-                          <attributes>
-                            <attribute name="text">0</attribute>
-                          </attributes>
+                          <object class="GtkLabel" id="gnome_not_found">
+                            <property name="label" translatable="yes">Proxy configuration program was not found.</property>
+                            <attributes>
+                              <attribute name="weight" value="bold"></attribute>
+                            </attributes>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkButton" id="gnome_program">
+                            <property name="label" translatable="yes">Configure _Proxy</property>
+                            <property name="focusable">1</property>
+                            <property name="receives-default">1</property>
+                            <property name="use-underline">1</property>
+                            <signal name="clicked" handler="proxy_button_clicked_cb" object="PidginProxyPrefs" swapped="no"/>
+                          </object>
                         </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>
-                <child>
-                  <!-- n-columns=4 n-rows=3 -->
-                  <object class="GtkGrid" id="options">
-                    <property name="visible">True</property>
-                    <property name="can-focus">False</property>
-                    <property name="row-spacing">10</property>
-                    <property name="column-spacing">5</property>
+                </property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkStackPage">
+                <property name="name">nongnome</property>
+                <property name="position">1</property>
+                <property name="child">
+                  <object class="GtkBox">
+                    <property name="orientation">vertical</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">_Host:</property>
-                        <property name="use-underline">True</property>
-                        <property name="mnemonic-widget">host</property>
-                        <property name="xalign">1</property>
-                        <accessibility>
-                          <relation type="label-for" target="host"/>
-                        </accessibility>
+                      <object class="GtkCheckButton" id="socks4_remotedns">
+                        <property name="label" translatable="yes">Use remote _DNS with SOCKS4 proxies</property>
+                        <property name="focusable">1</property>
+                        <property name="use-underline">1</property>
                       </object>
-                      <packing>
-                        <property name="left-attach">0</property>
-                        <property name="top-attach">0</property>
-                      </packing>
                     </child>
                     <child>
-                      <object class="GtkEntry" id="host">
-                        <property name="visible">True</property>
-                        <property name="can-focus">True</property>
-                        <signal name="changed" handler="proxy_print_option" object="PidginProxyPrefs" swapped="no"/>
+                      <object class="GtkBox">
+                        <property name="spacing">6</property>
+                        <child>
+                          <object class="GtkLabel">
+                            <property name="label" translatable="yes">Proxy t_ype:</property>
+                            <property name="use-underline">1</property>
+                            <property name="mnemonic-widget">type.combo</property>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkComboBox" id="type.combo">
+                            <property name="model">type.store</property>
+                            <child>
+                              <object class="GtkCellRendererText"/>
+                              <attributes>
+                                <attribute name="text">0</attribute>
+                              </attributes>
+                            </child>
+                          </object>
+                        </child>
                       </object>
-                      <packing>
-                        <property name="left-attach">1</property>
-                        <property name="top-attach">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel">
-                        <property name="visible">True</property>
-                        <property name="can-focus">False</property>
-                        <property name="label" translatable="yes">P_ort:</property>
-                        <property name="use-underline">True</property>
-                        <property name="xalign">1</property>
-                        <accessibility>
-                          <relation type="label-for" target="port"/>
-                        </accessibility>
-                      </object>
-                      <packing>
-                        <property name="left-attach">2</property>
-                        <property name="top-attach">0</property>
-                      </packing>
                     </child>
                     <child>
-                      <object class="GtkSpinButton" id="port">
-                        <property name="visible">True</property>
-                        <property name="can-focus">True</property>
-                        <property name="text" translatable="yes">0</property>
-                        <property name="adjustment">port.adjustment</property>
-                        <property name="numeric">True</property>
-                        <signal name="changed" handler="proxy_print_option" object="PidginProxyPrefs" swapped="no"/>
-                      </object>
-                      <packing>
-                        <property name="left-attach">3</property>
-                        <property name="top-attach">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel">
-                        <property name="visible">True</property>
-                        <property name="can-focus">False</property>
-                        <property name="label" translatable="yes">User_name:</property>
-                        <property name="use-underline">True</property>
-                        <property name="mnemonic-widget">username</property>
-                        <property name="xalign">1</property>
-                      </object>
-                      <packing>
-                        <property name="left-attach">0</property>
-                        <property name="top-attach">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkEntry" id="username">
-                        <property name="visible">True</property>
-                        <property name="can-focus">True</property>
-                        <signal name="changed" handler="proxy_print_option" object="PidginProxyPrefs" swapped="no"/>
+                      <!-- n-columns=4 n-rows=3 -->
+                      <object class="GtkGrid" id="options">
+                        <property name="row-spacing">10</property>
+                        <property name="column-spacing">5</property>
+                        <child>
+                          <object class="GtkLabel">
+                            <property name="label" translatable="yes">_Host:</property>
+                            <property name="use-underline">1</property>
+                            <property name="mnemonic-widget">host</property>
+                            <property name="xalign">1</property>
+                            <accessibility>
+                              <relation type="label-for" target="host"/>
+                            </accessibility>
+                            <layout>
+                              <property name="column">0</property>
+                              <property name="row">0</property>
+                            </layout>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkEntry" id="host">
+                            <property name="focusable">1</property>
+                            <signal name="changed" handler="proxy_print_option" object="PidginProxyPrefs" swapped="no"/>
+                            <layout>
+                              <property name="column">1</property>
+                              <property name="row">0</property>
+                            </layout>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkLabel">
+                            <property name="label" translatable="yes">P_ort:</property>
+                            <property name="use-underline">1</property>
+                            <property name="xalign">1</property>
+                            <accessibility>
+                              <relation type="label-for" target="port"/>
+                            </accessibility>
+                            <layout>
+                              <property name="column">2</property>
+                              <property name="row">0</property>
+                            </layout>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkSpinButton" id="port">
+                            <property name="focusable">1</property>
+                            <property name="text" translatable="yes">0</property>
+                            <property name="adjustment">port.adjustment</property>
+                            <property name="numeric">1</property>
+                            <signal name="changed" handler="proxy_print_option" object="PidginProxyPrefs" swapped="no"/>
+                            <layout>
+                              <property name="column">3</property>
+                              <property name="row">0</property>
+                            </layout>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkLabel">
+                            <property name="label" translatable="yes">User_name:</property>
+                            <property name="use-underline">1</property>
+                            <property name="mnemonic-widget">username</property>
+                            <property name="xalign">1</property>
+                            <layout>
+                              <property name="column">0</property>
+                              <property name="row">1</property>
+                            </layout>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkEntry" id="username">
+                            <property name="focusable">1</property>
+                            <signal name="changed" handler="proxy_print_option" object="PidginProxyPrefs" swapped="no"/>
+                            <layout>
+                              <property name="column">1</property>
+                              <property name="row">1</property>
+                            </layout>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkLabel">
+                            <property name="label" translatable="yes">Pa_ssword:</property>
+                            <property name="use-underline">1</property>
+                            <property name="mnemonic-widget">password</property>
+                            <property name="xalign">1</property>
+                            <accessibility>
+                              <relation type="label-for" target="password"/>
+                            </accessibility>
+                            <layout>
+                              <property name="column">2</property>
+                              <property name="row">1</property>
+                            </layout>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkEntry" id="password">
+                            <property name="focusable">1</property>
+                            <property name="visibility">0</property>
+                            <property name="invisible-char">●</property>
+                            <property name="input-purpose">password</property>
+                            <signal name="changed" handler="proxy_print_option" object="PidginProxyPrefs" swapped="no"/>
+                            <layout>
+                              <property name="column">3</property>
+                              <property name="row">1</property>
+                            </layout>
+                          </object>
+                        </child>
                       </object>
-                      <packing>
-                        <property name="left-attach">1</property>
-                        <property name="top-attach">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel">
-                        <property name="visible">True</property>
-                        <property name="can-focus">False</property>
-                        <property name="label" translatable="yes">Pa_ssword:</property>
-                        <property name="use-underline">True</property>
-                        <property name="mnemonic-widget">password</property>
-                        <property name="xalign">1</property>
-                        <accessibility>
-                          <relation type="label-for" target="password"/>
-                        </accessibility>
-                      </object>
-                      <packing>
-                        <property name="left-attach">2</property>
-                        <property name="top-attach">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkEntry" id="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>
-                        <signal name="changed" handler="proxy_print_option" object="PidginProxyPrefs" swapped="no"/>
-                      </object>
-                      <packing>
-                        <property name="left-attach">3</property>
-                        <property name="top-attach">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <placeholder/>
-                    </child>
-                    <child>
-                      <placeholder/>
-                    </child>
-                    <child>
-                      <placeholder/>
-                    </child>
-                    <child>
-                      <placeholder/>
                     </child>
                   </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">2</property>
-                  </packing>
-                </child>
+                </property>
               </object>
-              <packing>
-                <property name="name">nongnome</property>
-                <property name="position">1</property>
-              </packing>
             </child>
           </object>
         </child>
       </object>
-      <packing>
-        <property name="expand">False</property>
-        <property name="fill">True</property>
-        <property name="position">0</property>
-      </packing>
     </child>
   </template>
 </interface>
