diff --git a/pidgin/pidginnotificationconnectionerror.h b/pidgin/pidginnotificationconnectionerror.h
--- a/pidgin/pidginnotificationconnectionerror.h
+++ b/pidgin/pidginnotificationconnectionerror.h
@@ -31,7 +31,7 @@
 
 #include <gtk/gtk.h>
 
-#include <handy.h>
+#include <adwaita.h>
 
 #include <purple.h>
 
@@ -48,7 +48,7 @@
 
 #define PIDGIN_TYPE_NOTIFICATION_CONNECTION_ERROR (pidgin_notification_connection_error_get_type())
 G_DECLARE_FINAL_TYPE(PidginNotificationConnectionError, pidgin_notification_connection_error,
-                     PIDGIN, NOTIFICATION_CONNECTION_ERROR, HdyActionRow)
+                     PIDGIN, NOTIFICATION_CONNECTION_ERROR, AdwActionRow)
 
 /**
  * pidgin_notification_connection_error_new:
# HG changeset patch
# Node ID 44225c296e60
# Parent  9993325d2730
diff --git a/pidgin/pidginnotificationconnectionerror.c b/pidgin/pidginnotificationconnectionerror.c
--- a/pidgin/pidginnotificationconnectionerror.c
+++ b/pidgin/pidginnotificationconnectionerror.c
@@ -27,7 +27,7 @@
 #include "pidgin/pidginnotificationconnectionerror.h"
 
 struct _PidginNotificationConnectionError {
-	HdyActionRow parent;
+	AdwActionRow parent;
 
 	PurpleNotification *notification;
 
@@ -44,7 +44,7 @@
 static GParamSpec *properties[N_PROPERTIES] = { NULL, };
 
 G_DEFINE_TYPE(PidginNotificationConnectionError,
-              pidgin_notification_connection_error, HDY_TYPE_ACTION_ROW)
+              pidgin_notification_connection_error, ADW_TYPE_ACTION_ROW)
 
 /******************************************************************************
  * Helpers
@@ -60,11 +60,11 @@
 	g_return_if_fail(PIDGIN_IS_NOTIFICATION_CONNECTION_ERROR(error));
 
 	if(!PURPLE_IS_NOTIFICATION(error->notification)) {
-		hdy_preferences_row_set_title(HDY_PREFERENCES_ROW(error),
+		adw_preferences_row_set_title(ADW_PREFERENCES_ROW(error),
 		                              _("Notification missing"));
 
-		hdy_action_row_set_icon_name(HDY_ACTION_ROW(error), NULL);
-		hdy_action_row_set_subtitle(HDY_ACTION_ROW(error), NULL);
+		adw_action_row_set_icon_name(ADW_ACTION_ROW(error), NULL);
+		adw_action_row_set_subtitle(ADW_ACTION_ROW(error), NULL);
 
 		gtk_widget_hide(error->reconnect);
 		gtk_widget_hide(error->reenable);
@@ -75,11 +75,11 @@
 
 	account = purple_notification_get_account(error->notification);
 	if(!PURPLE_IS_ACCOUNT(account)) {
-		hdy_preferences_row_set_title(HDY_PREFERENCES_ROW(error),
+		adw_preferences_row_set_title(ADW_PREFERENCES_ROW(error),
 		                              _("Notification is missing an account"));
 
-		hdy_action_row_set_icon_name(HDY_ACTION_ROW(error), NULL);
-		hdy_action_row_set_subtitle(HDY_ACTION_ROW(error), NULL);
+		adw_action_row_set_icon_name(ADW_ACTION_ROW(error), NULL);
+		adw_action_row_set_subtitle(ADW_ACTION_ROW(error), NULL);
 
 		gtk_widget_hide(error->reconnect);
 		gtk_widget_hide(error->reenable);
@@ -100,7 +100,7 @@
 	/* Set the icon name if one was specified. */
 	icon_name = purple_notification_get_icon_name(error->notification);
 	if(icon_name != NULL) {
-		hdy_action_row_set_icon_name(HDY_ACTION_ROW(error), icon_name);
+		adw_action_row_set_icon_name(ADW_ACTION_ROW(error), icon_name);
 	}
 
 	username = purple_account_get_username(account);
@@ -111,14 +111,14 @@
 	} else {
 		title = g_strdup_printf(_("%s disabled"), username);
 	}
