diff --git a/pidgin/prefs/pidginconversationprefs.h b/pidgin/prefs/pidginconversationprefs.h
--- a/pidgin/prefs/pidginconversationprefs.h
+++ b/pidgin/prefs/pidginconversationprefs.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_CONVERSATION_PREFS (pidgin_conversation_prefs_get_type())
 G_DECLARE_FINAL_TYPE(PidginConversationPrefs, pidgin_conversation_prefs,
-                     PIDGIN, CONVERSATION_PREFS, HdyPreferencesPage)
+                     PIDGIN, CONVERSATION_PREFS, AdwPreferencesPage)
 
 /**
  * pidgin_conversation_prefs_new:
# HG changeset patch
# Node ID 67fb1f78a2a3
# Parent  e063831dfb16
diff --git a/pidgin/prefs/pidginconversationprefs.c b/pidgin/prefs/pidginconversationprefs.c
--- a/pidgin/prefs/pidginconversationprefs.c
+++ b/pidgin/prefs/pidginconversationprefs.c
@@ -24,7 +24,7 @@
 
 #include <purple.h>
 
-#include <handy.h>
+#include <adwaita.h>
 #include <talkatu.h>
 
 #include "pidginconversationprefs.h"
@@ -32,7 +32,7 @@
 #include "pidginprefsinternal.h"
 
 struct _PidginConversationPrefs {
-	HdyPreferencesPage parent;
+	AdwPreferencesPage parent;
 
 	GtkWidget *show_incoming_formatting;
 	struct {
@@ -48,7 +48,7 @@ struct _PidginConversationPrefs {
 };
 
 G_DEFINE_TYPE(PidginConversationPrefs, pidgin_conversation_prefs,
-              HDY_TYPE_PREFERENCES_PAGE)
+              ADW_TYPE_PREFERENCES_PAGE)
 
 /******************************************************************************
  * Helpers
diff --git a/pidgin/resources/Prefs/conversation.ui b/pidgin/resources/Prefs/conversation.ui
--- a/pidgin/resources/Prefs/conversation.ui
+++ b/pidgin/resources/Prefs/conversation.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"/>
   <requires lib="Talkatu" version="0.0"/>
   <!-- interface-license-type gplv2 -->
   <!-- interface-name Pidgin -->
@@ -39,197 +38,95 @@ along with this program; if not, see <ht
     <property name="page-increment">1</property>
   </object>
   <object class="GtkSizeGroup" id="iface.sg"/>
-  <template class="PidginConversationPrefs" parent="HdyPreferencesPage">
-    <property name="visible">True</property>
-    <property name="can-focus">False</property>
+  <template class="PidginConversationPrefs" 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">Conversations</property>
         <child>
           <object class="GtkBox">
-            <property name="visible">True</property>
-            <property name="can-focus">False</property>
             <property name="margin-start">12</property>
             <property name="orientation">vertical</property>
             <property name="spacing">6</property>
             <child>
               <object class="GtkCheckButton" id="show_incoming_formatting">
                 <property name="label" translatable="yes">Show _formatting on incoming messages</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>
+                <property name="focusable">1</property>
+                <property name="use-underline">1</property>
               </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
-              </packing>
             </child>
             <child>
               <object class="GtkCheckButton" id="im.send_typing">
                 <property name="label" translatable="yes">_Notify buddies that you are typing to them</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>
+                <property name="focusable">1</property>
+                <property name="use-underline">1</property>
               </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">1</property>
-              </packing>
             </child>
             <child>
               <object class="GtkCheckButton" id="use_smooth_scrolling">
                 <property name="label" translatable="yes">Use smooth-scrolling</property>
-                <property name="visible">True</property>
-                <property name="can-focus">True</property>
-                <property name="receives-default">False</property>
-                <property name="draw-indicator">True</property>
+                <property name="focusable">1</property>
               </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">2</property>
-              </packing>
             </child>
             <child>
               <object class="GtkCheckButton" id="win32.blink_im">
                 <property name="label" translatable="yes">F_lash window when IMs are received</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>
+                <property name="focusable">1</property>
+                <property name="use-underline">1</property>
               </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">3</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">
-                    <property name="visible">True</property>
-                    <property name="can-focus">False</property>
                     <property name="label" translatable="yes">Minimum input area height in lines:</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="minimum_entry_lines">
-                    <property name="visible">True</property>
-                    <property name="can-focus">True</property>
+                    <property name="focusable">1</property>
                     <property name="input-purpose">digits</property>
                     <property name="adjustment">minimum_entry_lines.adjustment</property>
-                    <property name="numeric">True</property>
+                    <property name="numeric">1</property>
                   </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">4</property>
-              </packing>
             </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>
+      <object class="AdwPreferencesGroup">
         <property name="title" translatable="yes">Default Formatting</property>
         <child>
           <object class="GtkBox" id="sample_box">
-            <property name="visible">True</property>
-            <property name="can-focus">False</property>
             <property name="margin-start">12</property>
             <property name="orientation">vertical</property>
             <child>
               <object class="TalkatuEditor">
-                <property name="visible">True</property>
-                <property name="can-focus">False</property>
-                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                 <property name="orientation">vertical</property>
                 <child internal-child="send_button">
                   <object class="GtkButton">
-                    <property name="can-focus">False</property>
-                    <property name="receives-default">False</property>
+                    <property name="visible">0</property>
                   </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">0</property>
-                  </packing>
                 </child>
                 <child internal-child="toolbar">
-                  <object class="TalkatuToolbar">
-                    <property name="visible">True</property>
-                    <property name="can-focus">False</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">0</property>
-                  </packing>
+                  <object class="TalkatuToolbar"/>
                 </child>
                 <child internal-child="input">
                   <object class="TalkatuInput" id="format_view">
+                    <property name="buffer">format_buffer</property>
+                    <property name="focusable">1</property>
                     <property name="width-request">450</property>
-                    <property name="visible">True</property>
-                    <property name="can-focus">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <property name="wrap-mode">word</property>
-                    <property name="buffer">format_buffer</property>
                   </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">0</property>
-                  </packing>
                 </child>
               </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
-              </packing>
             </child>
           </object>
         </child>
       </object>
-      <packing>
-        <property name="expand">False</property>
-        <property name="fill">True</property>
-        <property name="position">1</property>
-      </packing>
     </child>
   </template>
 </interface>