-	hdy_preferences_row_set_title(HDY_PREFERENCES_ROW(error), title);
+	adw_preferences_row_set_title(ADW_PREFERENCES_ROW(error), title);
 	g_free(title);
 
 	info = purple_notification_get_data(error->notification);
 	if(info != NULL) {
-		hdy_action_row_set_subtitle(HDY_ACTION_ROW(error), info->description);
+		adw_action_row_set_subtitle(ADW_ACTION_ROW(error), info->description);
 	} else {
-		hdy_action_row_set_subtitle(HDY_ACTION_ROW(error), NULL);
+		adw_action_row_set_subtitle(ADW_ACTION_ROW(error), NULL);
 	}
 
 	/* If the account is still enabled, reconnect should be visible, otherwise
diff --git a/pidgin/resources/Conversations/window.ui b/pidgin/resources/Conversations/window.ui
--- a/pidgin/resources/Conversations/window.ui
+++ b/pidgin/resources/Conversations/window.ui
@@ -18,7 +18,7 @@
 -->
 <interface>
   <requires lib="gtk" version="4.0"/>
-  <requires lib="libhandy" version="1.2"/>
+  <requires lib="Adw" version="1.0"/>
   <requires lib="pidgin" version="3.0"/>
   <!-- interface-license-type gplv2 -->
   <!-- interface-name Pidgin -->
@@ -118,7 +118,7 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="HdyStatusPage">
+                  <object class="AdwStatusPage">
                     <property name="visible">True</property>
                     <property name="can-focus">False</property>
                     <property name="icon-name">mail-send-symbolic</property>
diff --git a/pidgin/resources/Notifications/connectionerror.ui b/pidgin/resources/Notifications/connectionerror.ui
--- a/pidgin/resources/Notifications/connectionerror.ui
+++ b/pidgin/resources/Notifications/connectionerror.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>
 
@@ -15,27 +14,25 @@
 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/>.
-
+along with this library; if not, see <https://www.gnu.org/licenses/>.
 -->
 <interface>
-  <requires lib="gtk+" version="3.24"/>
-  <requires lib="libhandy" version="0.0"/>
+  <requires lib="gtk" version="4.0"/>
+  <requires lib="Adw" version="1.0"/>
   <!-- interface-license-type gplv2 -->
   <!-- interface-name Pidgin -->
   <!-- interface-description Internet Messenger -->
   <!-- interface-copyright Pidgin Developers <devel@pidgin.im> -->
-  <template class="PidginNotificationConnectionError" parent="HdyActionRow">
+  <template class="PidginNotificationConnectionError" parent="AdwActionRow">
     <property name="visible">True</property>
     <property name="can-focus">True</property>
     <property name="activatable">False</property>
     <property name="subtitle-lines">3</property>
     <child>
       <object class="GtkButton" id="reconnect">
-        <property name="label" translatable="yes">Reconnect</property>
-        <property name="visible">True</property>
-        <property name="can-focus">True</property>
-        <property name="receives-default">True</property>
+        <property name="label" translatable="1">Reconnect</property>
+        <property name="focusable">1</property>
+        <property name="receives-default">1</property>
         <property name="halign">center</property>
         <property name="valign">center</property>
         <property name="action-name">app.connect-account</property>
@@ -43,10 +40,9 @@
     </child>
     <child>
       <object class="GtkButton" id="reenable">
-        <property name="label" translatable="yes">Re-enable</property>
-        <property name="visible">True</property>
-        <property name="can-focus">True</property>
-        <property name="receives-default">True</property>
+        <property name="label" translatable="1">Re-enable</property>
+        <property name="focusable">1</property>
+        <property name="receives-default">1</property>
         <property name="halign">center</property>
         <property name="valign">center</property>
         <property name="action-name">app.enable-account</property>
@@ -54,10 +50,9 @@
     </child>
     <child>
       <object class="GtkButton" id="modify">
-        <property name="label" translatable="yes">Modify Account</property>
-        <property name="visible">True</property>
-        <property name="can-focus">True</property>
-        <property name="receives-default">True</property>
+        <property name="label" translatable="1">Modify Account</property>
+        <property name="focusable">1</property>
+        <property name="receives-default">1</property>
         <property name="halign">center</property>
         <property name="valign">center</property>
         <property name="action-name">app.edit-account</property>
@@ -65,17 +60,14 @@
     </child>
     <child>
       <object class="GtkButton" id="remove">
-        <property name="visible">True</property>
-        <property name="can-focus">True</property>
-        <property name="receives-default">True</property>
+        <property name="focusable">1</property>
+        <property name="receives-default">1</property>
         <property name="halign">center</property>
         <property name="valign">center</property>
         <property name="relief">none</property>
         <signal name="clicked" handler="pidgin_notification_connection_error_remove_cb" object="PidginNotificationConnectionError" swapped="no"/>
         <child>
           <object class="GtkImage">
-            <property name="visible">True</property>
-            <property name="can-focus">False</property>
             <property name="icon-name">edit-delete-symbolic</property>
           </object>
         </child>
diff --git a/pidgin/resources/Notifications/list.ui b/pidgin/resources/Notifications/list.ui
--- a/pidgin/resources/Notifications/list.ui
+++ b/pidgin/resources/Notifications/list.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>
 
@@ -15,43 +14,33 @@
 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, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
+along with this library; if not, see <https://www.gnu.org/licenses/>.
 -->
 <interface>
-  <requires lib="gtk+" version="3.24"/>
-  <requires lib="libhandy" version="1.2"/>
+  <requires lib="gtk" version="4.0"/>
+  <requires lib="Adw" version="1.0"/>
   <!-- interface-license-type gplv2 -->
   <!-- interface-name Pidgin -->
   <!-- interface-description Internet Messenger -->
   <!-- interface-copyright Pidgin Developers <devel@pidgin.im> -->
   <template class="PidginNotificationList" parent="GtkBox">
-    <property name="visible">True</property>
-    <property name="can-focus">False</property>
     <property name="orientation">vertical</property>
     <child>
       <object class="GtkListBox" id="list_box">
-        <property name="visible">True</property>
-        <property name="can-focus">False</property>
+        <property name="vexpand">1</property>
         <child type="placeholder">
-          <object class="HdyStatusPage">
+          <object class="AdwStatusPage">
             <property name="visible">True</property>
             <property name="can-focus">False</property>
             <property name="icon-name">mail-read-symbolic</property>
-            <property name="title" translatable="yes">Notifications</property>
-            <property name="description" translatable="yes">You're all caught up!</property>
+            <property name="title" translatable="1">Notifications</property>
+            <property name="description" translatable="1">You&apos;re all caught up!</property>
             <child>
               <placeholder/>
             </child>
           </object>
         </child>
       </object>
-      <packing>
-        <property name="expand">True</property>
-        <property name="fill">True</property>
-        <property name="position">0</property>
-      </packing>
     </child>
   </template>
 </interface>
