[epiphany/wip/exalm/gtk4] WIP: Port to GTK4




commit 40ec4c7484b7733465f45014f9d94805a9a43360
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Mon Nov 29 12:20:58 2021 +0500

    WIP: Port to GTK4
    
    Left out lib/widgets/ for now as that's a lot of work and I want to port enough
    of the foundation to test it first.
    
    Also left out:
    - lib/ephy-dnd.c - gtk4 dnd api is completely different, this will need a lot of changes
    - lib/ephy-gui.c - ephy_gui_get_current_event() is bad, this will need a rework everywhere
    - lib/ephy-suggestion.c - no libdazzle in gtk4
    
    FIXMEs:
    - embed/ephy-download.c
      - commented out the dialog
        - need to replace the file chooser button
        - unsure about gtk_box_pack_start() replacement
      - event time -> monotonic time
    - embed/ephy-embed.c
      - commented out nautilus floating bar
    - embed/ephy-find-toolbar.c
      - commented out gd tagged entry
      - shortcuts
    - embed/ephy-web-view.c
      - need to backport a leak fix
      - event vfuncs
    - lib/widgets/ephy-file-chooser.c
      - removed preview, need to backport
    - src/ephy-shell.c
      - large parts commented out until the rest of src/ is there
    - src/ephy-tab-view.c
      - dnd

 embed/ephy-about-handler.c                         |  67 ++-
 embed/ephy-download.c                              |  14 +-
 embed/ephy-embed-shell.c                           |  30 +-
 embed/ephy-embed-shell.h                           |   6 +-
 embed/ephy-embed.c                                 |  61 +--
 embed/ephy-find-toolbar.c                          | 126 ++---
 embed/ephy-find-toolbar.h                          |   4 +-
 embed/ephy-reader-handler.c                        |  10 +-
 embed/ephy-web-view.c                              | 179 ++++---
 embed/meson.build                                  |   5 +-
 lib/ephy-file-helpers.c                            |  12 +-
 lib/ephy-file-helpers.h                            |   2 +-
 lib/ephy-flatpak-utils.c                           |   2 +-
 lib/ephy-gui.c                                     |  21 +-
 lib/ephy-notification-container.c                  |  45 +-
 lib/ephy-notification-container.h                  |   4 +-
 lib/ephy-notification.c                            |  22 +-
 lib/ephy-notification.h                            |   4 +-
 lib/meson.build                                    |   6 +-
 lib/widgets/ephy-download-widget.c                 |  31 +-
 lib/widgets/ephy-download-widget.h                 |   4 +-
 lib/widgets/ephy-downloads-popover.c               |  66 +--
 lib/widgets/ephy-downloads-progress-icon.c         |  28 +-
 lib/widgets/ephy-file-chooser.c                    |  15 +-
 lib/widgets/ephy-title-box.c                       |  55 +-
 lib/widgets/ephy-title-box.h                       |   5 +-
 lib/widgets/meson.build                            |  24 +-
 meson.build                                        |  21 +-
 org.gnome.Epiphany.json                            |  10 -
 src/bookmarks/ephy-bookmark-properties.c           | 115 ++---
 src/bookmarks/ephy-bookmark-row.c                  |  10 +-
 src/ephy-action-bar-end.c                          |  47 +-
 src/ephy-action-bar-start.c                        |  43 +-
 src/ephy-action-bar.c                              |   5 +-
 src/ephy-action-bar.h                              |   4 +-
 src/ephy-desktop-utils.c                           |   9 -
 src/ephy-desktop-utils.h                           |   2 -
 src/ephy-firefox-sync-dialog.c                     |  50 +-
 src/ephy-firefox-sync-dialog.h                     |   4 +-
 src/ephy-fullscreen-box.c                          | 181 +++----
 src/ephy-fullscreen-box.h                          |   2 +-
 src/ephy-header-bar.c                              | 103 ++--
 src/ephy-header-bar.h                              |   4 +-
 src/ephy-history-dialog.c                          |  54 +-
 src/ephy-history-dialog.h                          |   4 +-
 src/ephy-link.c                                    |   2 +
 src/ephy-lockdown.c                                |  21 +-
 src/ephy-mouse-gesture-controller.c                |  13 +-
 src/ephy-page-row.c                                |  46 +-
 src/ephy-page-row.h                                |   6 +-
 src/ephy-pages-button.c                            |   2 +-
 src/ephy-pages-popover.c                           |  59 +--
 src/ephy-pages-popover.h                           |   2 +-
 src/ephy-pages-view.c                              |  16 +-
 src/ephy-session.c                                 |  42 +-
 src/ephy-shell.c                                   |  45 +-
 src/ephy-tab-view.c                                | 180 ++++---
 src/ephy-tab-view.h                                |   8 +-
 src/ephy-web-extension-dialog.c                    |  95 ++--
 src/ephy-web-extension-dialog.h                    |   2 +-
 src/ephy-window.c                                  | 562 ++++++++++-----------
 src/ephy-window.h                                  |   7 +-
 src/meson.build                                    |  46 +-
 src/popup-commands.c                               |  13 +-
 src/preferences/ephy-data-view.c                   |  30 +-
 src/preferences/ephy-data-view.h                   |   6 +-
 src/preferences/ephy-lang-row.c                    |  10 +-
 src/preferences/ephy-lang-row.h                    |   4 +-
 src/preferences/ephy-prefs-dialog.c                |  38 +-
 src/preferences/ephy-prefs-dialog.h                |   4 +-
 src/preferences/ephy-search-engine-row.c           |  51 +-
 src/preferences/ephy-search-engine-row.h           |   6 +-
 src/preferences/prefs-appearance-page.c            | 121 ++---
 src/preferences/prefs-appearance-page.h            |   4 +-
 src/preferences/prefs-general-page.c               |   2 +-
 src/preferences/prefs-privacy-page.c               |   4 +-
 src/preferences/prefs-privacy-page.h               |   5 +-
 src/resources/gtk/action-bar-end.ui                |  44 +-
 src/resources/gtk/action-bar-start.ui              |  67 +--
 src/resources/gtk/action-bar.ui                    |  31 +-
 src/resources/gtk/bookmark-properties.ui           |  16 +-
 src/resources/gtk/bookmark-row.ui                  |  11 +-
 src/resources/gtk/data-view.ui                     | 115 ++---
 src/resources/gtk/encoding-row.ui                  |   6 +-
 src/resources/gtk/firefox-sync-dialog.ui           | 284 +++++------
 src/resources/gtk/history-dialog.ui                | 171 ++-----
 src/resources/gtk/lang-row.ui                      |  40 +-
 src/resources/gtk/page-menu-popover.ui             | 482 ++++++------------
 src/resources/gtk/page-row.ui                      | 108 ++--
 src/resources/gtk/pages-button.ui                  |  13 +-
 src/resources/gtk/pages-popover.ui                 |   4 +-
 src/resources/gtk/pages-view.ui                    |  37 +-
 src/resources/gtk/prefs-appearance-page.ui         | 105 ++--
 src/resources/gtk/prefs-dialog.ui                  |  10 +-
 src/resources/gtk/prefs-general-page.ui            |  52 +-
 src/resources/gtk/prefs-privacy-page.ui            |  34 +-
 src/resources/gtk/search-engine-row.ui             |  15 +-
 src/resources/gtk/web-extensions-dialog.ui         |  66 +--
 src/resources/gtk/webapp-additional-urls-dialog.ui |  33 +-
 src/webextension/api/pageaction.c                  |   8 +-
 src/webextension/ephy-web-extension-manager.c      |  90 ++--
 src/window-commands.c                              | 139 +++--
 tests/ephy-embed-shell-test.c                      |   4 +-
 tests/ephy-web-view-test.c                         |   6 +-
 tests/meson.build                                  |  38 +-
 105 files changed, 2024 insertions(+), 2973 deletions(-)
---
diff --git a/embed/ephy-about-handler.c b/embed/ephy-about-handler.c
index fde68cb1f..1bfd8deff 100644
--- a/embed/ephy-about-handler.c
+++ b/embed/ephy-about-handler.c
@@ -163,14 +163,26 @@ ephy_about_handler_handle_about (EphyAboutHandler       *handler,
 {
   char *data;
   char *version;
-  GtkIconInfo *icon_info;
+  g_autofree char *path = NULL;
+  GtkIconTheme *icon_theme;
+  g_autoptr (GtkIconPaintable) paintable = NULL;
 
   version = g_strdup_printf (_("Version %s"), VERSION);
 
-  icon_info = gtk_icon_theme_lookup_icon (gtk_icon_theme_get_default (),
+  icon_theme = gtk_icon_theme_get_for_display (gdk_display_get_default ());
+  paintable = gtk_icon_theme_lookup_icon (icon_theme,
                                           APPLICATION_ID,
+                                          NULL,
                                           256,
-                                          GTK_ICON_LOOKUP_FORCE_SVG);
+                                          1,
+                                          GTK_TEXT_DIR_LTR,
+                                          GTK_ICON_LOOKUP_FORCE_REGULAR);
+
+  if (paintable) {
+    g_autoptr (GFile) file = gtk_icon_paintable_get_file (paintable);
+
+    path = g_file_get_path (file);
+  }
 
   data = g_strdup_printf ("<html><head><title>%s</title>"
                           "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"
@@ -187,7 +199,7 @@ ephy_about_handler_handle_about (EphyAboutHandler       *handler,
                           "</table>"
                           "</div></div></body></html>",
                           _("About Web"),
-                          icon_info ? gtk_icon_info_get_filename (icon_info) : "",
+                          path ? path : "",
 #if !TECH_PREVIEW
                           _("Web"),
 #else
@@ -197,8 +209,6 @@ ephy_about_handler_handle_about (EphyAboutHandler       *handler,
                           _("A simple, clean, beautiful view of the web"),
                           "WebKitGTK", webkit_get_major_version (), webkit_get_minor_version (), 
webkit_get_micro_version ());
   g_free (version);
-  if (icon_info)
-    g_object_unref (icon_info);
 
   ephy_about_handler_finish_request (request, data, -1);
 
@@ -280,8 +290,9 @@ handle_applications_finished_cb (EphyAboutHandler       *handler,
 
     g_string_append (data_str, "</table></div></body></html>");
   } else {
-    g_autoptr (GtkIconInfo) icon_info = NULL;
-    g_autofree gchar *icon = g_strconcat ("application-x-addon-symbolic", NULL);
+    GtkIconTheme *icon_theme;
+    g_autoptr (GtkIconPaintable) paintable = NULL;
+    g_autofree char *path = NULL;
 
     g_string_append_printf (data_str, "<html><head><title>%s</title>"
                             "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"
@@ -289,10 +300,21 @@ handle_applications_finished_cb (EphyAboutHandler       *handler,
                             "</head><body class=\"applications-body\">",
                             _("Applications"));
 
-    icon_info = gtk_icon_theme_lookup_icon (gtk_icon_theme_get_default (),
-                                            icon,
+    icon_theme = gtk_icon_theme_get_for_display (gdk_display_get_default ());
+    paintable = gtk_icon_theme_lookup_icon (icon_theme,
+                                            "application-x-addon-symbolic",
+                                            NULL,
                                             128,
+                                            1,
+                                            GTK_TEXT_DIR_LTR,
                                             0);
+
+    if (paintable) {
+      g_autoptr (GFile) file = gtk_icon_paintable_get_file (paintable);
+
+      path = g_file_get_path (file);
+    }
+
     g_string_append_printf (data_str,
                             "  <div id=\"overview\" class=\"overview-empty\">\n"
                             "    <img src=\"file://%s\"/>\n"
@@ -300,7 +322,7 @@ handle_applications_finished_cb (EphyAboutHandler       *handler,
                             "    <div><p>%s</p></div>\n"
                             "  </div>\n"
                             "</body></html>\n",
-                            icon_info ? gtk_icon_info_get_filename (icon_info) : "",
+                            path ? path : "",
                             /* Displayed when opening applications without any installed web apps. */
                             _("Applications"), _("You can add your favorite website by clicking <b>Install 
Site as Web Application…</b> within the page menu."));
   }
@@ -378,13 +400,26 @@ history_service_query_urls_cb (EphyHistoryService     *history,
   list_length = g_list_length (urls);
 
   if (list_length == 0 || !success) {
-    GtkIconInfo *icon_info;
-    g_autofree gchar *icon = g_strconcat (APPLICATION_ID, "-symbolic", NULL);
+    GtkIconTheme *icon_theme;
+    g_autoptr (GtkIconPaintable) paintable = NULL;
+    g_autofree char *path = NULL;
+    g_autofree char *icon = g_strconcat (APPLICATION_ID, "-symbolic", NULL);
 
-    icon_info = gtk_icon_theme_lookup_icon (gtk_icon_theme_get_default (),
+    icon_theme = gtk_icon_theme_get_for_display (gdk_display_get_default ());
+    paintable = gtk_icon_theme_lookup_icon (icon_theme,
                                             icon,
+                                            NULL,
                                             128,
+                                            1,
+                                            GTK_TEXT_DIR_LTR,
                                             0);
+
+    if (paintable) {
+      g_autoptr (GFile) file = gtk_icon_paintable_get_file (paintable);
+
+      path = g_file_get_path (file);
+    }
+
     g_string_append_printf (data_str,
                             "  <div id=\"overview\" class=\"overview-empty\">\n"
                             "    <img src=\"file://%s\"/>\n"
@@ -392,11 +427,9 @@ history_service_query_urls_cb (EphyHistoryService     *history,
                             "    <div><p>%s</p></div>\n"
                             "  </div>\n"
                             "</body></html>\n",
-                            icon_info ? gtk_icon_info_get_filename (icon_info) : "",
+                            path ? path : "",
                             /* Displayed when opening the browser for the first time. */
                             _("Welcome to Web"), _("Start browsing and your most-visited sites will appear 
here."));
-    if (icon_info)
-      g_object_unref (icon_info);
     goto out;
   }
 
diff --git a/embed/ephy-download.c b/embed/ephy-download.c
index 6f982ead2..ece2ba5b8 100644
--- a/embed/ephy-download.c
+++ b/embed/ephy-download.c
@@ -621,7 +621,7 @@ ephy_download_init (EphyDownload *download)
 
   download->action = EPHY_DOWNLOAD_ACTION_NONE;
 
-  download->start_time = gtk_get_current_event_time ();
+  download->start_time = g_get_monotonic_time (); // FIXME not sure if this is correct
 
   download->show_notification = TRUE;
 }
@@ -793,6 +793,7 @@ typedef struct {
   GtkFileChooser *file_chooser;
 } SuggestedFilenameData;
 
+#if 0
 static void
 filename_suggested_dialog_cb (GtkDialog             *dialog,
                               GtkResponseType        response,
@@ -815,7 +816,7 @@ filename_suggested_dialog_cb (GtkDialog             *dialog,
     ephy_download_cancel (data->download);
   }
 
-  gtk_widget_destroy (GTK_WIDGET (dialog));
+  gtk_window_destroy (GTK_WINDOW (dialog));
 
   g_free (data->suggested_filename);
   g_free (data);
@@ -885,8 +886,6 @@ filename_suggested_cb (EphyDownload *download,
   gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (filechooser), g_settings_get_string 
(EPHY_SETTINGS_WEB, EPHY_PREFS_WEB_LAST_DOWNLOAD_DIRECTORY));
   gtk_box_pack_start (GTK_BOX (box), filechooser, FALSE, TRUE, 0);
 
-  gtk_widget_show_all (box);
-
   data = g_new0 (SuggestedFilenameData, 1);
   data->download = download;
   data->webkit_download = webkit_download;
@@ -897,6 +896,7 @@ filename_suggested_cb (EphyDownload *download,
                     G_CALLBACK (filename_suggested_dialog_cb), data);
   gtk_window_present (GTK_WINDOW (dialog));
 }
+#endif
 
 EphyDownload *
 ephy_download_new_internal (WebKitDownload *download)
@@ -946,9 +946,9 @@ ephy_download_new (WebKitDownload *download)
                            ephy_download, 0);
 
   if (!ephy_is_running_inside_flatpak () && g_settings_get_boolean (EPHY_SETTINGS_WEB, 
EPHY_PREFS_WEB_ASK_ON_DOWNLOAD)) {
-    g_signal_connect (ephy_download, "filename-suggested",
-                      G_CALLBACK (filename_suggested_cb),
-                      NULL);
+//    g_signal_connect (ephy_download, "filename-suggested",
+//                      G_CALLBACK (filename_suggested_cb),
+//                      NULL);
   }
 
   return ephy_download;
diff --git a/embed/ephy-embed-shell.c b/embed/ephy-embed-shell.c
index 189370bd8..310dc830b 100644
--- a/embed/ephy-embed-shell.c
+++ b/embed/ephy-embed-shell.c
@@ -97,7 +97,7 @@ static EphyEmbedShell *embed_shell = NULL;
 
 static void ephy_embed_shell_tabs_catalog_iface_init (EphyTabsCatalogInterface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (EphyEmbedShell, ephy_embed_shell, DZL_TYPE_APPLICATION,
+G_DEFINE_TYPE_WITH_CODE (EphyEmbedShell, ephy_embed_shell, ADW_TYPE_APPLICATION,
                          G_ADD_PRIVATE (EphyEmbedShell)
                          G_IMPLEMENT_INTERFACE (EPHY_TYPE_TABS_CATALOG,
                                                 ephy_embed_shell_tabs_catalog_iface_init))
@@ -888,27 +888,6 @@ enable_itp_setting_changed_cb (GSettings      *settings,
                                                                        EPHY_PREFS_WEB_ENABLE_ITP));
 }
 
-static void
-update_system_scrollbars (EphyEmbedShell *shell)
-{
-  EphyEmbedShellPrivate *priv = ephy_embed_shell_get_instance_private (shell);
-  const char *theme_name;
-  gboolean enabled;
-
-  g_object_get (gtk_settings_get_default (),
-                "gtk-theme_name", &theme_name,
-                NULL);
-
-  /* Don't enable system scrollbars for Adwaita */
-  enabled = g_strcmp0 (theme_name, "Adwaita") &&
-            g_strcmp0 (theme_name, "Adwaita-dark") &&
-            g_strcmp0 (theme_name, "HighContrast") &&
-            g_strcmp0 (theme_name, "HighContrastInverse");
-
-  webkit_web_context_set_use_system_appearance_for_scrollbars (priv->web_context,
-                                                               enabled);
-}
-
 static void
 ephy_embed_shell_startup (GApplication *application)
 {
@@ -1001,13 +980,6 @@ ephy_embed_shell_startup (GApplication *application)
 
   g_signal_connect_object (EPHY_SETTINGS_WEB, "changed::enable-itp",
                            G_CALLBACK (enable_itp_setting_changed_cb), shell, 0);
-
-  update_system_scrollbars (shell);
-
-  g_signal_connect_swapped (gtk_settings_get_default (),
-                            "notify::gtk-theme-name",
-                            G_CALLBACK (update_system_scrollbars),
-                            shell);
 }
 
 static void
diff --git a/embed/ephy-embed-shell.h b/embed/ephy-embed-shell.h
index 9464d42d4..2815c19bd 100644
--- a/embed/ephy-embed-shell.h
+++ b/embed/ephy-embed-shell.h
@@ -21,7 +21,7 @@
 
 #pragma once
 
-#include <dazzle.h>
+#include <adwaita.h>
 #include <webkit2/webkit2.h>
 
 #include "ephy-downloads-manager.h"
@@ -38,7 +38,7 @@ typedef struct _EphyFiltersManager EphyFiltersManager;
 
 #define EPHY_TYPE_EMBED_SHELL (ephy_embed_shell_get_type ())
 
-G_DECLARE_DERIVABLE_TYPE (EphyEmbedShell, ephy_embed_shell, EPHY, EMBED_SHELL, DzlApplication)
+G_DECLARE_DERIVABLE_TYPE (EphyEmbedShell, ephy_embed_shell, EPHY, EMBED_SHELL, AdwApplication)
 
 typedef enum
 {
@@ -54,7 +54,7 @@ typedef enum
 
 struct _EphyEmbedShellClass
 {
-  DzlApplicationClass parent_class;
+  AdwApplicationClass parent_class;
 
   void    (* restored_window)  (EphyEmbedShell *shell);
 };
diff --git a/embed/ephy-embed.c b/embed/ephy-embed.c
index 3d81f8783..f1b2ac5d7 100644
--- a/embed/ephy-embed.c
+++ b/embed/ephy-embed.c
@@ -35,7 +35,7 @@
 #include "ephy-settings.h"
 #include "ephy-string.h"
 #include "ephy-web-view.h"
-#include "nautilus-floating-bar.h"
+//#include "nautilus-floating-bar.h"
 
 #include <glib/gi18n.h>
 #include <webkit2/webkit2.h>
@@ -158,13 +158,13 @@ static void
 ephy_embed_set_statusbar_label (EphyEmbed  *embed,
                                 const char *label)
 {
-  nautilus_floating_bar_set_primary_label (NAUTILUS_FLOATING_BAR (embed->floating_bar), label);
+/*  nautilus_floating_bar_set_primary_label (NAUTILUS_FLOATING_BAR (embed->floating_bar), label);
 
   if (label == NULL || label[0] == '\0') {
     gtk_widget_hide (embed->floating_bar);
     gtk_widget_set_halign (embed->floating_bar, GTK_ALIGN_START);
   } else
-    gtk_widget_show (embed->floating_bar);
+    gtk_widget_show (embed->floating_bar);*/
 }
 
 static void
@@ -245,7 +245,7 @@ ephy_embed_destroy_top_widgets (EphyEmbed *embed)
 
   for (iter = embed->destroy_on_transition_list; iter; iter = iter->next) {
     g_signal_handlers_disconnect_by_func (iter->data, remove_from_destroy_list_cb, embed);
-    gtk_widget_destroy (GTK_WIDGET (iter->data));
+    gtk_box_remove (embed->top_widgets_vbox, GTK_WIDGET (iter->data));
   }
 
   embed->destroy_on_transition_list = NULL;
@@ -310,7 +310,7 @@ load_changed_cb (WebKitWebView   *web_view,
   }
 }
 
-static void
+static gboolean
 ephy_embed_grab_focus (GtkWidget *widget)
 {
   GtkWidget *child;
@@ -318,7 +318,9 @@ ephy_embed_grab_focus (GtkWidget *widget)
   child = GTK_WIDGET (ephy_embed_get_web_view (EPHY_EMBED (widget)));
 
   if (child)
-    gtk_widget_grab_focus (child);
+    return gtk_widget_grab_focus (child);
+
+  return FALSE;
 }
 
 
@@ -685,7 +687,7 @@ ephy_embed_mapped_cb (GtkWidget *widget,
 {
   ephy_embed_maybe_load_delayed_request ((EphyEmbed *)widget);
 }
-
+/* FIXME
 static gboolean
 on_enter_notify_event (GtkWidget        *widget,
                        GdkEventCrossing *event,
@@ -705,7 +707,7 @@ on_enter_notify_event (GtkWidget        *widget,
 
   return GDK_EVENT_PROPAGATE;
 }
-
+*/
 static void
 ephy_embed_constructed (GObject *object)
 {
@@ -722,33 +724,30 @@ ephy_embed_constructed (GObject *object)
   /* Skeleton */
   embed->overlay = gtk_overlay_new ();
 
-  gtk_widget_add_events (embed->overlay,
-                         GDK_ENTER_NOTIFY_MASK |
-                         GDK_LEAVE_NOTIFY_MASK);
   gtk_widget_set_vexpand (embed->overlay, TRUE);
-  gtk_container_add (GTK_CONTAINER (embed->overlay), GTK_WIDGET (embed->web_view));
+  gtk_overlay_set_child (GTK_OVERLAY (embed->overlay), GTK_WIDGET (embed->web_view));
 
   /* Floating message popup for fullscreen mode. */
   embed->fullscreen_message_label = gtk_label_new (NULL);
   gtk_widget_set_name (embed->fullscreen_message_label, "fullscreen-popup");
   gtk_widget_set_halign (embed->fullscreen_message_label, GTK_ALIGN_CENTER);
   gtk_widget_set_valign (embed->fullscreen_message_label, GTK_ALIGN_CENTER);
-  gtk_widget_set_no_show_all (embed->fullscreen_message_label, TRUE);
+  gtk_widget_hide (embed->fullscreen_message_label);
   gtk_overlay_add_overlay (GTK_OVERLAY (embed->overlay), embed->fullscreen_message_label);
   ephy_embed_set_fullscreen_message (embed, FALSE);
 
   /* statusbar is hidden by default */
-  embed->floating_bar = nautilus_floating_bar_new ();
+/*  embed->floating_bar = nautilus_floating_bar_new ();
   gtk_widget_set_halign (embed->floating_bar, GTK_ALIGN_START);
   gtk_widget_set_valign (embed->floating_bar, GTK_ALIGN_END);
-  gtk_widget_set_no_show_all (embed->floating_bar, TRUE);
-  g_signal_connect_object (embed->overlay, "enter-notify-event", G_CALLBACK (on_enter_notify_event), embed, 
0);
+  gtk_widget_hide (embed->floating_bar);
+// FIXME  g_signal_connect_object (embed->overlay, "enter-notify-event", G_CALLBACK (on_enter_notify_event), 
embed, 0);
 
-  gtk_overlay_add_overlay (GTK_OVERLAY (embed->overlay), embed->floating_bar);
+  gtk_overlay_add_overlay (GTK_OVERLAY (embed->overlay), embed->floating_bar);*/
 
   if (embed->progress_bar_enabled) {
     embed->progress = gtk_progress_bar_new ();
-    gtk_style_context_add_class (gtk_widget_get_style_context (embed->progress), "osd");
+    gtk_widget_add_css_class (embed->progress, "osd");
     gtk_widget_set_halign (embed->progress, GTK_ALIGN_FILL);
     gtk_widget_set_valign (embed->progress, GTK_ALIGN_START);
     gtk_overlay_add_overlay (GTK_OVERLAY (embed->overlay), embed->progress);
@@ -759,22 +758,14 @@ ephy_embed_constructed (GObject *object)
                     G_CALLBACK (ephy_embed_find_toolbar_close_cb),
                     embed);
 
-  gtk_box_pack_start (GTK_BOX (embed),
-                      GTK_WIDGET (embed->find_toolbar),
-                      FALSE, TRUE, 0);
+  gtk_box_append (GTK_BOX (embed), GTK_WIDGET (embed->find_toolbar));
 
   if (embed->progress_bar_enabled)
     embed->progress_update_handler_id = g_signal_connect (embed->web_view, "notify::estimated-load-progress",
                                                           G_CALLBACK (progress_update), object);
 
-  gtk_box_pack_start (GTK_BOX (embed),
-                      GTK_WIDGET (embed->top_widgets_vbox),
-                      FALSE, TRUE, 0);
-  gtk_box_pack_start (GTK_BOX (embed), embed->overlay, FALSE, TRUE, 0);
-
-  gtk_widget_show (GTK_WIDGET (embed->top_widgets_vbox));
-  gtk_widget_show (GTK_WIDGET (embed->web_view));
-  gtk_widget_show_all (embed->overlay);
+  gtk_box_append (GTK_BOX (embed), GTK_WIDGET (embed->top_widgets_vbox));
+  gtk_box_append (GTK_BOX (embed), GTK_WIDGET (embed->overlay));
 
   g_object_connect (embed->web_view,
                     "signal::notify::title", G_CALLBACK (web_view_title_changed_cb), embed,
@@ -805,11 +796,9 @@ ephy_embed_constructed (GObject *object)
     gtk_info_bar_set_message_type (GTK_INFO_BAR (info_bar), GTK_MESSAGE_INFO);
     /* Translators: this means WebDriver control. */
     label = gtk_label_new (_("Web is being controlled by automation."));
-    gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (info_bar))), label, FALSE, 
TRUE, 0);
-    gtk_widget_show (label);
+    gtk_info_bar_add_child (GTK_INFO_BAR (info_bar), label);
 
     ephy_embed_add_top_widget (embed, info_bar, EPHY_EMBED_TOP_WIDGET_POLICY_RETAIN_ON_TRANSITION);
-    gtk_widget_show (info_bar);
   }
 }
 
@@ -883,8 +872,7 @@ ephy_embed_add_top_widget (EphyEmbed                *embed,
     g_signal_connect (widget, "destroy", G_CALLBACK (remove_from_destroy_list_cb), embed);
   }
 
-  gtk_box_pack_end (embed->top_widgets_vbox,
-                    GTK_WIDGET (widget), FALSE, TRUE, 0);
+  gtk_box_prepend (embed->top_widgets_vbox, widget);
 }
 
 /**
@@ -910,8 +898,7 @@ ephy_embed_remove_top_widget (EphyEmbed *embed,
     embed->destroy_on_transition_list = list;
   }
 
-  gtk_container_remove (GTK_CONTAINER (embed->top_widgets_vbox),
-                        GTK_WIDGET (widget));
+  gtk_box_remove (embed->top_widgets_vbox, widget);
 }
 
 /**
@@ -1005,6 +992,6 @@ ephy_embed_detach_notification_container (EphyEmbed *embed)
      * notification widget, removing it from the container will destroy the
      * singleton. To prevent this, add a reference to it before removing it
      * from the container. */
-    gtk_container_remove (GTK_CONTAINER (embed->overlay), g_object_ref (GTK_WIDGET (container)));
+    gtk_overlay_remove_overlay (GTK_OVERLAY (embed->overlay), g_object_ref (GTK_WIDGET (container)));
   }
 }
diff --git a/embed/ephy-find-toolbar.c b/embed/ephy-find-toolbar.c
index 45a71b8e0..2145be3f6 100644
--- a/embed/ephy-find-toolbar.c
+++ b/embed/ephy-find-toolbar.c
@@ -23,25 +23,26 @@
 #include "ephy-find-toolbar.h"
 
 #include "ephy-debug.h"
-#include "contrib/gd-tagged-entry.h"
+//#include "contrib/gd-tagged-entry.h"
 
 #include <math.h>
 
+#include <adwaita.h>
 #include <gdk/gdkkeysyms.h>
 #include <glib/gi18n.h>
-#include <handy.h>
 #include <string.h>
 #include <webkit2/webkit2.h>
 
 struct _EphyFindToolbar {
-  GtkBin parent_instance;
+  AdwBin parent_instance;
 
   GCancellable *cancellable;
   WebKitWebView *web_view;
   WebKitFindController *controller;
   GtkWidget *search_bar;
-  GdTaggedEntry *entry;
-  GdTaggedEntryTag *entry_tag;
+  GtkWidget *entry;
+//  GdTaggedEntry *entry;
+//  GdTaggedEntryTag *entry_tag;
   GtkWidget *next;
   GtkWidget *prev;
   guint num_matches;
@@ -53,7 +54,7 @@ struct _EphyFindToolbar {
   gboolean typing_ahead;
 };
 
-G_DEFINE_TYPE (EphyFindToolbar, ephy_find_toolbar, GTK_TYPE_BIN)
+G_DEFINE_TYPE (EphyFindToolbar, ephy_find_toolbar, ADW_TYPE_BIN)
 
 enum {
   PROP_0,
@@ -88,12 +89,12 @@ static void ephy_find_toolbar_set_web_view (EphyFindToolbar *toolbar,
 
 static void
 update_search_tag (EphyFindToolbar *toolbar)
-{
+{/*
   g_autofree gchar *label = NULL;
 
   label = g_strdup_printf ("%u/%u", toolbar->current_match, toolbar->num_matches);
   gd_tagged_entry_tag_set_label (toolbar->entry_tag, label);
-  gd_tagged_entry_add_tag (toolbar->entry, toolbar->entry_tag);
+  gd_tagged_entry_add_tag (toolbar->entry, toolbar->entry_tag);*/
 }
 
 static void
@@ -141,7 +142,7 @@ clear_status (EphyFindToolbar *toolbar)
                 "primary-icon-name", "edit-find-symbolic",
                 NULL);
 
-  gd_tagged_entry_remove_tag (toolbar->entry, toolbar->entry_tag);
+//  gd_tagged_entry_remove_tag (toolbar->entry, toolbar->entry_tag);
 
   gtk_widget_set_sensitive (toolbar->prev, FALSE);
   gtk_widget_set_sensitive (toolbar->next, FALSE);
@@ -213,7 +214,7 @@ static void
 update_find_string (EphyFindToolbar *toolbar)
 {
   g_free (toolbar->find_string);
-  toolbar->find_string = g_strdup (gtk_entry_get_text (GTK_ENTRY (toolbar->entry)));
+  toolbar->find_string = g_strdup (gtk_editable_get_text (GTK_EDITABLE (toolbar->entry)));
 
   g_clear_handle_id (&toolbar->find_source_id, g_source_remove);
 
@@ -232,7 +233,7 @@ ephy_find_toolbar_activate_link (EphyFindToolbar *toolbar,
 {
   return FALSE;
 }
-
+#if 0 // FIXME
 static gboolean
 entry_key_press_event_cb (GtkEntry        *entry,
                           GdkEventKey     *event,
@@ -275,6 +276,7 @@ entry_key_press_event_cb (GtkEntry        *entry,
 
   return handled;
 }
+#endif
 
 static void
 entry_activate_cb (GtkWidget       *entry,
@@ -287,47 +289,23 @@ entry_activate_cb (GtkWidget       *entry,
   }
 }
 
-static void
+static gboolean
 ephy_find_toolbar_grab_focus (GtkWidget *widget)
 {
   EphyFindToolbar *toolbar = EPHY_FIND_TOOLBAR (widget);
 
-  gtk_widget_grab_focus (GTK_WIDGET (toolbar->entry));
-}
-
-static gboolean
-ephy_find_toolbar_draw (GtkWidget *widget,
-                        cairo_t   *cr)
-{
-  GtkStyleContext *context;
-
-  context = gtk_widget_get_style_context (widget);
-
-  gtk_style_context_save (context);
-  gtk_style_context_set_state (context, gtk_widget_get_state_flags (widget));
-
-  gtk_render_background (context, cr, 0, 0,
-                         gtk_widget_get_allocated_width (widget),
-                         gtk_widget_get_allocated_height (widget));
-
-  gtk_render_frame (context, cr, 0, 0,
-                    gtk_widget_get_allocated_width (widget),
-                    gtk_widget_get_allocated_height (widget));
-
-  gtk_style_context_restore (context);
-
-  return GTK_WIDGET_CLASS (ephy_find_toolbar_parent_class)->draw (widget, cr);
+  return gtk_widget_grab_focus (GTK_WIDGET (toolbar->entry));
 }
 
 static void
-search_entry_clear_cb (GtkEntry *entry,
-                       gpointer  user_data)
+search_entry_clear_cb (GtkEditable *entry,
+                       gpointer     user_data)
 {
-  gtk_entry_set_text (entry, "");
+  gtk_editable_set_text (entry, "");
 }
 
 static void
-search_entry_changed_cb (GtkEntry        *entry,
+search_entry_changed_cb (GtkEditable     *entry,
                          EphyFindToolbar *toolbar)
 {
   const char *str;
@@ -336,7 +314,7 @@ search_entry_changed_cb (GtkEntry        *entry,
   gboolean primary_active = FALSE;
   gboolean secondary_active = FALSE;
 
-  str = gtk_entry_get_text (entry);
+  str = gtk_editable_get_text (entry);
 
   if (str == NULL || *str == '\0') {
     primary_icon_name = "edit-find-symbolic";
@@ -363,7 +341,7 @@ ephy_find_toolbar_load_changed_cb (WebKitWebView   *web_view,
                                    EphyFindToolbar *toolbar)
 {
   if (load_event == WEBKIT_LOAD_STARTED &&
-      hdy_search_bar_get_search_mode (HDY_SEARCH_BAR (toolbar->search_bar))) {
+      gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (toolbar->search_bar))) {
     ephy_find_toolbar_close (toolbar);
   }
 }
@@ -374,46 +352,49 @@ ephy_find_toolbar_init (EphyFindToolbar *toolbar)
   GtkWidget *clamp;
   GtkWidget *box;
 
-  toolbar->search_bar = hdy_search_bar_new ();
-  gtk_container_add (GTK_CONTAINER (toolbar), toolbar->search_bar);
+  toolbar->search_bar = gtk_search_bar_new ();
+  adw_bin_set_child (ADW_BIN (toolbar), toolbar->search_bar);
 
-  clamp = GTK_WIDGET (hdy_clamp_new ());
-  hdy_clamp_set_maximum_size (HDY_CLAMP (clamp), 400);
-  hdy_clamp_set_tightening_threshold (HDY_CLAMP (clamp), 300);
-  gtk_container_add (GTK_CONTAINER (toolbar->search_bar), clamp);
+  clamp = GTK_WIDGET (adw_clamp_new ());
+  gtk_widget_set_hexpand (clamp, TRUE);
+  adw_clamp_set_maximum_size (ADW_CLAMP (clamp), 400);
+  adw_clamp_set_tightening_threshold (ADW_CLAMP (clamp), 300);
+  gtk_search_bar_set_child (GTK_SEARCH_BAR (toolbar->search_bar), clamp);
 
   box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
-  gtk_style_context_add_class (gtk_widget_get_style_context (box), "linked");
-  gtk_container_add (GTK_CONTAINER (clamp), box);
+  gtk_widget_add_css_class (box, "linked");
+  adw_clamp_set_child (ADW_CLAMP (clamp), box);
 
-  toolbar->entry = gd_tagged_entry_new ();
-  toolbar->entry_tag = gd_tagged_entry_tag_new ("");
-  gd_tagged_entry_tag_set_style (toolbar->entry_tag, "search-entry-occurrences-tag");
-  gd_tagged_entry_tag_set_has_close_button (toolbar->entry_tag, FALSE);
+  // FIXME tagged entry
+  toolbar->entry = gtk_entry_new ();
+//  toolbar->entry = gd_tagged_entry_new ();
+//  toolbar->entry_tag = gd_tagged_entry_tag_new ("");
+//  gd_tagged_entry_tag_set_style (toolbar->entry_tag, "search-entry-occurrences-tag");
+//  gd_tagged_entry_tag_set_has_close_button (toolbar->entry_tag, FALSE);
 
   gtk_widget_set_hexpand (GTK_WIDGET (toolbar->entry), TRUE);
   gtk_entry_set_placeholder_text (GTK_ENTRY (toolbar->entry), _("Type to search…"));
-  gtk_container_add (GTK_CONTAINER (box), GTK_WIDGET (toolbar->entry));
+  gtk_box_append (GTK_BOX (box), GTK_WIDGET (toolbar->entry));
 
   /* Prev */
-  toolbar->prev = gtk_button_new_from_icon_name ("go-up-symbolic", GTK_ICON_SIZE_MENU);
+  toolbar->prev = gtk_button_new_from_icon_name ("go-up-symbolic");
   gtk_widget_set_tooltip_text (toolbar->prev,
                                _("Find previous occurrence of the search string"));
-  gtk_container_add (GTK_CONTAINER (box), toolbar->prev);
+  gtk_box_append (GTK_BOX (box), toolbar->prev);
   gtk_widget_set_sensitive (toolbar->prev, FALSE);
 
   /* Next */
-  toolbar->next = gtk_button_new_from_icon_name ("go-down-symbolic", GTK_ICON_SIZE_MENU);
+  toolbar->next = gtk_button_new_from_icon_name ("go-down-symbolic");
   gtk_widget_set_tooltip_text (toolbar->next,
                                _("Find next occurrence of the search string"));
-  gtk_container_add (GTK_CONTAINER (box), toolbar->next);
+  gtk_box_append (GTK_BOX (box), toolbar->next);
   gtk_widget_set_sensitive (toolbar->next, FALSE);
 
   /* connect signals */
   g_signal_connect (toolbar->entry, "icon-release",
                     G_CALLBACK (search_entry_clear_cb), toolbar);
-  g_signal_connect (toolbar->entry, "key-press-event",
-                    G_CALLBACK (entry_key_press_event_cb), toolbar);
+//  g_signal_connect (toolbar->entry, "key-press-event",
+//                    G_CALLBACK (entry_key_press_event_cb), toolbar);
   g_signal_connect_after (toolbar->entry, "changed",
                           G_CALLBACK (search_entry_changed_cb), toolbar);
   g_signal_connect (toolbar->entry, "activate",
@@ -422,14 +403,12 @@ ephy_find_toolbar_init (EphyFindToolbar *toolbar)
                             G_CALLBACK (ephy_find_toolbar_find_next), toolbar);
   g_signal_connect_swapped (toolbar->prev, "clicked",
                             G_CALLBACK (ephy_find_toolbar_find_previous), toolbar);
-  hdy_search_bar_connect_entry (HDY_SEARCH_BAR (toolbar->search_bar),
-                                GTK_ENTRY (toolbar->entry));
+  gtk_search_bar_connect_entry (GTK_SEARCH_BAR (toolbar->search_bar),
+                                GTK_EDITABLE (toolbar->entry));
 
-  search_entry_changed_cb (GTK_ENTRY (toolbar->entry), toolbar);
+  search_entry_changed_cb (GTK_EDITABLE (toolbar->entry), toolbar);
 
   toolbar->cancellable = g_cancellable_new ();
-
-  gtk_widget_show_all (GTK_WIDGET (toolbar));
 }
 
 static void
@@ -506,7 +485,6 @@ ephy_find_toolbar_class_init (EphyFindToolbarClass *klass)
   object_class->get_property = ephy_find_toolbar_get_property;
   object_class->set_property = ephy_find_toolbar_set_property;
 
-  widget_class->draw = ephy_find_toolbar_draw;
   widget_class->grab_focus = ephy_find_toolbar_grab_focus;
 
   signals[CLOSE] =
@@ -539,7 +517,7 @@ ephy_find_toolbar_new (WebKitWebView *web_view)
 const char *
 ephy_find_toolbar_get_text (EphyFindToolbar *toolbar)
 {
-  return gtk_entry_get_text (GTK_ENTRY (toolbar->entry));
+  return gtk_editable_get_text (GTK_EDITABLE (toolbar->entry));
 }
 
 static void
@@ -639,7 +617,7 @@ ephy_find_toolbar_selection_async (GObject      *source_object,
     if (exception) {
       g_warning ("Error running javascript: %s", jsc_exception_get_message (exception));
     } else if (strlen (str_value)) {
-      gtk_entry_set_text (GTK_ENTRY (toolbar->entry), str_value);
+      gtk_editable_set_text (GTK_EDITABLE (toolbar->entry), str_value);
       gtk_editable_select_region (GTK_EDITABLE (toolbar->entry), 0, -1);
     }
   }
@@ -659,15 +637,15 @@ ephy_find_toolbar_open (EphyFindToolbar *toolbar,
 
   gtk_editable_select_region (GTK_EDITABLE (toolbar->entry), 0, -1);
 
-  hdy_search_bar_set_search_mode (HDY_SEARCH_BAR (toolbar->search_bar), TRUE);
-  hdy_search_bar_set_show_close_button (HDY_SEARCH_BAR (toolbar->search_bar), TRUE);
+  gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (toolbar->search_bar), TRUE);
+  gtk_search_bar_set_show_close_button (GTK_SEARCH_BAR (toolbar->search_bar), TRUE);
   gtk_widget_grab_focus (GTK_WIDGET (toolbar->entry));
 }
 
 void
 ephy_find_toolbar_close (EphyFindToolbar *toolbar)
 {
-  hdy_search_bar_set_search_mode (HDY_SEARCH_BAR (toolbar->search_bar), FALSE);
+  gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (toolbar->search_bar), FALSE);
 
   if (toolbar->web_view == NULL) return;
 
@@ -677,7 +655,7 @@ ephy_find_toolbar_close (EphyFindToolbar *toolbar)
 void
 ephy_find_toolbar_request_close (EphyFindToolbar *toolbar)
 {
-  if (hdy_search_bar_get_search_mode (HDY_SEARCH_BAR (toolbar->search_bar))) {
+  if (gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (toolbar->search_bar))) {
     g_signal_emit (toolbar, signals[CLOSE], 0);
   }
 }
diff --git a/embed/ephy-find-toolbar.h b/embed/ephy-find-toolbar.h
index 829c6355d..7fabe3073 100644
--- a/embed/ephy-find-toolbar.h
+++ b/embed/ephy-find-toolbar.h
@@ -21,7 +21,7 @@
 
 #pragma once
 
-#include <gtk/gtk.h>
+#include <adwaita.h>
 
 #include "ephy-web-view.h"
 
@@ -29,7 +29,7 @@ G_BEGIN_DECLS
 
 #define EPHY_TYPE_FIND_TOOLBAR (ephy_find_toolbar_get_type ())
 
-G_DECLARE_FINAL_TYPE (EphyFindToolbar, ephy_find_toolbar, EPHY, FIND_TOOLBAR, GtkBin)
+G_DECLARE_FINAL_TYPE (EphyFindToolbar, ephy_find_toolbar, EPHY, FIND_TOOLBAR, AdwBin)
 
 EphyFindToolbar *ephy_find_toolbar_new           (WebKitWebView *web_view);
 
diff --git a/embed/ephy-reader-handler.c b/embed/ephy-reader-handler.c
index 25adf90cb..98d81c5e8 100644
--- a/embed/ephy-reader-handler.c
+++ b/embed/ephy-reader-handler.c
@@ -27,9 +27,9 @@
 #include "ephy-settings.h"
 #include "ephy-web-view.h"
 
+#include <adwaita.h>
 #include <gio/gio.h>
 #include <glib/gi18n.h>
-#include <handy.h>
 #include <string.h>
 
 struct _EphyReaderHandler {
@@ -164,7 +164,7 @@ readability_js_finish_cb (GObject      *object,
   const gchar *title;
   const gchar *font_style;
   const gchar *color_scheme;
-  HdyStyleManager *style_manager;
+  AdwStyleManager *style_manager;
 
   js_result = webkit_web_view_run_javascript_finish (web_view, result, &error);
   if (!js_result) {
@@ -184,10 +184,10 @@ readability_js_finish_cb (GObject      *object,
                           g_settings_get_enum (EPHY_SETTINGS_READER,
                                                EPHY_PREFS_READER_FONT_STYLE));
 
-  style_manager = hdy_style_manager_get_default ();
+  style_manager = adw_style_manager_get_default ();
 
-  if (hdy_style_manager_get_system_supports_color_schemes (style_manager))
-    color_scheme = hdy_style_manager_get_dark (style_manager) ? "dark" : "light";
+  if (adw_style_manager_get_system_supports_color_schemes (style_manager))
+    color_scheme = adw_style_manager_get_dark (style_manager) ? "dark" : "light";
   else
     color_scheme = enum_nick (EPHY_TYPE_PREFS_READER_COLOR_SCHEME,
                               g_settings_get_enum (EPHY_SETTINGS_READER,
diff --git a/embed/ephy-web-view.c b/embed/ephy-web-view.c
index 12cd2455d..a95d94d8b 100644
--- a/embed/ephy-web-view.c
+++ b/embed/ephy-web-view.c
@@ -50,11 +50,11 @@
 #include "ephy-web-app-utils.h"
 #include "ephy-zoom.h"
 
+#include <adwaita.h>
 #include <gio/gio.h>
 #include <glib/gi18n.h>
 #include <glib/gstdio.h>
 #include <gtk/gtk.h>
-#include <handy.h>
 
 /**
  * SECTION:ephy-web-view
@@ -129,7 +129,7 @@ struct _EphyWebView {
   EphyWebViewErrorPage error_page;
 
   guint unresponsive_process_timeout_id;
-  GtkWidget *unresponsive_process_dialog;
+  GtkWindow *unresponsive_process_dialog;
 
   guint64 uid;
 };
@@ -161,17 +161,27 @@ open_response_cb (GtkFileChooser           *dialog,
                   WebKitFileChooserRequest *request)
 {
   if (response == GTK_RESPONSE_ACCEPT) {
-    GSList *file_list = gtk_file_chooser_get_filenames (dialog);
+    g_autoptr (GListModel) files = gtk_file_chooser_get_files (dialog);
     GPtrArray *file_array = g_ptr_array_new ();
+    g_autoptr (GFile) current_folder = NULL;
+    g_autofree char *current_folder_path = NULL;
+    guint i, n = g_list_model_get_n_items (files);
 
-    for (GSList *file = file_list; file; file = g_slist_next (file))
-      g_ptr_array_add (file_array, file->data);
+    for (i = 0; i < n; i++) {
+      g_autoptr (GFile) file = g_list_model_get_item (files, i);
+
+      g_ptr_array_add (file_array, file);
+    }
 
     g_ptr_array_add (file_array, NULL);
     webkit_file_chooser_request_select_files (request, (const char * const *)file_array->pdata);
-    g_slist_free_full (file_list, g_free);
     g_ptr_array_free (file_array, TRUE);
-    g_settings_set_string (EPHY_SETTINGS_WEB, EPHY_PREFS_WEB_LAST_UPLOAD_DIRECTORY, 
gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog)));
+
+    current_folder = gtk_file_chooser_get_current_folder (dialog);
+    current_folder_path  = g_file_get_path (current_folder);
+    g_settings_set_string (EPHY_SETTINGS_WEB,
+                           EPHY_PREFS_WEB_LAST_UPLOAD_DIRECTORY,
+                           current_folder_path);
   } else {
     webkit_file_chooser_request_cancel (request);
   }
@@ -184,23 +194,30 @@ static gboolean
 ephy_web_view_run_file_chooser (WebKitWebView            *web_view,
                                 WebKitFileChooserRequest *request)
 {
-  GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (web_view));
+  GtkRoot *root = gtk_widget_get_root(GTK_WIDGET (web_view));
   GtkFileChooser *dialog;
   gboolean allows_multiple_selection = webkit_file_chooser_request_get_select_multiple (request);
   GtkFileFilter *filter = webkit_file_chooser_request_get_mime_types_filter (request);
+  g_autoptr (GFile) current_folder = NULL;
+  g_autoptr (GError) error = NULL;
 
   dialog = ephy_create_file_chooser (_("Open"),
-                                     GTK_WIDGET (toplevel),
+                                     GTK_WIDGET (root),
                                      GTK_FILE_CHOOSER_ACTION_OPEN,
                                      EPHY_FILE_FILTER_ALL);
 
   if (filter) {
-    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
-    gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), filter);
+    gtk_file_chooser_add_filter (dialog, filter);
+    gtk_file_chooser_set_filter (dialog, filter);
   }
 
-  gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), g_settings_get_string (EPHY_SETTINGS_WEB, 
EPHY_PREFS_WEB_LAST_UPLOAD_DIRECTORY));
-  gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (dialog), allows_multiple_selection);
+  current_folder = g_file_new_for_path (g_settings_get_string (EPHY_SETTINGS_WEB,
+                                                               EPHY_PREFS_WEB_LAST_UPLOAD_DIRECTORY));
+  gtk_file_chooser_set_current_folder (dialog, current_folder, &error);
+  if (error)
+    g_info ("Failed to set current folder to: %s", error->message);
+
+  gtk_file_chooser_set_select_multiple (dialog, allows_multiple_selection);
 
   g_signal_connect (dialog, "response",
                     G_CALLBACK (open_response_cb),
@@ -288,7 +305,7 @@ ephy_web_view_set_property (GObject      *object,
       break;
   }
 }
-
+/* FIXME the button one should be a controller, not sure about the key one
 static gboolean
 ephy_web_view_key_press_event (GtkWidget   *widget,
                                GdkEventKey *event)
@@ -310,10 +327,10 @@ static gboolean
 ephy_web_view_button_press_event (GtkWidget      *widget,
                                   GdkEventButton *event)
 {
-  /* These are the special cases WebkitWebView doesn't handle but we have an
-   * interest in handling. */
+  *//* These are the special cases WebkitWebView doesn't handle but we have an
+   * interest in handling. *//*
 
-  /* Handle typical back/forward mouse buttons. */
+  *//* Handle typical back/forward mouse buttons. *//*
   if (event->button == 8) {
     webkit_web_view_go_back (WEBKIT_WEB_VIEW (widget));
     return TRUE;
@@ -324,9 +341,18 @@ ephy_web_view_button_press_event (GtkWidget      *widget,
     return TRUE;
   }
 
-  /* Let WebKitWebView handle this. */
+  *//* Let WebKitWebView handle this. *//*
   return GTK_WIDGET_CLASS (ephy_web_view_parent_class)->button_press_event (widget, event);
 }
+*/
+
+static inline void
+remove_info_bar (GtkWidget *info_bar)
+{
+  EphyEmbed *embed = EPHY_EMBED (gtk_widget_get_ancestor (info_bar, EPHY_TYPE_EMBED));
+
+  ephy_embed_remove_top_widget (embed, info_bar);
+}
 
 static void
 untrack_info_bar (GtkWidget **tracked_info_bar)
@@ -336,7 +362,7 @@ untrack_info_bar (GtkWidget **tracked_info_bar)
 
   if (*tracked_info_bar) {
     g_object_remove_weak_pointer (G_OBJECT (*tracked_info_bar), (gpointer *)tracked_info_bar);
-    gtk_widget_destroy (*tracked_info_bar);
+    remove_info_bar (*tracked_info_bar);
     *tracked_info_bar = NULL;
   }
 }
@@ -362,7 +388,6 @@ ephy_web_view_create_form_auth_save_confirmation_info_bar (EphyWebView *web_view
                                                            const char  *username)
 {
   GtkWidget *info_bar;
-  GtkWidget *content_area;
   GtkWidget *label;
   char *message;
 
@@ -379,13 +404,11 @@ ephy_web_view_create_form_auth_save_confirmation_info_bar (EphyWebView *web_view
    */
   message = g_markup_printf_escaped (_("Do you want to save your password for “%s”?"), origin);
   gtk_label_set_markup (GTK_LABEL (label), message);
-  gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+  gtk_label_set_wrap (GTK_LABEL (label), TRUE);
   gtk_label_set_xalign (GTK_LABEL (label), 0);
   g_free (message);
 
-  content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (info_bar));
-  gtk_container_add (GTK_CONTAINER (content_area), label);
-  gtk_widget_show (label);
+  gtk_info_bar_add_child (GTK_INFO_BAR (info_bar), label);
 
   track_info_bar (info_bar, &web_view->password_info_bar);
 
@@ -419,7 +442,7 @@ info_bar_save_request_response_cb (GtkInfoBar      *info_bar,
 {
   g_assert (data->callback);
   data->callback (response_id, data->callback_data);
-  gtk_widget_destroy (GTK_WIDGET (info_bar));
+  remove_info_bar (GTK_WIDGET (info_bar));
 }
 
 void
@@ -606,7 +629,6 @@ password_form_focused_cb (EphyEmbedShell *shell,
 {
   GtkWidget *info_bar;
   GtkWidget *label;
-  GtkWidget *content_area;
 
   if (web_view->password_form_info_bar)
     return;
@@ -617,15 +639,13 @@ password_form_focused_cb (EphyEmbedShell *shell,
 
   /* Translators: Message appears when insecure password form is focused. */
   label = gtk_label_new (_("Heads-up: this form is not secure. If you type your password, it will not be 
kept private."));
-  gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+  gtk_label_set_wrap (GTK_LABEL (label), TRUE);
   gtk_label_set_xalign (GTK_LABEL (label), 0);
-  gtk_widget_show (label);
 
   info_bar = gtk_info_bar_new ();
   gtk_info_bar_set_message_type (GTK_INFO_BAR (info_bar), GTK_MESSAGE_WARNING);
   gtk_info_bar_set_show_close_button (GTK_INFO_BAR (info_bar), TRUE);
-  content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (info_bar));
-  gtk_container_add (GTK_CONTAINER (content_area), label);
+  gtk_info_bar_add_child (GTK_INFO_BAR (info_bar), label);
 
   g_signal_connect (info_bar, "response", G_CALLBACK (gtk_widget_hide), NULL);
 
@@ -634,7 +654,6 @@ password_form_focused_cb (EphyEmbedShell *shell,
   ephy_embed_add_top_widget (EPHY_GET_EMBED_FROM_EPHY_WEB_VIEW (web_view),
                              info_bar,
                              EPHY_EMBED_TOP_WIDGET_POLICY_DESTROY_ON_TRANSITION);
-  gtk_widget_show (info_bar);
 }
 
 static void
@@ -864,7 +883,7 @@ on_unresponsive_dialog_response (GtkDialog *dialog,
                                                                             
(GSourceFunc)unresponsive_process_timeout_cb,
                                                                             web_view,
                                                                             NULL);
-  g_clear_pointer (&web_view->unresponsive_process_dialog, gtk_widget_destroy);
+  g_clear_pointer (&web_view->unresponsive_process_dialog, gtk_window_destroy);
 }
 
 static gboolean
@@ -875,18 +894,19 @@ unresponsive_process_timeout_cb (gpointer user_data)
   if (!gtk_widget_get_mapped (GTK_WIDGET (web_view)))
     return G_SOURCE_CONTINUE;
 
-  web_view->unresponsive_process_dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel 
(GTK_WIDGET (web_view))),
-                                                                  GTK_DIALOG_MODAL | 
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_USE_HEADER_BAR,
-                                                                  GTK_MESSAGE_QUESTION,
-                                                                  GTK_BUTTONS_NONE,
-                                                                  _("The current page '%s' is unresponsive"),
-                                                                  ephy_web_view_get_address (web_view));
+  web_view->unresponsive_process_dialog =
+    GTK_WINDOW (gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (web_view))),
+                                        GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | 
GTK_DIALOG_USE_HEADER_BAR,
+                                        GTK_MESSAGE_QUESTION,
+                                        GTK_BUTTONS_NONE,
+                                        _("The current page '%s' is unresponsive"),
+                                        ephy_web_view_get_address (web_view)));
 
   gtk_dialog_add_button (GTK_DIALOG (web_view->unresponsive_process_dialog), _("_Wait"), GTK_RESPONSE_NO);
   gtk_dialog_add_button (GTK_DIALOG (web_view->unresponsive_process_dialog), _("_Kill"), GTK_RESPONSE_YES);
 
   g_signal_connect (web_view->unresponsive_process_dialog, "response", G_CALLBACK 
(on_unresponsive_dialog_response), web_view);
-  gtk_widget_show_all (web_view->unresponsive_process_dialog);
+  gtk_window_present (web_view->unresponsive_process_dialog);
 
   web_view->unresponsive_process_timeout_id = 0;
 
@@ -904,7 +924,7 @@ is_web_process_responsive_changed_cb (EphyWebView *web_view,
 
   if (web_view->unresponsive_process_dialog && responsive) {
     g_signal_handlers_disconnect_by_func (web_view->unresponsive_process_dialog, 
on_unresponsive_dialog_response, web_view);
-    g_clear_pointer (&web_view->unresponsive_process_dialog, gtk_widget_destroy);
+    g_clear_pointer (&web_view->unresponsive_process_dialog, gtk_window_destroy);
   }
 
   if (!responsive) {
@@ -1091,7 +1111,7 @@ decide_on_permission_request (GtkWidget             *info_bar,
   }
 
   g_object_weak_unref (G_OBJECT (info_bar), (GWeakNotify)permission_request_info_bar_destroyed_cb, data);
-  gtk_widget_destroy (info_bar);
+  remove_info_bar (info_bar);
   permission_request_data_free (data);
 }
 
@@ -1102,7 +1122,6 @@ show_permission_request_info_bar (WebKitWebView           *web_view,
 {
   PermissionRequestData *data;
   GtkWidget *info_bar;
-  GtkWidget *content_area;
   GtkWidget *label;
   char *message;
   char *origin;
@@ -1152,13 +1171,10 @@ show_permission_request_info_bar (WebKitWebView           *web_view,
 
   label = gtk_label_new (NULL);
   gtk_label_set_markup (GTK_LABEL (label), message);
-  gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+  gtk_label_set_wrap (GTK_LABEL (label), TRUE);
   gtk_label_set_xalign (GTK_LABEL (label), 0);
 
-  content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (info_bar));
-  gtk_container_add (GTK_CONTAINER (content_area), label);
-
-  gtk_widget_show_all (info_bar);
+  gtk_info_bar_add_child (GTK_INFO_BAR (info_bar), label);
 
   data = permission_request_data_new (EPHY_WEB_VIEW (web_view), decision, origin);
 
@@ -1212,7 +1228,7 @@ decide_on_itp_permission_request (GtkWidget               *info_bar,
   }
 
   g_object_set_data (G_OBJECT (info_bar), "ephy-itp-decision", NULL);
-  gtk_widget_destroy (info_bar);
+  remove_info_bar (info_bar);
 }
 
 static void
@@ -1220,7 +1236,6 @@ ephy_web_view_show_itp_permission_info_bar (EphyWebView
                                             WebKitWebsiteDataAccessPermissionRequest *decision)
 {
   GtkWidget *info_bar;
-  GtkWidget *content_area;
   GtkWidget *box;
   GtkWidget *label;
   g_autofree char *message = NULL;
@@ -1241,21 +1256,17 @@ ephy_web_view_show_itp_permission_info_bar (EphyWebView
   markup = g_strdup_printf ("<span weight='bold'>%s</span>", message);
   label = gtk_label_new (NULL);
   gtk_label_set_markup (GTK_LABEL (label), markup);
-  gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+  gtk_label_set_wrap (GTK_LABEL (label), TRUE);
   gtk_label_set_xalign (GTK_LABEL (label), 0);
-  gtk_container_add (GTK_CONTAINER (box), label);
-  gtk_widget_show (label);
+  gtk_box_append (GTK_BOX (box), label);
 
   secondary_message = g_strdup_printf (_("This will allow “%s” to track your activity."), requesting_domain);
   label = gtk_label_new (secondary_message);
-  gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+  gtk_label_set_wrap (GTK_LABEL (label), TRUE);
   gtk_label_set_xalign (GTK_LABEL (label), 0);
-  gtk_container_add (GTK_CONTAINER (box), label);
-  gtk_widget_show (label);
+  gtk_box_append (GTK_BOX (box), label);
 
-  content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (info_bar));
-  gtk_container_add (GTK_CONTAINER (content_area), box);
-  gtk_widget_show (box);
+  gtk_info_bar_add_child (GTK_INFO_BAR (info_bar), box);
 
   track_info_bar (info_bar, &web_view->itp_info_bar);
 
@@ -1267,7 +1278,6 @@ ephy_web_view_show_itp_permission_info_bar (EphyWebView
   ephy_embed_add_top_widget (EPHY_GET_EMBED_FROM_EPHY_WEB_VIEW (web_view),
                              info_bar,
                              EPHY_EMBED_TOP_WIDGET_POLICY_DESTROY_ON_TRANSITION);
-  gtk_widget_show (info_bar);
 }
 
 static gboolean
@@ -1503,7 +1513,7 @@ update_security_status_for_committed_load (EphyWebView *view,
 {
   EphySecurityLevel security_level = EPHY_SECURITY_LEVEL_NO_SECURITY;
   EphyEmbed *embed = NULL;
-  GtkWidget *toplevel;
+  GtkRoot *root;
   WebKitWebContext *web_context;
   WebKitSecurityManager *security_manager;
   g_autoptr (GUri) guri = NULL;
@@ -1517,8 +1527,8 @@ update_security_status_for_committed_load (EphyWebView *view,
     return;
   }
 
-  toplevel = gtk_widget_get_toplevel (GTK_WIDGET (view));
-  if (EPHY_IS_EMBED_CONTAINER (toplevel))
+  root = gtk_widget_get_root (GTK_WIDGET (view));
+  if (EPHY_IS_EMBED_CONTAINER (root))
     embed = EPHY_GET_EMBED_FROM_EPHY_WEB_VIEW (view);
   web_context = webkit_web_view_get_context (WEBKIT_WEB_VIEW (view));
   security_manager = webkit_web_context_get_security_manager (web_context);
@@ -2511,15 +2521,15 @@ close_web_view_cb (WebKitWebView *web_view,
                    gpointer       user_data)
 
 {
-  GtkWidget *widget = gtk_widget_get_toplevel (GTK_WIDGET (web_view));
+  GtkRoot *root = gtk_widget_get_root (GTK_WIDGET (web_view));
 
   LOG ("close web view");
 
-  if (EPHY_IS_EMBED_CONTAINER (widget))
-    ephy_embed_container_remove_child (EPHY_EMBED_CONTAINER (widget),
+  if (EPHY_IS_EMBED_CONTAINER (root))
+    ephy_embed_container_remove_child (EPHY_EMBED_CONTAINER (root),
                                        EPHY_GET_EMBED_FROM_EPHY_WEB_VIEW (web_view));
   else
-    gtk_widget_destroy (widget);
+    gtk_window_destroy (GTK_WINDOW (root));
 }
 
 
@@ -2579,7 +2589,7 @@ enum_nick (GType enum_type,
 static void
 reader_setting_changed_cb (EphyWebView *web_view)
 {
-  HdyStyleManager *style_manager;
+  AdwStyleManager *style_manager;
   const gchar *font_style;
   const gchar *color_scheme;
   gchar *js_snippet;
@@ -2591,10 +2601,10 @@ reader_setting_changed_cb (EphyWebView *web_view)
                           g_settings_get_enum (EPHY_SETTINGS_READER,
                                                EPHY_PREFS_READER_FONT_STYLE));
 
-  style_manager = hdy_style_manager_get_default ();
+  style_manager = adw_style_manager_get_default ();
 
-  if (hdy_style_manager_get_system_supports_color_schemes (style_manager))
-    color_scheme = hdy_style_manager_get_dark (style_manager) ? "dark" : "light";
+  if (adw_style_manager_get_system_supports_color_schemes (style_manager))
+    color_scheme = adw_style_manager_get_dark (style_manager) ? "dark" : "light";
   else
     color_scheme = enum_nick (EPHY_TYPE_PREFS_READER_COLOR_SCHEME,
                               g_settings_get_enum (EPHY_SETTINGS_READER,
@@ -3585,26 +3595,29 @@ ephy_web_view_get_security_level (EphyWebView           *view,
     *errors = view->tls_errors;
 }
 
+static void
+info_bar_response_cb (GtkInfoBar *info_bar,
+                      int         response_id,
+                      EphyEmbed  *embed)
+{
+  ephy_embed_remove_top_widget (embed, GTK_WIDGET (info_bar));
+}
+
 static void
 ephy_web_view_print_failed (EphyWebView *view,
                             GError      *error)
 {
   GtkWidget *info_bar;
   GtkWidget *label;
-  GtkContainer *content_area;
   EphyEmbed *embed = EPHY_GET_EMBED_FROM_EPHY_WEB_VIEW (view);
 
   info_bar = gtk_info_bar_new_with_buttons (_("_OK"), GTK_RESPONSE_OK, NULL);
   label = gtk_label_new (error->message);
-  content_area = GTK_CONTAINER (gtk_info_bar_get_content_area (GTK_INFO_BAR (info_bar)));
 
-  gtk_info_bar_set_message_type (GTK_INFO_BAR (info_bar), GTK_MESSAGE_ERROR);
-  gtk_container_add (content_area, label);
-  g_signal_connect (info_bar, "response",
-                    G_CALLBACK (gtk_widget_destroy), NULL);
+  gtk_info_bar_add_child (GTK_INFO_BAR (info_bar), label);
+  g_signal_connect (info_bar, "response", G_CALLBACK (info_bar_response_cb), embed);
 
   ephy_embed_add_top_widget (embed, info_bar, EPHY_EMBED_TOP_WIDGET_POLICY_RETAIN_ON_TRANSITION);
-  gtk_widget_show_all (info_bar);
 }
 
 static void
@@ -3911,7 +3924,7 @@ ephy_web_view_dispose (GObject *object)
   g_clear_object (&view->certificate);
   g_clear_object (&view->file_monitor);
   g_clear_object (&view->icon);
-  g_clear_pointer (&view->unresponsive_process_dialog, gtk_widget_destroy);
+  g_clear_pointer (&view->unresponsive_process_dialog, gtk_window_destroy);
 
   if (view->cancellable) {
     g_cancellable_cancel (view->cancellable);
@@ -4001,12 +4014,12 @@ ephy_web_view_init (EphyWebView *web_view)
                            G_CALLBACK (reader_setting_changed_cb),
                            web_view, G_CONNECT_SWAPPED);
 
-  g_signal_connect_object (hdy_style_manager_get_default (),
+  g_signal_connect_object (adw_style_manager_get_default (),
                            "notify::system-supports-color-schemes",
                            G_CALLBACK (reader_setting_changed_cb),
                            web_view, G_CONNECT_SWAPPED);
 
-  g_signal_connect_object (hdy_style_manager_get_default (),
+  g_signal_connect_object (adw_style_manager_get_default (),
                            "notify::dark",
                            G_CALLBACK (reader_setting_changed_cb),
                            web_view, G_CONNECT_SWAPPED);
@@ -4095,7 +4108,7 @@ static void
 ephy_web_view_class_init (EphyWebViewClass *klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+//  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
   WebKitWebViewClass *webkit_webview_class = WEBKIT_WEB_VIEW_CLASS (klass);
 
   gobject_class->dispose = ephy_web_view_dispose;
@@ -4104,8 +4117,8 @@ ephy_web_view_class_init (EphyWebViewClass *klass)
   gobject_class->set_property = ephy_web_view_set_property;
   gobject_class->constructed = ephy_web_view_constructed;
 
-  widget_class->button_press_event = ephy_web_view_button_press_event;
-  widget_class->key_press_event = ephy_web_view_key_press_event;
+//  widget_class->button_press_event = ephy_web_view_button_press_event;
+// FIXME  widget_class->key_press_event = ephy_web_view_key_press_event;
 
   webkit_webview_class->run_file_chooser = ephy_web_view_run_file_chooser;
 
diff --git a/embed/meson.build b/embed/meson.build
index 28b95859c..7d94b9864 100644
--- a/embed/meson.build
+++ b/embed/meson.build
@@ -11,7 +11,7 @@ enums = gnome.mkenums_simple('ephy-embed-type-builtins',
 )
 
 libephyembed_sources = [
-  'contrib/gd-tagged-entry.c',
+#  'contrib/gd-tagged-entry.c',
   'ephy-about-handler.c',
   'ephy-downloads-manager.c',
   'ephy-download.c',
@@ -34,12 +34,11 @@ libephyembed_sources = [
 
 libephyembed_deps = [
   config_h,
-  libdazzle_dep,
   ephymisc_dep,
   gio_dep,
   glib_dep,
   gtk_dep,
-  libhandy_dep,
+  libadwaita_dep,
   libsecret_dep,
   libsoup_dep,
   m_dep,
diff --git a/lib/ephy-file-helpers.c b/lib/ephy-file-helpers.c
index a2e3ab645..ebc7b2606 100644
--- a/lib/ephy-file-helpers.c
+++ b/lib/ephy-file-helpers.c
@@ -548,7 +548,6 @@ launch_application (GAppInfo *app,
   g_autoptr (GdkAppLaunchContext) context = NULL;
   g_autoptr (GError) error = NULL;
   GdkDisplay *display;
-  GdkScreen *screen;
   gboolean res;
 
   /* This is impossible to implement inside flatpak. Higher layers must
@@ -557,10 +556,8 @@ launch_application (GAppInfo *app,
   g_assert (!ephy_is_running_inside_flatpak ());
 
   display = gdk_display_get_default ();
-  screen = gdk_screen_get_default ();
 
   context = gdk_display_get_app_launch_context (display);
-  gdk_app_launch_context_set_screen (context, screen);
   gdk_app_launch_context_set_timestamp (context, user_time);
 
   res = g_app_info_launch (app, files,
@@ -665,7 +662,7 @@ static gboolean
 open_in_default_handler (const char                   *uri,
                          const char                   *mime_type,
                          guint32                       timestamp,
-                         GdkScreen                    *screen,
+                         GdkDisplay                   *display,
                          EphyFileHelpersNotFlatpakTag  tag)
 {
   g_autoptr (GdkAppLaunchContext) context = NULL;
@@ -679,8 +676,7 @@ open_in_default_handler (const char                   *uri,
   g_assert (tag == EPHY_FILE_HELPERS_I_UNDERSTAND_I_MUST_NOT_USE_THIS_FUNCTION_UNDER_FLATPAK);
   g_assert (!ephy_is_running_inside_flatpak ());
 
-  context = gdk_display_get_app_launch_context (screen ? gdk_screen_get_display (screen) : 
gdk_display_get_default ());
-  gdk_app_launch_context_set_screen (context, screen);
+  context = gdk_display_get_app_launch_context (display ? display : gdk_display_get_default ());
   gdk_app_launch_context_set_timestamp (context, timestamp);
 
   appinfo = g_app_info_get_default_for_type (mime_type, TRUE);
@@ -703,10 +699,10 @@ open_in_default_handler (const char                   *uri,
 gboolean
 ephy_file_open_uri_in_default_browser (const char                   *uri,
                                        guint32                       user_time,
-                                       GdkScreen                    *screen,
+                                       GdkDisplay                   *display,
                                        EphyFileHelpersNotFlatpakTag  tag)
 {
-  return open_in_default_handler (uri, "x-scheme-handler/http", user_time, screen, tag);
+  return open_in_default_handler (uri, "x-scheme-handler/http", user_time, display, tag);
 }
 
 /**
diff --git a/lib/ephy-file-helpers.h b/lib/ephy-file-helpers.h
index c09d145c8..1a9eb3b25 100644
--- a/lib/ephy-file-helpers.h
+++ b/lib/ephy-file-helpers.h
@@ -82,7 +82,7 @@ gboolean           ephy_file_launch_desktop_file            (const char
                                                              EphyFileHelpersNotFlatpakTag  tag);
 gboolean           ephy_file_open_uri_in_default_browser    (const char                   *uri,
                                                              guint32                       user_time,
-                                                             GdkScreen                    *screen,
+                                                             GdkDisplay                   *screen,
                                                              EphyFileHelpersNotFlatpakTag  tag);
 gboolean           ephy_file_browse_to                      (GFile                        *file,
                                                              guint32                       user_time);
diff --git a/lib/ephy-flatpak-utils.c b/lib/ephy-flatpak-utils.c
index 818af95f4..70dfca8e4 100644
--- a/lib/ephy-flatpak-utils.c
+++ b/lib/ephy-flatpak-utils.c
@@ -29,7 +29,7 @@
 #include <gio/gio.h>
 #include <gio/gunixfdlist.h>
 #if USE_LIBPORTAL
-#include <libportal/portal-gtk3.h>
+#include <libportal/portal-gtk4.h>
 #endif
 #include <string.h>
 #include <sys/stat.h>
diff --git a/lib/ephy-gui.c b/lib/ephy-gui.c
index c342b23a0..12c5cce22 100644
--- a/lib/ephy-gui.c
+++ b/lib/ephy-gui.c
@@ -53,7 +53,6 @@ void
 ephy_gui_help (GtkWidget  *parent,
                const char *page)
 {
-  GError *error = NULL;
   char *url;
 
   if (page)
@@ -61,27 +60,12 @@ ephy_gui_help (GtkWidget  *parent,
   else
     url = g_strdup ("help:epiphany");
 
-  gtk_show_uri_on_window (GTK_WINDOW (parent), url, gtk_get_current_event_time (), &error);
-
-  if (error != NULL) {
-    GtkWidget *dialog;
-
-    dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
-                                     GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                     GTK_MESSAGE_ERROR,
-                                     GTK_BUTTONS_OK,
-                                     _("Could not display help: %s"),
-                                     error->message);
-    g_error_free (error);
-
-    g_signal_connect (dialog, "response",
-                      G_CALLBACK (gtk_widget_destroy), NULL);
-    gtk_widget_show (dialog);
-  }
+  gtk_show_uri (GTK_WINDOW (parent), url, GDK_CURRENT_TIME);
 
   g_free (url);
 }
 
+#if 0
 void
 ephy_gui_get_current_event (GdkEventType *otype,
                             guint        *ostate,
@@ -119,3 +103,4 @@ ephy_gui_get_current_event (GdkEventType *otype,
   if (obutton)
     *obutton = button;
 }
+#endif
diff --git a/lib/ephy-notification-container.c b/lib/ephy-notification-container.c
index f0f31e736..8a02322f2 100644
--- a/lib/ephy-notification-container.c
+++ b/lib/ephy-notification-container.c
@@ -23,13 +23,13 @@
 #include "ephy-notification-container.h"
 
 struct _EphyNotificationContainer {
-  GtkBin parent_instance;
+  AdwBin parent_instance;
 
   GtkWidget *revealer;
   GtkWidget *box;
 };
 
-G_DEFINE_TYPE (EphyNotificationContainer, ephy_notification_container, GTK_TYPE_BIN);
+G_DEFINE_TYPE (EphyNotificationContainer, ephy_notification_container, ADW_TYPE_BIN);
 
 static EphyNotificationContainer *notification_container = NULL;
 
@@ -46,10 +46,12 @@ ephy_notification_container_init (EphyNotificationContainer *self)
   gtk_widget_set_valign (GTK_WIDGET (self), GTK_ALIGN_START);
 
   self->revealer = gtk_revealer_new ();
-  gtk_container_add (GTK_CONTAINER (self), self->revealer);
+  adw_bin_set_child (ADW_BIN (self), self->revealer);
 
   self->box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
-  gtk_container_add (GTK_CONTAINER (self->revealer), self->box);
+  gtk_revealer_set_child (GTK_REVEALER (self->revealer), self->box);
+
+  gtk_widget_hide (GTK_WIDGET (self));
 }
 
 static void
@@ -67,28 +69,13 @@ ephy_notification_container_get_default (void)
                        NULL);
 }
 
-static guint
-get_num_children (EphyNotificationContainer *self)
-{
-  GList *children;
-  guint retval;
-
-  g_assert (EPHY_IS_NOTIFICATION_CONTAINER (self));
-
-  children = gtk_container_get_children (GTK_CONTAINER (self->box));
-  retval = g_list_length (children);
-  g_list_free (children);
-
-  return retval;
-}
-
 static void
 notification_close_cb (EphyNotification          *notification,
                        EphyNotificationContainer *self)
 {
-  gtk_container_remove (GTK_CONTAINER (self->box), GTK_WIDGET (notification));
+  gtk_box_remove (GTK_BOX (self->box), GTK_WIDGET (notification));
 
-  if (get_num_children (self) == 0) {
+  if (!gtk_widget_get_first_child (self->box)) {
     gtk_widget_hide (GTK_WIDGET (self));
     gtk_revealer_set_reveal_child (GTK_REVEALER (self->revealer), FALSE);
   }
@@ -98,24 +85,24 @@ void
 ephy_notification_container_add_notification (EphyNotificationContainer *self,
                                               GtkWidget                 *notification)
 {
-  g_autoptr (GList) children = NULL;
-  GList *list;
+  GtkWidget *child;
 
   g_assert (EPHY_IS_NOTIFICATION_CONTAINER (self));
   g_assert (GTK_IS_WIDGET (notification));
 
-  children = gtk_container_get_children (GTK_CONTAINER (self->box));
-  for (list = children; list && list->data; list = list->next) {
-    EphyNotification *child_notification = EPHY_NOTIFICATION (children->data);
+  for (child = gtk_widget_get_first_child (self->box);
+       child;
+       child = gtk_widget_get_next_sibling (child)) {
+    EphyNotification *child_notification = EPHY_NOTIFICATION (child);
 
     if (ephy_notification_is_duplicate (child_notification, EPHY_NOTIFICATION (notification))) {
-      gtk_widget_destroy (notification);
+      gtk_box_remove (GTK_BOX (self->box), notification);
       return;
     }
   }
 
-  gtk_container_add (GTK_CONTAINER (self->box), notification);
-  gtk_widget_show_all (GTK_WIDGET (self));
+  gtk_box_append (GTK_BOX (self->box), notification);
+  gtk_widget_show (GTK_WIDGET (self));
   gtk_revealer_set_reveal_child (GTK_REVEALER (self->revealer), TRUE);
 
   g_signal_connect (notification, "close", G_CALLBACK (notification_close_cb), self);
diff --git a/lib/ephy-notification-container.h b/lib/ephy-notification-container.h
index 4444f83b7..df5fcdb36 100644
--- a/lib/ephy-notification-container.h
+++ b/lib/ephy-notification-container.h
@@ -20,13 +20,13 @@
 
 #pragma once
 
-#include <gtk/gtk.h>
+#include <adwaita.h>
 
 G_BEGIN_DECLS
 
 #define EPHY_TYPE_NOTIFICATION_CONTAINER (ephy_notification_container_get_type ())
 
-G_DECLARE_FINAL_TYPE (EphyNotificationContainer, ephy_notification_container, EPHY, NOTIFICATION_CONTAINER, 
GtkBin)
+G_DECLARE_FINAL_TYPE (EphyNotificationContainer, ephy_notification_container, EPHY, NOTIFICATION_CONTAINER, 
AdwBin)
 
 EphyNotificationContainer *ephy_notification_container_get_default      (void);
 
diff --git a/lib/ephy-notification.c b/lib/ephy-notification.c
index 43746bab3..2f429ab64 100644
--- a/lib/ephy-notification.c
+++ b/lib/ephy-notification.c
@@ -24,7 +24,7 @@
 #include "ephy-notification-container.h"
 
 struct _EphyNotification {
-  GtkBin parent_instance;
+  AdwBin parent_instance;
 
   GtkWidget *grid;
 
@@ -49,7 +49,7 @@ enum {
 
 static guint signals[LAST_SIGNAL];
 
-G_DEFINE_TYPE (EphyNotification, ephy_notification, GTK_TYPE_BIN);
+G_DEFINE_TYPE (EphyNotification, ephy_notification, ADW_TYPE_BIN);
 
 static void
 ephy_notification_constructed (GObject *object)
@@ -125,27 +125,22 @@ close_button_clicked_cb (GtkButton        *button,
 static void
 ephy_notification_init (EphyNotification *self)
 {
-  GtkWidget *image;
-  GtkStyleContext *context;
-
-  self->grid = gtk_grid_new ();
-  context = gtk_widget_get_style_context (self->grid);
-  gtk_style_context_add_class (context, "app-notification");
-  gtk_container_add (GTK_CONTAINER (self), self->grid);
+  gtk_widget_add_css_class (GTK_WIDGET (self), "app-notification");
+  adw_bin_set_child (ADW_BIN (self), self->grid);
 
   self->head = gtk_label_new (NULL);
-  gtk_label_set_line_wrap (GTK_LABEL (self->head), TRUE);
+  gtk_label_set_wrap (GTK_LABEL (self->head), TRUE);
   gtk_label_set_xalign (GTK_LABEL (self->head), 0);
   gtk_widget_set_hexpand (self->head, TRUE);
   gtk_grid_attach (GTK_GRID (self->grid), self->head, 0, 0, 1, 1);
 
   self->body = gtk_label_new (NULL);
-  gtk_label_set_line_wrap (GTK_LABEL (self->body), TRUE);
+  gtk_label_set_wrap (GTK_LABEL (self->body), TRUE);
   gtk_label_set_xalign (GTK_LABEL (self->body), 0);
   gtk_widget_set_hexpand (self->body, TRUE);
   gtk_grid_attach (GTK_GRID (self->grid), self->body, 0, 1, 1, 1);
 
-  self->close_button = gtk_button_new ();
+  self->close_button = gtk_button_new_from_icon_name ("window-close-symbolic");
   gtk_widget_set_focus_on_click (self->close_button, FALSE);
   gtk_widget_set_margin_top (self->close_button, 6);
   gtk_widget_set_margin_bottom (self->close_button, 6);
@@ -154,9 +149,6 @@ ephy_notification_init (EphyNotification *self)
   gtk_style_context_add_class (gtk_widget_get_style_context (self->close_button), "flat");
   gtk_grid_attach (GTK_GRID (self->grid), self->close_button, 1, 0, 1, 2);
 
-  image = gtk_image_new_from_icon_name ("window-close-symbolic", GTK_ICON_SIZE_BUTTON);
-  gtk_button_set_image (GTK_BUTTON (self->close_button), image);
-
   g_signal_connect (self->close_button,
                     "clicked",
                     G_CALLBACK (close_button_clicked_cb),
diff --git a/lib/ephy-notification.h b/lib/ephy-notification.h
index d3226cb68..5947cbcad 100644
--- a/lib/ephy-notification.h
+++ b/lib/ephy-notification.h
@@ -21,13 +21,13 @@
 #pragma once
 
 #include <glib-object.h>
-#include <gtk/gtk.h>
+#include <adwaita.h>
 
 G_BEGIN_DECLS
 
 #define EPHY_TYPE_NOTIFICATION (ephy_notification_get_type ())
 
-G_DECLARE_FINAL_TYPE (EphyNotification, ephy_notification, EPHY, NOTIFICATION, GtkBin)
+G_DECLARE_FINAL_TYPE (EphyNotification, ephy_notification, EPHY, NOTIFICATION, AdwBin)
 
 EphyNotification *ephy_notification_new  (const char *head,
                                           const char *body);
diff --git a/lib/meson.build b/lib/meson.build
index 894589a1a..76e42cea4 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -12,7 +12,7 @@ enums = gnome.mkenums_simple('ephy-lib-type-builtins',
 libephymisc_sources = [
   'contrib/gnome-languages.c',
   'ephy-debug.c',
-  'ephy-dnd.c',
+#  'ephy-dnd.c',
   'ephy-favicon-helpers.c',
   'ephy-file-helpers.c',
   'ephy-flatpak-utils.c',
@@ -31,7 +31,7 @@ libephymisc_sources = [
   'ephy-sqlite-connection.c',
   'ephy-sqlite-statement.c',
   'ephy-string.c',
-  'ephy-suggestion.c',
+#  'ephy-suggestion.c',
   'ephy-sync-utils.c',
   'ephy-time-helpers.c',
   'ephy-uri-helpers.c',
@@ -59,7 +59,7 @@ libephymisc_deps = [
   gsettings_desktop_schemas,
   gtk_dep,
   json_glib_dep,
-  libdazzle_dep,
+  libadwaita_dep,
   libsecret_dep,
   libsoup_dep,
   libxml_dep,
diff --git a/lib/widgets/ephy-download-widget.c b/lib/widgets/ephy-download-widget.c
index b81c567a8..e7e484a1f 100644
--- a/lib/widgets/ephy-download-widget.c
+++ b/lib/widgets/ephy-download-widget.c
@@ -30,7 +30,7 @@
 #include <webkit2/webkit2.h>
 
 struct _EphyDownloadWidget {
-  GtkEventBox parent_instance;
+  AdwBin parent_instance;
 
   EphyDownload *download;
 
@@ -41,7 +41,7 @@ struct _EphyDownloadWidget {
   GtkWidget *action_button;
 };
 
-G_DEFINE_TYPE (EphyDownloadWidget, ephy_download_widget, GTK_TYPE_EVENT_BOX)
+G_DEFINE_TYPE (EphyDownloadWidget, ephy_download_widget, ADW_TYPE_BIN)
 
 enum {
   PROP_0,
@@ -135,7 +135,7 @@ update_download_icon (EphyDownloadWidget *widget)
   } else
     icon = g_icon_new_for_string ("package-x-generic-symbolic", NULL);
 
-  gtk_image_set_from_gicon (GTK_IMAGE (widget->icon), icon, GTK_ICON_SIZE_MENU);
+  gtk_image_set_from_gicon (GTK_IMAGE (widget->icon), icon);
 }
 
 static void
@@ -211,9 +211,8 @@ download_finished_cb (EphyDownload       *download,
 {
   gtk_widget_hide (widget->progress);
   update_status_label (widget, _("Finished"));
-  gtk_image_set_from_icon_name (GTK_IMAGE (gtk_button_get_image (GTK_BUTTON (widget->action_button))),
-                                "folder-open-symbolic",
-                                GTK_ICON_SIZE_MENU);
+  gtk_button_set_icon_name (GTK_BUTTON (widget->action_button),
+                            "folder-open-symbolic");
 }
 
 static void
@@ -237,9 +236,8 @@ download_failed_cb (EphyDownload       *download,
 
   error_msg = g_strdup_printf (_("Error downloading: %s"), error->message);
   update_status_label (widget, error_msg);
-  gtk_image_set_from_icon_name (GTK_IMAGE (gtk_button_get_image (GTK_BUTTON (widget->action_button))),
-                                "list-remove-symbolic",
-                                GTK_ICON_SIZE_MENU);
+  gtk_button_set_icon_name (GTK_BUTTON (widget->action_button),
+                            "list-remove-symbolic");
 }
 
 static void
@@ -273,7 +271,7 @@ widget_action_button_clicked_cb (EphyDownloadWidget *widget)
   } else {
     ephy_download_do_download_action (widget->download,
                                       EPHY_DOWNLOAD_ACTION_BROWSE_TO,
-                                      gtk_get_current_event_time ());
+                                      GDK_CURRENT_TIME);
   }
 }
 
@@ -285,6 +283,7 @@ download_destination_changed_cb (WebKitDownload     *download,
   update_download_destination (widget);
 }
 
+/*
 static void
 download_drag_data_get (GtkWidget        *widget,
                         GdkDragContext   *context,
@@ -302,6 +301,7 @@ download_drag_data_get (GtkWidget        *widget,
   gtk_selection_data_set_uris (selection_data, uris);
   g_free (uris[0]);
 }
+*/
 
 static void
 ephy_download_widget_get_property (GObject    *object,
@@ -383,7 +383,7 @@ ephy_download_widget_constructed (GObject *object)
   gtk_widget_set_margin_end (GTK_WIDGET (grid), 12);
   gtk_widget_set_margin_top (GTK_WIDGET (grid), 12);
   gtk_widget_set_margin_bottom (GTK_WIDGET (grid), 12);
-  gtk_container_add (GTK_CONTAINER (widget), grid);
+  adw_bin_set_child (ADW_BIN (widget), grid);
 
   widget->icon = gtk_image_new ();
   gtk_widget_set_margin_end (widget->icon, 4);
@@ -437,7 +437,7 @@ ephy_download_widget_constructed (GObject *object)
     action_icon_name = "list-remove-symbolic";
   else
     action_icon_name = "window-close-symbolic";
-  widget->action_button = gtk_button_new_from_icon_name (action_icon_name, GTK_ICON_SIZE_MENU);
+  widget->action_button = gtk_button_new_from_icon_name (action_icon_name);
   g_signal_connect_swapped (widget->action_button, "clicked",
                             G_CALLBACK (widget_action_button_clicked_cb),
                             widget);
@@ -446,7 +446,6 @@ ephy_download_widget_constructed (GObject *object)
   gtk_style_context_add_class (gtk_widget_get_style_context (widget->action_button),
                                "circular");
   gtk_grid_attach (GTK_GRID (grid), widget->action_button, 3, 0, 1, 3);
-  gtk_widget_show (widget->action_button);
 
   download = ephy_download_get_webkit_download (widget->download);
   g_signal_connect (download, "notify::estimated-progress",
@@ -468,9 +467,9 @@ ephy_download_widget_constructed (GObject *object)
                     G_CALLBACK (download_content_type_changed_cb),
                     widget);
 
-  gtk_drag_source_set (GTK_WIDGET (widget), GDK_BUTTON1_MASK, NULL, 0, GDK_ACTION_COPY);
-  gtk_drag_source_add_uri_targets (GTK_WIDGET (widget));
-  g_signal_connect_object (widget, "drag-data-get", G_CALLBACK (download_drag_data_get), download, 0);
+//  gtk_drag_source_set (GTK_WIDGET (widget), GDK_BUTTON1_MASK, NULL, 0, GDK_ACTION_COPY);
+//  gtk_drag_source_add_uri_targets (GTK_WIDGET (widget));
+//  g_signal_connect_object (widget, "drag-data-get", G_CALLBACK (download_drag_data_get), download, 0);
 }
 
 static void
diff --git a/lib/widgets/ephy-download-widget.h b/lib/widgets/ephy-download-widget.h
index f36bd053a..72f5369b1 100644
--- a/lib/widgets/ephy-download-widget.h
+++ b/lib/widgets/ephy-download-widget.h
@@ -20,14 +20,14 @@
 
 #pragma once
 
-#include <glib-object.h>
+#include <adwaita.h>
 #include "ephy-download.h"
 
 G_BEGIN_DECLS
 
 #define EPHY_TYPE_DOWNLOAD_WIDGET ephy_download_widget_get_type()
 
-G_DECLARE_FINAL_TYPE (EphyDownloadWidget, ephy_download_widget, EPHY, DOWNLOAD_WIDGET, GtkEventBox)
+G_DECLARE_FINAL_TYPE (EphyDownloadWidget, ephy_download_widget, EPHY, DOWNLOAD_WIDGET, AdwBin)
 
 GtkWidget     *ephy_download_widget_new          (EphyDownload *ephy_download);
 
diff --git a/lib/widgets/ephy-downloads-popover.c b/lib/widgets/ephy-downloads-popover.c
index c91857671..06d4ef750 100644
--- a/lib/widgets/ephy-downloads-popover.c
+++ b/lib/widgets/ephy-downloads-popover.c
@@ -45,14 +45,14 @@ download_box_row_activated_cb (EphyDownloadsPopover *popover,
   EphyDownloadWidget *widget;
   EphyDownload *download;
 
-  widget = EPHY_DOWNLOAD_WIDGET (gtk_bin_get_child (GTK_BIN (row)));
+  widget = EPHY_DOWNLOAD_WIDGET (gtk_list_box_row_get_child (GTK_LIST_BOX_ROW (row)));
   download = ephy_download_widget_get_download (widget);
   if (!ephy_download_succeeded (download))
     return;
 
   ephy_download_do_download_action (download,
                                     EPHY_DOWNLOAD_ACTION_OPEN,
-                                    gtk_get_current_event_time ());
+                                    GDK_CURRENT_TIME);
 }
 
 static void
@@ -78,7 +78,6 @@ download_added_cb (EphyDownloadsPopover *popover,
 
   row = gtk_list_box_row_new ();
   gtk_list_box_prepend (GTK_LIST_BOX (popover->downloads_box), row);
-  gtk_widget_show (row);
 
   widget = ephy_download_widget_new (download);
   g_signal_connect_object (download, "completed",
@@ -87,41 +86,38 @@ download_added_cb (EphyDownloadsPopover *popover,
   g_signal_connect_object (download, "error",
                            G_CALLBACK (download_failed_cb),
                            popover, G_CONNECT_SWAPPED);
-  gtk_container_add (GTK_CONTAINER (row), widget);
-  gtk_widget_show (widget);
+  gtk_list_box_row_set_child (GTK_LIST_BOX_ROW (row), widget);
 }
 
 static void
 download_removed_cb (EphyDownloadsPopover *popover,
                      EphyDownload         *download)
 {
-  g_autoptr (GList) children = NULL;
-  GList *l;
   EphyDownloadsManager *manager;
+  int i = 0;
 
-  children = gtk_container_get_children (GTK_CONTAINER (popover->downloads_box));
-
-  /* Hide the popover before removing the last download widget so it "crumples"
-   * more smoothly */
-  if (g_list_length (children) == 1)
-    gtk_widget_hide (GTK_WIDGET (popover));
-
-  for (l = children; l; l = g_list_next (l)) {
+  while (TRUE) {
+    GtkListBoxRow *row;
     GtkWidget *widget;
 
-    if (!GTK_IS_LIST_BOX_ROW (l->data))
+    row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (popover->downloads_box), i++);
+
+    if (!GTK_IS_LIST_BOX_ROW (row))
       continue;
 
-    widget = gtk_bin_get_child (GTK_BIN (l->data));
+    widget = gtk_list_box_row_get_child (row);
     if (!EPHY_IS_DOWNLOAD_WIDGET (widget))
       continue;
 
     if (ephy_download_widget_get_download (EPHY_DOWNLOAD_WIDGET (widget)) == download) {
-      gtk_widget_destroy (l->data);
+      gtk_list_box_remove (GTK_LIST_BOX (popover->downloads_box), GTK_WIDGET (row));
       break;
     }
   }
 
+  if (i == 1)
+    gtk_popover_popdown (GTK_POPOVER (popover));
+
   manager = ephy_embed_shell_get_downloads_manager (ephy_embed_shell_get_default ());
   gtk_widget_set_sensitive (popover->clear_button, !ephy_downloads_manager_has_active_downloads (manager));
 }
@@ -129,31 +125,23 @@ download_removed_cb (EphyDownloadsPopover *popover,
 static void
 clear_button_clicked_cb (EphyDownloadsPopover *popover)
 {
-  g_autoptr (GList) children = NULL;
-  GList *l;
   EphyDownloadsManager *manager;
+  GtkListBoxRow *row;
 
   gtk_widget_hide (GTK_WIDGET (popover));
 
   manager = ephy_embed_shell_get_downloads_manager (ephy_embed_shell_get_default ());
   g_signal_handlers_block_by_func (manager, download_removed_cb, popover);
 
-  children = gtk_container_get_children (GTK_CONTAINER (popover->downloads_box));
-  for (l = children; l; l = g_list_next (l)) {
+  while ((row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (popover->downloads_box), 0))) {
     GtkWidget *widget;
     EphyDownload *download;
 
-    if (!GTK_IS_LIST_BOX_ROW (l->data))
-      continue;
-
-    widget = gtk_bin_get_child (GTK_BIN (l->data));
-    if (!EPHY_IS_DOWNLOAD_WIDGET (widget))
-      continue;
-
+    widget = gtk_list_box_row_get_child (row);
     download = ephy_download_widget_get_download (EPHY_DOWNLOAD_WIDGET (widget));
     if (!ephy_download_is_active (download)) {
       ephy_downloads_manager_remove_download (manager, download);
-      gtk_widget_destroy (l->data);
+      gtk_list_box_remove (GTK_LIST_BOX (popover->downloads_box), GTK_WIDGET (row));
     }
   }
   gtk_widget_set_sensitive (popover->clear_button, FALSE);
@@ -176,7 +164,7 @@ ephy_downloads_popover_init (EphyDownloadsPopover *popover)
 
   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
 
-  scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+  scrolled_window = gtk_scrolled_window_new ();
   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
                                   GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
   gtk_scrolled_window_set_min_content_height (GTK_SCROLLED_WINDOW (scrolled_window),
@@ -190,8 +178,7 @@ ephy_downloads_popover_init (EphyDownloadsPopover *popover)
   gtk_list_box_set_selection_mode (GTK_LIST_BOX (popover->downloads_box), GTK_SELECTION_NONE);
   gtk_style_context_add_class (gtk_widget_get_style_context (popover->downloads_box),
                                "background");
-  gtk_container_add (GTK_CONTAINER (scrolled_window), popover->downloads_box);
-  gtk_widget_show (popover->downloads_box);
+  gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scrolled_window), popover->downloads_box);
 
   downloads = ephy_downloads_manager_get_downloads (manager);
   for (l = downloads; l != NULL; l = g_list_next (l)) {
@@ -208,11 +195,9 @@ ephy_downloads_popover_init (EphyDownloadsPopover *popover)
 
     row = gtk_list_box_row_new ();
     gtk_list_box_prepend (GTK_LIST_BOX (popover->downloads_box), row);
-    gtk_widget_show (row);
 
     widget = ephy_download_widget_new (download);
-    gtk_container_add (GTK_CONTAINER (row), widget);
-    gtk_widget_show (widget);
+    gtk_list_box_row_set_child (GTK_LIST_BOX_ROW (row), widget);
   }
 
   g_signal_connect_object (manager, "download-added",
@@ -222,8 +207,7 @@ ephy_downloads_popover_init (EphyDownloadsPopover *popover)
                            G_CALLBACK (download_removed_cb),
                            popover, G_CONNECT_SWAPPED);
 
-  gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, FALSE, TRUE, 0);
-  gtk_widget_show (scrolled_window);
+  gtk_box_append (GTK_BOX (vbox), scrolled_window);
 
   popover->clear_button = gtk_button_new_with_mnemonic (_("_Clear All"));
   gtk_widget_set_sensitive (popover->clear_button, !ephy_downloads_manager_has_active_downloads (manager));
@@ -235,11 +219,9 @@ ephy_downloads_popover_init (EphyDownloadsPopover *popover)
   gtk_widget_set_margin_end (popover->clear_button, 12);
   gtk_widget_set_margin_top (popover->clear_button, 12);
   gtk_widget_set_margin_bottom (popover->clear_button, 12);
-  gtk_box_pack_start (GTK_BOX (vbox), popover->clear_button, FALSE, TRUE, 0);
-  gtk_widget_show (popover->clear_button);
+  gtk_box_append (GTK_BOX (vbox), popover->clear_button);
 
-  gtk_container_add (GTK_CONTAINER (popover), vbox);
-  gtk_widget_show (vbox);
+  gtk_popover_set_child (GTK_POPOVER (popover), vbox);
 }
 
 GtkWidget *
diff --git a/lib/widgets/ephy-downloads-progress-icon.c b/lib/widgets/ephy-downloads-progress-icon.c
index 3a2eb1b8e..82fc347e7 100644
--- a/lib/widgets/ephy-downloads-progress-icon.c
+++ b/lib/widgets/ephy-downloads-progress-icon.c
@@ -30,24 +30,23 @@ struct _EphyDownloadsProgressIcon {
 
 G_DEFINE_TYPE (EphyDownloadsProgressIcon, ephy_downloads_progress_icon, GTK_TYPE_DRAWING_AREA)
 
-static gboolean
-ephy_downloads_progress_icon_draw (GtkWidget *widget,
-                                   cairo_t   *cr)
+static void
+ephy_downloads_progress_icon_draw (GtkDrawingArea *area,
+                                   cairo_t        *cr,
+                                   int             width,
+                                   int             height,
+                                   gpointer        user_data)
 {
-  gint width, height;
   EphyDownloadsManager *manager;
   GtkStyleContext *style_context;
   GdkRGBA color;
   gdouble progress;
 
-  width = gtk_widget_get_allocated_width (widget);
-  height = gtk_widget_get_allocated_height (widget);
-
   manager = ephy_embed_shell_get_downloads_manager (ephy_embed_shell_get_default ());
   progress = ephy_downloads_manager_get_estimated_progress (manager);
 
-  style_context = gtk_widget_get_style_context (widget);
-  gtk_style_context_get_color (style_context, gtk_widget_get_state_flags (widget), &color);
+  style_context = gtk_widget_get_style_context (GTK_WIDGET (area));
+  gtk_style_context_get_color (style_context, &color);
   color.alpha *= progress == 1 ? 1 : 0.2;
 
   gdk_cairo_set_source_rgba (cr, &color);
@@ -68,22 +67,23 @@ ephy_downloads_progress_icon_draw (GtkWidget *widget,
     cairo_rectangle (cr, 0, 0, width, height * progress);
     cairo_fill (cr);
   }
-
-  return TRUE;
 }
 
 static void
 ephy_downloads_progress_icon_class_init (EphyDownloadsProgressIconClass *klass)
 {
-  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
-  widget_class->draw = ephy_downloads_progress_icon_draw;
 }
 
 static void
 ephy_downloads_progress_icon_init (EphyDownloadsProgressIcon *icon)
 {
   g_object_set (icon, "width-request", 16, "height-request", 16, NULL);
+
+  gtk_drawing_area_set_content_width (GTK_DRAWING_AREA (icon), 16);
+  gtk_drawing_area_set_content_height (GTK_DRAWING_AREA (icon), 16);
+  gtk_drawing_area_set_draw_func (GTK_DRAWING_AREA (icon),
+                                  ephy_downloads_progress_icon_draw,
+                                  NULL, NULL);
 }
 
 GtkWidget *
diff --git a/lib/widgets/ephy-file-chooser.c b/lib/widgets/ephy-file-chooser.c
index 1b6dd213c..1ce5f8592 100644
--- a/lib/widgets/ephy-file-chooser.c
+++ b/lib/widgets/ephy-file-chooser.c
@@ -98,27 +98,28 @@ ephy_create_file_chooser (const char            *title,
                           GtkFileChooserAction   action,
                           EphyFileFilterDefault  default_filter)
 {
-  GtkWidget *toplevel_window = gtk_widget_get_toplevel (parent);
+  GtkRoot *root = gtk_widget_get_root (parent);
   GtkFileChooser *dialog;
   GtkFileFilter *filter[EPHY_FILE_FILTER_LAST];
-  g_autofree char *downloads_dir = NULL;
+  g_autofree char *downloads_dir_path = NULL;
+  g_autoptr (GFile) downloads_dir = NULL;
 
-  g_assert (GTK_IS_WINDOW (toplevel_window));
+  g_assert (GTK_IS_WINDOW (root));
   g_assert (default_filter >= 0 && default_filter <= EPHY_FILE_FILTER_LAST);
 
   dialog = GTK_FILE_CHOOSER (gtk_file_chooser_native_new (title,
-                                                          GTK_WINDOW (toplevel_window),
+                                                          GTK_WINDOW (root),
                                                           action,
                                                           NULL,
                                                           _("_Cancel")));
   gtk_native_dialog_set_modal (GTK_NATIVE_DIALOG (dialog), TRUE);
 
-  downloads_dir = ephy_file_get_downloads_dir ();
+  downloads_dir_path = ephy_file_get_downloads_dir ();
+  downloads_dir = g_file_new_for_path (downloads_dir_path);
   gtk_file_chooser_add_shortcut_folder (dialog, downloads_dir, NULL);
 
   if (action == GTK_FILE_CHOOSER_ACTION_OPEN ||
-      action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER ||
-      action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) {
+      action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) {
     gtk_file_chooser_native_set_accept_label (GTK_FILE_CHOOSER_NATIVE (dialog), _("_Open"));
   } else if (action == GTK_FILE_CHOOSER_ACTION_SAVE) {
     gtk_file_chooser_native_set_accept_label (GTK_FILE_CHOOSER_NATIVE (dialog), _("_Save"));
diff --git a/lib/widgets/ephy-title-box.c b/lib/widgets/ephy-title-box.c
index 8eecbfc5e..5a2fb0044 100644
--- a/lib/widgets/ephy-title-box.c
+++ b/lib/widgets/ephy-title-box.c
@@ -33,7 +33,7 @@ enum {
 };
 
 struct _EphyTitleBox {
-  GtkEventBox parent_instance;
+  AdwBin parent_instance;
 
   GtkWidget *lock_image;
   GtkWidget *title;
@@ -44,78 +44,67 @@ struct _EphyTitleBox {
 
 static void ephy_title_box_title_widget_interface_init (EphyTitleWidgetInterface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (EphyTitleBox, ephy_title_box, GTK_TYPE_EVENT_BOX,
+G_DEFINE_TYPE_WITH_CODE (EphyTitleBox, ephy_title_box, ADW_TYPE_BIN,
                          G_IMPLEMENT_INTERFACE (EPHY_TYPE_TITLE_WIDGET,
                                                 ephy_title_box_title_widget_interface_init))
 
-static gboolean
-ephy_title_box_button_press_event (GtkWidget      *widget,
-                                   GdkEventButton *event)
+static void
+lock_pressed_cb (GtkGesture   *gesture,
+                 int           n_click,
+                 double        x,
+                 double        y,
+                 EphyTitleBox *title_box)
 {
-  EphyTitleBox *title_box = EPHY_TITLE_BOX (widget);
   GtkAllocation lock_allocation;
 
-  if (event->button != GDK_BUTTON_PRIMARY)
-    return GDK_EVENT_PROPAGATE;
-
   gtk_widget_get_allocation (title_box->lock_image, &lock_allocation);
 
-  if (event->x >= lock_allocation.x &&
-      event->x < lock_allocation.x + lock_allocation.width &&
-      event->y >= lock_allocation.y &&
-      event->y < lock_allocation.y + lock_allocation.height) {
-    g_signal_emit_by_name (title_box, "lock-clicked", (GdkRectangle *)&lock_allocation);
-    return GDK_EVENT_STOP;
-  }
+  g_signal_emit_by_name (title_box, "lock-clicked", (GdkRectangle *)&lock_allocation);
 
-  return GDK_EVENT_PROPAGATE;
+  gtk_gesture_set_state (gesture, GTK_EVENT_SEQUENCE_CLAIMED);
 }
 
 static void
 ephy_title_box_constructed (GObject *object)
 {
   EphyTitleBox *title_box = EPHY_TITLE_BOX (object);
-  GtkStyleContext *context;
   GtkWidget *vbox;
   GtkWidget *hbox;
+  GtkGesture *gesture;
 
   G_OBJECT_CLASS (ephy_title_box_parent_class)->constructed (object);
 
   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
   gtk_widget_set_valign (vbox, GTK_ALIGN_CENTER);
-  gtk_container_add (GTK_CONTAINER (title_box), vbox);
+  adw_bin_set_child (ADW_BIN (title_box), vbox);
 
   title_box->title = gtk_label_new (NULL);
-  context = gtk_widget_get_style_context (title_box->title);
-  gtk_style_context_add_class (context, "title");
-  gtk_label_set_line_wrap (GTK_LABEL (title_box->title), FALSE);
+  gtk_widget_add_css_class (title_box->title, "title");
   gtk_label_set_single_line_mode (GTK_LABEL (title_box->title), TRUE);
   gtk_label_set_ellipsize (GTK_LABEL (title_box->title), PANGO_ELLIPSIZE_END);
   gtk_label_set_text (GTK_LABEL (title_box->title), g_get_application_name ());
-  gtk_box_pack_start (GTK_BOX (vbox), title_box->title, FALSE, TRUE, 0);
+  gtk_box_append (GTK_BOX (vbox), title_box->title);
 
   hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4);
-  context = gtk_widget_get_style_context (hbox);
-  gtk_style_context_add_class (context, "subtitle");
+  gtk_widget_add_css_class (hbox, "subtitle");
   gtk_widget_set_halign (hbox, GTK_ALIGN_CENTER);
   gtk_widget_set_valign (hbox, GTK_ALIGN_BASELINE);
-  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
+  gtk_box_append (GTK_BOX (vbox), hbox);
 
   title_box->lock_image = gtk_image_new ();
-  g_object_set (title_box->lock_image, "icon-size", GTK_ICON_SIZE_MENU, NULL);
   gtk_widget_set_valign (title_box->lock_image, GTK_ALIGN_BASELINE);
-  gtk_box_pack_start (GTK_BOX (hbox), title_box->lock_image, FALSE, TRUE, 0);
+  gtk_box_append (GTK_BOX (hbox), title_box->lock_image);
 
   title_box->subtitle = gtk_label_new (NULL);
   gtk_widget_set_valign (title_box->subtitle, GTK_ALIGN_BASELINE);
-  gtk_label_set_line_wrap (GTK_LABEL (title_box->subtitle), FALSE);
   gtk_label_set_single_line_mode (GTK_LABEL (title_box->subtitle), TRUE);
   gtk_label_set_ellipsize (GTK_LABEL (title_box->subtitle), PANGO_ELLIPSIZE_END);
   gtk_label_set_selectable (GTK_LABEL (title_box->subtitle), TRUE);
-  gtk_box_pack_start (GTK_BOX (hbox), title_box->subtitle, FALSE, TRUE, 0);
+  gtk_box_append (GTK_BOX (hbox), title_box->subtitle);
 
-  gtk_widget_add_events (GTK_WIDGET (title_box), GDK_BUTTON_PRESS_MASK);
-  gtk_widget_show_all (GTK_WIDGET (title_box));
+  gesture = gtk_gesture_click_new ();
+  g_signal_connect (gesture, "pressed", G_CALLBACK (lock_pressed_cb), title_box);
+  gtk_widget_add_controller (title_box->lock_image, GTK_EVENT_CONTROLLER (gesture));
 }
 
 static const char *
@@ -223,12 +212,10 @@ static void
 ephy_title_box_class_init (EphyTitleBoxClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
   object_class->constructed = ephy_title_box_constructed;
   object_class->get_property = ephy_title_box_get_property;
   object_class->set_property = ephy_title_box_set_property;
-  widget_class->button_press_event = ephy_title_box_button_press_event;
 
   g_object_class_override_property (object_class, PROP_ADDRESS, "address");
   g_object_class_override_property (object_class, PROP_SECURITY_LEVEL, "security-level");
diff --git a/lib/widgets/ephy-title-box.h b/lib/widgets/ephy-title-box.h
index be6ab7c4e..5c5e8b1d9 100644
--- a/lib/widgets/ephy-title-box.h
+++ b/lib/widgets/ephy-title-box.h
@@ -21,8 +21,7 @@
 
 #pragma once
 
-#include <gtk/gtk.h>
-#include <webkit2/webkit2.h>
+#include <adwaita.h>
 
 #include "ephy-security-levels.h"
 
@@ -30,7 +29,7 @@ G_BEGIN_DECLS
 
 #define EPHY_TYPE_TITLE_BOX (ephy_title_box_get_type ())
 
-G_DECLARE_FINAL_TYPE (EphyTitleBox, ephy_title_box, EPHY, TITLE_BOX, GtkEventBox)
+G_DECLARE_FINAL_TYPE (EphyTitleBox, ephy_title_box, EPHY, TITLE_BOX, AdwBin)
 
 EphyTitleBox       *ephy_title_box_new                  (void);
 
diff --git a/lib/widgets/meson.build b/lib/widgets/meson.build
index 453bc2d7f..8af44a2da 100644
--- a/lib/widgets/meson.build
+++ b/lib/widgets/meson.build
@@ -1,34 +1,32 @@
-types_headers = [
-  'ephy-location-entry.h'
-]
+#types_headers = [
+#  'ephy-location-entry.h'
+#]
 
-enums = gnome.mkenums_simple('ephy-widgets-type-builtins',
-  sources: types_headers
-)
+#enums = gnome.mkenums_simple('ephy-widgets-type-builtins',
+#  sources: types_headers
+#)
 
 libephywidgets_sources = [
-  'contrib/nautilus-floating-bar.c',
-  'ephy-certificate-dialog.c',
+#  'contrib/nautilus-floating-bar.c',
+#  'ephy-certificate-dialog.c',
   'ephy-downloads-popover.c',
   'ephy-downloads-progress-icon.c',
   'ephy-download-widget.c',
   'ephy-file-chooser.c',
-  'ephy-location-entry.c',
-  'ephy-security-popover.c',
+#  'ephy-location-entry.c',
+#  'ephy-security-popover.c',
   'ephy-title-box.c',
   'ephy-title-widget.c',
-  enums
+#  enums
 ]
 
 libephywidgets_deps = [
-  libdazzle_dep,
   ephymisc_dep,
   gcr_dep,
   gdk_pixbuf_dep,
   gio_dep,
   glib_dep,
   gtk_dep,
-  libdazzle_dep,
   libsoup_dep,
   webkit2gtk_dep,
 ]
diff --git a/meson.build b/meson.build
index 0b9f862b2..dd9bc4ca4 100644
--- a/meson.build
+++ b/meson.build
@@ -73,7 +73,7 @@ conf.set_quoted('GSB_API_KEY', gsb_api_key)
 conf.set10('ENABLE_GSB', gsb_api_key != '')
 
 glib_requirement = '>= 2.67.1'
-gtk_requirement = '>= 3.24.0'
+gtk_requirement = '>= 4.5.0'
 nettle_requirement = '>= 3.4'
 webkitgtk_requirement = '>= 2.33.2'
 
@@ -84,29 +84,22 @@ gio_dep = dependency('gio-2.0', version: glib_requirement)
 gio_unix_dep = dependency('gio-unix-2.0', version: glib_requirement)
 glib_dep = dependency('glib-2.0', version: glib_requirement)
 gsettings_desktop_schemas = dependency('gsettings-desktop-schemas')
-gtk_dep = dependency('gtk+-3.0', version: gtk_requirement)
-gtk_unix_print_dep = dependency('gtk+-unix-print-3.0', version: gtk_requirement)
+gtk_dep = dependency('gtk4', version: gtk_requirement)
+gtk_unix_print_dep = dependency('gtk4-unix-print', version: gtk_requirement)
 hogweed_dep = dependency('hogweed', version: nettle_requirement)
 iso_codes_dep = dependency('iso-codes', version: '>= 0.35')
 json_glib_dep = dependency('json-glib-1.0', version: '>= 1.6')
 libarchive_dep = dependency('libarchive')
-libdazzle_dep = dependency('libdazzle-1.0', version: '>= 3.37.1')
-libhandy_dep = dependency('libhandy-1', version: '>= 1.5.0')
+libadwaita_dep = dependency('libadwaita-1', version: '>= 1.0.0')
 libsecret_dep = dependency('libsecret-1', version: '>= 0.19.0')
 libxml_dep = dependency('libxml-2.0', version: '>= 2.6.12')
 nettle_dep = dependency('nettle', version: nettle_requirement)
 portal_dep = dependency('libportal', version: '>= 0.0.2', required: get_option('libportal'))
 sqlite3_dep = dependency('sqlite3', version: '>= 3.22')
 
-if get_option('soup2').enabled()
-  libsoup_dep = dependency('libsoup-2.4', version: '>= 2.48.0')
-  webkit2gtk_dep = dependency('webkit2gtk-4.0', version: webkitgtk_requirement)
-  webkit2gtk_web_extension_dep = dependency('webkit2gtk-web-extension-4.0', version: webkitgtk_requirement)
-else
-  libsoup_dep = dependency('libsoup-3.0', version: '>= 2.99.4')
-  webkit2gtk_dep = dependency('webkit2gtk-4.1', version: webkitgtk_requirement)
-  webkit2gtk_web_extension_dep = dependency('webkit2gtk-web-extension-4.1', version: webkitgtk_requirement)
-endif
+libsoup_dep = dependency('libsoup-3.0', version: '>= 2.99.4')
+webkit2gtk_dep = dependency('webkit2gtk-5.0', version: webkitgtk_requirement)
+webkit2gtk_web_extension_dep = dependency('webkit2gtk-web-extension-5.0', version: webkitgtk_requirement)
 
 conf.set10('USE_LIBPORTAL', portal_dep.found())
 
diff --git a/org.gnome.Epiphany.json b/org.gnome.Epiphany.json
index 9f37ea823..5798f7fe4 100644
--- a/org.gnome.Epiphany.json
+++ b/org.gnome.Epiphany.json
@@ -89,16 +89,6 @@
                 }
             ]
         },
-        {
-            "name" : "libdazzle",
-            "buildsystem" : "meson",
-            "sources" : [
-                {
-                    "type" : "git",
-                    "url" : "https://gitlab.gnome.org/GNOME/libdazzle.git";
-                }
-            ]
-        },
         {
             "name" : "libportal",
             "buildsystem" : "meson",
diff --git a/src/bookmarks/ephy-bookmark-properties.c b/src/bookmarks/ephy-bookmark-properties.c
index 67c7dd3bb..6d3eefcbd 100644
--- a/src/bookmarks/ephy-bookmark-properties.c
+++ b/src/bookmarks/ephy-bookmark-properties.c
@@ -80,8 +80,8 @@ flow_box_sort_func (GtkFlowBoxChild *child1,
   g_assert (GTK_IS_FLOW_BOX_CHILD (child1));
   g_assert (GTK_IS_FLOW_BOX_CHILD (child2));
 
-  box1 = gtk_bin_get_child (GTK_BIN (child1));
-  box2 = gtk_bin_get_child (GTK_BIN (child2));
+  box1 = gtk_flow_box_child_get_child (GTK_FLOW_BOX_CHILD (child1));
+  box2 = gtk_flow_box_child_get_child (GTK_FLOW_BOX_CHILD (child2));
 
   label1 = g_object_get_data (G_OBJECT (box1), "label");
   label2 = g_object_get_data (G_OBJECT (box2), "label");
@@ -95,15 +95,14 @@ flow_box_sort_func (GtkFlowBoxChild *child1,
 static void
 update_tags_scrollbar (EphyBookmarkProperties *self)
 {
-  g_autoptr (GList) children = NULL;
-  gint n_tags;
+  gboolean show_scrollbar;
 
-  children = gtk_container_get_children (GTK_CONTAINER (self->tags_box));
-  n_tags = g_list_length (children);
+  /* We only allow showing scrollbar if we have 4 or more tags. */
+  show_scrollbar = !!gtk_flow_box_get_child_at_index (GTK_FLOW_BOX (self->tags_box), 3);
 
   g_object_set (self->tags_scrolled_window,
                 "vscrollbar-policy",
-                (n_tags > 3) ? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER,
+                show_scrollbar ? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER,
                 NULL);
 }
 
@@ -112,7 +111,6 @@ ephy_bookmark_properties_tags_box_child_activated_cb (EphyBookmarkProperties *se
                                                       GtkFlowBoxChild        *child,
                                                       GtkFlowBox             *flow_box)
 {
-  GtkStyleContext *context;
   GtkWidget *box;
   GtkWidget *label;
 
@@ -120,18 +118,17 @@ ephy_bookmark_properties_tags_box_child_activated_cb (EphyBookmarkProperties *se
   g_assert (GTK_IS_FLOW_BOX_CHILD (child));
   g_assert (GTK_IS_FLOW_BOX (flow_box));
 
-  box = gtk_bin_get_child (GTK_BIN (child));
+  box = gtk_flow_box_child_get_child (GTK_FLOW_BOX_CHILD (child));
   label = g_object_get_data (G_OBJECT (box), "label");
 
-  context = gtk_widget_get_style_context (GTK_WIDGET (child));
-  if (gtk_style_context_has_class (context, "bookmark-tag-widget-selected")) {
+  if (gtk_widget_has_css_class (GTK_WIDGET (child), "bookmark-tag-widget-selected")) {
     ephy_bookmark_remove_tag (self->bookmark,
                               gtk_label_get_text (GTK_LABEL (label)));
-    gtk_style_context_remove_class (context, "bookmark-tag-widget-selected");
+    gtk_widget_remove_css_class (GTK_WIDGET (child), "bookmark-tag-widget-selected");
   } else {
     ephy_bookmark_add_tag (self->bookmark,
                            gtk_label_get_text (GTK_LABEL (label)));
-    gtk_style_context_add_class (context, "bookmark-tag-widget-selected");
+    gtk_widget_add_css_class (GTK_WIDGET (child), "bookmark-tag-widget-selected");
   }
 }
 
@@ -153,7 +150,7 @@ ephy_bookmark_properties_tag_widget_button_clicked_cb (EphyBookmarkProperties *s
   ephy_bookmarks_manager_delete_tag (self->manager, gtk_label_get_text (label));
 
   flow_box_child = gtk_widget_get_parent (box);
-  gtk_widget_destroy (flow_box_child);
+  gtk_flow_box_remove (GTK_FLOW_BOX (self->tags_box), flow_box_child);
   update_tags_scrollbar (self);
 }
 
@@ -165,7 +162,6 @@ ephy_bookmark_properties_create_tag_widget (EphyBookmarkProperties *self,
   GtkWidget *widget;
   GtkWidget *box;
   GtkWidget *label;
-  GtkStyleContext *context;
   gboolean default_tag;
   const char *label_text;
 
@@ -178,11 +174,10 @@ ephy_bookmark_properties_create_tag_widget (EphyBookmarkProperties *self,
   if (default_tag) {
     GtkWidget *image;
 
-    image = gtk_image_new_from_icon_name ("emblem-favorite-symbolic",
-                                          GTK_ICON_SIZE_BUTTON);
+    image = gtk_image_new_from_icon_name ("emblem-favorite-symbolic");
     gtk_widget_set_margin_bottom (image, 8);
     gtk_widget_set_margin_top (image, 8);
-    gtk_box_pack_start (GTK_BOX (box), image, FALSE, TRUE, 0);
+    gtk_box_append (GTK_BOX (box), image);
   }
 
   label_text = default_tag ? EPHY_BOOKMARKS_FAVORITES_TAG : tag;
@@ -190,18 +185,15 @@ ephy_bookmark_properties_create_tag_widget (EphyBookmarkProperties *self,
   gtk_widget_set_hexpand (label, TRUE);
   gtk_label_set_xalign (GTK_LABEL (label), 0);
   gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
-  gtk_box_pack_start (GTK_BOX (box), label, FALSE, TRUE, 0);
+  gtk_box_append (GTK_BOX (box), label);
 
   if (!default_tag) {
     GtkWidget *button;
 
-    button = gtk_button_new ();
-    gtk_button_set_image (GTK_BUTTON (button),
-                          gtk_image_new_from_icon_name ("window-close-symbolic",
-                                                        GTK_ICON_SIZE_MENU));
+    button = gtk_button_new_from_icon_name ("window-close-symbolic");
     gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
-    gtk_style_context_add_class (gtk_widget_get_style_context (button), "flat");
-    gtk_box_pack_start (GTK_BOX (box), button, FALSE, TRUE, 0);
+    gtk_widget_add_css_class (button, "flat");
+    gtk_box_append (GTK_BOX (box), button);
     g_signal_connect_object (button, "clicked",
                              G_CALLBACK (ephy_bookmark_properties_tag_widget_button_clicked_cb),
                              self,
@@ -210,30 +202,22 @@ ephy_bookmark_properties_create_tag_widget (EphyBookmarkProperties *self,
 
   g_object_set_data (G_OBJECT (box), "label", label);
 
-  gtk_container_add (GTK_CONTAINER (widget), box);
+  gtk_flow_box_child_set_child (GTK_FLOW_BOX_CHILD (widget), box);
 
-  context = gtk_widget_get_style_context (widget);
-  gtk_style_context_add_class (context, "bookmark-tag-widget");
+  gtk_widget_add_css_class (widget, "bookmark-tag-widget");
   if (selected)
-    gtk_style_context_add_class (context, "bookmark-tag-widget-selected");
-
-  gtk_widget_show_all (widget);
+    gtk_widget_add_css_class (widget, "bookmark-tag-widget-selected");
 
   return widget;
 }
 
 static void
-ephy_bookmark_properties_actions_add_tag (GSimpleAction *action,
-                                          GVariant      *value,
-                                          gpointer       user_data)
+ephy_bookmark_properties_actions_add_tag (EphyBookmarkProperties *self)
 {
-  EphyBookmarkProperties *self = user_data;
   GtkEntryBuffer *buffer;
   GtkWidget *widget;
   const char *text;
 
-  g_assert (EPHY_IS_BOOKMARK_PROPERTIES (self));
-
   buffer = gtk_entry_get_buffer (GTK_ENTRY (self->add_tag_entry));
   text = gtk_entry_buffer_get_text (buffer);
 
@@ -249,26 +233,20 @@ ephy_bookmark_properties_actions_add_tag (GSimpleAction *action,
   update_tags_scrollbar (self);
 
   /* Empty entry and disable button's action until new text is inserted */
-  gtk_entry_set_text (GTK_ENTRY (self->add_tag_entry), "");
-  g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE);
+  gtk_editable_set_text (GTK_EDITABLE (self->add_tag_entry), "");
+    gtk_widget_action_set_enabled (GTK_WIDGET (self), "bookmark-properties.add-tag", FALSE);
 
   gtk_widget_grab_focus (GTK_WIDGET (self->add_tag_entry));
 }
 
 static void
-ephy_bookmark_properties_actions_remove_bookmark (GSimpleAction *action,
-                                                  GVariant      *value,
-                                                  gpointer       user_data)
+ephy_bookmark_properties_actions_remove_bookmark (EphyBookmarkProperties *self)
 {
-  EphyBookmarkProperties *self = user_data;
-
-  g_assert (EPHY_IS_BOOKMARK_PROPERTIES (self));
-
   self->bookmark_is_removed = TRUE;
   ephy_bookmarks_manager_remove_bookmark (self->manager, self->bookmark);
 
   if (self->type == EPHY_BOOKMARK_PROPERTIES_TYPE_DIALOG)
-    gtk_widget_destroy (self->parent);
+    gtk_window_destroy (GTK_WINDOW (self->parent));
 }
 
 static void
@@ -276,20 +254,16 @@ ephy_bookmark_properties_buffer_text_changed_cb (EphyBookmarkProperties *self,
                                                  GParamSpec             *pspec,
                                                  GtkEntryBuffer         *buffer)
 {
-  GActionGroup *group;
-  GAction *action;
   const char *text;
 
   g_assert (EPHY_IS_BOOKMARK_PROPERTIES (self));
   g_assert (GTK_IS_ENTRY_BUFFER (buffer));
 
-  group = gtk_widget_get_action_group (GTK_WIDGET (self), "bookmark-properties");
-  action = g_action_map_lookup_action (G_ACTION_MAP (group), "add-tag");
   text = gtk_entry_buffer_get_text (buffer);
   if (ephy_bookmarks_manager_tag_exists (self->manager, text) || g_strcmp0 (text, "") == 0)
-    g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE);
+    gtk_widget_action_set_enabled (GTK_WIDGET (self), "bookmark-properties.add-tag", FALSE);
   else
-    g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE);
+    gtk_widget_action_set_enabled (GTK_WIDGET (self), "bookmark-properties.add-tag", TRUE);
 }
 
 static void
@@ -379,15 +353,15 @@ ephy_bookmark_properties_constructed (GObject *object)
 
   /* Set appearance based on type */
   if (self->type == EPHY_BOOKMARK_PROPERTIES_TYPE_DIALOG) {
-    gtk_container_remove (GTK_CONTAINER (self), self->popover_bookmark_label);
+    gtk_box_remove (GTK_BOX (self), self->popover_bookmark_label);
   } else if (self->type == EPHY_BOOKMARK_PROPERTIES_TYPE_POPOVER) {
-    gtk_container_remove (GTK_CONTAINER (self), self->address_label);
-    gtk_container_remove (GTK_CONTAINER (self), self->address_entry);
+    gtk_box_remove (GTK_BOX (self), self->address_label);
+    gtk_box_remove (GTK_BOX (self), self->address_entry);
   }
 
   /* Set text for name entry */
-  gtk_entry_set_text (GTK_ENTRY (self->name_entry),
-                      ephy_bookmark_get_title (self->bookmark));
+  gtk_editable_set_text (GTK_EDITABLE (self->name_entry),
+                         ephy_bookmark_get_title (self->bookmark));
 
   g_object_bind_property (GTK_ENTRY (self->name_entry), "text",
                           self->bookmark, "title",
@@ -399,7 +373,7 @@ ephy_bookmark_properties_constructed (GObject *object)
 
     address = ephy_bookmark_get_url (self->bookmark);
     decoded_address = ephy_uri_decode (address);
-    gtk_entry_set_text (GTK_ENTRY (self->address_entry), decoded_address);
+    gtk_editable_set_text (GTK_EDITABLE (self->address_entry), decoded_address);
 
     g_object_bind_property (GTK_ENTRY (self->address_entry), "text",
                             self->bookmark, "bmkUri",
@@ -431,7 +405,6 @@ ephy_bookmark_properties_constructed (GObject *object)
                            G_CALLBACK (ephy_bookmark_properties_tags_box_child_activated_cb),
                            self,
                            G_CONNECT_SWAPPED);
-  gtk_widget_show_all (self->tags_box);
 }
 
 static void
@@ -494,19 +467,16 @@ ephy_bookmark_properties_class_init (EphyBookmarkPropertiesClass *klass)
   gtk_widget_class_bind_template_child (widget_class, EphyBookmarkProperties, tags_scrolled_window);
   gtk_widget_class_bind_template_child (widget_class, EphyBookmarkProperties, add_tag_entry);
   gtk_widget_class_bind_template_child (widget_class, EphyBookmarkProperties, add_tag_button);
-}
 
-static const GActionEntry entries[] = {
-  { "add-tag", ephy_bookmark_properties_actions_add_tag },
-  { "remove-bookmark", ephy_bookmark_properties_actions_remove_bookmark }
-};
+  gtk_widget_class_install_action (widget_class, "bookmark-properties.add-tag",
+                                   NULL, (GtkWidgetActionActivateFunc) 
ephy_bookmark_properties_actions_add_tag);
+  gtk_widget_class_install_action (widget_class, "bookmark-properties.remove-bookmark",
+                                   NULL, (GtkWidgetActionActivateFunc) 
ephy_bookmark_properties_actions_remove_bookmark);
+}
 
 static void
 ephy_bookmark_properties_init (EphyBookmarkProperties *self)
 {
-  g_autoptr (GSimpleActionGroup) group = NULL;
-  GAction *action;
-
   gtk_widget_init_template (GTK_WIDGET (self));
 
   self->manager = ephy_shell_get_bookmarks_manager (ephy_shell_get_default ());
@@ -535,16 +505,9 @@ ephy_bookmark_properties_init (EphyBookmarkProperties *self)
                               (GtkFlowBoxSortFunc)flow_box_sort_func,
                               NULL, NULL);
 
-  group = g_simple_action_group_new ();
-  g_action_map_add_action_entries (G_ACTION_MAP (group), entries,
-                                   G_N_ELEMENTS (entries), self);
-  gtk_widget_insert_action_group (GTK_WIDGET (self), "bookmark-properties",
-                                  G_ACTION_GROUP (group));
-
   /* Disable the "add-tag" action until text is inserted in the corresponding
    * entry */
-  action = g_action_map_lookup_action (G_ACTION_MAP (group), "add-tag");
-  g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE);
+  gtk_widget_action_set_enabled (GTK_WIDGET (self), "bookmark-properties.add-tag", FALSE);
 
   g_signal_connect_object (gtk_entry_get_buffer (GTK_ENTRY (self->add_tag_entry)),
                            "notify::text",
diff --git a/src/bookmarks/ephy-bookmark-row.c b/src/bookmarks/ephy-bookmark-row.c
index 5caef810c..df99630c7 100644
--- a/src/bookmarks/ephy-bookmark-row.c
+++ b/src/bookmarks/ephy-bookmark-row.c
@@ -60,7 +60,7 @@ ephy_bookmark_row_button_clicked_cb (EphyBookmarkRow *row,
 
   dialog = g_object_new (GTK_TYPE_DIALOG,
                          "title", _("Bookmark Properties"),
-                         "transient-for", GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (row))),
+                         "transient-for", GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (row))),
                          "use-header-bar", TRUE,
                          "modal", TRUE,
                          NULL);
@@ -70,12 +70,12 @@ ephy_bookmark_row_button_clicked_cb (EphyBookmarkRow *row,
   grid = ephy_bookmark_properties_new (ephy_bookmark_row_get_bookmark (row),
                                        EPHY_BOOKMARK_PROPERTIES_TYPE_DIALOG,
                                        dialog);
-  gtk_window_set_default (GTK_WINDOW (dialog),
-                          ephy_bookmark_properties_get_add_tag_button (EPHY_BOOKMARK_PROPERTIES (grid)));
+  gtk_window_set_default_widget (GTK_WINDOW (dialog),
+                                 ephy_bookmark_properties_get_add_tag_button (EPHY_BOOKMARK_PROPERTIES 
(grid)));
 
-  gtk_container_add (GTK_CONTAINER (content_area), grid);
+  gtk_box_append (GTK_BOX (content_area), grid);
 
-  gtk_widget_show (dialog);
+  gtk_window_present (GTK_WINDOW (dialog));
 }
 
 static void
diff --git a/src/ephy-action-bar-end.c b/src/ephy-action-bar-end.c
index 0104fb336..436eb0a45 100644
--- a/src/ephy-action-bar-end.c
+++ b/src/ephy-action-bar-end.c
@@ -20,11 +20,10 @@
  */
 
 #include "ephy-action-bar-end.h"
-#include "ephy-add-bookmark-popover.h"
+//#include "ephy-add-bookmark-popover.h"
 #include "ephy-desktop-utils.h"
 #include "ephy-downloads-popover.h"
 #include "ephy-downloads-progress-icon.h"
-#include "ephy-location-entry.h"
 #include "ephy-shell.h"
 #include "ephy-window.h"
 
@@ -36,7 +35,6 @@ struct _EphyActionBarEnd {
   GtkBox parent_instance;
 
   GtkWidget *bookmark_button;
-  GtkWidget *bookmark_image;
   GtkWidget *bookmarks_button;
   GtkWidget *downloads_revealer;
   GtkWidget *downloads_button;
@@ -50,7 +48,7 @@ struct _EphyActionBarEnd {
 
 G_DEFINE_TYPE (EphyActionBarEnd, ephy_action_bar_end, GTK_TYPE_BOX)
 
-static void begin_complete_theatrics (EphyActionBarEnd *self);
+//static void begin_complete_theatrics (EphyActionBarEnd *self);
 
 static void
 remove_downloads_button_attention_style (EphyActionBarEnd *self)
@@ -91,6 +89,7 @@ download_added_cb (EphyDownloadsManager *manager,
                    EphyDownload         *download,
                    EphyActionBarEnd     *action_bar_end)
 {
+#if 0
   GtkAllocation rect;
   DzlBoxTheatric *theatric;
 
@@ -128,8 +127,10 @@ download_added_cb (EphyDownloadsManager *manager,
                              "alpha", 0.0,
                              NULL);
   }
+#endif
 }
 
+#if 0
 static gboolean
 begin_complete_theatrics_from_main (gpointer user_data)
 {
@@ -188,14 +189,15 @@ begin_complete_theatrics (EphyActionBarEnd *self)
                            "alpha", 0.0,
                            NULL);
 }
+#endif
 
 static void
 download_completed_cb (EphyDownloadsManager *manager,
                        EphyDownload         *download,
                        EphyActionBarEnd     *action_bar_end)
 {
-  if (gtk_widget_get_mapped (GTK_WIDGET (action_bar_end)))
-    begin_complete_theatrics (action_bar_end);
+//  if (gtk_widget_get_mapped (GTK_WIDGET (action_bar_end)))
+//    begin_complete_theatrics (action_bar_end);
 }
 
 static void
@@ -235,9 +237,6 @@ ephy_action_bar_end_class_init (EphyActionBarEndClass *klass)
   gtk_widget_class_bind_template_child (widget_class,
                                         EphyActionBarEnd,
                                         bookmark_button);
-  gtk_widget_class_bind_template_child (widget_class,
-                                        EphyActionBarEnd,
-                                        bookmark_image);
   gtk_widget_class_bind_template_child (widget_class,
                                         EphyActionBarEnd,
                                         bookmarks_button);
@@ -261,12 +260,12 @@ ephy_action_bar_end_class_init (EphyActionBarEndClass *klass)
 static void
 add_bookmark_button_clicked_cb (EphyActionBarEnd *action_bar_end)
 {
-  GtkWidget *window = gtk_widget_get_toplevel (GTK_WIDGET (action_bar_end->bookmark_button));
-  GtkWidget *popover = ephy_add_bookmark_popover_new (GTK_WIDGET (action_bar_end->bookmark_button), window);
+//  GtkRoot *window = gtk_widget_get_root (GTK_WIDGET (action_bar_end->bookmark_button));
+//  GtkWidget *popover = ephy_add_bookmark_popover_new (GTK_WIDGET (action_bar_end->bookmark_button), 
window);
 
-  g_signal_connect_object (popover, "update-state", G_CALLBACK (ephy_window_sync_bookmark_state), 
action_bar_end, G_CONNECT_SWAPPED);
+//  g_signal_connect_object (popover, "update-state", G_CALLBACK (ephy_window_sync_bookmark_state), 
action_bar_end, G_CONNECT_SWAPPED);
 
-  ephy_add_bookmark_popover_show (EPHY_ADD_BOOKMARK_POPOVER (popover));
+//  ephy_add_bookmark_popover_show (EPHY_ADD_BOOKMARK_POPOVER (popover));
 }
 
 static void
@@ -292,14 +291,10 @@ ephy_action_bar_end_init (EphyActionBarEnd *action_bar_end)
   }
 
   if (is_desktop_pantheon ()) {
-    gtk_button_set_image (GTK_BUTTON (action_bar_end->bookmarks_button),
-                          gtk_image_new_from_icon_name ("user-bookmarks",
-                                                        GTK_ICON_SIZE_LARGE_TOOLBAR));
+    gtk_menu_button_set_icon_name (GTK_MENU_BUTTON (action_bar_end->bookmarks_button),
+                                   "user-bookmarks");
     gtk_image_set_from_icon_name (GTK_IMAGE (action_bar_end->downloads_icon),
-                                  "browser-download",
-                                  GTK_ICON_SIZE_LARGE_TOOLBAR);
-    gtk_style_context_add_class (gtk_widget_get_style_context (action_bar_end->downloads_button),
-                                 "flat");
+                                  "browser-download");
   }
 
   g_signal_connect_object (downloads_manager, "download-added",
@@ -367,7 +362,7 @@ void
 ephy_action_bar_end_add_browser_action (EphyActionBarEnd *action_bar_end,
                                         GtkWidget        *action)
 {
-  gtk_container_add (GTK_CONTAINER (action_bar_end->browser_action_box), action);
+  gtk_box_append (GTK_BOX (action_bar_end->browser_action_box), action);
 }
 
 void
@@ -390,15 +385,13 @@ ephy_action_bar_end_set_bookmark_icon_state (EphyActionBarEnd      *action_bar_e
       break;
     case EPHY_BOOKMARK_ICON_EMPTY:
       gtk_widget_set_visible (action_bar_end->bookmark_button, TRUE);
-      gtk_image_set_from_icon_name (GTK_IMAGE (action_bar_end->bookmark_image),
-                                    "non-starred-symbolic",
-                                    GTK_ICON_SIZE_BUTTON);
+      gtk_button_set_icon_name (GTK_BUTTON (action_bar_end->bookmark_button),
+                                "non-starred-symbolic");
       break;
     case EPHY_BOOKMARK_ICON_BOOKMARKED:
       gtk_widget_set_visible (action_bar_end->bookmark_button, TRUE);
-      gtk_image_set_from_icon_name (GTK_IMAGE (action_bar_end->bookmark_image),
-                                    "starred-symbolic",
-                                    GTK_ICON_SIZE_BUTTON);
+      gtk_button_set_icon_name (GTK_BUTTON (action_bar_end->bookmark_button),
+                                "starred-symbolic");
       break;
     default:
       g_assert_not_reached ();
diff --git a/src/ephy-action-bar-start.c b/src/ephy-action-bar-start.c
index 913700590..2fd4dabe6 100644
--- a/src/ephy-action-bar-start.c
+++ b/src/ephy-action-bar-start.c
@@ -43,7 +43,6 @@ struct _EphyActionBarStart {
   GtkWidget *navigation_back;
   GtkWidget *navigation_forward;
   GtkWidget *combined_stop_reload_button;
-  GtkWidget *combined_stop_reload_image;
   GtkWidget *homepage_button;
   GtkWidget *new_tab_button;
   GtkWidget *placeholder;
@@ -63,6 +62,7 @@ typedef enum {
   WEBKIT_HISTORY_FORWARD
 } WebKitHistoryType;
 
+#if 0
 typedef struct {
   GtkWidget *button;
   EphyWindow *window;
@@ -465,6 +465,7 @@ navigation_leave_notify_event_cb (GtkButton *button,
 
   return GDK_EVENT_PROPAGATE;
 }
+#endif
 
 static void
 homepage_url_changed (GSettings  *settings,
@@ -515,7 +516,7 @@ ephy_action_bar_start_constructed (GObject *object)
   G_OBJECT_CLASS (ephy_action_bar_start_parent_class)->constructed (object);
 
   gtk_widget_init_template (GTK_WIDGET (action_bar_start));
-
+#if 0
   /* Back */
   g_signal_connect (action_bar_start->navigation_back, "button-press-event",
                     G_CALLBACK (navigation_button_press_event_cb), action_bar_start);
@@ -531,7 +532,7 @@ ephy_action_bar_start_constructed (GObject *object)
                     G_CALLBACK (navigation_button_release_event_cb), action_bar_start);
   g_signal_connect (action_bar_start->navigation_forward, "leave-notify-event",
                     G_CALLBACK (navigation_leave_notify_event_cb), action_bar_start);
-
+#endif
   /* Combined_stop_reload */
   gtk_widget_set_tooltip_text (action_bar_start->combined_stop_reload_button, _(REFRESH_BUTTON_TOOLTIP));
 
@@ -547,25 +548,22 @@ ephy_action_bar_start_constructed (GObject *object)
   } else {
     gtk_widget_set_visible (action_bar_start->homepage_button, FALSE);
   }
-  g_signal_connect (action_bar_start->homepage_button, "button-release-event",
-                    G_CALLBACK (homepage_button_release_event_cb), action_bar_start);
+//  g_signal_connect (action_bar_start->homepage_button, "button-release-event",
+//                    G_CALLBACK (homepage_button_release_event_cb), action_bar_start);
 
   /* New Tab Button */
   update_new_tab_button_visibility (action_bar_start);
 
-  g_signal_connect (action_bar_start->new_tab_button, "button-release-event",
-                    G_CALLBACK (new_tab_button_release_event_cb), action_bar_start);
+//  g_signal_connect (action_bar_start->new_tab_button, "button-release-event",
+//                    G_CALLBACK (new_tab_button_release_event_cb), action_bar_start);
 
   if (is_desktop_pantheon ()) {
-    gtk_button_set_image (GTK_BUTTON (action_bar_start->navigation_back),
-                          gtk_image_new_from_icon_name ("go-previous-symbolic",
-                                                        get_icon_size ()));
-    gtk_button_set_image (GTK_BUTTON (action_bar_start->navigation_forward),
-                          gtk_image_new_from_icon_name ("go-next-symbolic",
-                                                        get_icon_size ()));
-    gtk_button_set_image (GTK_BUTTON (action_bar_start->homepage_button),
-                          gtk_image_new_from_icon_name ("go-home-symbolic",
-                                                        get_icon_size ()));
+    gtk_button_set_icon_name (GTK_BUTTON (action_bar_start->navigation_back),
+                              "go-previous-symbolic");
+    gtk_button_set_icon_name (GTK_BUTTON (action_bar_start->navigation_forward),
+                              "go-next-symbolic");
+    gtk_button_set_icon_name (GTK_BUTTON (action_bar_start->homepage_button),
+                              "go-home-symbolic");
   }
 
   if (ephy_profile_dir_is_web_application ()) {
@@ -599,9 +597,6 @@ ephy_action_bar_start_class_init (EphyActionBarStartClass *klass)
   gtk_widget_class_bind_template_child (widget_class,
                                         EphyActionBarStart,
                                         combined_stop_reload_button);
-  gtk_widget_class_bind_template_child (widget_class,
-                                        EphyActionBarStart,
-                                        combined_stop_reload_image);
   gtk_widget_class_bind_template_child (widget_class,
                                         EphyActionBarStart,
                                         homepage_button);
@@ -636,16 +631,14 @@ ephy_action_bar_start_change_combined_stop_reload_state (EphyActionBarStart *act
                                                          gboolean            loading)
 {
   if (loading) {
-    gtk_image_set_from_icon_name (GTK_IMAGE (action_bar_start->combined_stop_reload_image),
-                                  "process-stop-symbolic",
-                                  get_icon_size ());
+    gtk_button_set_icon_name (GTK_BUTTON (action_bar_start->combined_stop_reload_button),
+                              "process-stop-symbolic");
     /* Translators: tooltip for the stop button */
     gtk_widget_set_tooltip_text (action_bar_start->combined_stop_reload_button,
                                  _("Stop loading the current page"));
   } else {
-    gtk_image_set_from_icon_name (GTK_IMAGE (action_bar_start->combined_stop_reload_image),
-                                  "view-refresh-symbolic",
-                                  get_icon_size ());
+    gtk_button_set_icon_name (GTK_BUTTON (action_bar_start->combined_stop_reload_button),
+                              "view-refresh-symbolic");
     gtk_widget_set_tooltip_text (action_bar_start->combined_stop_reload_button,
                                  _(REFRESH_BUTTON_TOOLTIP));
   }
diff --git a/src/ephy-action-bar.c b/src/ephy-action-bar.c
index 0245b6dc5..a381a8756 100644
--- a/src/ephy-action-bar.c
+++ b/src/ephy-action-bar.c
@@ -21,7 +21,6 @@
 
 #include "ephy-action-bar.h"
 #include "ephy-add-bookmark-popover.h"
-#include "ephy-location-entry.h"
 #include "ephy-pages-button.h"
 #include "ephy-settings.h"
 #include "ephy-shell.h"
@@ -37,7 +36,7 @@ enum {
 static GParamSpec *object_properties[N_PROPERTIES] = { NULL, };
 
 struct _EphyActionBar {
-  GtkBin parent_instance;
+  AdwBin parent_instance;
 
   EphyWindow *window;
   GtkRevealer *revealer;
@@ -49,7 +48,7 @@ struct _EphyActionBar {
   gboolean can_reveal;
 };
 
-G_DEFINE_TYPE (EphyActionBar, ephy_action_bar, GTK_TYPE_BIN)
+G_DEFINE_TYPE (EphyActionBar, ephy_action_bar, ADW_TYPE_BIN)
 
 static void
 sync_chromes_visibility (EphyActionBar *action_bar)
diff --git a/src/ephy-action-bar.h b/src/ephy-action-bar.h
index bf0309b4a..b261fd1f2 100644
--- a/src/ephy-action-bar.h
+++ b/src/ephy-action-bar.h
@@ -21,7 +21,7 @@
 
 #pragma once
 
-#include <gtk/gtk.h>
+#include <adwaita.h>
 
 #include "ephy-action-bar-end.h"
 #include "ephy-action-bar-start.h"
@@ -32,7 +32,7 @@ G_BEGIN_DECLS
 
 #define EPHY_TYPE_ACTION_BAR (ephy_action_bar_get_type ())
 
-G_DECLARE_FINAL_TYPE (EphyActionBar, ephy_action_bar, EPHY, ACTION_BAR, GtkBin);
+G_DECLARE_FINAL_TYPE (EphyActionBar, ephy_action_bar, EPHY, ACTION_BAR, AdwBin);
 
 EphyActionBar      *ephy_action_bar_new                  (EphyWindow *window);
 EphyActionBarStart *ephy_action_bar_get_action_bar_start (EphyActionBar *action_bar);
diff --git a/src/ephy-desktop-utils.c b/src/ephy-desktop-utils.c
index 732f72ac2..d7e043a6d 100644
--- a/src/ephy-desktop-utils.c
+++ b/src/ephy-desktop-utils.c
@@ -46,15 +46,6 @@ is_desktop_gnome (void)
   return strstr (xdg_current_desktop, "GNOME") != NULL;
 }
 
-GtkIconSize
-get_icon_size (void)
-{
-  if (is_desktop_pantheon ())
-    return GTK_ICON_SIZE_LARGE_TOOLBAR;
-
-  return GTK_ICON_SIZE_BUTTON;
-}
-
 const char *
 ephy_get_fallback_favicon_name (const char      *uri,
                                 EphyFaviconType  type)
diff --git a/src/ephy-desktop-utils.h b/src/ephy-desktop-utils.h
index c162f3f5a..f30134aac 100644
--- a/src/ephy-desktop-utils.h
+++ b/src/ephy-desktop-utils.h
@@ -33,8 +33,6 @@ typedef enum {
 gboolean is_desktop_pantheon (void);
 gboolean is_desktop_gnome (void);
 
-GtkIconSize get_icon_size (void);
-
 const char *ephy_get_fallback_favicon_name (const char *title, EphyFaviconType type);
 
 G_END_DECLS
diff --git a/src/ephy-firefox-sync-dialog.c b/src/ephy-firefox-sync-dialog.c
index 870ac997e..a4ec30ec6 100644
--- a/src/ephy-firefox-sync-dialog.c
+++ b/src/ephy-firefox-sync-dialog.c
@@ -36,7 +36,7 @@
 #define FXA_IFRAME_URL "https://accounts.firefox.com/signin?service=sync&context=fx_desktop_v3";
 
 struct _EphyFirefoxSyncDialog {
-  HdyWindow parent_instance;
+  AdwWindow parent_instance;
 
   GtkWidget *sync_page_group;
   GtkWidget *sync_firefox_iframe_box;
@@ -61,7 +61,7 @@ struct _EphyFirefoxSyncDialog {
   WebKitUserScript *fxa_script;
 };
 
-G_DEFINE_TYPE (EphyFirefoxSyncDialog, ephy_firefox_sync_dialog, HDY_TYPE_WINDOW)
+G_DEFINE_TYPE (EphyFirefoxSyncDialog, ephy_firefox_sync_dialog, ADW_TYPE_WINDOW)
 
 static const guint sync_frequency_minutes[] = { 5, 15, 30, 60 };
 
@@ -107,7 +107,7 @@ sync_set_last_sync_time (EphyFirefoxSyncDialog *sync_dialog)
      */
     char *text = g_strdup_printf (_("Last synchronized: %s"), time);
 
-    hdy_action_row_set_subtitle (HDY_ACTION_ROW (sync_dialog->sync_firefox_account_row), text);
+    adw_action_row_set_subtitle (ADW_ACTION_ROW (sync_dialog->sync_firefox_account_row), text);
 
     g_free (text);
     g_free (time);
@@ -162,7 +162,7 @@ sync_secrets_store_finished_cb (EphySyncService       *service,
   g_assert (EPHY_IS_FIREFOX_SYNC_DIALOG (sync_dialog));
 
   if (!error) {
-    hdy_preferences_row_set_title (HDY_PREFERENCES_ROW (sync_dialog->sync_firefox_account_row),
+    adw_preferences_row_set_title (ADW_PREFERENCES_ROW (sync_dialog->sync_firefox_account_row),
                                    ephy_sync_utils_get_sync_user ());
     gtk_widget_hide (sync_dialog->sync_page_group);
     gtk_widget_show (sync_dialog->sync_firefox_account_group);
@@ -406,7 +406,7 @@ sync_open_webmail_clicked_cb (WebKitUserContentManager *manager,
   EphyShell *shell;
   EphyEmbed *embed;
   GtkWindow *window;
-  GtkWidget *prefs_dialog;
+  GtkRoot *prefs_dialog;
   char *url;
 
   url = jsc_value_to_string (webkit_javascript_result_get_js_value (result));
@@ -419,8 +419,8 @@ sync_open_webmail_clicked_cb (WebKitUserContentManager *manager,
     ephy_web_view_load_url (ephy_embed_get_web_view (embed), url);
 
     /* Close the preferences dialog. */
-    prefs_dialog = gtk_widget_get_toplevel (GTK_WIDGET (sync_page));
-    gtk_widget_destroy (GTK_WIDGET (prefs_dialog));
+    prefs_dialog = gtk_widget_get_root (GTK_WIDGET (sync_page));
+    gtk_window_destroy (GTK_WINDOW (prefs_dialog));
 
     g_free (url);
   }
@@ -488,11 +488,9 @@ sync_setup_firefox_iframe (EphyFirefoxSyncDialog *sync_dialog)
     gtk_widget_set_visible (GTK_WIDGET (sync_dialog->fxa_web_view), TRUE);
     frame = gtk_frame_new (NULL);
     gtk_widget_set_visible (frame, TRUE);
-    gtk_container_add (GTK_CONTAINER (frame),
-                       GTK_WIDGET (sync_dialog->fxa_web_view));
-    gtk_box_pack_start (GTK_BOX (sync_dialog->sync_firefox_iframe_box),
-                        frame,
-                        FALSE, TRUE, 0);
+    gtk_frame_set_child (GTK_FRAME (frame),
+                        GTK_WIDGET (sync_dialog->fxa_web_view));
+    gtk_box_append (GTK_BOX (sync_dialog->sync_firefox_iframe_box), frame);
 
     g_object_unref (sync_context);
   }
@@ -514,7 +512,7 @@ on_sync_sign_out_button_clicked (GtkWidget             *button,
   gtk_widget_hide (sync_dialog->sync_firefox_account_group);
   gtk_widget_hide (sync_dialog->sync_options_group);
   gtk_widget_show (sync_dialog->sync_page_group);
-  hdy_action_row_set_subtitle (HDY_ACTION_ROW (sync_dialog->sync_firefox_account_row), NULL);
+  adw_action_row_set_subtitle (ADW_ACTION_ROW (sync_dialog->sync_firefox_account_row), NULL);
 }
 
 static void
@@ -538,7 +536,7 @@ on_sync_synced_tabs_button_clicked (GtkWidget             *button,
   synced_tabs_dialog = synced_tabs_dialog_new (manager);
   gtk_window_set_transient_for (GTK_WINDOW (synced_tabs_dialog), GTK_WINDOW (sync_dialog));
   gtk_window_set_modal (GTK_WINDOW (synced_tabs_dialog), TRUE);
-  gtk_window_present_with_time (GTK_WINDOW (synced_tabs_dialog), gtk_get_current_event_time ());
+  gtk_window_present (GTK_WINDOW (synced_tabs_dialog));
 }
 
 static void
@@ -558,10 +556,10 @@ on_sync_device_name_save_button_clicked (GtkWidget             *button,
   EphySyncService *service = ephy_shell_get_sync_service (ephy_shell_get_default ());
   const char *text;
 
-  text = gtk_entry_get_text (GTK_ENTRY (sync_dialog->sync_device_name_entry));
+  text = gtk_editable_get_text (GTK_EDITABLE (sync_dialog->sync_device_name_entry));
   if (!g_strcmp0 (text, "")) {
     char *name = ephy_sync_utils_get_device_name ();
-    gtk_entry_set_text (GTK_ENTRY (sync_dialog->sync_device_name_entry), name);
+    gtk_editable_set_text (GTK_EDITABLE (sync_dialog->sync_device_name_entry), name);
     g_free (name);
   } else {
     ephy_sync_service_update_device_name (service, text);
@@ -580,7 +578,7 @@ on_sync_device_name_cancel_button_clicked (GtkWidget             *button,
   char *name;
 
   name = ephy_sync_utils_get_device_name ();
-  gtk_entry_set_text (GTK_ENTRY (sync_dialog->sync_device_name_entry), name);
+  gtk_editable_set_text (GTK_EDITABLE (sync_dialog->sync_device_name_entry), name);
 
   gtk_widget_set_sensitive (GTK_WIDGET (sync_dialog->sync_device_name_entry), FALSE);
   gtk_widget_set_visible (GTK_WIDGET (sync_dialog->sync_device_name_change_button), TRUE);
@@ -679,8 +677,8 @@ sync_frequency_set_mapping (const GValue       *value,
 static GListModel *
 create_sync_frequency_minutes_model ()
 {
-  GListStore *list_store = g_list_store_new (HDY_TYPE_VALUE_OBJECT);
-  HdyValueObject *obj;
+  GListStore *list_store = g_list_store_new (ADW_TYPE_VALUE_OBJECT);
+  AdwValueObject *obj;
   g_auto (GValue) value = G_VALUE_INIT;
   guint i;
 
@@ -688,7 +686,7 @@ create_sync_frequency_minutes_model ()
 
   for (i = 0; i < G_N_ELEMENTS (sync_frequency_minutes); i++) {
     g_value_set_uint (&value, sync_frequency_minutes[i]);
-    obj = hdy_value_object_new (&value);
+    obj = adw_value_object_new (&value);
     g_list_store_insert (list_store, i, obj);
     g_clear_object (&obj);
   }
@@ -697,9 +695,9 @@ create_sync_frequency_minutes_model ()
 }
 
 static gchar *
-get_sync_frequency_minutes_name (HdyValueObject *value)
+get_sync_frequency_minutes_name (AdwValueObject *value)
 {
-  return g_strdup_printf ("%u min", g_value_get_uint (hdy_value_object_get_value (value)));
+  return g_strdup_printf ("%u min", g_value_get_uint (adw_value_object_get_value (value)));
 }
 
 void
@@ -711,7 +709,7 @@ ephy_firefox_sync_dialog_setup (EphyFirefoxSyncDialog *sync_dialog)
   char *name = ephy_sync_utils_get_device_name ();
   g_autoptr (GListModel) sync_frequency_minutes_model = create_sync_frequency_minutes_model ();
 
-  gtk_entry_set_text (GTK_ENTRY (sync_dialog->sync_device_name_entry), name);
+  gtk_editable_set_text (GTK_EDITABLE (sync_dialog->sync_device_name_entry), name);
 
   if (!user) {
     sync_setup_firefox_iframe (sync_dialog);
@@ -719,7 +717,7 @@ ephy_firefox_sync_dialog_setup (EphyFirefoxSyncDialog *sync_dialog)
     gtk_widget_hide (sync_dialog->sync_options_group);
   } else {
     sync_set_last_sync_time (sync_dialog);
-    hdy_preferences_row_set_title (HDY_PREFERENCES_ROW (sync_dialog->sync_firefox_account_row), user);
+    adw_preferences_row_set_title (ADW_PREFERENCES_ROW (sync_dialog->sync_firefox_account_row), user);
     gtk_widget_hide (sync_dialog->sync_page_group);
   }
 
@@ -744,9 +742,9 @@ ephy_firefox_sync_dialog_setup (EphyFirefoxSyncDialog *sync_dialog)
                    "active",
                    G_SETTINGS_BIND_DEFAULT);
 
-  hdy_combo_row_bind_name_model (HDY_COMBO_ROW (sync_dialog->sync_frequency_row),
+  adw_combo_row_bind_name_model (ADW_COMBO_ROW (sync_dialog->sync_frequency_row),
                                  sync_frequency_minutes_model,
-                                 (HdyComboRowGetNameFunc)get_sync_frequency_minutes_name,
+                                 (AdwComboRowGetNameFunc)get_sync_frequency_minutes_name,
                                  NULL,
                                  NULL);
   g_settings_bind_with_mapping (sync_settings,
diff --git a/src/ephy-firefox-sync-dialog.h b/src/ephy-firefox-sync-dialog.h
index 9e20ed484..a0c3c2c90 100644
--- a/src/ephy-firefox-sync-dialog.h
+++ b/src/ephy-firefox-sync-dialog.h
@@ -21,13 +21,13 @@
 #pragma once
 
 #include <glib-object.h>
-#include <handy.h>
+#include <adwaita.h>
 
 G_BEGIN_DECLS
 
 #define EPHY_TYPE_FIREFOX_SYNC_DIALOG (ephy_firefox_sync_dialog_get_type ())
 
-G_DECLARE_FINAL_TYPE (EphyFirefoxSyncDialog, ephy_firefox_sync_dialog, EPHY, FIREFOX_SYNC_DIALOG, HdyWindow)
+G_DECLARE_FINAL_TYPE (EphyFirefoxSyncDialog, ephy_firefox_sync_dialog, EPHY, FIREFOX_SYNC_DIALOG, AdwWindow)
 
 GtkWidget *ephy_firefox_sync_dialog_new ();
 
diff --git a/src/ephy-fullscreen-box.c b/src/ephy-fullscreen-box.c
index 5ace6fa49..c27cdf092 100644
--- a/src/ephy-fullscreen-box.c
+++ b/src/ephy-fullscreen-box.c
@@ -21,17 +21,15 @@
 #include "config.h"
 #include "ephy-fullscreen-box.h"
 
-#include <handy.h>
+#include <adwaita.h>
 
 #define FULLSCREEN_HIDE_DELAY 300
 #define SHOW_HEADERBAR_DISTANCE_PX 5
 
 struct _EphyFullscreenBox {
-  GtkEventBox parent_instance;
+  GtkWidget parent_instance;
 
-  HdyFlap *flap;
-  GtkEventController *controller;
-  GtkGesture *gesture;
+  AdwFlap *flap;
 
   gboolean fullscreen;
   gboolean autohide;
@@ -45,7 +43,7 @@ struct _EphyFullscreenBox {
 
 static void ephy_fullscreen_box_buildable_init (GtkBuildableIface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (EphyFullscreenBox, ephy_fullscreen_box, GTK_TYPE_EVENT_BOX,
+G_DEFINE_TYPE_WITH_CODE (EphyFullscreenBox, ephy_fullscreen_box, GTK_TYPE_WIDGET,
                          G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
                                                 ephy_fullscreen_box_buildable_init))
 
@@ -66,7 +64,7 @@ show_ui (EphyFullscreenBox *self)
 {
   g_clear_handle_id (&self->timeout_id, g_source_remove);
 
-  hdy_flap_set_reveal_flap (self->flap, TRUE);
+  adw_flap_set_reveal_flap (self->flap, TRUE);
 }
 
 static void
@@ -77,7 +75,7 @@ hide_ui (EphyFullscreenBox *self)
   if (!self->fullscreen)
     return;
 
-  hdy_flap_set_reveal_flap (self->flap, FALSE);
+  adw_flap_set_reveal_flap (self->flap, FALSE);
   gtk_widget_grab_focus (GTK_WIDGET (self->flap));
 }
 
@@ -94,7 +92,7 @@ hide_timeout_cb (EphyFullscreenBox *self)
 static void
 start_hide_timeout (EphyFullscreenBox *self)
 {
-  if (!hdy_flap_get_reveal_flap (self->flap))
+  if (!adw_flap_get_reveal_flap (self->flap))
     return;
 
   if (self->timeout_id)
@@ -119,12 +117,9 @@ is_descendant_of (GtkWidget *widget,
 
   parent = widget;
 
-  while (parent && parent != target && !GTK_IS_POPOVER (parent))
+  while (parent && parent != target)
     parent = gtk_widget_get_parent (parent);
 
-  if (GTK_IS_POPOVER (parent))
-    return is_descendant_of (gtk_popover_get_relative_to (GTK_POPOVER (parent)), target);
-
   return parent == target;
 }
 
@@ -133,8 +128,8 @@ get_titlebar_area_height (EphyFullscreenBox *self)
 {
   gdouble height;
 
-  height = gtk_widget_get_allocated_height (hdy_flap_get_flap (self->flap));
-  height *= hdy_flap_get_reveal_progress (self->flap);
+  height = gtk_widget_get_allocated_height (adw_flap_get_flap (self->flap));
+  height *= adw_flap_get_reveal_progress (self->flap);
   height = MAX (height, SHOW_HEADERBAR_DISTANCE_PX);
 
   return height;
@@ -154,7 +149,7 @@ update (EphyFullscreenBox *self,
   }
 
   if (self->last_focus && is_descendant_of (self->last_focus,
-                                            hdy_flap_get_flap (self->flap)))
+                                            adw_flap_get_flap (self->flap)))
     show_ui (self);
   else if (hide_immediately)
     hide_ui (self);
@@ -178,12 +173,6 @@ enter_cb (EphyFullscreenBox *self,
           double             x,
           double             y)
 {
-  g_autoptr (GdkEvent) event = gtk_get_current_event ();
-
-  if (event->crossing.window != gtk_widget_get_window (GTK_WIDGET (self)) ||
-      event->crossing.detail == GDK_NOTIFY_INFERIOR)
-    return;
-
   motion_cb (self, x, y);
 }
 
@@ -191,9 +180,10 @@ static void
 press_cb (EphyFullscreenBox *self,
           int                n_press,
           double             x,
-          double             y)
+          double             y,
+          GtkGesture        *gesture)
 {
-  gtk_gesture_set_state (self->gesture, GTK_EVENT_SEQUENCE_DENIED);
+  gtk_gesture_set_state (gesture, GTK_EVENT_SEQUENCE_DENIED);
 
   self->is_touch = TRUE;
 
@@ -217,72 +207,38 @@ notify_reveal_cb (EphyFullscreenBox *self)
 }
 
 static void
-ephy_fullscreen_box_hierarchy_changed (GtkWidget *widget,
-                                       GtkWidget *previous_toplevel)
+ephy_fullscreen_box_root (GtkWidget *widget)
 {
   EphyFullscreenBox *self = EPHY_FULLSCREEN_BOX (widget);
-  GtkWidget *toplevel;
+  GtkRoot *root;
 
-  if (previous_toplevel && GTK_IS_WINDOW (previous_toplevel))
-    g_signal_handlers_disconnect_by_func (previous_toplevel, set_focus_cb, widget);
+  GTK_WIDGET_CLASS (ephy_fullscreen_box_parent_class)->root (widget);
 
-  toplevel = gtk_widget_get_toplevel (widget);
+  root = gtk_widget_get_root (widget);
 
-  if (toplevel && GTK_IS_WINDOW (toplevel)) {
-    g_signal_connect_object (toplevel, "set-focus",
-                             G_CALLBACK (set_focus_cb), widget,
-                             G_CONNECT_SWAPPED);
+  if (root && GTK_IS_WINDOW (root)) {
+//    g_signal_connect_object (root, "set-focus",
+//                             G_CALLBACK (set_focus_cb), widget,
+//                             G_CONNECT_SWAPPED);
 
-    set_focus_cb (self, gtk_window_get_focus (GTK_WINDOW (toplevel)));
+    set_focus_cb (self, gtk_window_get_focus (GTK_WINDOW (root)));
   } else {
     set_focus_cb (self, NULL);
   }
 }
 
 static void
-ephy_fullscreen_box_add (GtkContainer *container,
-                         GtkWidget    *widget)
-{
-  EphyFullscreenBox *self = EPHY_FULLSCREEN_BOX (container);
-
-  if (!self->flap)
-    GTK_CONTAINER_CLASS (ephy_fullscreen_box_parent_class)->add (container, widget);
-  else
-    gtk_container_add (GTK_CONTAINER (self->flap), widget);
-}
-
-static void
-ephy_fullscreen_box_remove (GtkContainer *container,
-                            GtkWidget    *widget)
+ephy_fullscreen_box_unroot (GtkWidget *widget)
 {
-  EphyFullscreenBox *self = EPHY_FULLSCREEN_BOX (container);
+  EphyFullscreenBox *self = EPHY_FULLSCREEN_BOX (widget);
+  GtkRoot *root = gtk_widget_get_root (widget);
 
-  if (widget == GTK_WIDGET (self->flap)) {
-    GTK_CONTAINER_CLASS (ephy_fullscreen_box_parent_class)->remove (container, widget);
-    self->flap = NULL;
-  } else {
-    gtk_container_remove (GTK_CONTAINER (self->flap), widget);
-  }
-}
+  if (root && GTK_IS_WINDOW (root))
+    g_signal_handlers_disconnect_by_func (root, set_focus_cb, widget);
 
-static void
-ephy_fullscreen_box_forall (GtkContainer *container,
-                            gboolean      include_internals,
-                            GtkCallback   callback,
-                            gpointer      callback_data)
-{
-  EphyFullscreenBox *self = EPHY_FULLSCREEN_BOX (container);
+  set_focus_cb (self, NULL);
 
-  if (include_internals) {
-    GTK_CONTAINER_CLASS (ephy_fullscreen_box_parent_class)->forall (container,
-                                                                    include_internals,
-                                                                    callback,
-                                                                    callback_data);
-  } else {
-    gtk_container_foreach (GTK_CONTAINER (self->flap),
-                           callback,
-                           callback_data);
-  }
+  GTK_WIDGET_CLASS (ephy_fullscreen_box_parent_class)->unroot (widget);
 }
 
 static void
@@ -311,7 +267,7 @@ ephy_fullscreen_box_get_property (GObject    *object,
       break;
 
     case PROP_REVEALED:
-      g_value_set_boolean (value, hdy_flap_get_reveal_flap (self->flap));
+      g_value_set_boolean (value, adw_flap_get_reveal_flap (self->flap));
       break;
 
     default:
@@ -354,8 +310,7 @@ ephy_fullscreen_box_dispose (GObject *object)
 {
   EphyFullscreenBox *self = EPHY_FULLSCREEN_BOX (object);
 
-  g_clear_object (&self->controller);
-  g_clear_object (&self->gesture);
+  g_clear_pointer ((GtkWidget **) &self->flap, gtk_widget_unparent);
 
   G_OBJECT_CLASS (ephy_fullscreen_box_parent_class)->dispose (object);
 }
@@ -365,17 +320,13 @@ ephy_fullscreen_box_class_init (EphyFullscreenBoxClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-  GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
 
   object_class->get_property = ephy_fullscreen_box_get_property;
   object_class->set_property = ephy_fullscreen_box_set_property;
   object_class->dispose = ephy_fullscreen_box_dispose;
 
-  widget_class->hierarchy_changed = ephy_fullscreen_box_hierarchy_changed;
-
-  container_class->add = ephy_fullscreen_box_add;
-  container_class->remove = ephy_fullscreen_box_remove;
-  container_class->forall = ephy_fullscreen_box_forall;
+  widget_class->root = ephy_fullscreen_box_root;
+  widget_class->unroot = ephy_fullscreen_box_unroot;
 
   props[PROP_FULLSCREEN] =
     g_param_spec_boolean ("fullscreen",
@@ -415,47 +366,49 @@ ephy_fullscreen_box_class_init (EphyFullscreenBoxClass *klass)
   g_object_class_install_properties (object_class, LAST_PROP, props);
 
   gtk_widget_class_set_css_name (widget_class, "fullscreenbox");
+  gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
 }
 
 static void
 ephy_fullscreen_box_init (EphyFullscreenBox *self)
 {
-  HdyFlap *flap;
+  AdwFlap *flap;
+  GtkEventController *controller;
+  GtkGesture *gesture;
 
   self->autohide = TRUE;
 
-  gtk_widget_add_events (GTK_WIDGET (self), GDK_ALL_EVENTS_MASK);
-
-  flap = HDY_FLAP (hdy_flap_new ());
+  flap = ADW_FLAP (adw_flap_new ());
   gtk_orientable_set_orientation (GTK_ORIENTABLE (flap), GTK_ORIENTATION_VERTICAL);
-  hdy_flap_set_flap_position (flap, GTK_PACK_START);
-  hdy_flap_set_fold_policy (flap, HDY_FLAP_FOLD_POLICY_NEVER);
-  hdy_flap_set_locked (flap, TRUE);
-  hdy_flap_set_modal (flap, FALSE);
-  hdy_flap_set_swipe_to_open (flap, FALSE);
-  hdy_flap_set_swipe_to_close (flap, FALSE);
-  hdy_flap_set_transition_type (flap, HDY_FLAP_TRANSITION_TYPE_OVER);
-  gtk_widget_show (GTK_WIDGET (flap));
+  adw_flap_set_flap_position (flap, GTK_PACK_START);
+  adw_flap_set_fold_policy (flap, ADW_FLAP_FOLD_POLICY_NEVER);
+  adw_flap_set_locked (flap, TRUE);
+  adw_flap_set_modal (flap, FALSE);
+  adw_flap_set_swipe_to_open (flap, FALSE);
+  adw_flap_set_swipe_to_close (flap, FALSE);
+  adw_flap_set_transition_type (flap, ADW_FLAP_TRANSITION_TYPE_OVER);
 
   g_signal_connect_object (flap, "notify::reveal-flap",
                            G_CALLBACK (notify_reveal_cb), self, G_CONNECT_SWAPPED);
 
-  gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (flap));
+  gtk_widget_set_parent (GTK_WIDGET (flap), GTK_WIDGET (self));
   self->flap = flap;
 
-  self->controller = gtk_event_controller_motion_new (GTK_WIDGET (self));
-  gtk_event_controller_set_propagation_phase (self->controller, GTK_PHASE_CAPTURE);
-  g_signal_connect_object (self->controller, "enter",
+  controller = gtk_event_controller_motion_new ();
+  gtk_event_controller_set_propagation_phase (controller, GTK_PHASE_CAPTURE);
+  g_signal_connect_object (controller, "enter",
                            G_CALLBACK (enter_cb), self, G_CONNECT_SWAPPED);
-  g_signal_connect_object (self->controller, "motion",
+  g_signal_connect_object (controller, "motion",
                            G_CALLBACK (motion_cb), self, G_CONNECT_SWAPPED);
+  gtk_widget_add_controller (GTK_WIDGET (self), controller);
 
-  self->gesture = gtk_gesture_multi_press_new (GTK_WIDGET (self));
-  gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (self->gesture),
+  gesture = gtk_gesture_click_new ();
+  gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture),
                                               GTK_PHASE_CAPTURE);
-  gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (self->gesture), TRUE);
-  g_signal_connect_object (self->gesture, "pressed",
+  gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (gesture), TRUE);
+  g_signal_connect_object (gesture, "pressed",
                            G_CALLBACK (press_cb), self, G_CONNECT_SWAPPED);
+  gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (gesture));
 }
 
 static void
@@ -509,10 +462,10 @@ ephy_fullscreen_box_set_fullscreen (EphyFullscreenBox *self,
     return;
 
   if (fullscreen) {
-    hdy_flap_set_fold_policy (self->flap, HDY_FLAP_FOLD_POLICY_ALWAYS);
+    adw_flap_set_fold_policy (self->flap, ADW_FLAP_FOLD_POLICY_ALWAYS);
     update (self, FALSE);
   } else {
-    hdy_flap_set_fold_policy (self->flap, HDY_FLAP_FOLD_POLICY_NEVER);
+    adw_flap_set_fold_policy (self->flap, ADW_FLAP_FOLD_POLICY_NEVER);
     show_ui (self);
   }
 
@@ -556,7 +509,7 @@ ephy_fullscreen_box_get_titlebar (EphyFullscreenBox *self)
 {
   g_return_val_if_fail (EPHY_IS_FULLSCREEN_BOX (self), NULL);
 
-  return hdy_flap_get_flap (self->flap);
+  return adw_flap_get_flap (self->flap);
 }
 
 void
@@ -564,12 +517,12 @@ ephy_fullscreen_box_set_titlebar (EphyFullscreenBox *self,
                                   GtkWidget         *titlebar)
 {
   g_return_if_fail (EPHY_IS_FULLSCREEN_BOX (self));
-  g_return_if_fail (GTK_IS_WIDGET (titlebar) || titlebar == NULL);
+  g_return_if_fail (titlebar == NULL || GTK_IS_WIDGET (titlebar));
 
-  if (hdy_flap_get_flap (self->flap) == titlebar)
+  if (adw_flap_get_flap (self->flap) == titlebar)
     return;
 
-  hdy_flap_set_flap (self->flap, titlebar);
+  adw_flap_set_flap (self->flap, titlebar);
 
   g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TITLEBAR]);
 }
@@ -579,7 +532,7 @@ ephy_fullscreen_box_get_content (EphyFullscreenBox *self)
 {
   g_return_val_if_fail (EPHY_IS_FULLSCREEN_BOX (self), NULL);
 
-  return hdy_flap_get_content (self->flap);
+  return adw_flap_get_content (self->flap);
 }
 
 void
@@ -587,12 +540,12 @@ ephy_fullscreen_box_set_content (EphyFullscreenBox *self,
                                  GtkWidget         *content)
 {
   g_return_if_fail (EPHY_IS_FULLSCREEN_BOX (self));
-  g_return_if_fail (GTK_IS_WIDGET (content) || content == NULL);
+  g_return_if_fail (content == NULL || GTK_IS_WIDGET (content));
 
-  if (hdy_flap_get_content (self->flap) == content)
+  if (adw_flap_get_content (self->flap) == content)
     return;
 
-  hdy_flap_set_content (self->flap, content);
+  adw_flap_set_content (self->flap, content);
 
   g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CONTENT]);
 }
diff --git a/src/ephy-fullscreen-box.h b/src/ephy-fullscreen-box.h
index ce85c8e42..fec2f31e2 100644
--- a/src/ephy-fullscreen-box.h
+++ b/src/ephy-fullscreen-box.h
@@ -26,7 +26,7 @@ G_BEGIN_DECLS
 
 #define EPHY_TYPE_FULLSCREEN_BOX (ephy_fullscreen_box_get_type())
 
-G_DECLARE_FINAL_TYPE (EphyFullscreenBox, ephy_fullscreen_box, EPHY, FULLSCREEN_BOX, GtkEventBox)
+G_DECLARE_FINAL_TYPE (EphyFullscreenBox, ephy_fullscreen_box, EPHY, FULLSCREEN_BOX, GtkWidget)
 
 EphyFullscreenBox *ephy_fullscreen_box_new            (void);
 
diff --git a/src/ephy-header-bar.c b/src/ephy-header-bar.c
index 85ed3356c..eae7518fd 100644
--- a/src/ephy-header-bar.c
+++ b/src/ephy-header-bar.c
@@ -28,15 +28,15 @@
 #include "ephy-embed-utils.h"
 #include "ephy-file-helpers.h"
 #include "ephy-flatpak-utils.h"
-#include "ephy-location-entry.h"
+//#include "ephy-location-entry.h"
 #include "ephy-settings.h"
 #include "ephy-shell.h"
 #include "ephy-title-box.h"
 #include "ephy-title-widget.h"
 #include "ephy-type-builtins.h"
 
+#include <adwaita.h>
 #include <glib/gi18n.h>
-#include <handy.h>
 
 #define POPOVER_HIDE_DELAY 300
 
@@ -52,7 +52,7 @@ static GParamSpec *object_properties[N_PROPERTIES] = { NULL, };
 static const char *REFRESH_BUTTON_TOOLTIP = N_("Reload the current page");
 
 struct _EphyHeaderBar {
-  GtkBin parent_instance;
+  AdwBin parent_instance;
 
   GtkWidget *header_bar;
   EphyWindow *window;
@@ -65,13 +65,12 @@ struct _EphyHeaderBar {
   GtkWidget *zoom_level_label;
   GtkWidget *restore_button;
   GtkWidget *combined_stop_reload_button;
-  GtkWidget *combined_stop_reload_image;
   GtkWidget *page_menu_popover;
 
   guint popover_hide_timeout_id;
 };
 
-G_DEFINE_TYPE (EphyHeaderBar, ephy_header_bar, GTK_TYPE_BIN)
+G_DEFINE_TYPE (EphyHeaderBar, ephy_header_bar, ADW_TYPE_BIN)
 
 static void
 ephy_header_bar_set_property (GObject      *object,
@@ -125,7 +124,7 @@ sync_chromes_visibility (EphyHeaderBar *header_bar)
 static gboolean
 hide_timeout_cb (EphyHeaderBar *header_bar)
 {
-  gtk_popover_popdown (GTK_POPOVER (header_bar->page_menu_popover));
+  gtk_menu_button_popdown (GTK_MENU_BUTTON (header_bar->page_menu_button));
 
   header_bar->popover_hide_timeout_id = 0;
 
@@ -137,9 +136,9 @@ fullscreen_changed_cb (EphyHeaderBar *header_bar)
 {
   gboolean fullscreen;
 
-  g_object_get (header_bar->window, "fullscreen", &fullscreen, NULL);
+  g_object_get (header_bar->window, "fullscreened", &fullscreen, NULL);
 
-  gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (header_bar->header_bar), !fullscreen);
+  gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header_bar->header_bar), !fullscreen);
   gtk_widget_set_visible (header_bar->restore_button, fullscreen);
 
   if (fullscreen) {
@@ -150,6 +149,7 @@ fullscreen_changed_cb (EphyHeaderBar *header_bar)
   }
 }
 
+#if 0
 static void
 add_bookmark_button_clicked_cb (EphyLocationEntry *entry,
                                 gpointer          *user_data)
@@ -158,7 +158,7 @@ add_bookmark_button_clicked_cb (EphyLocationEntry *entry,
   GActionGroup *action_group;
   GAction *action;
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (header_bar->window), "win");
+  action_group = ephy_window_get_action_group (header_bar->window, "win");
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "bookmark-page");
 
   g_action_activate (action, NULL);
@@ -171,11 +171,12 @@ restore_button_clicked_cb (GtkButton     *button,
   GActionGroup *action_group;
   GAction *action;
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (header_bar->window), "win");
+  action_group = ephy_window_get_action_group (header_bar->window, "win");
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "fullscreen");
 
   g_action_activate (action, NULL);
 }
+#endif
 
 static void
 update_revealer_visibility (GtkRevealer *revealer)
@@ -200,26 +201,24 @@ ephy_header_bar_constructed (GObject *object)
   g_signal_connect_object (header_bar->window, "notify::chrome",
                            G_CALLBACK (sync_chromes_visibility), header_bar,
                            G_CONNECT_SWAPPED);
-  g_signal_connect_object (header_bar->window, "notify::fullscreen",
+  g_signal_connect_object (header_bar->window, "notify::fullscreened",
                            G_CALLBACK (fullscreen_changed_cb), header_bar,
                            G_CONNECT_SWAPPED);
 
   /* Header bar */
   header_bar->header_bar = gtk_header_bar_new ();
-  gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (header_bar->header_bar), TRUE);
-  gtk_widget_show (header_bar->header_bar);
-  gtk_container_add (GTK_CONTAINER (header_bar), header_bar->header_bar);
+  gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header_bar->header_bar), TRUE);
+  adw_bin_set_child (ADW_BIN (header_bar), header_bar->header_bar);
 
   /* Start action elements */
   header_bar->action_bar_start = ephy_action_bar_start_new ();
-  gtk_widget_show (GTK_WIDGET (header_bar->action_bar_start));
   header_bar->start_revealer = GTK_REVEALER (gtk_revealer_new ());
   g_signal_connect (header_bar->start_revealer, "notify::child-revealed",
                     G_CALLBACK (update_revealer_visibility), NULL);
   g_signal_connect (header_bar->start_revealer, "notify::reveal-child",
                     G_CALLBACK (update_revealer_visibility), NULL);
   gtk_revealer_set_transition_type (GTK_REVEALER (header_bar->start_revealer), 
GTK_REVEALER_TRANSITION_TYPE_SLIDE_RIGHT);
-  gtk_container_add (GTK_CONTAINER (header_bar->start_revealer), GTK_WIDGET (header_bar->action_bar_start));
+  gtk_revealer_set_child (GTK_REVEALER (header_bar->start_revealer), GTK_WIDGET 
(header_bar->action_bar_start));
 
   gtk_header_bar_pack_start (GTK_HEADER_BAR (header_bar->header_bar),
                              GTK_WIDGET (header_bar->start_revealer));
@@ -227,16 +226,13 @@ ephy_header_bar_constructed (GObject *object)
   embed_shell = ephy_embed_shell_get_default ();
 
   /* Title widget (location entry or title box) */
-  if (ephy_embed_shell_get_mode (embed_shell) == EPHY_EMBED_SHELL_MODE_APPLICATION)
+  if (ephy_embed_shell_get_mode (embed_shell) == EPHY_EMBED_SHELL_MODE_APPLICATION || TRUE) // FIXME
     header_bar->title_widget = EPHY_TITLE_WIDGET (ephy_title_box_new ());
-  else {
-    header_bar->title_widget = EPHY_TITLE_WIDGET (ephy_location_entry_new ());
-  }
+//  else
+//    header_bar->title_widget = EPHY_TITLE_WIDGET (ephy_location_entry_new ());
 
-  event_box = gtk_event_box_new ();
-  gtk_widget_add_events (event_box, GDK_ALL_EVENTS_MASK);
-  gtk_widget_show (event_box);
-  gtk_header_bar_set_custom_title (GTK_HEADER_BAR (header_bar->header_bar), event_box);
+  event_box = adw_bin_new ();
+  gtk_header_bar_set_title_widget (GTK_HEADER_BAR (header_bar->header_bar), event_box);
   gtk_widget_set_name (event_box, "title-box-container");
 
   if (is_desktop_pantheon ()) {
@@ -245,22 +241,20 @@ ephy_header_bar_constructed (GObject *object)
     gtk_widget_set_margin_start (GTK_WIDGET (header_bar->title_widget), 6);
     gtk_widget_set_margin_end (GTK_WIDGET (header_bar->title_widget), 6);
 
-    gtk_container_add (GTK_CONTAINER (event_box), GTK_WIDGET (header_bar->title_widget));
+    adw_bin_set_child (ADW_BIN (event_box), GTK_WIDGET (header_bar->title_widget));
   } else {
     GtkWidget *clamp;
 
-    clamp = hdy_clamp_new ();
+    clamp = adw_clamp_new ();
     gtk_widget_set_hexpand (GTK_WIDGET (clamp), TRUE);
-    gtk_widget_show (clamp);
-    hdy_clamp_set_maximum_size (HDY_CLAMP (clamp), 860);
-    hdy_clamp_set_tightening_threshold (HDY_CLAMP (clamp), 560);
-    gtk_container_add (GTK_CONTAINER (clamp), GTK_WIDGET (header_bar->title_widget));
+    adw_clamp_set_maximum_size (ADW_CLAMP (clamp), 860);
+    adw_clamp_set_tightening_threshold (ADW_CLAMP (clamp), 560);
+    adw_clamp_set_child (ADW_CLAMP (clamp), GTK_WIDGET (header_bar->title_widget));
 
-    gtk_container_add (GTK_CONTAINER (event_box), clamp);
+    adw_bin_set_child (ADW_BIN (event_box), clamp);
   }
 
-  gtk_widget_show (GTK_WIDGET (header_bar->title_widget));
-
+#if 0
   if (EPHY_IS_LOCATION_ENTRY (header_bar->title_widget)) {
     EphyLocationEntry *lentry = EPHY_LOCATION_ENTRY (header_bar->title_widget);
     GtkWidget *popover = ephy_add_bookmark_popover_new (ephy_location_entry_get_bookmark_widget (lentry), 
GTK_WIDGET (header_bar->window));
@@ -274,25 +268,25 @@ ephy_header_bar_constructed (GObject *object)
                              header_bar,
                              0);
   }
+#endif
 
   /* Fullscreen restore button */
-  header_bar->restore_button = gtk_button_new_from_icon_name ("view-restore-symbolic",
-                                                              GTK_ICON_SIZE_BUTTON);
-  g_signal_connect_object (header_bar->restore_button, "clicked",
-                           G_CALLBACK (restore_button_clicked_cb),
-                           header_bar, 0);
+  header_bar->restore_button = gtk_button_new_from_icon_name ("view-restore-symbolic");
+  gtk_widget_hide (header_bar->restore_button);
+//  g_signal_connect_object (header_bar->restore_button, "clicked",
+//                           G_CALLBACK (restore_button_clicked_cb),
+//                           header_bar, 0);
   gtk_header_bar_pack_end (GTK_HEADER_BAR (header_bar->header_bar),
                            GTK_WIDGET (header_bar->restore_button));
 
   /* Page Menu */
   button = gtk_menu_button_new ();
   header_bar->page_menu_button = button;
-  gtk_button_set_image (GTK_BUTTON (button),
-                        gtk_image_new_from_icon_name ("open-menu-symbolic", GTK_ICON_SIZE_BUTTON));
-  g_type_ensure (G_TYPE_THEMED_ICON);
+  gtk_menu_button_set_icon_name (GTK_MENU_BUTTON (button), "open-menu-symbolic");
   builder = gtk_builder_new_from_resource ("/org/gnome/epiphany/gtk/page-menu-popover.ui");
   header_bar->page_menu_popover = GTK_WIDGET (gtk_builder_get_object (builder, "page-menu-popover"));
   header_bar->zoom_level_label = GTK_WIDGET (gtk_builder_get_object (builder, "zoom-level"));
+#if 0
   if (ephy_embed_shell_get_mode (embed_shell) == EPHY_EMBED_SHELL_MODE_APPLICATION) {
     gtk_widget_destroy (GTK_WIDGET (gtk_builder_get_object (builder, "new-window-separator")));
     gtk_widget_destroy (GTK_WIDGET (gtk_builder_get_object (builder, "new-window-button")));
@@ -321,19 +315,17 @@ ephy_header_bar_constructed (GObject *object)
     gtk_widget_destroy (GTK_WIDGET (gtk_builder_get_object (builder, "run-in-background-separator")));
     gtk_widget_destroy (GTK_WIDGET (gtk_builder_get_object (builder, "run-in-background-button")));
   }
+#endif
 
   header_bar->combined_stop_reload_button = GTK_WIDGET (gtk_builder_get_object (builder, 
"combined_stop_reload_button"));
-  header_bar->combined_stop_reload_image = GTK_WIDGET (gtk_builder_get_object (builder, 
"combined_stop_reload_image"));
   gtk_widget_set_tooltip_text (header_bar->combined_stop_reload_button, _(REFRESH_BUTTON_TOOLTIP));
 
   if (is_desktop_pantheon ()) {
-    gtk_widget_destroy (GTK_WIDGET (gtk_builder_get_object (builder, "about-button")));
+//    gtk_widget_destroy (GTK_WIDGET (gtk_builder_get_object (builder, "about-button")));
 
-    gtk_button_set_image (GTK_BUTTON (button),
-                          gtk_image_new_from_icon_name ("open-menu",
-                                                        GTK_ICON_SIZE_LARGE_TOOLBAR));
+    gtk_button_set_icon_name (GTK_BUTTON (button), "open-menu");
   }
-  g_settings_bind (EPHY_SETTINGS_WEB, EPHY_PREFS_WEB_ENABLE_WEBEXTENSIONS, gtk_builder_get_object (builder, 
"extensions-button"), "visible", G_SETTINGS_BIND_DEFAULT);
+//  g_settings_bind (EPHY_SETTINGS_WEB, EPHY_PREFS_WEB_ENABLE_WEBEXTENSIONS, gtk_builder_get_object 
(builder, "extensions-button"), "visible", G_SETTINGS_BIND_DEFAULT);
 
   gtk_menu_button_set_popover (GTK_MENU_BUTTON (button), header_bar->page_menu_popover);
   g_object_unref (builder);
@@ -342,14 +334,13 @@ ephy_header_bar_constructed (GObject *object)
 
   /* End action elements */
   header_bar->action_bar_end = ephy_action_bar_end_new ();
-  gtk_widget_show (GTK_WIDGET (header_bar->action_bar_end));
   header_bar->end_revealer = GTK_REVEALER (gtk_revealer_new ());
   g_signal_connect (header_bar->end_revealer, "notify::child-revealed",
                     G_CALLBACK (update_revealer_visibility), NULL);
   g_signal_connect (header_bar->end_revealer, "notify::reveal-child",
                     G_CALLBACK (update_revealer_visibility), NULL);
   gtk_revealer_set_transition_type (GTK_REVEALER (header_bar->end_revealer), 
GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT);
-  gtk_container_add (GTK_CONTAINER (header_bar->end_revealer), GTK_WIDGET (header_bar->action_bar_end));
+  gtk_revealer_set_child (GTK_REVEALER (header_bar->end_revealer), GTK_WIDGET (header_bar->action_bar_end));
 
   gtk_header_bar_pack_end (GTK_HEADER_BAR (header_bar->header_bar),
                            GTK_WIDGET (header_bar->end_revealer));
@@ -468,8 +459,8 @@ ephy_header_bar_set_adaptive_mode (EphyHeaderBar    *header_bar,
       break;
   }
 
-  if (ephy_embed_shell_get_mode (ephy_embed_shell_get_default ()) != EPHY_EMBED_SHELL_MODE_APPLICATION)
-    ephy_location_entry_set_adaptive_mode (EPHY_LOCATION_ENTRY (header_bar->title_widget), adaptive_mode);
+//  if (ephy_embed_shell_get_mode (ephy_embed_shell_get_default ()) != EPHY_EMBED_SHELL_MODE_APPLICATION)
+//    ephy_location_entry_set_adaptive_mode (EPHY_LOCATION_ENTRY (header_bar->title_widget), adaptive_mode);
 }
 
 void
@@ -477,16 +468,14 @@ ephy_header_bar_start_change_combined_stop_reload_state (EphyHeaderBar *header_b
                                                          gboolean       loading)
 {
   if (loading) {
-    gtk_image_set_from_icon_name (GTK_IMAGE (header_bar->combined_stop_reload_image),
-                                  "process-stop-symbolic",
-                                  get_icon_size ());
+    gtk_button_set_icon_name (GTK_BUTTON (header_bar->combined_stop_reload_button),
+                              "process-stop-symbolic");
     /* Translators: tooltip for the stop button */
     gtk_widget_set_tooltip_text (header_bar->combined_stop_reload_button,
                                  _("Stop loading the current page"));
   } else {
-    gtk_image_set_from_icon_name (GTK_IMAGE (header_bar->combined_stop_reload_image),
-                                  "view-refresh-symbolic",
-                                  get_icon_size ());
+    gtk_button_set_icon_name (GTK_BUTTON (header_bar->combined_stop_reload_button),
+                              "view-refresh-symbolic");
     gtk_widget_set_tooltip_text (header_bar->combined_stop_reload_button,
                                  _(REFRESH_BUTTON_TOOLTIP));
   }
diff --git a/src/ephy-header-bar.h b/src/ephy-header-bar.h
index f066de16d..c3eff87f1 100644
--- a/src/ephy-header-bar.h
+++ b/src/ephy-header-bar.h
@@ -20,7 +20,7 @@
 
 #pragma once
 
-#include <gtk/gtk.h>
+#include <adwaita.h>
 
 #include "ephy-action-bar-end.h"
 #include "ephy-action-bar-start.h"
@@ -32,7 +32,7 @@ G_BEGIN_DECLS
 
 #define EPHY_TYPE_HEADER_BAR (ephy_header_bar_get_type())
 
-G_DECLARE_FINAL_TYPE (EphyHeaderBar, ephy_header_bar, EPHY, HEADER_BAR, GtkBin)
+G_DECLARE_FINAL_TYPE (EphyHeaderBar, ephy_header_bar, EPHY, HEADER_BAR, AdwBin)
 
 GtkWidget          *ephy_header_bar_new                            (EphyWindow    *window);
 EphyTitleWidget    *ephy_header_bar_get_title_widget               (EphyHeaderBar *header_bar);
diff --git a/src/ephy-history-dialog.c b/src/ephy-history-dialog.c
index 89a279fb7..ac9885034 100644
--- a/src/ephy-history-dialog.c
+++ b/src/ephy-history-dialog.c
@@ -35,17 +35,17 @@
 #include "ephy-time-helpers.h"
 #include "ephy-window.h"
 
+#include <adwaita.h>
 #include <ctype.h>
 #include <gtk/gtk.h>
 #include <glib/gi18n.h>
-#include <handy.h>
 #include <string.h>
 #include <time.h>
 
 #define NUM_FETCH_LIMIT 15
 
 struct _EphyHistoryDialog {
-  HdyWindow parent_instance;
+  AdwWindow parent_instance;
 
   EphySnapshotService *snapshot_service;
   EphyHistoryService *history_service;
@@ -88,7 +88,7 @@ struct _EphyHistoryDialog {
   gboolean has_search_results;
 };
 
-G_DEFINE_TYPE (EphyHistoryDialog, ephy_history_dialog, HDY_TYPE_WINDOW)
+G_DEFINE_TYPE (EphyHistoryDialog, ephy_history_dialog, ADW_TYPE_WINDOW)
 
 enum {
   PROP_0,
@@ -244,8 +244,8 @@ set_is_selection_empty (EphyHistoryDialog *self,
 static EphyHistoryURL *
 get_url_from_row (GtkListBoxRow *row)
 {
-  return ephy_history_url_new (hdy_action_row_get_subtitle (HDY_ACTION_ROW (row)),
-                               hdy_preferences_row_get_title (HDY_PREFERENCES_ROW (row)),
+  return ephy_history_url_new (adw_action_row_get_subtitle (ADW_ACTION_ROW (row)),
+                               adw_preferences_row_get_title (ADW_PREFERENCES_ROW (row)),
                                0,
                                0,
                                0);
@@ -254,15 +254,10 @@ get_url_from_row (GtkListBoxRow *row)
 static void
 clear_listbox (GtkWidget *listbox)
 {
-  GList *children, *iter;
-
-  children = gtk_container_get_children (GTK_CONTAINER (listbox));
-
-  for (iter = children; iter; iter = g_list_next (iter)) {
-    gtk_widget_destroy (GTK_WIDGET (iter->data));
-  }
+  GtkWidget *row;
 
-  g_list_free (children);
+  while ((row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (listbox), 0)))
+    gtk_list_box_remove (GTK_LIST_BOX (listbox), row);
 }
 
 static void
@@ -289,7 +284,7 @@ on_find_urls_cb (gpointer service,
 static GList *
 substrings_filter (EphyHistoryDialog *self)
 {
-  const gchar *search_text = gtk_entry_get_text (GTK_ENTRY (self->search_entry));
+  const gchar *search_text = gtk_editable_get_text (GTK_EDITABLE (self->search_entry));
   char **tokens, **p;
   GList *substrings = NULL;
 
@@ -410,7 +405,7 @@ row_copy_url_button_clicked (GtkWidget *button,
   g_autoptr (EphyHistoryURL) url = get_url_from_row (row);
 
   if (url)
-    gtk_clipboard_set_text (gtk_widget_get_clipboard (GTK_WIDGET (button), GDK_SELECTION_CLIPBOARD), 
url->url, -1);
+    gdk_clipboard_set_text (gtk_widget_get_clipboard (GTK_WIDGET (button)), url->url);
 }
 
 static void
@@ -435,9 +430,9 @@ create_row (EphyHistoryDialog *self,
   GtkWidget *copy_url_button;
 
   /* Row */
-  row = hdy_action_row_new ();
-  hdy_preferences_row_set_title (HDY_PREFERENCES_ROW (row), url->title);
-  hdy_action_row_set_subtitle (HDY_ACTION_ROW (row), url->url);
+  row = adw_action_row_new ();
+  adw_preferences_row_set_title (ADW_PREFERENCES_ROW (row), url->title);
+  adw_action_row_set_subtitle (ADW_ACTION_ROW (row), url->url);
   gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), TRUE);
   gtk_widget_set_tooltip_text (row, url->url);
 
@@ -460,20 +455,18 @@ create_row (EphyHistoryDialog *self,
   g_signal_connect (check_button, "toggled", G_CALLBACK (row_check_button_toggled), self);
 
   /* Copy URL button */
-  copy_url_button = gtk_button_new_from_icon_name ("edit-copy-symbolic", GTK_ICON_SIZE_BUTTON);
+  copy_url_button = gtk_button_new_from_icon_name ("edit-copy-symbolic");
   gtk_widget_set_valign (copy_url_button, GTK_ALIGN_CENTER);
   gtk_widget_set_tooltip_text (copy_url_button, _("Copy URL"));
   g_signal_connect (copy_url_button, "clicked", G_CALLBACK (row_copy_url_button_clicked), row);
 
-  hdy_action_row_add_prefix (HDY_ACTION_ROW (row), check_button);
-  hdy_action_row_add_prefix (HDY_ACTION_ROW (row), separator);
-  gtk_container_add (GTK_CONTAINER (row), date);
-  gtk_container_add (GTK_CONTAINER (row), copy_url_button);
+  adw_action_row_add_prefix (ADW_ACTION_ROW (row), check_button);
+  adw_action_row_add_prefix (ADW_ACTION_ROW (row), separator);
+  adw_action_row_add_suffix (ADW_ACTION_ROW (row), date);
+  adw_action_row_add_suffix (ADW_ACTION_ROW (row), copy_url_button);
 
   gtk_widget_set_sensitive (check_button, ephy_embed_shell_get_mode (shell) != 
EPHY_EMBED_SHELL_MODE_INCOGNITO);
 
-  gtk_widget_show_all (row);
-
   /* Hide the Separator and CheckButton if selection isn't active */
   if (!self->selection_active) {
     gtk_widget_set_visible (separator, FALSE);
@@ -611,7 +604,7 @@ on_key_press_event (EphyHistoryDialog *self,
                     gpointer           user_data)
 {
   GdkEventKey *key = (GdkEventKey *)event;
-  HdySearchBar *search_bar = HDY_SEARCH_BAR (self->search_bar);
+  AdwSearchBar *search_bar = ADW_SEARCH_BAR (self->search_bar);
 
   /* Keep track internally of the Shift modifier needed for the
    * interval selection logic */
@@ -619,7 +612,7 @@ on_key_press_event (EphyHistoryDialog *self,
     self->shift_modifier_active = TRUE;
 
   /* Check if event can be handled by the search bar */
-  if (hdy_search_bar_handle_event (search_bar, event) == GDK_EVENT_STOP)
+  if (adw_search_bar_handle_event (search_bar, event) == GDK_EVENT_STOP)
     return GDK_EVENT_STOP;
 
   if (key->keyval == GDK_KEY_Down || key->keyval == GDK_KEY_Page_Down) {
@@ -635,7 +628,7 @@ on_key_press_event (EphyHistoryDialog *self,
   }
 
   if (key->keyval == GDK_KEY_Escape &&
-      !hdy_search_bar_get_search_mode (search_bar)) {
+      !adw_search_bar_get_search_mode (search_bar)) {
     if (self->selection_active)
       set_selection_active (self, FALSE);
     else
@@ -969,7 +962,8 @@ ephy_history_dialog_init (EphyHistoryDialog *self)
   self->sorter_source = 0;
   self->is_selection_empty = TRUE;
 
-  hdy_search_bar_connect_entry (HDY_SEARCH_BAR (self->search_bar), GTK_ENTRY (self->search_entry));
+  gtk_search_bar_connect_entry (GTK_SEARCH_BAR (self->search_bar),
+                                GTK_EDITABLE (self->search_entry));
 
   ephy_gui_ensure_window_group (GTK_WINDOW (self));
 
@@ -984,6 +978,6 @@ ephy_history_dialog_init (EphyHistoryDialog *self)
   gtk_widget_set_tooltip_text (self->clear_all_button, tooltip);
   set_is_loading (self, TRUE);
 
-  hdy_status_page_set_icon_name (HDY_STATUS_PAGE (self->empty_history_message),
+  adw_status_page_set_icon_name (ADW_STATUS_PAGE (self->empty_history_message),
                                  APPLICATION_ID "-symbolic");
 }
diff --git a/src/ephy-history-dialog.h b/src/ephy-history-dialog.h
index d77e45d8d..74a4252d0 100644
--- a/src/ephy-history-dialog.h
+++ b/src/ephy-history-dialog.h
@@ -20,7 +20,7 @@
 
 #pragma once
 
-#include <handy.h>
+#include <adwaita.h>
 
 #include "ephy-history-service.h"
 
@@ -28,7 +28,7 @@ G_BEGIN_DECLS
 
 #define EPHY_TYPE_HISTORY_DIALOG (ephy_history_dialog_get_type ())
 
-G_DECLARE_FINAL_TYPE (EphyHistoryDialog, ephy_history_dialog, EPHY, HISTORY_DIALOG, HdyWindow)
+G_DECLARE_FINAL_TYPE (EphyHistoryDialog, ephy_history_dialog, EPHY, HISTORY_DIALOG, AdwWindow)
 
 GtkWidget      *ephy_history_dialog_new        (EphyHistoryService *history_service);
 
diff --git a/src/ephy-link.c b/src/ephy-link.c
index cc7f69386..93c6a0009 100644
--- a/src/ephy-link.c
+++ b/src/ephy-link.c
@@ -94,6 +94,7 @@ ephy_link_open (EphyLink      *link,
   return new_embed;
 }
 
+#if 0
 EphyLinkFlags
 ephy_link_flags_from_current_event (void)
 {
@@ -122,3 +123,4 @@ ephy_link_flags_from_current_event (void)
 
   return flags;
 }
+#endif
diff --git a/src/ephy-lockdown.c b/src/ephy-lockdown.c
index 19d35af5f..4d4c9b554 100644
--- a/src/ephy-lockdown.c
+++ b/src/ephy-lockdown.c
@@ -88,25 +88,25 @@ static const BindAction app_actions[] = {
 };
 
 static const BindAction app_mode_app_actions[] = {
-  { EPHY_PREFS_LOCKDOWN_HISTORY, "history", "enabled" }
+//  { EPHY_PREFS_LOCKDOWN_HISTORY, "history", "enabled" }
 };
 
 static const BindAction window_actions[] = {
   { EPHY_PREFS_LOCKDOWN_ARBITRARY_URL, "location", "enabled"},
 
-  { EPHY_PREFS_LOCKDOWN_BOOKMARK_EDITING, "bookmark-page", "enabled" },
+//  { EPHY_PREFS_LOCKDOWN_BOOKMARK_EDITING, "bookmark-page", "enabled" },
 
   { EPHY_PREFS_LOCKDOWN_FULLSCREEN, "fullscreen", "enabled" },
 
   { EPHY_PREFS_LOCKDOWN_PRINTING, "print", "enabled" },
 
-  { EPHY_PREFS_LOCKDOWN_SAVE_TO_DISK, "save-as", "enabled" }
+//  { EPHY_PREFS_LOCKDOWN_SAVE_TO_DISK, "save-as", "enabled" }
 };
 
 static const BindAction popup_actions[] = {
   { EPHY_PREFS_LOCKDOWN_SAVE_TO_DISK, "download-link-as", "enabled" },
   { EPHY_PREFS_LOCKDOWN_SAVE_TO_DISK, "save-image-as", "enabled" },
-  { EPHY_PREFS_LOCKDOWN_BOOKMARK_EDITING, "context-bookmark-page", "enabled" },
+//  { EPHY_PREFS_LOCKDOWN_BOOKMARK_EDITING, "context-bookmark-page", "enabled" },
 
   { EPHY_PREFS_LOCKDOWN_FULLSCREEN, "open-link-in-new-window", "enabled" }
 };
@@ -215,22 +215,19 @@ window_added_cb (GtkApplication *application,
                              action_group, app_mode_app_actions,
                              G_N_ELEMENTS (app_mode_app_actions));
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window),
-                                              "win");
+  action_group = ephy_window_get_action_group (EPHY_WINDOW (window), "win");
   bind_settings_and_actions (EPHY_SETTINGS_LOCKDOWN,
                              action_group,
                              window_actions,
                              G_N_ELEMENTS (window_actions));
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window),
-                                              "toolbar");
+  action_group = ephy_window_get_action_group (EPHY_WINDOW (window), "toolbar");
   bind_settings_and_actions (EPHY_SETTINGS_LOCKDOWN,
                              action_group,
                              toolbar_actions,
                              G_N_ELEMENTS (toolbar_actions));
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window),
-                                              "popup");
+  action_group = ephy_window_get_action_group (EPHY_WINDOW (window), "popup");
   bind_settings_and_actions (EPHY_SETTINGS_LOCKDOWN,
                              action_group, popup_actions,
                              G_N_ELEMENTS (popup_actions));
@@ -243,8 +240,8 @@ window_added_cb (GtkApplication *application,
 
   if (mode != EPHY_EMBED_SHELL_MODE_APPLICATION &&
       mode != EPHY_EMBED_SHELL_MODE_AUTOMATION) {
-    location_controller = ephy_window_get_location_controller (EPHY_WINDOW (window));
-    bind_location_controller (EPHY_SETTINGS_LOCKDOWN, location_controller);
+//    location_controller = ephy_window_get_location_controller (EPHY_WINDOW (window));
+//    bind_location_controller (EPHY_SETTINGS_LOCKDOWN, location_controller);
   }
 }
 
diff --git a/src/ephy-mouse-gesture-controller.c b/src/ephy-mouse-gesture-controller.c
index f3a804d91..55112ea01 100644
--- a/src/ephy-mouse-gesture-controller.c
+++ b/src/ephy-mouse-gesture-controller.c
@@ -178,9 +178,9 @@ static void
 handle_gesture (gpointer user_data)
 {
   EphyMouseGestureController *self = EPHY_MOUSE_GESTURE_CONTROLLER (user_data);
-  GActionGroup *action_group_toolbar = gtk_widget_get_action_group (GTK_WIDGET (self->window), "toolbar");
-  GActionGroup *action_group_win = gtk_widget_get_action_group (GTK_WIDGET (self->window), "win");
-  GActionGroup *action_group_tab = gtk_widget_get_action_group (GTK_WIDGET (self->window), "tab");
+  GActionGroup *action_group_toolbar = ephy_window_get_action_group (self->window, "toolbar");
+  GActionGroup *action_group_win = ephy_window_get_action_group (self->window, "win");
+  GActionGroup *action_group_tab = ephy_window_get_action_group (self->window, "tab");
   GAction *action;
 
   switch (self->sequence_pos) {
@@ -259,7 +259,9 @@ ephy_mouse_gesture_controller_dispose (GObject *object)
 {
   EphyMouseGestureController *self = EPHY_MOUSE_GESTURE_CONTROLLER (object);
 
-  g_clear_object (&self->controller);
+  gtk_widget_remove_controller (GTK_WIDGET (self->window), self->controller);
+  self->controller = NULL;
+
   ephy_mouse_gesture_controller_unset_web_view (self);
 
   G_OBJECT_CLASS (ephy_mouse_gesture_controller_parent_class)->dispose (object);
@@ -272,8 +274,9 @@ ephy_mouse_gesture_controller_constructed (GObject *object)
 
   ephy_mouse_gesture_controller_reset (self);
 
-  self->controller = gtk_event_controller_motion_new (GTK_WIDGET (self->window));
+  self->controller = gtk_event_controller_motion_new ();
   g_signal_connect (self->controller, "motion", G_CALLBACK (ephy_mouse_gesture_controller_motion_cb), self);
+  gtk_widget_add_controller (GTK_WIDGET (self->window), self->controller);
 }
 
 static void
diff --git a/src/ephy-page-row.c b/src/ephy-page-row.c
index 932e8f37e..eb99c05b0 100644
--- a/src/ephy-page-row.c
+++ b/src/ephy-page-row.c
@@ -37,7 +37,7 @@ struct _EphyPageRow {
   GtkLabel *title;
   GtkButton *close_button;
 
-  HdyTabPage *page;
+  AdwTabPage *page;
   EphyTabView *tab_view;
 };
 
@@ -47,7 +47,7 @@ static void
 update_spinner (EphyPageRow *self)
 {
   if (gtk_widget_get_mapped (GTK_WIDGET (self)) &&
-      hdy_tab_page_get_loading (self->page))
+      adw_tab_page_get_loading (self->page))
     gtk_spinner_start (self->spinner);
   else
     gtk_spinner_stop (self->spinner);
@@ -56,23 +56,19 @@ update_spinner (EphyPageRow *self)
 static void
 close_clicked_cb (EphyPageRow *self)
 {
-  hdy_tab_view_close_page (ephy_tab_view_get_tab_view (self->tab_view), self->page);
+  adw_tab_view_close_page (ephy_tab_view_get_tab_view (self->tab_view), self->page);
 }
 
-static gboolean
-button_release_event (GtkWidget   *widget,
-                      GdkEvent    *event,
-                      EphyPageRow *self)
+static void
+released_cb (GtkGesture  *gesture,
+             int          n_press,
+             double       x,
+             double       y,
+             EphyPageRow *self)
 {
-  GdkEventButton *button_event = (GdkEventButton *)event;
-
-  if (button_event->button == GDK_BUTTON_MIDDLE) {
-    hdy_tab_view_close_page (ephy_tab_view_get_tab_view (self->tab_view), self->page);
-
-    return GDK_EVENT_STOP;
-  }
+  gtk_gesture_set_state (gesture, GTK_EVENT_SEQUENCE_CLAIMED);
 
-  return GDK_EVENT_PROPAGATE;
+  adw_tab_view_close_page (ephy_tab_view_get_tab_view (self->tab_view), self->page);
 }
 
 static void
@@ -90,7 +86,7 @@ ephy_page_row_class_init (EphyPageRowClass *klass)
   gtk_widget_class_bind_template_child (widget_class, EphyPageRow, close_button);
   gtk_widget_class_bind_template_callback (widget_class, update_spinner);
   gtk_widget_class_bind_template_callback (widget_class, close_clicked_cb);
-  gtk_widget_class_bind_template_callback (widget_class, button_release_event);
+  gtk_widget_class_bind_template_callback (widget_class, released_cb);
 }
 
 static void
@@ -116,14 +112,14 @@ loading_to_visible_child (GBinding     *binding,
 static void
 update_icon_cb (EphyPageRow *self)
 {
-  EphyEmbed *embed = EPHY_EMBED (hdy_tab_page_get_child (self->page));
+  EphyEmbed *embed = EPHY_EMBED (adw_tab_page_get_child (self->page));
   EphyWebView *view = ephy_embed_get_web_view (embed);
   GIcon *icon = G_ICON (ephy_web_view_get_icon (view));
   const char *uri, *favicon_name;
-  HdyTabView *tab_view;
+  AdwTabView *tab_view;
 
   if (icon) {
-    gtk_image_set_from_gicon (self->icon, icon, GTK_ICON_SIZE_MENU);
+    gtk_image_set_from_gicon (self->icon, icon);
 
     return;
   }
@@ -134,25 +130,25 @@ update_icon_cb (EphyPageRow *self)
   if (favicon_name) {
     g_autoptr (GIcon) fallback_icon = g_themed_icon_new (favicon_name);
 
-    gtk_image_set_from_gicon (self->icon, fallback_icon, GTK_ICON_SIZE_MENU);
+    gtk_image_set_from_gicon (self->icon, fallback_icon);
 
     return;
   }
 
   tab_view = ephy_tab_view_get_tab_view (self->tab_view);
 
-  gtk_image_set_from_gicon (self->icon, hdy_tab_view_get_default_icon (tab_view), GTK_ICON_SIZE_MENU);
+  gtk_image_set_from_gicon (self->icon, adw_tab_view_get_default_icon (tab_view));
 }
 
 EphyPageRow *
 ephy_page_row_new (EphyTabView *tab_view,
-                   HdyTabPage  *page)
+                   AdwTabPage  *page)
 {
   EphyPageRow *self;
-  GtkWidget *embed = hdy_tab_page_get_child (page);
+  GtkWidget *embed = adw_tab_page_get_child (page);
   EphyWebView *view;
 
-  g_assert (HDY_IS_TAB_PAGE (page));
+  g_assert (ADW_IS_TAB_PAGE (page));
   g_assert (EPHY_IS_EMBED (embed));
 
   view = ephy_embed_get_web_view (EPHY_EMBED (embed));
@@ -214,7 +210,7 @@ ephy_page_row_set_adaptive_mode (EphyPageRow      *self,
   }
 }
 
-HdyTabPage *
+AdwTabPage *
 ephy_page_row_get_page (EphyPageRow *self)
 {
   g_assert (EPHY_IS_PAGE_ROW (self));
diff --git a/src/ephy-page-row.h b/src/ephy-page-row.h
index bff823af3..e74957220 100644
--- a/src/ephy-page-row.h
+++ b/src/ephy-page-row.h
@@ -21,7 +21,7 @@
 
 #pragma once
 
-#include <handy.h>
+#include <adwaita.h>
 #include "ephy-adaptive-mode.h"
 #include "ephy-tab-view.h"
 
@@ -32,11 +32,11 @@ G_BEGIN_DECLS
 G_DECLARE_FINAL_TYPE (EphyPageRow, ephy_page_row, EPHY, PAGE_ROW, GtkListBoxRow)
 
 EphyPageRow *ephy_page_row_new (EphyTabView *view,
-                                HdyTabPage  *page);
+                                AdwTabPage  *page);
 
 void ephy_page_row_set_adaptive_mode (EphyPageRow      *self,
                                       EphyAdaptiveMode  adaptive_mode);
 
-HdyTabPage *ephy_page_row_get_page (EphyPageRow *self);
+AdwTabPage *ephy_page_row_get_page (EphyPageRow *self);
 
 G_END_DECLS
diff --git a/src/ephy-pages-button.c b/src/ephy-pages-button.c
index 757a7f79e..4a4b683c6 100644
--- a/src/ephy-pages-button.c
+++ b/src/ephy-pages-button.c
@@ -92,7 +92,7 @@ update_icon (EphyPagesButton *self)
 
   gtk_widget_set_visible (GTK_WIDGET (self->pages_label), !is_overflow);
   gtk_label_set_text (self->pages_label, label_text);
-  gtk_image_set_from_icon_name (self->pages_icon, icon_name, GTK_ICON_SIZE_BUTTON);
+  gtk_image_set_from_icon_name (self->pages_icon, icon_name);
 }
 
 EphyPagesButton *
diff --git a/src/ephy-pages-popover.c b/src/ephy-pages-popover.c
index 04c190e40..f6c028e11 100644
--- a/src/ephy-pages-popover.c
+++ b/src/ephy-pages-popover.c
@@ -23,10 +23,6 @@
 
 #include "ephy-pages-popover.h"
 
-#ifdef GDK_WINDOWING_X11
-#include <gdk/gdkx.h>
-#endif
-
 #include "ephy-page-row.h"
 #include "ephy-window.h"
 
@@ -63,7 +59,7 @@ row_activated_cb (EphyPagesPopover *self,
 {
   EphyWindow *window;
   GApplication *application;
-  HdyTabPage *page;
+  AdwTabPage *page;
 
   g_assert (EPHY_IS_PAGES_POPOVER (self));
   g_assert (EPHY_IS_PAGE_ROW (row));
@@ -72,31 +68,29 @@ row_activated_cb (EphyPagesPopover *self,
   window = EPHY_WINDOW (gtk_application_get_active_window (GTK_APPLICATION (application)));
   page = ephy_page_row_get_page (EPHY_PAGE_ROW (row));
 
-  hdy_tab_view_set_selected_page (ephy_tab_view_get_tab_view (self->tab_view), page);
+  adw_tab_view_set_selected_page (ephy_tab_view_get_tab_view (self->tab_view), page);
   ephy_window_close_pages_view (window);
 
   gtk_popover_popdown (GTK_POPOVER (self));
 }
 
 static GtkWidget *
-create_row (HdyTabPage       *page,
+create_row (AdwTabPage       *page,
             EphyPagesPopover *self)
 {
   EphyPageRow *row = ephy_page_row_new (self->tab_view, page);
 
   ephy_page_row_set_adaptive_mode (row, EPHY_ADAPTIVE_MODE_NORMAL);
 
-  gtk_widget_show (GTK_WIDGET (row));
-
   return GTK_WIDGET (row);
 }
 
 static void
-selected_page_changed_cb (HdyTabView       *tab_view,
+selected_page_changed_cb (AdwTabView       *tab_view,
                           GParamSpec       *pspec,
                           EphyPagesPopover *self)
 {
-  HdyTabPage *page = hdy_tab_view_get_selected_page (tab_view);
+  AdwTabPage *page = adw_tab_view_get_selected_page (tab_view);
   gint position;
   GtkListBoxRow *row;
 
@@ -106,7 +100,7 @@ selected_page_changed_cb (HdyTabView       *tab_view,
     return;
   }
 
-  position = hdy_tab_view_get_page_position (tab_view, page);
+  position = adw_tab_view_get_page_position (tab_view, page);
   row = gtk_list_box_get_row_at_index (self->list_box, position);
   gtk_list_box_select_row (self->list_box, row);
 }
@@ -121,30 +115,6 @@ ephy_pages_popover_dispose (GObject *object)
   G_OBJECT_CLASS (ephy_pages_popover_parent_class)->dispose (object);
 }
 
-#ifdef GDK_WINDOWING_X11
-static void
-ephy_pages_popover_get_preferred_height (GtkWidget *widget,
-                                         gint      *minimum_height,
-                                         gint      *natural_height)
-{
-  EphyPagesPopover *self = EPHY_PAGES_POPOVER (widget);
-  int height;
-
-  GTK_WIDGET_CLASS (ephy_pages_popover_parent_class)->get_preferred_height (widget,
-                                                                            minimum_height,
-                                                                            natural_height);
-  /* Ensure that popover won't leave current window */
-  height = gtk_widget_get_allocated_height (GTK_WIDGET (self->tab_view));
-  gtk_scrolled_window_set_max_content_height (self->scrolled_window, height);
-}
-
-static GtkSizeRequestMode
-ephy_pages_popover_get_request_mode (GtkWidget *widget)
-{
-  return GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT;
-}
-#endif
-
 static void
 ephy_pages_popover_class_init (EphyPagesPopoverClass *klass)
 {
@@ -153,13 +123,6 @@ ephy_pages_popover_class_init (EphyPagesPopoverClass *klass)
 
   object_class->dispose = ephy_pages_popover_dispose;
 
-#ifdef GDK_WINDOWING_X11
-  if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) {
-    widget_class->get_request_mode = ephy_pages_popover_get_request_mode;
-    widget_class->get_preferred_height = ephy_pages_popover_get_preferred_height;
-  }
-#endif
-
   gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/epiphany/gtk/pages-popover.ui");
   gtk_widget_class_bind_template_child (widget_class, EphyPagesPopover, list_box);
   gtk_widget_class_bind_template_child (widget_class, EphyPagesPopover, scrolled_window);
@@ -173,13 +136,9 @@ ephy_pages_popover_init (EphyPagesPopover *self)
 }
 
 EphyPagesPopover *
-ephy_pages_popover_new (GtkWidget *relative_to)
+ephy_pages_popover_new (void)
 {
-  g_assert (!relative_to || GTK_IS_WIDGET (relative_to));
-
-  return g_object_new (EPHY_TYPE_PAGES_POPOVER,
-                       "relative-to", relative_to,
-                       NULL);
+  return g_object_new (EPHY_TYPE_PAGES_POPOVER, NULL);
 }
 
 EphyTabView *
@@ -205,7 +164,7 @@ ephy_pages_popover_set_tab_view (EphyPagesPopover *self,
   g_object_weak_ref (G_OBJECT (tab_view), (GWeakNotify)drop_tab_view, self);
   self->tab_view = tab_view;
 
-  self->model = hdy_tab_view_get_pages (ephy_tab_view_get_tab_view (tab_view));
+  self->model = G_LIST_MODEL (adw_tab_view_get_pages (ephy_tab_view_get_tab_view (tab_view)));
 
   gtk_list_box_bind_model (self->list_box,
                            self->model,
diff --git a/src/ephy-pages-popover.h b/src/ephy-pages-popover.h
index 1c148d403..d0a9c5eba 100644
--- a/src/ephy-pages-popover.h
+++ b/src/ephy-pages-popover.h
@@ -31,7 +31,7 @@ G_BEGIN_DECLS
 
 G_DECLARE_FINAL_TYPE (EphyPagesPopover, ephy_pages_popover, EPHY, PAGES_POPOVER, GtkPopover)
 
-EphyPagesPopover *ephy_pages_popover_new (GtkWidget *relative_to);
+EphyPagesPopover *ephy_pages_popover_new (void);
 
 EphyTabView *ephy_pages_popover_get_tab_view (EphyPagesPopover *self);
 void         ephy_pages_popover_set_tab_view (EphyPagesPopover *self,
diff --git a/src/ephy-pages-view.c b/src/ephy-pages-view.c
index 6b0f57184..4eb11ab56 100644
--- a/src/ephy-pages-view.c
+++ b/src/ephy-pages-view.c
@@ -44,7 +44,7 @@ row_activated_cb (EphyPagesView *self,
 {
   EphyWindow *window;
   GApplication *application;
-  HdyTabPage *page;
+  AdwTabPage *page;
 
   g_assert (EPHY_IS_PAGES_VIEW (self));
   g_assert (EPHY_IS_PAGE_ROW (row));
@@ -53,29 +53,27 @@ row_activated_cb (EphyPagesView *self,
   window = EPHY_WINDOW (gtk_application_get_active_window (GTK_APPLICATION (application)));
   page = ephy_page_row_get_page (EPHY_PAGE_ROW (row));
 
-  hdy_tab_view_set_selected_page (ephy_tab_view_get_tab_view (self->tab_view), page);
+  adw_tab_view_set_selected_page (ephy_tab_view_get_tab_view (self->tab_view), page);
   ephy_window_close_pages_view (window);
 }
 
 static GtkWidget *
-create_row (HdyTabPage    *page,
+create_row (AdwTabPage    *page,
             EphyPagesView *self)
 {
   EphyPageRow *row = ephy_page_row_new (self->tab_view, page);
 
   ephy_page_row_set_adaptive_mode (row, EPHY_ADAPTIVE_MODE_NARROW);
 
-  gtk_widget_show (GTK_WIDGET (row));
-
   return GTK_WIDGET (row);
 }
 
 static void
-selected_page_changed_cb (HdyTabView    *tab_view,
+selected_page_changed_cb (AdwTabView    *tab_view,
                           GParamSpec    *pspec,
                           EphyPagesView *self)
 {
-  HdyTabPage *page = hdy_tab_view_get_selected_page (tab_view);
+  AdwTabPage *page = adw_tab_view_get_selected_page (tab_view);
   gint position;
   GtkListBoxRow *row;
 
@@ -85,7 +83,7 @@ selected_page_changed_cb (HdyTabView    *tab_view,
     return;
   }
 
-  position = hdy_tab_view_get_page_position (tab_view, page);
+  position = adw_tab_view_get_page_position (tab_view, page);
   row = gtk_list_box_get_row_at_index (self->list_box, position);
   gtk_list_box_select_row (self->list_box, row);
 }
@@ -147,7 +145,7 @@ ephy_pages_view_set_tab_view (EphyPagesView *self,
   g_object_add_weak_pointer (G_OBJECT (tab_view), (gpointer *)&self->tab_view);
   self->tab_view = tab_view;
 
-  self->model = hdy_tab_view_get_pages (ephy_tab_view_get_tab_view (tab_view));
+  self->model = G_LIST_MODEL (adw_tab_view_get_pages (ephy_tab_view_get_tab_view (tab_view)));
 
   gtk_list_box_bind_model (self->list_box,
                            self->model,
diff --git a/src/ephy-session.c b/src/ephy-session.c
index af2df8f3c..fa8016955 100644
--- a/src/ephy-session.c
+++ b/src/ephy-session.c
@@ -255,7 +255,7 @@ ephy_session_undo_close_tab (EphySession *session)
       flags |= EPHY_NEW_TAB_FIRST;
     }
 
-    window = EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (tab_view)));
+    window = EPHY_WINDOW (gtk_widget_get_root (GTK_WIDGET (tab_view)));
     new_tab = ephy_shell_new_tab (ephy_shell_get_default (),
                                   window, embed,
                                   flags);
@@ -278,7 +278,7 @@ ephy_session_undo_close_tab (EphySession *session)
   }
 
   gtk_widget_grab_focus (GTK_WIDGET (new_tab));
-  gtk_window_present_with_time (GTK_WINDOW (window), gtk_get_current_event_time ());
+  gtk_window_present (GTK_WINDOW (window));
 
   closed_tab_free (tab);
 
@@ -325,24 +325,24 @@ ephy_session_get_can_undo_tab_closed (EphySession *session)
 }
 
 static void
-tab_view_page_attached_cb (HdyTabView  *tab_view,
-                           HdyTabPage  *page,
+tab_view_page_attached_cb (AdwTabView  *tab_view,
+                           AdwTabPage  *page,
                            guint        position,
                            EphySession *session)
 {
-  EphyEmbed *embed = EPHY_EMBED (hdy_tab_page_get_child (page));
+  EphyEmbed *embed = EPHY_EMBED (adw_tab_page_get_child (page));
 
   g_signal_connect (ephy_embed_get_web_view (embed), "load-changed",
                     G_CALLBACK (load_changed_cb), session);
 }
 
 static void
-tab_view_page_detached_cb (HdyTabView  *tab_view,
-                           HdyTabPage  *page,
+tab_view_page_detached_cb (AdwTabView  *tab_view,
+                           AdwTabPage  *page,
                            gint         position,
                            EphySession *session)
 {
-  EphyEmbed *embed = EPHY_EMBED (hdy_tab_page_get_child (page));
+  EphyEmbed *embed = EPHY_EMBED (adw_tab_page_get_child (page));
   EphyTabView *ephy_tab_view = EPHY_TAB_VIEW (g_object_get_data (G_OBJECT (tab_view), "ephy-tab-view"));
 
   ephy_session_save (session);
@@ -355,8 +355,8 @@ tab_view_page_detached_cb (HdyTabView  *tab_view,
 }
 
 static void
-tab_view_page_reordered_cb (HdyTabView  *tab_view,
-                            HdyTabPage  *page,
+tab_view_page_reordered_cb (AdwTabView  *tab_view,
+                            AdwTabPage  *page,
                             guint        position,
                             EphySession *session)
 {
@@ -364,7 +364,7 @@ tab_view_page_reordered_cb (HdyTabView  *tab_view,
 }
 
 static void
-tab_view_notify_selected_page_cb (HdyTabView  *tab_view,
+tab_view_notify_selected_page_cb (AdwTabView  *tab_view,
                                   GParamSpec  *pspec,
                                   EphySession *session)
 {
@@ -391,7 +391,7 @@ window_added_cb (GtkApplication *application,
                  EphySession    *session)
 {
   EphyWindow *ephy_window;
-  HdyTabView *tab_view;
+  AdwTabView *tab_view;
 
   ephy_session_save (session);
 
@@ -1136,6 +1136,14 @@ session_parser_context_free (SessionParserContext *context)
   g_free (context);
 }
 
+static void
+window_destroyed (GtkWidget  *widget,
+                  GtkWidget **widget_pointer)
+{
+  if (widget_pointer)
+    *widget_pointer = NULL;
+}
+
 static void
 session_parse_window (SessionParserContext  *context,
                       const gchar          **names,
@@ -1152,7 +1160,7 @@ session_parse_window (SessionParserContext  *context,
   }
 
   context->window = ephy_window_new ();
-  context->destroy_id = g_signal_connect (context->window, "destroy", G_CALLBACK (gtk_widget_destroyed), 
&context->window);
+  context->destroy_id = g_signal_connect (context->window, "destroy", G_CALLBACK (window_destroyed), 
&context->window);
 
   for (i = 0; names[i]; i++) {
     gulong int_value;
@@ -1198,7 +1206,7 @@ session_parse_embed (SessionParserContext  *context,
                      const gchar          **names,
                      const gchar          **values)
 {
-  HdyTabView *tab_view;
+  AdwTabView *tab_view;
   const char *url = NULL;
   const char *title = NULL;
   const char *history = NULL;
@@ -1265,8 +1273,8 @@ session_parse_embed (SessionParserContext  *context,
                                      context->window, NULL, flags,
                                      0);
 
-    hdy_tab_view_set_page_pinned (tab_view,
-                                  hdy_tab_view_get_page (tab_view, GTK_WIDGET (embed)),
+    adw_tab_view_set_page_pinned (tab_view,
+                                  adw_tab_view_get_page (tab_view, GTK_WIDGET (embed)),
                                   is_pin);
 
     web_view = ephy_embed_get_web_view (embed);
@@ -1796,7 +1804,7 @@ ephy_session_clear (EphySession *session)
   shell = ephy_shell_get_default ();
   windows = g_list_copy (gtk_application_get_windows (GTK_APPLICATION (shell)));
   for (p = windows; p; p = p->next)
-    gtk_widget_destroy (GTK_WIDGET (p->data));
+    gtk_window_destroy (GTK_WINDOW (p->data));
   g_list_free (windows);
   g_queue_foreach (session->closed_tabs,
                    (GFunc)closed_tab_free, NULL);
diff --git a/src/ephy-shell.c b/src/ephy-shell.c
index 0ace095aa..e3f5ecd65 100644
--- a/src/ephy-shell.c
+++ b/src/ephy-shell.c
@@ -28,10 +28,10 @@
 #include "ephy-embed-container.h"
 #include "ephy-embed-utils.h"
 #include "ephy-file-helpers.h"
-#include "ephy-firefox-sync-dialog.h"
+//#include "ephy-firefox-sync-dialog.h"
 #include "ephy-gui.h"
 #include "ephy-header-bar.h"
-#include "ephy-history-dialog.h"
+//#include "ephy-history-dialog.h"
 #include "ephy-link.h"
 #include "ephy-lockdown.h"
 #include "ephy-notification.h"
@@ -50,7 +50,6 @@
 
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
-#include <handy.h>
 
 struct _EphyShell {
   EphyEmbedShell parent_instance;
@@ -232,6 +231,7 @@ import_passwords (GSimpleAction *action,
   window_cmd_import_passwords (NULL, NULL, EPHY_WINDOW (window));
 }
 
+/*
 static void
 show_history (GSimpleAction *action,
               GVariant      *parameter,
@@ -255,6 +255,7 @@ show_firefox_sync (GSimpleAction *action,
 
   window_cmd_show_firefox_sync (NULL, NULL, EPHY_WINDOW (window));
 }
+*/
 
 static void
 show_preferences (GSimpleAction *action,
@@ -339,7 +340,7 @@ launch_app (GSimpleAction *action,
    * is disabled when running under flatpak.
    */
   ephy_file_launch_desktop_file (desktop_file,
-                                 gtk_get_current_event_time (),
+                                 g_get_monotonic_time (),
                                  EPHY_FILE_HELPERS_I_UNDERSTAND_I_MUST_NOT_USE_THIS_FUNCTION_UNDER_FLATPAK);
 }
 
@@ -363,8 +364,8 @@ static GActionEntry app_entries[] = {
   { "import-bookmarks", import_bookmarks, NULL, NULL, NULL },
   { "export-bookmarks", export_bookmarks, NULL, NULL, NULL },
   { "import-passwords", import_passwords, NULL, NULL, NULL },
-  { "history", show_history, NULL, NULL, NULL },
-  { "firefox-sync-dialog", show_firefox_sync, NULL, NULL, NULL },
+//  { "history", show_history, NULL, NULL, NULL },
+//  { "firefox-sync-dialog", show_firefox_sync, NULL, NULL, NULL },
   { "preferences", show_preferences, NULL, NULL, NULL },
   { "shortcuts", show_shortcuts, NULL, NULL, NULL },
   { "help", show_help, NULL, NULL, NULL },
@@ -380,7 +381,7 @@ static GActionEntry non_incognito_extra_app_entries[] = {
 };
 
 static GActionEntry app_mode_app_entries[] = {
-  { "history", show_history, NULL, NULL, NULL },
+//  { "history", show_history, NULL, NULL, NULL },
   { "preferences", show_preferences, NULL, NULL, NULL },
   { "about", show_about, NULL, NULL, NULL },
   { "quit", quit_application, NULL, NULL, NULL },
@@ -493,11 +494,6 @@ ephy_shell_startup (GApplication *application)
 
   G_APPLICATION_CLASS (ephy_shell_parent_class)->startup (application);
 
-  hdy_init ();
-
-  hdy_style_manager_set_color_scheme (hdy_style_manager_get_default (),
-                                      HDY_COLOR_SCHEME_PREFER_LIGHT);
-
   /* If we are under Pantheon set the icon-theme and cursor-theme accordingly. */
   if (is_desktop_pantheon ()) {
     GtkSettings *settings = gtk_settings_get_default ();
@@ -819,8 +815,8 @@ ephy_shell_constructed (GObject *object)
   }
 
   if (ephy_embed_shell_get_mode (EPHY_EMBED_SHELL (object)) == EPHY_EMBED_SHELL_MODE_APPLICATION) {
-    dzl_application_add_resources (DZL_APPLICATION (object),
-                                   "resource:///org/gnome/Epiphany");
+//    dzl_application_add_resources (DZL_APPLICATION (object),
+//                                   "resource:///org/gnome/Epiphany");
   }
 
   /* FIXME: not sure if this is the best place to put this stuff. */
@@ -876,7 +872,7 @@ ephy_shell_dispose (GObject *object)
 
   g_clear_object (&shell->session);
   g_clear_object (&shell->lockdown);
-  g_clear_pointer (&shell->history_dialog, gtk_widget_destroy);
+  g_clear_pointer ((GtkWindow **) &shell->history_dialog, gtk_window_destroy);
   g_clear_object (&shell->prefs_dialog);
   g_clear_object (&shell->network_monitor);
   g_clear_object (&shell->sync_service);
@@ -1169,7 +1165,6 @@ ephy_shell_get_bookmarks_manager (EphyShell *shell)
 
   return shell->bookmarks_manager;
 }
-
 /**
  * ephy_shell_get_history_manager:
  * @shell: the #EphyShell
@@ -1220,6 +1215,15 @@ ephy_shell_get_net_monitor (EphyShell *shell)
   return shell->network_monitor;
 }
 
+static void
+window_destroyed (GtkWidget  *widget,
+                  GtkWidget **widget_pointer)
+{
+  if (widget_pointer)
+    *widget_pointer = NULL;
+}
+
+#if 0
 /**
  * ephy_shell_get_history_dialog:
  *
@@ -1238,7 +1242,7 @@ ephy_shell_get_history_dialog (EphyShell *shell)
     shell->history_dialog = ephy_history_dialog_new (service);
     g_signal_connect (shell->history_dialog,
                       "destroy",
-                      G_CALLBACK (gtk_widget_destroyed),
+                      G_CALLBACK (window_destroyed),
                       &shell->history_dialog);
   }
 
@@ -1257,12 +1261,13 @@ ephy_shell_get_firefox_sync_dialog (EphyShell *shell)
     shell->firefox_sync_dialog = ephy_firefox_sync_dialog_new ();
     g_signal_connect (shell->firefox_sync_dialog,
                       "destroy",
-                      G_CALLBACK (gtk_widget_destroyed),
+                      G_CALLBACK (window_destroyed),
                       &shell->firefox_sync_dialog);
   }
 
   return shell->firefox_sync_dialog;
 }
+#endif
 
 /**
  * ephy_shell_get_prefs_dialog:
@@ -1277,7 +1282,7 @@ ephy_shell_get_prefs_dialog (EphyShell *shell)
 
     g_signal_connect (shell->prefs_dialog,
                       "destroy",
-                      G_CALLBACK (gtk_widget_destroyed),
+                      G_CALLBACK (window_destroyed),
                       &shell->prefs_dialog);
   }
 
@@ -1359,7 +1364,7 @@ ephy_shell_close_all_windows (EphyShell *shell)
     windows = windows->next;
 
     if (ephy_window_close (window))
-      gtk_widget_destroy (GTK_WIDGET (window));
+      gtk_window_destroy (GTK_WINDOW (window));
     else
       retval = FALSE;
   }
diff --git a/src/ephy-tab-view.c b/src/ephy-tab-view.c
index e2c785892..65f39c18d 100644
--- a/src/ephy-tab-view.c
+++ b/src/ephy-tab-view.c
@@ -22,7 +22,7 @@
 #include "ephy-tab-view.h"
 
 #include "ephy-desktop-utils.h"
-#include "ephy-dnd.h"
+//#include "ephy-dnd.h"
 #include "ephy-embed-utils.h"
 #include "ephy-link.h"
 #include "ephy-settings.h"
@@ -31,14 +31,14 @@
 #define MAX_NUMBER_OF_URLS 20
 
 struct _EphyTabView {
-  GtkBin parent_instance;
+  AdwBin parent_instance;
 
-  HdyTabView *tab_view;
-  HdyTabBar *tab_bar;
-  HdyTabPage *current_page;
+  AdwTabView *tab_view;
+  AdwTabBar *tab_bar;
+  AdwTabPage *current_page;
 };
 
-G_DEFINE_TYPE (EphyTabView, ephy_tab_view, GTK_TYPE_BIN)
+G_DEFINE_TYPE (EphyTabView, ephy_tab_view, ADW_TYPE_BIN)
 
 enum {
   PROP_0,
@@ -58,19 +58,19 @@ notify_n_pages_cb (EphyTabView *self)
 static void
 notify_selected_page_cb (EphyTabView *self)
 {
-  HdyTabPage *page = hdy_tab_view_get_selected_page (self->tab_view);
+  AdwTabPage *page = adw_tab_view_get_selected_page (self->tab_view);
 
   if (page)
-    hdy_tab_page_set_needs_attention (page, FALSE);
+    adw_tab_page_set_needs_attention (page, FALSE);
 
   g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SELECTED_INDEX]);
 }
 
 static void
 indicator_activated_cb (EphyTabView *self,
-                        HdyTabPage  *page)
+                        AdwTabPage  *page)
 {
-  EphyEmbed *embed = EPHY_EMBED (hdy_tab_page_get_child (page));
+  EphyEmbed *embed = EPHY_EMBED (adw_tab_page_get_child (page));
   EphyWebView *view = ephy_embed_get_web_view (embed);
   gboolean muted = webkit_web_view_get_is_muted (WEBKIT_WEB_VIEW (view));
 
@@ -79,18 +79,18 @@ indicator_activated_cb (EphyTabView *self,
 
 static void
 setup_menu_cb (EphyTabView *self,
-               HdyTabPage  *page)
+               AdwTabPage  *page)
 {
   self->current_page = page;
 }
 
-static HdyTabPage *
+static AdwTabPage *
 get_current_page (EphyTabView *self)
 {
   if (self->current_page)
     return self->current_page;
 
-  return hdy_tab_view_get_selected_page (self->tab_view);
+  return adw_tab_view_get_selected_page (self->tab_view);
 }
 
 static void
@@ -150,12 +150,11 @@ ephy_tab_view_class_init (EphyTabViewClass *klass)
 static void
 ephy_tab_view_init (EphyTabView *self)
 {
-  self->tab_view = HDY_TAB_VIEW (hdy_tab_view_new ());
-  gtk_widget_show (GTK_WIDGET (self->tab_view));
+  self->tab_view = ADW_TAB_VIEW (adw_tab_view_new ());
 
   g_object_set_data (G_OBJECT (self->tab_view), "ephy-tab-view", self);
 
-  gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->tab_view));
+  adw_bin_set_child (ADW_BIN (self), GTK_WIDGET (self->tab_view));
 
   g_signal_connect_object (self->tab_view,
                            "notify::n-pages",
@@ -191,52 +190,52 @@ ephy_tab_view_new (void)
 void
 ephy_tab_view_next (EphyTabView *self)
 {
-  hdy_tab_view_select_next_page (self->tab_view);
+  adw_tab_view_select_next_page (self->tab_view);
 }
 
 void
 ephy_tab_view_pin (EphyTabView *self)
 {
-  hdy_tab_view_set_page_pinned (self->tab_view, get_current_page (self), TRUE);
+  adw_tab_view_set_page_pinned (self->tab_view, get_current_page (self), TRUE);
 }
 
 void
 ephy_tab_view_unpin (EphyTabView *self)
 {
-  hdy_tab_view_set_page_pinned (self->tab_view, get_current_page (self), FALSE);
+  adw_tab_view_set_page_pinned (self->tab_view, get_current_page (self), FALSE);
 }
 
 void
 ephy_tab_view_close (EphyTabView *self,
                      GtkWidget   *widget)
 {
-  HdyTabPage *page = hdy_tab_view_get_page (self->tab_view, widget);
+  AdwTabPage *page = adw_tab_view_get_page (self->tab_view, widget);
 
-  hdy_tab_view_close_page (self->tab_view, page);
+  adw_tab_view_close_page (self->tab_view, page);
 }
 
 void
 ephy_tab_view_close_selected (EphyTabView *self)
 {
-  hdy_tab_view_close_page (self->tab_view, get_current_page (self));
+  adw_tab_view_close_page (self->tab_view, get_current_page (self));
 }
 
 void
 ephy_tab_view_close_left (EphyTabView *self)
 {
-  hdy_tab_view_close_pages_before (self->tab_view, get_current_page (self));
+  adw_tab_view_close_pages_before (self->tab_view, get_current_page (self));
 }
 
 void
 ephy_tab_view_close_right (EphyTabView *self)
 {
-  hdy_tab_view_close_pages_after (self->tab_view, get_current_page (self));
+  adw_tab_view_close_pages_after (self->tab_view, get_current_page (self));
 }
 
 void
 ephy_tab_view_close_other (EphyTabView *self)
 {
-  hdy_tab_view_close_other_pages (self->tab_view, get_current_page (self));
+  adw_tab_view_close_other_pages (self->tab_view, get_current_page (self));
 }
 
 void
@@ -246,67 +245,67 @@ ephy_tab_view_foreach (EphyTabView         *self,
 {
   int i, n;
 
-  n = hdy_tab_view_get_n_pages (self->tab_view);
+  n = adw_tab_view_get_n_pages (self->tab_view);
 
   for (i = 0; i < n; i++) {
-    HdyTabPage *page = hdy_tab_view_get_nth_page (self->tab_view, i);
+    AdwTabPage *page = adw_tab_view_get_nth_page (self->tab_view, i);
 
-    callback (hdy_tab_page_get_child (page), user_data);
+    callback (adw_tab_page_get_child (page), user_data);
   }
 }
 
 int
 ephy_tab_view_get_n_pages (EphyTabView *self)
 {
-  return hdy_tab_view_get_n_pages (self->tab_view);
+  return adw_tab_view_get_n_pages (self->tab_view);
 }
 
 int
 ephy_tab_view_get_selected_index (EphyTabView *self)
 {
-  HdyTabPage *page = hdy_tab_view_get_selected_page (self->tab_view);
+  AdwTabPage *page = adw_tab_view_get_selected_page (self->tab_view);
 
   if (!page)
     return -1;
 
-  return hdy_tab_view_get_page_position (self->tab_view, page);
+  return adw_tab_view_get_page_position (self->tab_view, page);
 }
 
 int
 ephy_tab_view_get_page_index (EphyTabView *self,
                               GtkWidget   *widget)
 {
-  HdyTabPage *page = hdy_tab_view_get_page (self->tab_view, widget);
+  AdwTabPage *page = adw_tab_view_get_page (self->tab_view, widget);
 
-  return hdy_tab_view_get_page_position (self->tab_view, page);
+  return adw_tab_view_get_page_position (self->tab_view, page);
 }
 
 GtkWidget *
 ephy_tab_view_get_nth_page (EphyTabView *self,
                             int          index)
 {
-  HdyTabPage *page = hdy_tab_view_get_nth_page (self->tab_view, index);
+  AdwTabPage *page = adw_tab_view_get_nth_page (self->tab_view, index);
 
-  return hdy_tab_page_get_child (page);
+  return adw_tab_page_get_child (page);
 }
 
 void
 ephy_tab_view_select_nth_page (EphyTabView *self,
                                int          index)
 {
-  HdyTabPage *page = hdy_tab_view_get_nth_page (self->tab_view, index);
+  AdwTabPage *page = adw_tab_view_get_nth_page (self->tab_view, index);
 
-  hdy_tab_view_set_selected_page (self->tab_view, page);
+  adw_tab_view_set_selected_page (self->tab_view, page);
 }
 
 gboolean
 ephy_tab_view_select_page (EphyTabView *self,
                            GtkWidget   *widget)
 {
-  HdyTabPage *page = hdy_tab_view_get_page (self->tab_view, widget);
+  AdwTabPage *page = adw_tab_view_get_page (self->tab_view, widget);
 
   if (page)
-    hdy_tab_view_set_selected_page (self->tab_view, page);
+    adw_tab_view_set_selected_page (self->tab_view, page);
 
   return !!page;
 }
@@ -314,15 +313,15 @@ ephy_tab_view_select_page (EphyTabView *self,
 GtkWidget *
 ephy_tab_view_get_selected_page (EphyTabView *self)
 {
-  HdyTabPage *page = hdy_tab_view_get_selected_page (self->tab_view);
+  AdwTabPage *page = adw_tab_view_get_selected_page (self->tab_view);
 
   if (!page)
     return NULL;
 
-  return hdy_tab_page_get_child (page);
+  return adw_tab_page_get_child (page);
 }
 
-HdyTabView *
+AdwTabView *
 ephy_tab_view_get_tab_view (EphyTabView *self)
 {
   return self->tab_view;
@@ -334,11 +333,11 @@ ephy_tab_view_get_pages (EphyTabView *self)
   GList *list = NULL;
   int i, n;
 
-  n = hdy_tab_view_get_n_pages (self->tab_view);
+  n = adw_tab_view_get_n_pages (self->tab_view);
 
   for (i = 0; i < n; i++) {
-    HdyTabPage *page = hdy_tab_view_get_nth_page (self->tab_view, i);
-    GtkWidget *content = hdy_tab_page_get_child (page);
+    AdwTabPage *page = adw_tab_view_get_nth_page (self->tab_view, i);
+    GtkWidget *content = adw_tab_page_get_child (page);
 
     list = g_list_prepend (list, content);
   }
@@ -350,26 +349,26 @@ gboolean
 ephy_tab_view_get_is_pinned (EphyTabView *self,
                              GtkWidget   *widget)
 {
-  HdyTabPage *page = hdy_tab_view_get_page (self->tab_view, widget);
+  AdwTabPage *page = adw_tab_view_get_page (self->tab_view, widget);
 
-  return hdy_tab_page_get_pinned (page);
+  return adw_tab_page_get_pinned (page);
 }
 
 static void
-update_title_cb (HdyTabPage *page)
+update_title_cb (AdwTabPage *page)
 {
-  EphyEmbed *embed = EPHY_EMBED (hdy_tab_page_get_child (page));
+  EphyEmbed *embed = EPHY_EMBED (adw_tab_page_get_child (page));
   EphyWebView *view = ephy_embed_get_web_view (embed);
   const char *title = ephy_embed_get_title (embed);
   const char *address;
 
   if (!ephy_embed_has_load_pending (embed) &&
-      !hdy_tab_page_get_selected (page) &&
-      hdy_tab_page_get_pinned (page))
-    hdy_tab_page_set_needs_attention (page, TRUE);
+      !adw_tab_page_get_selected (page) &&
+      adw_tab_page_get_pinned (page))
+    adw_tab_page_set_needs_attention (page, TRUE);
 
   if (title && strlen (title)) {
-    hdy_tab_page_set_title (page, title);
+    adw_tab_page_set_title (page, title);
     return;
   }
 
@@ -377,20 +376,20 @@ update_title_cb (HdyTabPage *page)
 
   if (ephy_web_view_is_loading (view) &&
       !ephy_embed_utils_is_no_show_address (address))
-    hdy_tab_page_set_title (page, address);
+    adw_tab_page_set_title (page, address);
 }
 
 static void
-update_icon_cb (HdyTabPage *page)
+update_icon_cb (AdwTabPage *page)
 {
-  EphyEmbed *embed = EPHY_EMBED (hdy_tab_page_get_child (page));
+  EphyEmbed *embed = EPHY_EMBED (adw_tab_page_get_child (page));
   EphyWebView *view = ephy_embed_get_web_view (embed);
   GIcon *icon = G_ICON (ephy_web_view_get_icon (view));
   g_autoptr (GIcon) placeholder_icon = NULL;
   const char *uri, *favicon_name;
 
   if (icon) {
-    hdy_tab_page_set_icon (page, icon);
+    adw_tab_page_set_icon (page, icon);
     return;
   }
 
@@ -400,13 +399,13 @@ update_icon_cb (HdyTabPage *page)
   if (favicon_name)
     placeholder_icon = g_themed_icon_new (favicon_name);
 
-  hdy_tab_page_set_icon (page, placeholder_icon);
+  adw_tab_page_set_icon (page, placeholder_icon);
 }
 
 static void
-update_indicator_cb (HdyTabPage *page)
+update_indicator_cb (AdwTabPage *page)
 {
-  EphyEmbed *embed = EPHY_EMBED (hdy_tab_page_get_child (page));
+  EphyEmbed *embed = EPHY_EMBED (adw_tab_page_get_child (page));
   EphyWebView *view = ephy_embed_get_web_view (embed);
   g_autoptr (GIcon) icon = NULL;
 
@@ -417,7 +416,7 @@ update_indicator_cb (HdyTabPage *page)
       icon = G_ICON (g_themed_icon_new ("ephy-audio-playing-symbolic"));
   }
 
-  hdy_tab_page_set_indicator_icon (page, icon);
+  adw_tab_page_set_indicator_icon (page, icon);
 }
 
 int
@@ -427,26 +426,26 @@ ephy_tab_view_add_tab (EphyTabView *self,
                        int          position,
                        gboolean     jump_to)
 {
-  HdyTabPage *page;
+  AdwTabPage *page;
   EphyWebView *view;
 
   if (parent) {
-    HdyTabPage *parent_page;
+    AdwTabPage *parent_page;
 
-    parent_page = hdy_tab_view_get_page (self->tab_view, GTK_WIDGET (parent));
-    page = hdy_tab_view_add_page (self->tab_view, GTK_WIDGET (embed), parent_page);
+    parent_page = adw_tab_view_get_page (self->tab_view, GTK_WIDGET (parent));
+    page = adw_tab_view_add_page (self->tab_view, GTK_WIDGET (embed), parent_page);
   } else if (position < 0) {
-    page = hdy_tab_view_append (self->tab_view, GTK_WIDGET (embed));
+    page = adw_tab_view_append (self->tab_view, GTK_WIDGET (embed));
   } else {
-    page = hdy_tab_view_insert (self->tab_view, GTK_WIDGET (embed), position);
+    page = adw_tab_view_insert (self->tab_view, GTK_WIDGET (embed), position);
   }
 
   if (jump_to)
-    hdy_tab_view_set_selected_page (self->tab_view, page);
+    adw_tab_view_set_selected_page (self->tab_view, page);
 
   view = ephy_embed_get_web_view (embed);
 
-  hdy_tab_page_set_indicator_activatable (page, TRUE);
+  adw_tab_page_set_indicator_activatable (page, TRUE);
 
   g_object_bind_property (view, "is-loading", page, "loading", G_BINDING_SYNC_CREATE);
 
@@ -473,23 +472,23 @@ ephy_tab_view_add_tab (EphyTabView *self,
   update_icon_cb (page);
   update_indicator_cb (page);
 
-  return hdy_tab_view_get_page_position (self->tab_view, page);
+  return adw_tab_view_get_page_position (self->tab_view, page);
 }
 
 GtkWidget *
 ephy_tab_view_get_current_page (EphyTabView *self)
 {
-  HdyTabPage *page = get_current_page (self);
+  AdwTabPage *page = get_current_page (self);
 
   if (!page)
     return NULL;
 
-  return hdy_tab_page_get_child (page);
+  return adw_tab_page_get_child (page);
 }
-
+#if 0
 static void
 drag_data_received_cb (EphyTabView      *self,
-                       HdyTabPage       *page,
+                       AdwTabPage       *page,
                        GdkDragContext   *context,
                        GtkSelectionData *selection_data,
                        guint             info,
@@ -508,7 +507,7 @@ drag_data_received_cb (EphyTabView      *self,
   if (gtk_selection_data_get_length (selection_data) <= 0 || data)
     return;
 
-  embed = EPHY_EMBED (hdy_tab_page_get_child (page));
+  embed = EPHY_EMBED (adw_tab_page_get_child (page));
   target = gtk_selection_data_get_target (selection_data);
 
   window = gtk_widget_get_toplevel (GTK_WIDGET (self));
@@ -546,7 +545,7 @@ drag_data_received_cb (EphyTabView      *self,
     }
   }
 }
-
+#endif
 static void
 visibility_policy_changed_cb (EphyTabView *self)
 {
@@ -561,7 +560,7 @@ visibility_policy_changed_cb (EphyTabView *self)
     policy = g_settings_get_enum (EPHY_SETTINGS_UI,
                                   EPHY_PREFS_UI_TABS_BAR_VISIBILITY_POLICY);
 
-  hdy_tab_bar_set_autohide (self->tab_bar,
+  adw_tab_bar_set_autohide (self->tab_bar,
                             policy != EPHY_PREFS_UI_TABS_BAR_VISIBILITY_POLICY_ALWAYS);
   gtk_widget_set_visible (GTK_WIDGET (self->tab_bar),
                           mode != EPHY_EMBED_SHELL_MODE_APPLICATION &&
@@ -574,7 +573,7 @@ expand_changed_cb (EphyTabView *self)
   gboolean expand = g_settings_get_boolean (EPHY_SETTINGS_UI,
                                             EPHY_PREFS_UI_EXPAND_TABS_BAR);
 
-  hdy_tab_bar_set_expand_tabs (self->tab_bar, expand);
+  adw_tab_bar_set_expand_tabs (self->tab_bar, expand);
 }
 
 static gboolean
@@ -599,46 +598,45 @@ is_layout_reversed (void)
 static void
 notify_decoration_layout_cb (EphyTabView *self)
 {
-  hdy_tab_bar_set_inverted (self->tab_bar, is_layout_reversed ());
+  adw_tab_bar_set_inverted (self->tab_bar, is_layout_reversed ());
 }
 
 void
 ephy_tab_view_set_tab_bar (EphyTabView *self,
-                           HdyTabBar   *tab_bar)
+                           AdwTabBar   *tab_bar)
 {
-  g_autoptr (GtkTargetList) target_list = NULL;
+//  g_autoptr (GtkTargetList) target_list = NULL;
   GtkSettings *settings;
-  static const GtkTargetEntry url_drag_types [] = {
+/*  static const GtkTargetEntry url_drag_types [] = {
     { (char *)EPHY_DND_URI_LIST_TYPE, 0, 0 },
     { (char *)EPHY_DND_URL_TYPE, 0, 1 },
-  };
+  };*/
 
   self->tab_bar = tab_bar;
-
+/*
   target_list = gtk_target_list_new (url_drag_types,
                                      G_N_ELEMENTS (url_drag_types));
   gtk_target_list_add_text_targets (target_list, 0);
 
-  hdy_tab_bar_set_extra_drag_dest_targets (self->tab_bar, target_list);
+  adw_tab_bar_set_extra_drag_dest_targets (self->tab_bar, target_list);
 
   g_signal_connect_object (tab_bar, "extra-drag-data-received",
                            G_CALLBACK (drag_data_received_cb), self,
                            G_CONNECT_SWAPPED);
-
+*/
   if (is_desktop_pantheon ()) {
     GtkWidget *button;
 
-    hdy_tab_bar_set_autohide (tab_bar, FALSE);
-    hdy_tab_bar_set_expand_tabs (tab_bar, FALSE);
+    adw_tab_bar_set_autohide (tab_bar, FALSE);
+    adw_tab_bar_set_expand_tabs (tab_bar, FALSE);
 
-    button = gtk_button_new_from_icon_name ("list-add-symbolic", GTK_ICON_SIZE_MENU);
+    button = gtk_button_new_from_icon_name ("list-add-symbolic");
     /* Translators: tooltip for the new tab button */
     gtk_widget_set_tooltip_text (button, _("Open a new tab"));
     gtk_actionable_set_action_name (GTK_ACTIONABLE (button), "win.new-tab");
     gtk_style_context_add_class (gtk_widget_get_style_context (button), "flat");
-    gtk_widget_show (button);
 
-    hdy_tab_bar_set_start_action_widget (tab_bar, button);
+    adw_tab_bar_set_start_action_widget (tab_bar, button);
   } else {
     g_signal_connect_object (EPHY_SETTINGS_UI,
                              "changed::" EPHY_PREFS_UI_TABS_BAR_VISIBILITY_POLICY,
diff --git a/src/ephy-tab-view.h b/src/ephy-tab-view.h
index b95d1c85f..fd6c04484 100644
--- a/src/ephy-tab-view.h
+++ b/src/ephy-tab-view.h
@@ -22,13 +22,13 @@
 
 #include "ephy-embed.h"
 
-#include <handy.h>
+#include <adwaita.h>
 
 G_BEGIN_DECLS
 
 #define EPHY_TYPE_TAB_VIEW (ephy_tab_view_get_type())
 
-G_DECLARE_FINAL_TYPE (EphyTabView, ephy_tab_view, EPHY, TAB_VIEW, GtkBin)
+G_DECLARE_FINAL_TYPE (EphyTabView, ephy_tab_view, EPHY, TAB_VIEW, AdwBin)
 
 typedef void (*EphyTabViewCallback) (GtkWidget *widget,
                                      gpointer   data);
@@ -66,7 +66,7 @@ gboolean     ephy_tab_view_select_page        (EphyTabView *self,
 
 GtkWidget   *ephy_tab_view_get_selected_page  (EphyTabView *self);
 
-HdyTabView  *ephy_tab_view_get_tab_view       (EphyTabView *self);
+AdwTabView  *ephy_tab_view_get_tab_view       (EphyTabView *self);
 
 GList        *ephy_tab_view_get_pages         (EphyTabView *self);
 
@@ -82,6 +82,6 @@ gint          ephy_tab_view_add_tab           (EphyTabView *self,
 GtkWidget    *ephy_tab_view_get_current_page  (EphyTabView *self);
 
 void          ephy_tab_view_set_tab_bar       (EphyTabView *self,
-                                               HdyTabBar   *tab_bar);
+                                               AdwTabBar   *tab_bar);
 
 G_END_DECLS
diff --git a/src/ephy-web-extension-dialog.c b/src/ephy-web-extension-dialog.c
index b8255f2e5..d660dd5d4 100644
--- a/src/ephy-web-extension-dialog.c
+++ b/src/ephy-web-extension-dialog.c
@@ -26,10 +26,11 @@
 #include "ephy-web-extension-dialog.h"
 #include "ephy-web-extension-manager.h"
 
+#include <adwaita.h>
 #include <gtk/gtk.h>
 
 struct _EphyWebExtensionDialog {
-  HdyWindow parent_instance;
+  GtkWindow parent_instance;
 
   EphyWebExtensionManager *web_extension_manager;
 
@@ -37,20 +38,7 @@ struct _EphyWebExtensionDialog {
   GtkStack *stack;
 };
 
-G_DEFINE_TYPE (EphyWebExtensionDialog, ephy_web_extension_dialog, HDY_TYPE_WINDOW)
-
-static void
-clear_listbox (GtkWidget *listbox)
-{
-  GList *children, *iter;
-
-  children = gtk_container_get_children (GTK_CONTAINER (listbox));
-
-  for (iter = children; iter && iter->data; iter = g_list_next (iter))
-    gtk_widget_destroy (GTK_WIDGET (iter->data));
-
-  g_list_free (children);
-}
+G_DEFINE_TYPE (EphyWebExtensionDialog, ephy_web_extension_dialog, GTK_TYPE_WINDOW)
 
 static void
 on_remove_confirmed (GtkDialog       *dialog,
@@ -59,9 +47,9 @@ on_remove_confirmed (GtkDialog       *dialog,
 {
   GtkListBoxRow *row = user_data;
   EphyWebExtensionDialog *self =
-    EPHY_WEB_EXTENSION_DIALOG (gtk_widget_get_toplevel (GTK_WIDGET (row)));
+    EPHY_WEB_EXTENSION_DIALOG (gtk_widget_get_root (GTK_WIDGET (row)));
 
-  gtk_widget_destroy (GTK_WIDGET (dialog));
+  gtk_window_destroy (GTK_WINDOW (dialog));
 
   if (response == GTK_RESPONSE_OK) {
     EphyWebExtension *web_extension = g_object_get_data (G_OBJECT (row), "web_extension");
@@ -115,20 +103,15 @@ toggle_state_set_cb (GtkSwitch *widget,
 }
 
 static void
-homepage_activated_cb (HdyActionRow *row,
+homepage_activated_cb (AdwActionRow *row,
                        gpointer      user_data)
 {
   EphyWebExtensionDialog *self = EPHY_WEB_EXTENSION_DIALOG (user_data);
   EphyWebExtension *web_extension = g_object_get_data (G_OBJECT (row), "web_extension");
-  g_autoptr (GError) error = NULL;
-
-  gtk_show_uri_on_window (GTK_WINDOW (self),
-                          ephy_web_extension_get_homepage_url (web_extension),
-                          GDK_CURRENT_TIME,
-                          &error);
 
-  if (error)
-    g_warning ("Couldn't to open homepage: %s", error->message);
+  gtk_show_uri (GTK_WINDOW (self),
+                ephy_web_extension_get_homepage_url (web_extension),
+                GDK_CURRENT_TIME);
 }
 
 static GtkWidget *
@@ -146,7 +129,7 @@ create_row (EphyWebExtensionDialog *self,
   g_autoptr (GdkPixbuf) icon = NULL;
   EphyWebExtensionManager *manager = ephy_shell_get_web_extension_manager (ephy_shell_get_default ());
 
-  row = hdy_expander_row_new ();
+  row = adw_expander_row_new ();
   g_object_set_data (G_OBJECT (row), "web_extension", web_extension);
 
   /* Tooltip */
@@ -154,66 +137,64 @@ create_row (EphyWebExtensionDialog *self,
 
   /* Icon */
   icon = ephy_web_extension_get_icon (web_extension, 32);
-  image = icon ? gtk_image_new_from_pixbuf (icon) : gtk_image_new_from_icon_name 
("application-x-addon-symbolic", GTK_ICON_SIZE_DND);
+  image = icon ? gtk_image_new_from_pixbuf (icon) : gtk_image_new_from_icon_name 
("application-x-addon-symbolic");
   gtk_image_set_pixel_size (GTK_IMAGE (image), 32);
-  hdy_expander_row_add_prefix (HDY_EXPANDER_ROW (row), image);
+  adw_expander_row_add_prefix (ADW_EXPANDER_ROW (row), image);
 
   /* Titles */
-  hdy_preferences_row_set_title (HDY_PREFERENCES_ROW (row), ephy_web_extension_get_name (web_extension));
-  hdy_expander_row_set_subtitle (HDY_EXPANDER_ROW (row), ephy_web_extension_get_description (web_extension));
-  hdy_expander_row_set_show_enable_switch (HDY_EXPANDER_ROW (row), FALSE);
+  adw_preferences_row_set_title (ADW_PREFERENCES_ROW (row), ephy_web_extension_get_name (web_extension));
+  adw_expander_row_set_subtitle (ADW_EXPANDER_ROW (row), ephy_web_extension_get_description (web_extension));
+  adw_expander_row_set_show_enable_switch (ADW_EXPANDER_ROW (row), FALSE);
 
   toggle = gtk_switch_new ();
   gtk_switch_set_active (GTK_SWITCH (toggle), ephy_web_extension_manager_is_active (manager, web_extension));
   g_signal_connect (toggle, "state-set", G_CALLBACK (toggle_state_set_cb), web_extension);
   gtk_widget_set_valign (toggle, GTK_ALIGN_CENTER);
-  hdy_expander_row_add_action (HDY_EXPANDER_ROW (row), toggle);
+  adw_expander_row_add_action (ADW_EXPANDER_ROW (row), toggle);
 
   /* Author */
   if (ephy_web_extension_get_author (web_extension)) {
-    sub_row = hdy_action_row_new ();
-    gtk_container_add (GTK_CONTAINER (row), sub_row);
-    hdy_preferences_row_set_title (HDY_PREFERENCES_ROW (sub_row), _("Author"));
+    sub_row = adw_action_row_new ();
+    adw_expander_row_add_row (ADW_EXPANDER_ROW (row), sub_row);
+    adw_preferences_row_set_title (ADW_PREFERENCES_ROW (sub_row), _("Author"));
     author = gtk_label_new (ephy_web_extension_get_author (web_extension));
-    gtk_label_set_line_wrap (GTK_LABEL (author), TRUE);
-    gtk_container_add (GTK_CONTAINER (sub_row), author);
+    gtk_label_set_wrap (GTK_LABEL (author), TRUE);
+    adw_action_row_add_suffix (ADW_ACTION_ROW (sub_row), author);
   }
 
   /* Version */
-  sub_row = hdy_action_row_new ();
-  gtk_container_add (GTK_CONTAINER (row), sub_row);
-  hdy_preferences_row_set_title (HDY_PREFERENCES_ROW (sub_row), _("Version"));
+  sub_row = adw_action_row_new ();
+  adw_expander_row_add_row (ADW_EXPANDER_ROW (row), sub_row);
+  adw_preferences_row_set_title (ADW_PREFERENCES_ROW (sub_row), _("Version"));
   version = gtk_label_new (ephy_web_extension_get_version (web_extension));
-  dzl_gtk_widget_add_style_class (version, "dim-label");
-  gtk_container_add (GTK_CONTAINER (sub_row), version);
+  gtk_widget_add_css_class (version, "dim-label");
+  adw_action_row_add_suffix (ADW_ACTION_ROW (sub_row), version);
 
   /* Homepage url */
   if (ephy_web_extension_get_homepage_url (web_extension)) {
-    sub_row = hdy_action_row_new ();
-    gtk_container_add (GTK_CONTAINER (row), sub_row);
-    hdy_preferences_row_set_title (HDY_PREFERENCES_ROW (sub_row), _("Homepage"));
+    sub_row = adw_action_row_new ();
+    adw_expander_row_add_row (ADW_EXPANDER_ROW (row), sub_row);
+    adw_preferences_row_set_title (ADW_PREFERENCES_ROW (sub_row), _("Homepage"));
     gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (sub_row), TRUE);
     g_signal_connect (sub_row, "activated", G_CALLBACK (homepage_activated_cb), self);
-    homepage_icon = gtk_image_new_from_icon_name ("ephy-open-link-symbolic", GTK_ICON_SIZE_BUTTON);
-    dzl_gtk_widget_add_style_class (homepage_icon, "dim-label");
-    gtk_container_add (GTK_CONTAINER (sub_row), homepage_icon);
+    homepage_icon = gtk_image_new_from_icon_name ("ephy-open-link-symbolic");
+    gtk_widget_add_css_class (homepage_icon, "dim-label");
+    adw_action_row_add_suffix (ADW_ACTION_ROW (sub_row), homepage_icon);
     g_object_set_data (G_OBJECT (sub_row), "web_extension", web_extension);
   }
 
   /* Remove button */
-  sub_row = hdy_action_row_new ();
-  gtk_container_add (GTK_CONTAINER (row), sub_row);
+  sub_row = adw_action_row_new ();
+  adw_expander_row_add_row (ADW_EXPANDER_ROW (row), sub_row);
 
   button = gtk_button_new_with_mnemonic (_("_Remove"));
   gtk_widget_set_valign (GTK_WIDGET (button), GTK_ALIGN_CENTER);
-  dzl_gtk_widget_add_style_class (button, "destructive-action");
+  gtk_widget_add_css_class (button, "destructive-action");
   g_signal_connect (button, "clicked", G_CALLBACK (on_remove_button_clicked), self);
   gtk_widget_set_tooltip_text (button, _("Remove selected WebExtension"));
-  gtk_container_add (GTK_CONTAINER (sub_row), button);
+  adw_action_row_add_suffix (ADW_ACTION_ROW (sub_row), button);
   g_object_set_data (G_OBJECT (button), "row", row);
 
-  gtk_widget_show_all (GTK_WIDGET (row));
-
   return GTK_WIDGET (row);
 }
 
@@ -222,8 +203,10 @@ ephy_web_extension_dialog_refresh_listbox (EphyWebExtensionDialog *self)
 {
   GList *extensions = ephy_web_extension_manager_get_web_extensions (self->web_extension_manager);
   gboolean empty = TRUE;
+  GtkListBoxRow *row;
 
-  clear_listbox (self->listbox);
+  while ((row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (self->listbox), 0)))
+    gtk_list_box_remove (GTK_LIST_BOX (self->listbox), GTK_WIDGET (row));
 
   for (GList *tmp = extensions; tmp && tmp->data; tmp = tmp->next) {
     EphyWebExtension *web_extension = tmp->data;
diff --git a/src/ephy-web-extension-dialog.h b/src/ephy-web-extension-dialog.h
index b8418f0f8..8f3f4b3c6 100644
--- a/src/ephy-web-extension-dialog.h
+++ b/src/ephy-web-extension-dialog.h
@@ -28,7 +28,7 @@ G_BEGIN_DECLS
 
 #define EPHY_TYPE_WEB_EXTENSION_DIALOG (ephy_web_extension_dialog_get_type ())
 
-G_DECLARE_FINAL_TYPE (EphyWebExtensionDialog, ephy_web_extension_dialog, EPHY, WEB_EXTENSION_DIALOG, 
HdyWindow)
+G_DECLARE_FINAL_TYPE (EphyWebExtensionDialog, ephy_web_extension_dialog, EPHY, WEB_EXTENSION_DIALOG, 
GtkWindow)
 
 GtkWidget *ephy_web_extension_dialog_new (void);
 
diff --git a/src/ephy-window.c b/src/ephy-window.c
index 2866b76e5..5ab10a3bc 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -44,7 +44,7 @@
 #include "ephy-gui.h"
 #include "ephy-header-bar.h"
 #include "ephy-link.h"
-#include "ephy-location-entry.h"
+//#include "ephy-location-entry.h"
 #include "ephy-mouse-gesture-controller.h"
 #include "ephy-pages-popover.h"
 #include "ephy-pages-view.h"
@@ -147,18 +147,17 @@ const struct {
 #define SETTINGS_CONNECTION_DATA_KEY    "EphyWindowSettings"
 
 struct _EphyWindow {
-  HdyApplicationWindow parent_instance;
+  AdwApplicationWindow parent_instance;
 
-  GtkWidget *main_deck;
+  GtkWidget *main_leaflet;
   EphyFullscreenBox *fullscreen_box;
-  GtkWidget *window_handle;
   GtkBox *titlebar_box;
   GtkWidget *header_bar;
   EphyPagesView *pages_view;
   EphyBookmarksManager *bookmarks_manager;
   GHashTable *action_labels;
   EphyTabView *tab_view;
-  HdyTabBar *tab_bar;
+  AdwTabBar *tab_bar;
   GtkRevealer *tab_bar_revealer;
   GtkRevealer *pages_menu_revealer;
   EphyPagesPopover *pages_popover;
@@ -185,7 +184,6 @@ struct _EphyWindow {
   gint current_y;
 
   guint has_default_size : 1;
-  guint has_default_position : 1;
   guint is_maximized : 1;
   guint is_fullscreen : 1;
   guint closing : 1;
@@ -196,7 +194,7 @@ struct _EphyWindow {
   guint confirmed_close_with_multiple_tabs : 1;
   guint present_on_insert : 1;
 
-  guint32 present_on_insert_user_time;
+  GHashTable *action_groups;
 };
 
 enum {
@@ -204,7 +202,6 @@ enum {
   PROP_ACTIVE_CHILD,
   PROP_CHROME,
   PROP_SINGLE_TAB_MODE,
-  PROP_FULLSCREEN
 };
 
 /* Make sure not to overlap with those in ephy-lockdown.c */
@@ -352,7 +349,7 @@ ephy_window_open_link (EphyLink      *link,
                EPHY_LINK_NEW_TAB |
                EPHY_LINK_NEW_WINDOW)) {
     EphyNewTabFlags ntflags = 0;
-    EphyWindow *target_window = EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (embed)));
+    EphyWindow *target_window = EPHY_WINDOW (gtk_widget_get_root (GTK_WIDGET (embed)));
 
     if (flags & EPHY_LINK_JUMP_TO) {
       ntflags |= EPHY_NEW_TAB_JUMP;
@@ -398,7 +395,7 @@ ephy_window_link_iface_init (EphyLinkInterface *iface)
   iface->open_link = ephy_window_open_link;
 }
 
-G_DEFINE_TYPE_WITH_CODE (EphyWindow, ephy_window, HDY_TYPE_APPLICATION_WINDOW,
+G_DEFINE_TYPE_WITH_CODE (EphyWindow, ephy_window, ADW_TYPE_APPLICATION_WINDOW,
                          G_IMPLEMENT_INTERFACE (EPHY_TYPE_LINK,
                                                 ephy_window_link_iface_init)
                          G_IMPLEMENT_INTERFACE (EPHY_TYPE_EMBED_CONTAINER,
@@ -447,7 +444,7 @@ sync_tab_load_status (EphyWebView     *view,
 
   loading = ephy_web_view_is_loading (view);
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "win");
+  action_group = ephy_window_get_action_group (window, "win");
 
   /* disable print while loading, see bug #116344 */
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group),
@@ -455,7 +452,7 @@ sync_tab_load_status (EphyWebView     *view,
   ephy_action_change_sensitivity_flags (G_SIMPLE_ACTION (action),
                                         SENS_FLAG_LOADING, loading);
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "toolbar");
+  action_group = ephy_window_get_action_group (window, "toolbar");
 
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group),
                                        "stop");
@@ -492,21 +489,21 @@ update_adaptive_mode (EphyWindow *window)
   EphyAdaptiveMode adaptive_mode;
   gint width, height;
   GdkDisplay *display;
-  GdkWindow *surface;
+  GdkSurface *surface;
   GdkMonitor *monitor = NULL;
   GdkRectangle geometry = {};
 
-  gtk_window_get_size (GTK_WINDOW (window),
-                       &width,
-                       &height);
+  gtk_window_get_default_size (GTK_WINDOW (window),
+                               &width,
+                               &height);
 
   /* Get the monitor to guess whether we are on a mobile or not. If not found,
    * fallback to the window size.
    */
   display = gtk_widget_get_display (GTK_WIDGET (window));
-  surface = gtk_widget_get_window (GTK_WIDGET (window));
+  surface = gtk_native_get_surface (GTK_NATIVE (window));
   if (display != NULL && surface != NULL)
-    monitor = gdk_display_get_monitor_at_window (display, surface);
+    monitor = gdk_display_get_monitor_at_surface (display, surface);
   if (monitor != NULL)
     gdk_monitor_get_geometry (monitor, &geometry);
   else
@@ -538,32 +535,47 @@ update_adaptive_mode (EphyWindow *window)
 }
 
 static void
-ephy_window_fullscreen (EphyWindow *window)
+notify_fullscreen_cb (EphyWindow *window)
 {
   EphyEmbed *embed;
+  gboolean fullscreen = gtk_window_is_fullscreen (GTK_WINDOW (window));
+  GAction *action;
+  GActionGroup *action_group;
 
-  window->is_fullscreen = TRUE;
-  g_object_notify (G_OBJECT (window), "fullscreen");
+  window->is_fullscreen = fullscreen;
 
-  /* sync status */
   embed = window->active_embed;
-  sync_tab_load_status (ephy_embed_get_web_view (embed), WEBKIT_LOAD_STARTED, window);
-  sync_tab_security (ephy_embed_get_web_view (embed), NULL, window);
+
+  if (embed && fullscreen) {
+    /* sync status */
+    sync_tab_load_status (ephy_embed_get_web_view (embed), WEBKIT_LOAD_STARTED, window);
+    sync_tab_security (ephy_embed_get_web_view (embed), NULL, window);
+  }
 
   update_adaptive_mode (window);
-  ephy_embed_entering_fullscreen (embed);
-}
 
-static void
-ephy_window_unfullscreen (EphyWindow *window)
-{
-  window->is_fullscreen = FALSE;
-  g_object_notify (G_OBJECT (window), "fullscreen");
+  if (embed) {
+    if (fullscreen)
+      ephy_embed_entering_fullscreen (embed);
+    else
+      ephy_embed_leaving_fullscreen (embed);
+  }
 
-  update_adaptive_mode (window);
-  ephy_embed_leaving_fullscreen (window->active_embed);
+  ephy_fullscreen_box_set_fullscreen (window->fullscreen_box,
+                                      fullscreen && window->show_fullscreen_header_bar);
+  gtk_widget_set_visible (GTK_WIDGET (window->titlebar_box),
+                          !fullscreen || window->show_fullscreen_header_bar);
+
+  window->show_fullscreen_header_bar = FALSE;
+
+  action_group = ephy_window_get_action_group (window, "win");
+  action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "fullscreen");
+
+  g_simple_action_set_state (G_SIMPLE_ACTION (action),
+                             g_variant_new_boolean (fullscreen));
 }
 
+#if 0
 static gboolean
 ephy_window_should_view_receive_key_press_event (EphyWindow  *window,
                                                  GdkEventKey *event)
@@ -681,6 +693,7 @@ ephy_window_delete_event (GtkWidget   *widget,
 
   return FALSE;
 }
+#endif
 
 #define MAX_SPELL_CHECK_GUESSES 4
 
@@ -691,7 +704,7 @@ update_link_actions_sensitivity (EphyWindow *window,
   GAction *action;
   GActionGroup *action_group;
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "popup");
+  action_group = ephy_window_get_action_group (window, "popup");
 
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group),
                                        "open-link-in-new-window");
@@ -715,8 +728,7 @@ update_edit_action_sensitivity (EphyWindow *window,
   GActionGroup *action_group;
   GAction *action;
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window),
-                                              "win");
+  action_group = ephy_window_get_action_group (window, "win");
 
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group),
                                        action_name);
@@ -741,10 +753,10 @@ update_edit_actions_sensitivity (EphyWindow *window,
     can_cut = has_selection;
     can_copy = has_selection;
     can_paste = TRUE;
-    can_undo = EPHY_IS_LOCATION_ENTRY (title_widget) &&
-               ephy_location_entry_get_can_undo (EPHY_LOCATION_ENTRY (title_widget));
-    can_redo = EPHY_IS_LOCATION_ENTRY (title_widget) &&
-               ephy_location_entry_get_can_redo (EPHY_LOCATION_ENTRY (title_widget));
+//    can_undo = EPHY_IS_LOCATION_ENTRY (title_widget) &&
+//               ephy_location_entry_get_can_undo (EPHY_LOCATION_ENTRY (title_widget));
+//    can_redo = EPHY_IS_LOCATION_ENTRY (title_widget) &&
+//               ephy_location_entry_get_can_redo (EPHY_LOCATION_ENTRY (title_widget));
   } else {
     EphyEmbed *embed;
     WebKitWebView *view;
@@ -777,8 +789,7 @@ enable_edit_actions_sensitivity (EphyWindow *window)
   GActionGroup *action_group;
   GAction *action;
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window),
-                                              "win");
+  action_group = ephy_window_get_action_group (window, "win");
 
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "cut");
   g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE);
@@ -817,16 +828,16 @@ change_combined_stop_reload_state (GSimpleAction *action,
 static const GActionEntry window_entries [] = {
   { "page-menu", window_cmd_page_menu },
   { "new-tab", window_cmd_new_tab },
-  { "open", window_cmd_open },
-  { "save-as", window_cmd_save_as },
-  { "save-as-application", window_cmd_save_as_application },
+//  { "open", window_cmd_open },
+//  { "save-as", window_cmd_save_as },
+//  { "save-as-application", window_cmd_save_as_application },
   { "open-application-manager", window_cmd_open_application_manager },
-  { "undo", window_cmd_undo },
-  { "redo", window_cmd_redo },
-  { "cut", window_cmd_cut },
-  { "copy", window_cmd_copy },
-  { "paste", window_cmd_paste },
-  { "paste-as-plain-text", window_cmd_paste_as_plain_text },
+//  { "undo", window_cmd_undo },
+//  { "redo", window_cmd_redo },
+//  { "cut", window_cmd_cut },
+//  { "copy", window_cmd_copy },
+//  { "paste", window_cmd_paste },
+//  { "paste-as-plain-text", window_cmd_paste_as_plain_text },
   { "delete", window_cmd_delete },
   { "zoom-in", window_cmd_zoom_in },
   { "zoom-out", window_cmd_zoom_out },
@@ -835,11 +846,11 @@ static const GActionEntry window_entries [] = {
   { "find", window_cmd_find },
   { "find-prev", window_cmd_find_prev },
   { "find-next", window_cmd_find_next },
-  { "open-bookmark", window_cmd_open_bookmark, "s" },
-  { "bookmark-page", window_cmd_bookmark_page },
-  { "bookmarks", window_cmd_bookmarks },
+//  { "open-bookmark", window_cmd_open_bookmark, "s" },
+//  { "bookmark-page", window_cmd_bookmark_page },
+//  { "bookmarks", window_cmd_bookmarks },
   { "show-downloads", window_cmd_show_downloads },
-  { "encoding", window_cmd_encoding },
+//  { "encoding", window_cmd_encoding },
   { "page-source", window_cmd_page_source },
   { "toggle-inspector", window_cmd_toggle_inspector },
   { "toggle-reader-mode", window_cmd_toggle_reader_mode },
@@ -849,7 +860,7 @@ static const GActionEntry window_entries [] = {
 
   { "send-to", window_cmd_send_to },
   { "location", window_cmd_go_location },
-  { "location-search", window_cmd_location_search },
+//  { "location-search", window_cmd_location_search },
   { "home", window_cmd_go_home },
   { "content", window_cmd_go_content },
   { "tabs-view", window_cmd_go_tabs_view },
@@ -887,7 +898,7 @@ static const GActionEntry toolbar_entries [] = {
 };
 
 static const GActionEntry popup_entries [] = {
-  { "context-bookmark-page", window_cmd_bookmark_page },
+//  { "context-bookmark-page", window_cmd_bookmark_page },
   /* Links. */
 
   { "open-link-in-new-window", popup_cmd_link_in_new_window },
@@ -1019,7 +1030,7 @@ _ephy_window_set_default_actions_sensitive (EphyWindow *window,
     NULL
   };
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "win");
+  action_group = ephy_window_get_action_group (window, "win");
 
   /* Page menu */
   for (i = 0; action_group_actions[i] != NULL; i++) {
@@ -1030,14 +1041,14 @@ _ephy_window_set_default_actions_sensitive (EphyWindow *window,
   }
 
   /* Page context popup */
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "popup");
+  action_group = ephy_window_get_action_group (window, "popup");
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group),
                                        "context-bookmark-page");
   ephy_action_change_sensitivity_flags (G_SIMPLE_ACTION (action),
                                         flags, set);
 
   /* Toolbar */
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "toolbar");
+  action_group = ephy_window_get_action_group (window, "toolbar");
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group),
                                        "combined-stop-reload");
   ephy_action_change_sensitivity_flags (G_SIMPLE_ACTION (action),
@@ -1103,8 +1114,7 @@ sync_tab_zoom (WebKitWebView *web_view,
     can_zoom_normal = TRUE;
   }
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window),
-                                              "win");
+  action_group = ephy_window_get_action_group (window, "win");
 
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "zoom-in");
   g_simple_action_set_enabled (G_SIMPLE_ACTION (action), can_zoom_in);
@@ -1135,8 +1145,7 @@ sync_tab_document_type (EphyWebView *view,
   is_image = type == EPHY_WEB_VIEW_DOCUMENT_IMAGE;
   disable = (type != EPHY_WEB_VIEW_DOCUMENT_HTML);
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window),
-                                              "win");
+  action_group = ephy_window_get_action_group (window, "win");
 
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "encoding");
   ephy_action_change_sensitivity_flags (G_SIMPLE_ACTION (action), SENS_FLAG_DOCUMENT, disable);
@@ -1161,7 +1170,7 @@ _ephy_window_set_navigation_flags (EphyWindow                 *window,
   GActionGroup *action_group;
   GAction *action;
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "toolbar");
+  action_group = ephy_window_get_action_group (window, "toolbar");
 
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "navigation-back");
   g_simple_action_set_enabled (G_SIMPLE_ACTION (action), flags & EPHY_WEB_VIEW_NAV_BACK);
@@ -1198,18 +1207,18 @@ void
 ephy_window_sync_bookmark_state (GtkWidget             *widget,
                                  EphyBookmarkIconState  state)
 {
-  GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (widget));
-  EphyWindow *window = EPHY_WINDOW (toplevel);
+  GtkRoot *root = gtk_widget_get_root (GTK_WIDGET (widget));
+  EphyWindow *window = EPHY_WINDOW (root);
   EphyActionBarEnd *action_bar_end = ephy_action_bar_get_action_bar_end (EPHY_ACTION_BAR 
(window->action_bar));
-  GtkWidget *lentry;
+//  GtkWidget *lentry;
 
   if (action_bar_end)
     ephy_action_bar_end_set_bookmark_icon_state (EPHY_ACTION_BAR_END (action_bar_end), state);
 
-  lentry = GTK_WIDGET (ephy_header_bar_get_title_widget (EPHY_HEADER_BAR (window->header_bar)));
+//  lentry = GTK_WIDGET (ephy_header_bar_get_title_widget (EPHY_HEADER_BAR (window->header_bar)));
 
-  if (EPHY_IS_LOCATION_ENTRY (lentry))
-    ephy_location_entry_set_bookmark_icon_state (EPHY_LOCATION_ENTRY (lentry), state);
+//  if (EPHY_IS_LOCATION_ENTRY (lentry))
+//    ephy_location_entry_set_bookmark_icon_state (EPHY_LOCATION_ENTRY (lentry), state);
 }
 
 static void
@@ -1228,8 +1237,8 @@ sync_tab_bookmarked_status (EphyWebView *view,
 
   widget = GTK_WIDGET (ephy_header_bar_get_title_widget (EPHY_HEADER_BAR (window->header_bar)));
 
-  if (!EPHY_IS_LOCATION_ENTRY (widget))
-    return;
+//  if (!EPHY_IS_LOCATION_ENTRY (widget))
+//    return;
 
   address = ephy_web_view_get_address (view);
   mode = ephy_embed_shell_get_mode (shell);
@@ -1246,7 +1255,7 @@ sync_tab_bookmarked_status (EphyWebView *view,
   }
 
   ephy_action_bar_end_set_bookmark_icon_state (EPHY_ACTION_BAR_END (action_bar_end), state);
-  ephy_location_entry_set_bookmark_icon_state (EPHY_LOCATION_ENTRY (widget), state);
+//  ephy_location_entry_set_bookmark_icon_state (EPHY_LOCATION_ENTRY (widget), state);
 }
 
 static void
@@ -1524,12 +1533,9 @@ populate_context_menu (WebKitWebView       *web_view,
                               EPHY_PREFS_LOCKDOWN_CONTEXT_MENU))
     return GDK_EVENT_STOP;
 
-  window_action_group = gtk_widget_get_action_group (GTK_WIDGET (window),
-                                                     "win");
-  toolbar_action_group = gtk_widget_get_action_group (GTK_WIDGET (window),
-                                                      "toolbar");
-  popup_action_group = gtk_widget_get_action_group (GTK_WIDGET (window),
-                                                    "popup");
+  window_action_group = ephy_window_get_action_group (window, "win");
+  toolbar_action_group = ephy_window_get_action_group (window, "toolbar");
+  popup_action_group = ephy_window_get_action_group (window, "popup");
 
   if (webkit_hit_test_result_context_is_image (hit_test_result)) {
     is_image = TRUE;
@@ -1887,6 +1893,7 @@ ephy_window_set_is_popup (EphyWindow *window,
   g_object_notify (G_OBJECT (window), "is-popup");
 }
 
+#if 0
 static void
 window_properties_geometry_changed (WebKitWindowProperties *properties,
                                     GParamSpec             *pspec,
@@ -1942,6 +1949,7 @@ ephy_window_configure_for_view (EphyWindow    *window,
                     G_CALLBACK (window_properties_geometry_changed),
                     window);
 }
+#endif
 
 static gboolean
 web_view_ready_cb (WebKitWebView *web_view,
@@ -1950,13 +1958,13 @@ web_view_ready_cb (WebKitWebView *web_view,
   EphyWindow *window, *parent_view_window;
   gboolean using_new_window;
 
-  window = EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (web_view)));
-  parent_view_window = EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (parent_web_view)));
+  window = EPHY_WINDOW (gtk_widget_get_root (GTK_WIDGET (web_view)));
+  parent_view_window = EPHY_WINDOW (gtk_widget_get_root (GTK_WIDGET (parent_web_view)));
 
   using_new_window = window != parent_view_window;
 
   if (using_new_window) {
-    ephy_window_configure_for_view (window, web_view);
+//    ephy_window_configure_for_view (window, web_view);
     g_signal_emit_by_name (parent_web_view, "new-window", web_view);
   }
 
@@ -2101,12 +2109,7 @@ decide_navigation_policy (WebKitWebView            *web_view,
   uri = webkit_uri_request_get_uri (request);
 
   if (!ephy_embed_utils_address_has_web_scheme (uri) && webkit_navigation_action_is_user_gesture 
(navigation_action)) {
-    g_autoptr (GError) error = NULL;
-    gtk_show_uri_on_window (GTK_WINDOW (window), uri, GDK_CURRENT_TIME, &error);
-    if (error) {
-      LOG ("failed to handle non-web scheme: %s", error->message);
-      return accept_navigation_policy_decision (window, decision, uri);
-    }
+    gtk_show_uri (GTK_WINDOW (window), uri, GDK_CURRENT_TIME);
 
     webkit_policy_decision_ignore (decision);
     return TRUE;
@@ -2130,11 +2133,11 @@ decide_navigation_policy (WebKitWebView            *web_view,
          * executes in web app mode.
          */
         ephy_file_open_uri_in_default_browser (uri, GDK_CURRENT_TIME,
-                                               gtk_window_get_screen (GTK_WINDOW (window)),
+                                               gdk_surface_get_display (gtk_native_get_surface (GTK_NATIVE 
(window))),
                                                
EPHY_FILE_HELPERS_I_UNDERSTAND_I_MUST_NOT_USE_THIS_FUNCTION_UNDER_FLATPAK);
         webkit_policy_decision_ignore (decision);
 
-        gtk_widget_destroy (GTK_WIDGET (window));
+        gtk_window_destroy (GTK_WINDOW (window));
 
         return TRUE;
       }
@@ -2149,7 +2152,7 @@ decide_navigation_policy (WebKitWebView            *web_view,
        * executes in web app mode.
        */
       ephy_file_open_uri_in_default_browser (uri, GDK_CURRENT_TIME,
-                                             gtk_window_get_screen (GTK_WINDOW (window)),
+                                             gdk_surface_get_display (gtk_native_get_surface (GTK_NATIVE 
(window))),
                                              
EPHY_FILE_HELPERS_I_UNDERSTAND_I_MUST_NOT_USE_THIS_FUNCTION_UNDER_FLATPAK);
       webkit_policy_decision_ignore (decision);
 
@@ -2190,7 +2193,7 @@ decide_navigation_policy (WebKitWebView            *web_view,
       inherit_session = TRUE;
     }
     /* Alt+click means download URI */
-    else if (button == GDK_BUTTON_PRIMARY && state == GDK_MOD1_MASK) {
+    else if (button == GDK_BUTTON_PRIMARY && state == GDK_ALT_MASK) {
       if (save_target_uri (window, web_view)) {
         webkit_policy_decision_ignore (decision);
         return TRUE;
@@ -2375,7 +2378,7 @@ progress_update (WebKitWebView *web_view,
     loading = FALSE;
 
   title_widget = ephy_header_bar_get_title_widget (EPHY_HEADER_BAR (window->header_bar));
-  ephy_location_entry_set_progress (EPHY_LOCATION_ENTRY (title_widget), progress, loading);
+//  ephy_location_entry_set_progress (EPHY_LOCATION_ENTRY (title_widget), progress, loading);
 }
 
 
@@ -2397,8 +2400,8 @@ ephy_window_connect_active_embed (EphyWindow *window)
 
   title_widget = ephy_header_bar_get_title_widget (EPHY_HEADER_BAR (window->header_bar));
 
-  if (EPHY_IS_LOCATION_ENTRY (title_widget))
-    ephy_location_entry_set_reader_mode_state (EPHY_LOCATION_ENTRY (title_widget), 
ephy_web_view_get_reader_mode_state (view));
+//  if (EPHY_IS_LOCATION_ENTRY (title_widget))
+//    ephy_location_entry_set_reader_mode_state (EPHY_LOCATION_ENTRY (title_widget), 
ephy_web_view_get_reader_mode_state (view));
 
   sync_tab_security (view, NULL, window);
   sync_tab_document_type (view, NULL, window);
@@ -2413,7 +2416,7 @@ ephy_window_connect_active_embed (EphyWindow *window)
   sync_tab_zoom (web_view, NULL, window);
   sync_tab_page_action (view, NULL, window);
 
-  if (EPHY_IS_LOCATION_ENTRY (title_widget)) {
+/*  if (EPHY_IS_LOCATION_ENTRY (title_widget)) {
     gdouble progress = webkit_web_view_get_estimated_load_progress (web_view);
     gboolean loading = ephy_web_view_is_loading (EPHY_WEB_VIEW (web_view));
 
@@ -2421,7 +2424,7 @@ ephy_window_connect_active_embed (EphyWindow *window)
     g_signal_connect_object (web_view, "notify::estimated-load-progress",
                              G_CALLBACK (progress_update),
                              window, 0);
-  }
+  }*/
 
   g_signal_connect_object (web_view, "notify::zoom-level",
                            G_CALLBACK (sync_tab_zoom),
@@ -2458,9 +2461,9 @@ ephy_window_connect_active_embed (EphyWindow *window)
   g_signal_connect_object (view, "notify::is-blank",
                            G_CALLBACK (sync_tab_is_blank),
                            window, 0);
-  g_signal_connect_object (view, "context-menu",
-                           G_CALLBACK (populate_context_menu),
-                           window, 0);
+//  g_signal_connect_object (view, "context-menu",
+//                           G_CALLBACK (populate_context_menu),
+//                           window, 0);
   g_signal_connect_object (view, "mouse-target-changed",
                            G_CALLBACK (ephy_window_mouse_target_changed_cb),
                            window, 0);
@@ -2468,7 +2471,7 @@ ephy_window_connect_active_embed (EphyWindow *window)
                            G_CALLBACK (web_process_terminated_cb),
                            window, 0);
 
-  ephy_mouse_gesture_controller_set_web_view (window->mouse_gesture_controller, web_view);
+//  ephy_mouse_gesture_controller_set_web_view (window->mouse_gesture_controller, web_view);
 
   g_object_notify (G_OBJECT (window), "active-child");
 }
@@ -2488,7 +2491,7 @@ ephy_window_disconnect_active_embed (EphyWindow *window)
 
   ephy_embed_detach_notification_container (window->active_embed);
 
-  ephy_mouse_gesture_controller_unset_web_view (window->mouse_gesture_controller);
+//  ephy_mouse_gesture_controller_unset_web_view (window->mouse_gesture_controller);
 
   g_signal_handlers_disconnect_by_func (web_view,
                                         G_CALLBACK (progress_update),
@@ -2523,9 +2526,9 @@ ephy_window_disconnect_active_embed (EphyWindow *window)
   g_signal_handlers_disconnect_by_func (view,
                                         G_CALLBACK (sync_tab_address),
                                         window);
-  g_signal_handlers_disconnect_by_func (view,
-                                        G_CALLBACK (populate_context_menu),
-                                        window);
+//  g_signal_handlers_disconnect_by_func (view,
+//                                        G_CALLBACK (populate_context_menu),
+//                                        window);
   g_signal_handlers_disconnect_by_func (view,
                                         G_CALLBACK (ephy_window_mouse_target_changed_cb),
                                         window);
@@ -2541,7 +2544,7 @@ ephy_window_set_active_tab (EphyWindow *window,
   EphyEmbed *old_embed;
 
   g_assert (EPHY_IS_WINDOW (window));
-  g_assert (gtk_widget_get_toplevel (GTK_WIDGET (new_embed)) == GTK_WIDGET (window));
+  g_assert (gtk_widget_get_root (GTK_WIDGET (new_embed)) == GTK_ROOT (window));
 
   old_embed = window->active_embed;
 
@@ -2558,8 +2561,8 @@ ephy_window_set_active_tab (EphyWindow *window,
 }
 
 static void
-tab_view_setup_menu_cb (HdyTabView *tab_view,
-                        HdyTabPage *page,
+tab_view_setup_menu_cb (AdwTabView *tab_view,
+                        AdwTabPage *page,
                         EphyWindow *window)
 {
   EphyWebView *view;
@@ -2573,17 +2576,17 @@ tab_view_setup_menu_cb (HdyTabView *tab_view,
   gboolean muted;
 
   if (page) {
-    n_pages = hdy_tab_view_get_n_pages (tab_view);
-    n_pinned_pages = hdy_tab_view_get_n_pinned_pages (tab_view);
-    position = hdy_tab_view_get_page_position (tab_view, page);
-    pinned = hdy_tab_page_get_pinned (page);
+    n_pages = adw_tab_view_get_n_pages (tab_view);
+    n_pinned_pages = adw_tab_view_get_n_pinned_pages (tab_view);
+    position = adw_tab_view_get_page_position (tab_view, page);
+    pinned = adw_tab_page_get_pinned (page);
 
-    view = ephy_embed_get_web_view (EPHY_EMBED (hdy_tab_page_get_child (page)));
+    view = ephy_embed_get_web_view (EPHY_EMBED (adw_tab_page_get_child (page)));
     audio_playing = webkit_web_view_is_playing_audio (WEBKIT_WEB_VIEW (view));
     muted = webkit_web_view_get_is_muted (WEBKIT_WEB_VIEW (view));
   }
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "tab");
+  action_group = ephy_window_get_action_group (window, "tab");
 
   /* enable/disable close others/left/right */
   /* If there's no page, enable all actions so that we don't interfere with hotkeys */
@@ -2625,10 +2628,7 @@ tab_view_setup_menu_cb (HdyTabView *tab_view,
 static gboolean
 present_on_idle_cb (GtkWindow *window)
 {
-  EphyWindow *ephy_window = EPHY_WINDOW (window);
-
-  gtk_window_present_with_time (window, ephy_window->present_on_insert_user_time);
-  ephy_window->present_on_insert_user_time = 0;
+  gtk_window_present (window);
 
   return FALSE;
 }
@@ -2637,7 +2637,7 @@ static gboolean
 delayed_remove_child (gpointer data)
 {
   GtkWidget *widget = GTK_WIDGET (data);
-  EphyEmbedContainer *container = EPHY_EMBED_CONTAINER (gtk_widget_get_toplevel (widget));
+  EphyEmbedContainer *container = EPHY_EMBED_CONTAINER (gtk_widget_get_root (widget));
 
   ephy_embed_container_remove_child (container, EPHY_EMBED (widget));
 
@@ -2663,6 +2663,7 @@ static void
 update_reader_mode (EphyWindow  *window,
                     EphyWebView *view)
 {
+/*
   EphyEmbed *embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window));
   EphyWebView *active_view = ephy_embed_get_web_view (embed);
   gboolean available = ephy_web_view_is_reader_mode_available (view);
@@ -2679,7 +2680,7 @@ update_reader_mode (EphyWindow  *window,
   ephy_location_entry_set_reader_mode_visible (lentry, available);
 
   if (available)
-    ephy_location_entry_set_reader_mode_state (lentry, ephy_web_view_get_reader_mode_state (view));
+    ephy_location_entry_set_reader_mode_state (lentry, ephy_web_view_get_reader_mode_state (view));*/
 }
 
 static void
@@ -2691,12 +2692,12 @@ reader_mode_cb (EphyWebView *view,
 }
 
 static void
-tab_view_page_attached_cb (HdyTabView *tab_view,
-                           HdyTabPage *page,
+tab_view_page_attached_cb (AdwTabView *tab_view,
+                           AdwTabPage *page,
                            gint        position,
                            EphyWindow *window)
 {
-  GtkWidget *content = hdy_tab_page_get_child (page);
+  GtkWidget *content = adw_tab_page_get_child (page);
   EphyEmbed *embed;
 
   g_assert (EPHY_IS_EMBED (content));
@@ -2718,12 +2719,12 @@ tab_view_page_attached_cb (HdyTabView *tab_view,
 }
 
 static void
-tab_view_page_detached_cb (HdyTabView *tab_view,
-                           HdyTabPage *page,
+tab_view_page_detached_cb (AdwTabView *tab_view,
+                           AdwTabPage *page,
                            gint        position,
                            EphyWindow *window)
 {
-  GtkWidget *content = hdy_tab_page_get_child (page);
+  GtkWidget *content = adw_tab_page_get_child (page);
 
   LOG ("page-detached tab view %p embed %p position %d\n", tab_view, content, position);
 
@@ -2786,19 +2787,19 @@ ephy_window_close_tab (EphyWindow *window,
    * tab, even if it wasn't at the start of this function.
    */
   if (!window->closing && ephy_tab_view_get_n_pages (window->tab_view) == 0)
-    gtk_widget_destroy (GTK_WIDGET (window));
+    gtk_window_destroy (GTK_WINDOW (window));
 }
 
 typedef struct {
   EphyWindow *window;
   EphyEmbed *embed;
-  HdyTabPage *page;
+  AdwTabPage *page;
 } TabHasModifiedFormsData;
 
 static TabHasModifiedFormsData *
 tab_has_modified_forms_data_new (EphyWindow *window,
                                  EphyEmbed  *embed,
-                                 HdyTabPage *page)
+                                 AdwTabPage *page)
 {
   TabHasModifiedFormsData *data = g_new (TabHasModifiedFormsData, 1);
   data->window = window;
@@ -2823,9 +2824,9 @@ tab_has_modified_forms_dialog_cb (GtkDialog               *dialog,
                                   GtkResponseType          response,
                                   TabHasModifiedFormsData *data)
 {
-  HdyTabView *tab_view = ephy_tab_view_get_tab_view (data->window->tab_view);
+  AdwTabView *tab_view = ephy_tab_view_get_tab_view (data->window->tab_view);
 
-  gtk_widget_destroy (GTK_WIDGET (dialog));
+  gtk_window_destroy (GTK_WINDOW (dialog));
 
   if (response == GTK_RESPONSE_ACCEPT) {
     /* It's safe to close the tab immediately because we are only checking a
@@ -2833,10 +2834,10 @@ tab_has_modified_forms_dialog_cb (GtkDialog               *dialog,
      * codepath for checking modified forms when closing the whole window,
      * see ephy_window_check_modified_forms().
      */
-    hdy_tab_view_close_page_finish (tab_view, data->page, TRUE);
+    adw_tab_view_close_page_finish (tab_view, data->page, TRUE);
     ephy_window_close_tab (data->window, data->embed);
   } else
-    hdy_tab_view_close_page_finish (tab_view, data->page, FALSE);
+    adw_tab_view_close_page_finish (tab_view, data->page, FALSE);
 
   tab_has_modified_forms_data_free (data);
 }
@@ -2853,10 +2854,10 @@ tab_has_modified_forms_cb (EphyWebView             *view,
   if (data->window != NULL &&
       data->embed != NULL &&
       data->page != NULL) {
-    HdyTabView *tab_view = ephy_tab_view_get_tab_view (data->window->tab_view);
+    AdwTabView *tab_view = ephy_tab_view_get_tab_view (data->window->tab_view);
 
     if (!has_modified_forms) {
-      hdy_tab_view_close_page_finish (tab_view, data->page, TRUE);
+      adw_tab_view_close_page_finish (tab_view, data->page, TRUE);
       ephy_window_close_tab (data->window, data->embed);
     } else {
       GtkWidget *dialog;
@@ -2900,19 +2901,19 @@ run_downloads_in_background (EphyWindow *window,
 }
 
 static gboolean
-tab_view_close_page_cb (HdyTabView *tab_view,
-                        HdyTabPage *page,
+tab_view_close_page_cb (AdwTabView *tab_view,
+                        AdwTabPage *page,
                         EphyWindow *window)
 {
-  EphyEmbed *embed = EPHY_EMBED (hdy_tab_page_get_child (page));
+  EphyEmbed *embed = EPHY_EMBED (adw_tab_page_get_child (page));
 
-  if (hdy_tab_page_get_pinned (page))
+  if (adw_tab_page_get_pinned (page))
     return GDK_EVENT_PROPAGATE;
 
   if (ephy_tab_view_get_n_pages (window->tab_view) == 1) {
     if (g_settings_get_boolean (EPHY_SETTINGS_LOCKDOWN,
                                 EPHY_PREFS_LOCKDOWN_QUIT)) {
-      hdy_tab_view_close_page_finish (tab_view, page, FALSE);
+      adw_tab_view_close_page_finish (tab_view, page, FALSE);
       return GDK_EVENT_STOP;
     }
 
@@ -2928,7 +2929,7 @@ tab_view_close_page_cb (HdyTabView *tab_view,
       if (ephy_downloads_manager_has_active_downloads (manager)) {
         GList *list = ephy_downloads_manager_get_downloads (manager);
         run_downloads_in_background (window, g_list_length (list));
-        hdy_tab_view_close_page_finish (tab_view, page, FALSE);
+        adw_tab_view_close_page_finish (tab_view, page, FALSE);
         return GDK_EVENT_STOP;
       }
     }
@@ -2957,8 +2958,8 @@ tab_view_close_page_cb (HdyTabView *tab_view,
   return GDK_EVENT_PROPAGATE;
 }
 
-static HdyTabView *
-tab_view_create_window_cb (HdyTabView *tab_view,
+static AdwTabView *
+tab_view_create_window_cb (AdwTabView *tab_view,
                            EphyWindow *window)
 {
   EphyWindow *new_window;
@@ -2966,7 +2967,6 @@ tab_view_create_window_cb (HdyTabView *tab_view,
   new_window = ephy_window_new ();
 
   new_window->present_on_insert = TRUE;
-  new_window->present_on_insert_user_time = gtk_get_current_event_time ();
 
   return ephy_tab_view_get_tab_view (new_window->tab_view);
 }
@@ -2986,10 +2986,12 @@ ephy_window_update_entry_focus (EphyWindow  *window,
     return;
 
   title_widget = GTK_WIDGET (ephy_header_bar_get_title_widget (EPHY_HEADER_BAR (window->header_bar)));
+/*
   if (EPHY_IS_LOCATION_ENTRY (title_widget)) {
     entry = ephy_location_entry_get_entry (EPHY_LOCATION_ENTRY (title_widget));
     gtk_entry_grab_focus_without_selecting (GTK_ENTRY (entry));
   }
+*/
 }
 
 static void
@@ -3030,15 +3032,14 @@ static EphyTabView *
 setup_tab_view (EphyWindow *window)
 {
   EphyTabView *tab_view = ephy_tab_view_new ();
-  HdyTabView *view = ephy_tab_view_get_tab_view (tab_view);
+  AdwTabView *view = ephy_tab_view_get_tab_view (tab_view);
   g_autoptr (GtkBuilder) builder = NULL;
 
   gtk_widget_set_vexpand (GTK_WIDGET (tab_view), TRUE);
 
   builder = gtk_builder_new_from_resource ("/org/gnome/epiphany/gtk/notebook-context-menu.ui");
 
-  hdy_tab_view_set_menu_model (view, G_MENU_MODEL (gtk_builder_get_object (builder, "notebook-menu")));
-  hdy_tab_view_set_shortcut_widget (view, GTK_WIDGET (window));
+  adw_tab_view_set_menu_model (view, G_MENU_MODEL (gtk_builder_get_object (builder, "notebook-menu")));
 
   g_signal_connect_object (view, "notify::selected-page",
                            G_CALLBACK (tab_view_notify_selected_page_cb),
@@ -3145,15 +3146,13 @@ ephy_window_get_property (GObject    *object,
     case PROP_SINGLE_TAB_MODE:
       g_value_set_boolean (value, window->is_popup);
       break;
-    case PROP_FULLSCREEN:
-      g_value_set_boolean (value, window->is_fullscreen);
-      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
 }
 
+#if 0
 static gboolean
 ephy_window_state_event (GtkWidget           *widget,
                          GdkEventWindowState *event)
@@ -3161,32 +3160,8 @@ ephy_window_state_event (GtkWidget           *widget,
   EphyWindow *window = EPHY_WINDOW (widget);
   gboolean result = GDK_EVENT_PROPAGATE;
 
-  if (event->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) {
-    GActionGroup *action_group;
-    GAction *action;
-    gboolean fullscreen;
-
-    fullscreen = !!(event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN);
-
-    if (fullscreen) {
-      ephy_window_fullscreen (window);
-    } else {
-      ephy_window_unfullscreen (window);
-    }
-
-    ephy_fullscreen_box_set_fullscreen (window->fullscreen_box, fullscreen && 
window->show_fullscreen_header_bar);
-    gtk_widget_set_visible (GTK_WIDGET (window->titlebar_box), !fullscreen || 
window->show_fullscreen_header_bar);
-
-    window->show_fullscreen_header_bar = FALSE;
-
-    action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "win");
-    action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "fullscreen");
-
-    g_simple_action_set_state (G_SIMPLE_ACTION (action),
-                               g_variant_new_boolean (fullscreen));
-  } else if (event->changed_mask & GDK_WINDOW_STATE_MAXIMIZED) {
+  if (event->changed_mask & GDK_WINDOW_STATE_MAXIMIZED)
     window->is_maximized = !!(event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED);
-  }
 
   update_adaptive_mode (window);
 
@@ -3195,6 +3170,7 @@ ephy_window_state_event (GtkWidget           *widget,
 
   return result;
 }
+#endif
 
 void
 ephy_window_set_default_size (EphyWindow *window,
@@ -3210,8 +3186,6 @@ ephy_window_set_default_position (EphyWindow *window,
                                   gint        x,
                                   gint        y)
 {
-  gtk_window_move (GTK_WINDOW (window), x, y);
-  window->has_default_position = TRUE;
 }
 
 static void
@@ -3228,20 +3202,6 @@ ephy_window_show (GtkWidget *widget)
   if (window->is_maximized)
     gtk_window_maximize (GTK_WINDOW (window));
   else {
-    if (!window->has_default_position) {
-      g_settings_get (EPHY_SETTINGS_STATE,
-                      "window-position", "(ii)",
-                      &window->current_x,
-                      &window->current_y);
-      if (window->current_x >= 0 && window->current_y >= 0) {
-        gtk_window_move (GTK_WINDOW (window),
-                         window->current_x,
-                         window->current_y);
-      }
-
-      window->has_default_position = TRUE;
-    }
-
     if (!window->has_default_size) {
       g_settings_get (EPHY_SETTINGS_STATE,
                       "window-size", "(ii)",
@@ -3249,9 +3209,9 @@ ephy_window_show (GtkWidget *widget)
                       &window->current_height);
 
       if (window->current_width > 0 && window->current_height > 0) {
-        gtk_window_resize (GTK_WINDOW (window),
-                           window->current_width,
-                           window->current_height);
+        gtk_window_set_default_size (GTK_WINDOW (window),
+                                     window->current_width,
+                                     window->current_height);
       }
 
       window->has_default_size = TRUE;
@@ -3263,6 +3223,7 @@ ephy_window_show (GtkWidget *widget)
   GTK_WIDGET_CLASS (ephy_window_parent_class)->show (widget);
 }
 
+#if 0
 static gboolean
 ephy_window_should_save_state (EphyWindow *window)
 {
@@ -3294,15 +3255,21 @@ ephy_window_destroy (GtkWidget *widget)
 
   GTK_WIDGET_CLASS (ephy_window_parent_class)->destroy (widget);
 }
+#endif
 
 static void
 ephy_window_finalize (GObject *object)
 {
+  EphyWindow *window = EPHY_WINDOW (object);
+
   G_OBJECT_CLASS (ephy_window_parent_class)->finalize (object);
 
+  g_hash_table_unref (window->action_groups);
+
   LOG ("EphyWindow finalised %p", object);
 }
 
+#if 0
 static void
 sync_user_input_cb (EphyLocationController *action,
                     GParamSpec             *pspec,
@@ -3363,6 +3330,7 @@ title_widget_lock_clicked_cb (EphyTitleWidget *title_widget,
   gtk_popover_set_position (GTK_POPOVER (security_popover), GTK_POS_BOTTOM);
   gtk_popover_popup (GTK_POPOVER (security_popover));
 }
+#endif
 
 static GtkWidget *
 setup_header_bar (EphyWindow *window)
@@ -3370,19 +3338,11 @@ setup_header_bar (EphyWindow *window)
   GtkWidget *header_bar;
   EphyTitleWidget *title_widget;
 
-  window->window_handle = hdy_window_handle_new ();
   header_bar = ephy_header_bar_new (window);
 
-  gtk_container_add (GTK_CONTAINER (window->window_handle), header_bar);
-
-  gtk_widget_show (window->window_handle);
-  gtk_widget_show (header_bar);
-
-  gtk_style_context_add_class (gtk_widget_get_style_context (header_bar), "titlebar");
-
-  title_widget = ephy_header_bar_get_title_widget (EPHY_HEADER_BAR (header_bar));
-  g_signal_connect (title_widget, "lock-clicked",
-                    G_CALLBACK (title_widget_lock_clicked_cb), window);
+//  title_widget = ephy_header_bar_get_title_widget (EPHY_HEADER_BAR (header_bar));
+//  g_signal_connect (title_widget, "lock-clicked",
+//                    G_CALLBACK (title_widget_lock_clicked_cb), window);
 
   return header_bar;
 }
@@ -3391,7 +3351,7 @@ static void
 update_pages_menu_revealer (EphyWindow *window)
 {
   gtk_revealer_set_reveal_child (window->pages_menu_revealer,
-                                 hdy_tab_bar_get_is_overflowing (window->tab_bar) ||
+                                 adw_tab_bar_get_is_overflowing (window->tab_bar) ||
                                  gtk_widget_get_visible (GTK_WIDGET (window->pages_popover)));
 }
 
@@ -3405,17 +3365,17 @@ setup_tabs_menu (EphyWindow *window)
   revealer = GTK_REVEALER (gtk_revealer_new ());
   gtk_revealer_set_transition_type (revealer,
                                     GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT);
-  hdy_tab_bar_set_end_action_widget (window->tab_bar, GTK_WIDGET (revealer));
+  adw_tab_bar_set_end_action_widget (window->tab_bar, GTK_WIDGET (revealer));
   window->pages_menu_revealer = revealer;
 
   menu_button = gtk_menu_button_new ();
-  gtk_button_set_relief (GTK_BUTTON (menu_button), GTK_RELIEF_NONE);
+  gtk_widget_add_css_class (menu_button, "flat");
   /* Translators: tooltip for the tab switcher menu button */
   gtk_widget_set_tooltip_text (menu_button, _("View open tabs"));
   gtk_widget_set_margin_start (menu_button, 1);
-  gtk_container_add (GTK_CONTAINER (revealer), menu_button);
+  gtk_revealer_set_child (revealer, menu_button);
 
-  popover = ephy_pages_popover_new (menu_button);
+  popover = ephy_pages_popover_new ();
   ephy_pages_popover_set_tab_view (popover, window->tab_view);
   gtk_menu_button_set_popover (GTK_MENU_BUTTON (menu_button),
                                GTK_WIDGET (popover));
@@ -3427,10 +3387,9 @@ setup_tabs_menu (EphyWindow *window)
   g_signal_connect_object (window->pages_popover, "notify::visible",
                            G_CALLBACK (update_pages_menu_revealer), window,
                            G_CONNECT_SWAPPED);
-
-  gtk_widget_show_all (GTK_WIDGET (revealer));
 }
 
+#if 0
 static EphyLocationController *
 setup_location_controller (EphyWindow    *window,
                            EphyHeaderBar *header_bar)
@@ -3449,6 +3408,7 @@ setup_location_controller (EphyWindow    *window,
 
   return location_controller;
 }
+#endif
 
 static GtkWidget *
 setup_action_bar (EphyWindow *window)
@@ -3456,7 +3416,6 @@ setup_action_bar (EphyWindow *window)
   GtkWidget *action_bar;
 
   action_bar = GTK_WIDGET (ephy_action_bar_new (window));
-  gtk_widget_show (action_bar);
 
   g_object_bind_property (window->fullscreen_box, "revealed",
                           action_bar, "can-reveal",
@@ -3520,6 +3479,7 @@ set_as_default_browser ()
   }
 }
 
+#if 0
 static void
 on_default_browser_question_response (GtkInfoBar *info_bar,
                                       gint        response_id,
@@ -3561,9 +3521,8 @@ add_default_browser_question (GtkBox *box)
   g_signal_connect (info_bar, "response", G_CALLBACK (on_default_browser_question_response), NULL);
 
   gtk_box_pack_start (box, info_bar, FALSE, TRUE, 0);
-
-  gtk_widget_show (info_bar);
 }
+#endif
 
 static gboolean
 is_browser_default (void)
@@ -3599,14 +3558,14 @@ download_completed_cb (EphyDownload *download,
 }
 
 static void
-notify_deck_child_cb (EphyWindow *window)
+notify_leaflet_child_cb (EphyWindow *window)
 {
   GActionGroup *action_group;
   GAction *action;
   gboolean pages_open;
 
-  pages_open = hdy_deck_get_visible_child (HDY_DECK (window->main_deck)) == GTK_WIDGET (window->pages_view);
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "win");
+  pages_open = adw_leaflet_get_visible_child (ADW_LEAFLET (window->main_leaflet)) == GTK_WIDGET 
(window->pages_view);
+  action_group = ephy_window_get_action_group (window, "win");
 
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "content");
   g_simple_action_set_enabled (G_SIMPLE_ACTION (action), pages_open);
@@ -3616,19 +3575,33 @@ notify_deck_child_cb (EphyWindow *window)
 }
 
 static void
-ephy_window_size_allocate (GtkWidget     *widget,
-                           GtkAllocation *allocation)
+ephy_window_size_allocate (GtkWidget *widget,
+                           int        width,
+                           int        height,
+                           int        baseline)
 {
   EphyWindow *window = EPHY_WINDOW (widget);
 
-  GTK_WIDGET_CLASS (ephy_window_parent_class)->size_allocate (widget, allocation);
+  GTK_WIDGET_CLASS (ephy_window_parent_class)->size_allocate (widget, width,
+                                                              height, baseline);
 
-  if (!(window->is_maximized || window->is_fullscreen))
-    gtk_window_get_size (GTK_WINDOW (widget), &window->current_width, &window->current_height);
+  if (!(window->is_maximized || window->is_fullscreen)) {
+    window->current_width = width;
+    window->current_height = height;
+  }
 
   update_adaptive_mode (window);
 }
 
+static void
+insert_action_group (const char   *prefix,
+                     GActionGroup *group,
+                     GtkWidget    *widget)
+{
+  gtk_widget_insert_action_group (widget, prefix, group);
+
+}
+
 static void
 ephy_window_constructed (GObject *object)
 {
@@ -3647,41 +3620,42 @@ ephy_window_constructed (GObject *object)
 
   window = EPHY_WINDOW (object);
 
+  window->action_groups = g_hash_table_new_full (g_str_hash,
+                                                 g_str_equal,
+                                                 g_free,
+                                                 NULL);
+
   /* Add actions */
   simple_action_group = g_simple_action_group_new ();
   g_action_map_add_action_entries (G_ACTION_MAP (simple_action_group),
                                    window_entries,
                                    G_N_ELEMENTS (window_entries),
                                    window);
-  gtk_widget_insert_action_group (GTK_WIDGET (window),
-                                  "win",
-                                  G_ACTION_GROUP (simple_action_group));
+  g_hash_table_insert (window->action_groups, g_strdup ("win"), simple_action_group);
 
   simple_action_group = g_simple_action_group_new ();
   g_action_map_add_action_entries (G_ACTION_MAP (simple_action_group),
                                    tab_entries,
                                    G_N_ELEMENTS (tab_entries),
                                    window);
-  gtk_widget_insert_action_group (GTK_WIDGET (window), "tab",
-                                  G_ACTION_GROUP (simple_action_group));
+  g_hash_table_insert (window->action_groups, g_strdup ("tab"), simple_action_group);
 
   simple_action_group = g_simple_action_group_new ();
   g_action_map_add_action_entries (G_ACTION_MAP (simple_action_group),
                                    toolbar_entries,
                                    G_N_ELEMENTS (toolbar_entries),
                                    window);
-  gtk_widget_insert_action_group (GTK_WIDGET (window),
-                                  "toolbar",
-                                  G_ACTION_GROUP (simple_action_group));
+  g_hash_table_insert (window->action_groups, g_strdup ("toolbar"), simple_action_group);
 
   simple_action_group = g_simple_action_group_new ();
   g_action_map_add_action_entries (G_ACTION_MAP (simple_action_group),
                                    popup_entries,
                                    G_N_ELEMENTS (popup_entries),
                                    window);
-  gtk_widget_insert_action_group (GTK_WIDGET (window),
-                                  "popup",
-                                  G_ACTION_GROUP (simple_action_group));
+  g_hash_table_insert (window->action_groups, g_strdup ("popup"), simple_action_group);
+
+  g_hash_table_foreach (window->action_groups,
+                        (GHFunc) insert_action_group, window);
 
   window->action_labels = g_hash_table_new_full (g_str_hash,
                                                  g_str_equal,
@@ -3710,20 +3684,24 @@ ephy_window_constructed (GObject *object)
                                            accels_navigation_ltr_rtl[i].accelerators);
   }
 
+  g_signal_connect (window, "notify::fullscreened",
+                    G_CALLBACK (notify_fullscreen_cb), NULL);
+
   ephy_gui_ensure_window_group (GTK_WINDOW (window));
 
   window->tab_view = setup_tab_view (window);
-  window->tab_bar = hdy_tab_bar_new ();
+  window->tab_bar = adw_tab_bar_new ();
   window->tab_bar_revealer = GTK_REVEALER (gtk_revealer_new ());
-  window->main_deck = hdy_deck_new ();
+  window->main_leaflet = adw_leaflet_new ();
   window->fullscreen_box = ephy_fullscreen_box_new ();
   window->pages_view = ephy_pages_view_new ();
 
-  g_signal_connect_swapped (window->main_deck, "notify::visible-child",
-                            G_CALLBACK (notify_deck_child_cb), window);
+  adw_leaflet_set_can_unfold (ADW_LEAFLET (window->main_leaflet), FALSE);
+  g_signal_connect_swapped (window->main_leaflet, "notify::visible-child",
+                            G_CALLBACK (notify_leaflet_child_cb), window);
 
   gtk_revealer_set_transition_type (window->tab_bar_revealer, GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN);
-  hdy_tab_bar_set_view (window->tab_bar, ephy_tab_view_get_tab_view (window->tab_view));
+  adw_tab_bar_set_view (window->tab_bar, ephy_tab_view_get_tab_view (window->tab_view));
   ephy_pages_view_set_tab_view (window->pages_view, window->tab_view);
 
   setup_tabs_menu (window);
@@ -3739,43 +3717,35 @@ ephy_window_constructed (GObject *object)
 
   /* Setup the toolbar. */
   window->header_bar = setup_header_bar (window);
-  window->location_controller = setup_location_controller (window, EPHY_HEADER_BAR (window->header_bar));
+//  window->location_controller = setup_location_controller (window, EPHY_HEADER_BAR (window->header_bar));
   window->action_bar = setup_action_bar (window);
   box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 0));
   window->titlebar_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 0));
 
-  if (g_settings_get_boolean (EPHY_SETTINGS_MAIN, EPHY_PREFS_ASK_FOR_DEFAULT) &&
-      !is_browser_default () &&
-      !ephy_profile_dir_is_web_application ())
-    add_default_browser_question (box);
+//  if (g_settings_get_boolean (EPHY_SETTINGS_MAIN, EPHY_PREFS_ASK_FOR_DEFAULT) &&
+//      !is_browser_default () &&
+//      !ephy_profile_dir_is_web_application ())
+//    add_default_browser_question (box);
 
-  gtk_container_add (GTK_CONTAINER (window->tab_bar_revealer), GTK_WIDGET (window->tab_bar));
-  gtk_box_pack_start (window->titlebar_box, GTK_WIDGET (window->window_handle), FALSE, TRUE, 0);
-  gtk_box_pack_start (window->titlebar_box, GTK_WIDGET (window->tab_bar_revealer), FALSE, TRUE, 0);
-  gtk_box_pack_start (box, GTK_WIDGET (window->tab_view), FALSE, TRUE, 0);
-  gtk_box_pack_start (box, GTK_WIDGET (window->action_bar), FALSE, TRUE, 0);
+  gtk_revealer_set_child (window->tab_bar_revealer, GTK_WIDGET (window->tab_bar));
+  gtk_box_append (window->titlebar_box, GTK_WIDGET (window->header_bar));
+  gtk_box_append (window->titlebar_box, GTK_WIDGET (window->tab_bar_revealer));
+  gtk_box_append (box, GTK_WIDGET (window->tab_view));
+  gtk_box_append (box, GTK_WIDGET (window->action_bar));
   ephy_fullscreen_box_set_content (window->fullscreen_box, GTK_WIDGET (box));
   ephy_fullscreen_box_set_titlebar (window->fullscreen_box, GTK_WIDGET (window->titlebar_box));
 
-  gtk_container_add (GTK_CONTAINER (window->main_deck), GTK_WIDGET (window->fullscreen_box));
-  gtk_container_add (GTK_CONTAINER (window->main_deck), GTK_WIDGET (window->pages_view));
-  gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (window->main_deck));
-  gtk_widget_show (GTK_WIDGET (window->main_deck));
-  gtk_widget_show (GTK_WIDGET (window->pages_view));
-  gtk_widget_show (GTK_WIDGET (window->fullscreen_box));
-  gtk_widget_show (GTK_WIDGET (window->titlebar_box));
-  gtk_widget_show (GTK_WIDGET (box));
-  gtk_widget_show (GTK_WIDGET (window->tab_view));
-  gtk_widget_show (GTK_WIDGET (window->tab_bar));
-  gtk_widget_show (GTK_WIDGET (window->tab_bar_revealer));
+  adw_leaflet_append (ADW_LEAFLET (window->main_leaflet), GTK_WIDGET (window->fullscreen_box));
+  adw_leaflet_append (ADW_LEAFLET (window->main_leaflet), GTK_WIDGET (window->pages_view));
+  adw_application_window_set_content (ADW_APPLICATION_WINDOW (window), GTK_WIDGET (window->main_leaflet));
 
   ephy_tab_view_set_tab_bar (window->tab_view, window->tab_bar);
 
-  hdy_deck_set_visible_child (HDY_DECK (window->main_deck), GTK_WIDGET (window->fullscreen_box));
-  hdy_deck_set_can_swipe_back (HDY_DECK (window->main_deck), TRUE);
+  adw_leaflet_set_visible_child (ADW_LEAFLET (window->main_leaflet), GTK_WIDGET (window->fullscreen_box));
+  adw_leaflet_set_can_navigate_back (ADW_LEAFLET (window->main_leaflet), TRUE);
 
   /* other notifiers */
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "win");
+  action_group = ephy_window_get_action_group (window, "win");
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group),
                                        "browse-with-caret");
 
@@ -3787,8 +3757,7 @@ ephy_window_constructed (GObject *object)
                                 NULL,
                                 action, NULL);
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window),
-                                              "win");
+  action_group = ephy_window_get_action_group (window, "win");
 
   /* Disable actions not needed for popup mode. */
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "new-tab");
@@ -3796,7 +3765,7 @@ ephy_window_constructed (GObject *object)
                                         SENS_FLAG_CHROME,
                                         window->is_popup);
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "popup");
+  action_group = ephy_window_get_action_group (window, "popup");
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group),
                                        "open-link-in-new-tab");
   ephy_action_change_sensitivity_flags (G_SIMPLE_ACTION (action),
@@ -3805,13 +3774,13 @@ ephy_window_constructed (GObject *object)
 
   /* Disabled actions not needed for application mode. */
   if (mode == EPHY_EMBED_SHELL_MODE_APPLICATION) {
-    g_object_set (window->location_controller, "editable", FALSE, NULL);
+//    g_object_set (window->location_controller, "editable", FALSE, NULL);
 
-    action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "popup");
+    action_group = ephy_window_get_action_group (window, "popup");
     action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "context-bookmark-page");
     ephy_action_change_sensitivity_flags (G_SIMPLE_ACTION (action), SENS_FLAG_CHROME, TRUE);
 
-    action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "win");
+    action_group = ephy_window_get_action_group (window, "win");
     for (i = 0; i < G_N_ELEMENTS (disabled_actions_for_app_mode); i++) {
       action = g_action_map_lookup_action (G_ACTION_MAP (action_group),
                                            disabled_actions_for_app_mode[i]);
@@ -3820,12 +3789,12 @@ ephy_window_constructed (GObject *object)
     }
     chrome &= ~(EPHY_WINDOW_CHROME_LOCATION | EPHY_WINDOW_CHROME_TABSBAR | EPHY_WINDOW_CHROME_BOOKMARKS);
   } else if (mode == EPHY_EMBED_SHELL_MODE_INCOGNITO) {
-    action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "win");
+    action_group = ephy_window_get_action_group (window, "win");
     action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "bookmark-page");
     ephy_action_change_sensitivity_flags (G_SIMPLE_ACTION (action),
                                           SENS_FLAG_CHROME, TRUE);
 
-    action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "popup");
+    action_group = ephy_window_get_action_group (window, "popup");
     action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "context-bookmark-page");
     ephy_action_change_sensitivity_flags (G_SIMPLE_ACTION (action),
                                           SENS_FLAG_CHROME, TRUE);
@@ -3833,7 +3802,7 @@ ephy_window_constructed (GObject *object)
     g_object_set (window->location_controller, "editable", FALSE, NULL);
   }
 
-  window->mouse_gesture_controller = ephy_mouse_gesture_controller_new (window);
+//  window->mouse_gesture_controller = ephy_mouse_gesture_controller_new (window);
 
   ephy_window_set_chrome (window, chrome);
 
@@ -3853,11 +3822,11 @@ ephy_window_class_init (EphyWindowClass *klass)
   object_class->get_property = ephy_window_get_property;
   object_class->set_property = ephy_window_set_property;
 
-  widget_class->key_press_event = ephy_window_key_press_event;
-  widget_class->window_state_event = ephy_window_state_event;
+//  widget_class->key_press_event = ephy_window_key_press_event;
+//  widget_class->window_state_event = ephy_window_state_event;
   widget_class->show = ephy_window_show;
-  widget_class->destroy = ephy_window_destroy;
-  widget_class->delete_event = ephy_window_delete_event;
+//  widget_class->destroy = ephy_window_destroy;
+//  widget_class->delete_event = ephy_window_delete_event;
   widget_class->size_allocate = ephy_window_size_allocate;
 
   g_object_class_override_property (object_class,
@@ -3878,15 +3847,6 @@ ephy_window_class_init (EphyWindowClass *klass)
                                                        G_PARAM_READWRITE |
                                                        G_PARAM_STATIC_STRINGS));
 
-  g_object_class_install_property (object_class,
-                                   PROP_FULLSCREEN,
-                                   g_param_spec_boolean ("fullscreen",
-                                                         NULL,
-                                                         NULL,
-                                                         FALSE,
-                                                         G_PARAM_READABLE |
-                                                         G_PARAM_STATIC_STRINGS));
-
   manager = ephy_embed_shell_get_downloads_manager (EPHY_EMBED_SHELL (ephy_shell_get_default ()));
   g_signal_connect (manager, "download-completed", G_CALLBACK (download_completed_cb), NULL);
 }
@@ -3943,7 +3903,7 @@ ephy_window_open_pages_view (EphyWindow *window)
 {
   g_assert (EPHY_IS_WINDOW (window));
 
-  hdy_deck_navigate (HDY_DECK (window->main_deck), HDY_NAVIGATION_DIRECTION_FORWARD);
+  adw_leaflet_navigate (ADW_LEAFLET (window->main_leaflet), ADW_NAVIGATION_DIRECTION_FORWARD);
 }
 
 /**
@@ -3957,7 +3917,7 @@ ephy_window_close_pages_view (EphyWindow *window)
 {
   g_assert (EPHY_IS_WINDOW (window));
 
-  hdy_deck_navigate (HDY_DECK (window->main_deck), HDY_NAVIGATION_DIRECTION_BACK);
+  adw_leaflet_navigate (ADW_LEAFLET (window->main_leaflet), ADW_NAVIGATION_DIRECTION_BACK);
 }
 
 /**
@@ -4011,10 +3971,11 @@ ephy_window_activate_location (EphyWindow *window)
 
   title_widget = ephy_header_bar_get_title_widget (EPHY_HEADER_BAR (window->header_bar));
 
-  if (EPHY_IS_LOCATION_ENTRY (title_widget))
-    ephy_location_entry_focus (EPHY_LOCATION_ENTRY (title_widget));
+//  if (EPHY_IS_LOCATION_ENTRY (title_widget))
+//    ephy_location_entry_focus (EPHY_LOCATION_ENTRY (title_widget));
 }
 
+#if 0
 /**
  * ephy_window_location_search:
  * @window: an #EphyWindow
@@ -4042,6 +4003,7 @@ ephy_window_location_search (EphyWindow *window)
   g_free (entry_text);
   g_free (search_engine_name);
 }
+#endif
 
 /**
  * ephy_window_set_zoom:
@@ -4098,6 +4060,7 @@ ephy_window_get_context_event (EphyWindow *window)
   return window->context_event;
 }
 
+#if 0
 /**
  * ephy_window_get_location:
  * @window: an #EphyWindow widget
@@ -4111,6 +4074,7 @@ ephy_window_get_location (EphyWindow *window)
 {
   return ephy_location_controller_get_address (window->location_controller);
 }
+#endif
 
 /**
  * ephy_window_set_location:
@@ -4127,10 +4091,11 @@ ephy_window_set_location (EphyWindow *window,
     return;
 
   window->updating_address = TRUE;
-  ephy_location_controller_set_address (window->location_controller, address);
+//  ephy_location_controller_set_address (window->location_controller, address);
   window->updating_address = FALSE;
 }
 
+#if 0
 /**
  * ephy_window_get_location_controller:
  * @window: an #EphyWindow
@@ -4146,6 +4111,7 @@ ephy_window_get_location_controller (EphyWindow *window)
 
   return window->location_controller;
 }
+#endif
 
 /**
  * ephy_window_get_header_bar:
@@ -4186,7 +4152,7 @@ finish_window_close_after_modified_forms_check (WindowHasModifiedFormsData *data
   should_close = ephy_window_close (data->window);
   data->window->force_close = FALSE;
   if (should_close)
-    gtk_widget_destroy (GTK_WIDGET (data->window));
+    gtk_window_destroy (GTK_WINDOW (data->window));
 
   window_has_modified_forms_data_free (data);
 }
@@ -4196,7 +4162,7 @@ confirm_close_window_with_modified_forms_cb (GtkDialog                  *dialog,
                                              GtkResponseType             response,
                                              WindowHasModifiedFormsData *data)
 {
-  gtk_widget_destroy (GTK_WIDGET (dialog));
+  gtk_window_destroy (GTK_WINDOW (dialog));
 
   if (response == GTK_RESPONSE_ACCEPT)
     finish_window_close_after_modified_forms_check (data);
@@ -4301,7 +4267,7 @@ window_close_with_multiple_tabs_cb (GtkDialog       *dialog,
                                     GtkResponseType  response,
                                     EphyWindow      *window)
 {
-  gtk_widget_destroy (GTK_WIDGET (dialog));
+  gtk_window_destroy (GTK_WINDOW (dialog));
 
   if (response == GTK_RESPONSE_ACCEPT) {
     window->confirmed_close_with_multiple_tabs = TRUE;
@@ -4424,3 +4390,11 @@ ephy_window_get_geometry (EphyWindow   *window,
   rectangle->width = window->current_width;
   rectangle->height = window->current_height;
 }
+
+GActionGroup *
+ephy_window_get_action_group (EphyWindow *window,
+                              const char *prefix)
+{
+  return g_hash_table_lookup (window->action_groups, prefix);
+}
+
diff --git a/src/ephy-window.h b/src/ephy-window.h
index 35997a3d9..76c39a0be 100644
--- a/src/ephy-window.h
+++ b/src/ephy-window.h
@@ -27,13 +27,13 @@
 #include "ephy-tab-view.h"
 #include "ephy-web-view.h"
 
-#include <handy.h>
+#include <adwaita.h>
 
 G_BEGIN_DECLS
 
 #define EPHY_TYPE_WINDOW (ephy_window_get_type ())
 
-G_DECLARE_FINAL_TYPE (EphyWindow, ephy_window, EPHY, WINDOW, HdyApplicationWindow)
+G_DECLARE_FINAL_TYPE (EphyWindow, ephy_window, EPHY, WINDOW, AdwApplicationWindow)
 
 typedef enum
 {
@@ -95,6 +95,9 @@ gboolean          ephy_window_is_fullscreen              (EphyWindow *window);
 void              ephy_window_get_geometry               (EphyWindow   *window,
                                                           GdkRectangle *rectangle);
 
+GActionGroup     *ephy_window_get_action_group           (EphyWindow  *window,
+                                                          const char  *prefix);
+
 void ephy_window_sync_bookmark_state (GtkWidget             *widget,
                                       EphyBookmarkIconState  state);
 
diff --git a/src/meson.build b/src/meson.build
index eaee92180..27ca5e5b5 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -13,52 +13,52 @@ enums = gnome.mkenums_simple('ephy-type-builtins',
 subdir('webextension')
 
 libephymain_sources = [
-  'bookmarks/ephy-add-bookmark-popover.c',
+#  'bookmarks/ephy-add-bookmark-popover.c',
   'bookmarks/ephy-bookmark.c',
   'bookmarks/ephy-bookmark-properties.c',
   'bookmarks/ephy-bookmark-row.c',
   'bookmarks/ephy-bookmarks-export.c',
   'bookmarks/ephy-bookmarks-import.c',
   'bookmarks/ephy-bookmarks-manager.c',
-  'bookmarks/ephy-bookmarks-popover.c',
+#  'bookmarks/ephy-bookmarks-popover.c',
   'ephy-action-bar.c',
   'ephy-action-bar-end.c',
   'ephy-action-bar-start.c',
   'ephy-action-helper.c',
   'ephy-desktop-utils.c',
-  'ephy-encoding-dialog.c',
+#  'ephy-encoding-dialog.c',
   'ephy-encoding-row.c',
-  'ephy-firefox-sync-dialog.c',
+#  'ephy-firefox-sync-dialog.c',
   'ephy-fullscreen-box.c',
   'ephy-header-bar.c',
-  'ephy-history-dialog.c',
+#  'ephy-history-dialog.c',
   'ephy-link.c',
-  'ephy-location-controller.c',
+#  'ephy-location-controller.c',
   'ephy-lockdown.c',
-  'ephy-mouse-gesture-controller.c',
+#  'ephy-mouse-gesture-controller.c',
   'ephy-page-row.c',
   'ephy-pages-button.c',
   'ephy-pages-popover.c',
   'ephy-pages-view.c',
   'ephy-session.c',
   'ephy-shell.c',
-  'ephy-suggestion-model.c',
+#  'ephy-suggestion-model.c',
   'ephy-tab-view.c',
   'ephy-web-extension-dialog.c',
   'ephy-window.c',
   'popup-commands.c',
-  'preferences/clear-data-view.c',
-  'preferences/ephy-data-view.c',
+#  'preferences/clear-data-view.c',
+#  'preferences/ephy-data-view.c',
   'preferences/ephy-lang-row.c',
   'preferences/ephy-prefs-dialog.c',
-  'preferences/passwords-view.c',
-  'preferences/ephy-search-engine-listbox.c',
-  'preferences/ephy-search-engine-row.c',
+#  'preferences/passwords-view.c',
+#  'preferences/ephy-search-engine-listbox.c',
+#  'preferences/ephy-search-engine-row.c',
   'preferences/prefs-appearance-page.c',
-  'preferences/prefs-general-page.c',
+#  'preferences/prefs-general-page.c',
   'preferences/prefs-privacy-page.c',
   'preferences/webapp-additional-urls-dialog.c',
-  'synced-tabs-dialog.c',
+#  'synced-tabs-dialog.c',
   'window-commands.c',
   ephywebextension_src,
   compile_schemas,
@@ -73,7 +73,7 @@ libephymain_deps = [
   ephywidgets_dep,
   gvdb_dep,
   libarchive_dep,
-  libhandy_dep
+  libadwaita_dep
 ]
 
 libephymain_includes = include_directories(
@@ -123,13 +123,13 @@ search_provider_sources = [
   codegen
 ]
 
-executable('epiphany-search-provider',
-  search_provider_sources,
-  dependencies: ephymain_dep,
-  install: true,
-  install_dir: libexecdir,
-  install_rpath: pkglibdir
-)
+#executable('epiphany-search-provider',
+#  search_provider_sources,
+#  dependencies: ephymain_dep,
+#  install: true,
+#  install_dir: libexecdir,
+#  install_rpath: pkglibdir
+#)
 
 
 resource_files = files('resources/epiphany.gresource.xml')
diff --git a/src/popup-commands.c b/src/popup-commands.c
index dc3ccfbbc..2e8432266 100644
--- a/src/popup-commands.c
+++ b/src/popup-commands.c
@@ -107,8 +107,9 @@ static void
 popup_cmd_copy_to_clipboard (EphyWindow *window,
                              const char *text)
 {
-  gtk_clipboard_set_text (gtk_clipboard_get_default (gdk_display_get_default ()),
-                          text, -1);
+  GdkClipboard *clipboard = gtk_widget_get_clipboard (GTK_WIDGET (window));
+
+  gdk_clipboard_set_text (clipboard, text);
 }
 
 void
@@ -149,6 +150,7 @@ typedef struct {
   EphyDownload *download;
 } SavePropertyURLData;
 
+#if 0
 static void
 filename_confirmed_cb (GtkFileChooser      *dialog,
                        GtkResponseType      response,
@@ -207,6 +209,7 @@ filename_suggested_cb (EphyDownload        *download,
                     G_CALLBACK (filename_confirmed_cb), data);
   gtk_native_dialog_show (GTK_NATIVE_DIALOG (dialog));
 }
+#endif
 
 static void
 save_property_url (const char *title,
@@ -227,9 +230,9 @@ save_property_url (const char *title,
   data->title = g_strdup (title);
   data->window = g_object_ref (window);
   data->download = download;
-  g_signal_connect (download, "filename-suggested",
-                    G_CALLBACK (filename_suggested_cb),
-                    data);
+//  g_signal_connect (download, "filename-suggested",
+//                    G_CALLBACK (filename_suggested_cb),
+//                    data);
 }
 
 void
diff --git a/src/preferences/ephy-data-view.c b/src/preferences/ephy-data-view.c
index 995ac2663..021620c58 100644
--- a/src/preferences/ephy-data-view.c
+++ b/src/preferences/ephy-data-view.c
@@ -21,12 +21,13 @@
 #include "config.h"
 #include "ephy-data-view.h"
 
+#include <adwaita.h>
 #include <ctype.h>
 
 typedef struct {
   GtkWidget *box;
   GtkWidget *child;
-  GtkWidget *header_bar;
+  GtkWidget *window_title;
   GtkWidget *back_button;
   GtkWidget *clear_button;
   GtkWidget *search_bar;
@@ -43,7 +44,7 @@ typedef struct {
   char *search_text;
 } EphyDataViewPrivate;
 
-G_DEFINE_TYPE_WITH_PRIVATE (EphyDataView, ephy_data_view, GTK_TYPE_BIN)
+G_DEFINE_TYPE_WITH_PRIVATE (EphyDataView, ephy_data_view, GTK_TYPE_WIDGET)
 
 enum {
   PROP_0,
@@ -121,7 +122,7 @@ on_search_entry_changed (GtkSearchEntry *entry,
   EphyDataViewPrivate *priv = ephy_data_view_get_instance_private (self);
   const char *text;
 
-  text = gtk_entry_get_text (GTK_ENTRY (entry));
+  text = gtk_editable_get_text (GTK_EDITABLE (entry));
   g_free (priv->search_text);
   priv->search_text = g_strdup (text);
 
@@ -181,7 +182,7 @@ ephy_data_view_set_property (GObject      *object,
 
   switch (prop_id) {
     case PROP_TITLE:
-      gtk_header_bar_set_title (GTK_HEADER_BAR (priv->header_bar), g_value_get_string (value));
+      adw_window_title_set_title (ADW_WINDOW_TITLE (priv->window_title), g_value_get_string (value));
       break;
     case PROP_CLEAR_ACTION_NAME:
       gtk_actionable_set_action_name (GTK_ACTIONABLE (priv->clear_button), g_value_get_string (value));
@@ -200,10 +201,10 @@ ephy_data_view_set_property (GObject      *object,
       atk_object_set_description (gtk_widget_get_accessible (GTK_WIDGET (self)), g_value_get_string (value));
       break;
     case PROP_EMPTY_TITLE:
-      hdy_status_page_set_title (HDY_STATUS_PAGE (priv->empty_page), g_value_get_string (value));
+      adw_status_page_set_title (ADW_STATUS_PAGE (priv->empty_page), g_value_get_string (value));
       break;
     case PROP_EMPTY_DESCRIPTION:
-      hdy_status_page_set_description (HDY_STATUS_PAGE (priv->empty_page), g_value_get_string (value));
+      adw_status_page_set_description (ADW_STATUS_PAGE (priv->empty_page), g_value_get_string (value));
       break;
     case PROP_IS_LOADING:
       ephy_data_view_set_is_loading (self, g_value_get_boolean (value));
@@ -234,7 +235,7 @@ ephy_data_view_get_property (GObject    *object,
 
   switch (prop_id) {
     case PROP_TITLE:
-      g_value_set_string (value, gtk_header_bar_get_title (GTK_HEADER_BAR (priv->header_bar)));
+      g_value_set_string (value, adw_window_title_get_title (ADW_WINDOW_TITLE (priv->window_title)));
       break;
     case PROP_CLEAR_ACTION_NAME:
       g_value_set_string (value, gtk_actionable_get_action_name (GTK_ACTIONABLE (priv->clear_button)));
@@ -252,10 +253,10 @@ ephy_data_view_get_property (GObject    *object,
       g_value_set_string (value, gtk_entry_get_placeholder_text (GTK_ENTRY (priv->search_entry)));
       break;
     case PROP_EMPTY_TITLE:
-      g_value_set_string (value, hdy_status_page_get_title (HDY_STATUS_PAGE (priv->empty_page)));
+      g_value_set_string (value, adw_status_page_get_title (ADW_STATUS_PAGE (priv->empty_page)));
       break;
     case PROP_EMPTY_DESCRIPTION:
-      g_value_set_string (value, hdy_status_page_get_description (HDY_STATUS_PAGE (priv->empty_page)));
+      g_value_set_string (value, adw_status_page_get_description (ADW_STATUS_PAGE (priv->empty_page)));
       break;
     case PROP_SEARCH_TEXT:
       g_value_set_string (value, ephy_data_view_get_search_text (self));
@@ -325,7 +326,7 @@ ephy_data_view_class_init (EphyDataViewClass *klass)
   obj_properties[PROP_TITLE] =
     g_param_spec_string ("title",
                          "Title",
-                         "The title used for the top HdyHeaderBar",
+                         "The title used for the top header bar",
                          NULL,
                          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
@@ -442,7 +443,7 @@ ephy_data_view_class_init (EphyDataViewClass *klass)
                                                "/org/gnome/epiphany/gtk/data-view.ui");
 
   gtk_widget_class_bind_template_child_private (widget_class, EphyDataView, box);
-  gtk_widget_class_bind_template_child_private (widget_class, EphyDataView, header_bar);
+  gtk_widget_class_bind_template_child_private (widget_class, EphyDataView, window_title);
   gtk_widget_class_bind_template_child_private (widget_class, EphyDataView, back_button);
   gtk_widget_class_bind_template_child_private (widget_class, EphyDataView, clear_button);
   gtk_widget_class_bind_template_child_private (widget_class, EphyDataView, empty_page);
@@ -455,6 +456,8 @@ ephy_data_view_class_init (EphyDataViewClass *klass)
   gtk_widget_class_bind_template_callback (widget_class, on_back_button_clicked);
   gtk_widget_class_bind_template_callback (widget_class, on_clear_button_clicked);
   gtk_widget_class_bind_template_callback (widget_class, on_search_entry_changed);
+
+  gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
 }
 
 static void
@@ -464,9 +467,10 @@ ephy_data_view_init (EphyDataView *self)
 
   gtk_widget_init_template (GTK_WIDGET (self));
 
-  hdy_search_bar_connect_entry (HDY_SEARCH_BAR (priv->search_bar), GTK_ENTRY (priv->search_entry));
+  gtk_search_bar_connect_entry (GTK_SEARCH_BAR (priv->search_bar),
+                                GTK_EDITABLE (priv->search_entry));
 
-  hdy_status_page_set_icon_name (HDY_STATUS_PAGE (priv->empty_page),
+  adw_status_page_set_icon_name (ADW_STATUS_PAGE (priv->empty_page),
                                  APPLICATION_ID "-symbolic");
 
   update (self);
diff --git a/src/preferences/ephy-data-view.h b/src/preferences/ephy-data-view.h
index 907451960..9ca22602c 100644
--- a/src/preferences/ephy-data-view.h
+++ b/src/preferences/ephy-data-view.h
@@ -20,17 +20,17 @@
 
 #pragma once
 
-#include <handy.h>
+#include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
 #define EPHY_TYPE_DATA_VIEW (ephy_data_view_get_type ())
 
-G_DECLARE_DERIVABLE_TYPE (EphyDataView, ephy_data_view, EPHY, DATA_VIEW, GtkBin)
+G_DECLARE_DERIVABLE_TYPE (EphyDataView, ephy_data_view, EPHY, DATA_VIEW, GtkWidget)
 
 struct _EphyDataViewClass
 {
-  GtkBinClass parent_class;
+  GtkWidgetClass parent_class;
 };
 
 const gchar *ephy_data_view_get_clear_button_label (EphyDataView *self);
diff --git a/src/preferences/ephy-lang-row.c b/src/preferences/ephy-lang-row.c
index d2899b3fc..1ea7558b8 100644
--- a/src/preferences/ephy-lang-row.c
+++ b/src/preferences/ephy-lang-row.c
@@ -31,7 +31,7 @@ struct _EphyLangRow {
 
   GtkWidget *dnd_top_revealer;
   GtkWidget *action_row;
-  GtkWidget *drag_event_box;
+  GtkWidget *drag_handle;
   GtkWidget *delete_button;
   GtkWidget *dnd_bottom_revealer;
   char *code;
@@ -78,7 +78,7 @@ ephy_lang_row_class_init (EphyLangRowClass *klass)
 
   gtk_widget_class_bind_template_child (widget_class, EphyLangRow, dnd_top_revealer);
   gtk_widget_class_bind_template_child (widget_class, EphyLangRow, action_row);
-  gtk_widget_class_bind_template_child (widget_class, EphyLangRow, drag_event_box);
+  gtk_widget_class_bind_template_child (widget_class, EphyLangRow, drag_handle);
   gtk_widget_class_bind_template_child (widget_class, EphyLangRow, delete_button);
   gtk_widget_class_bind_template_child (widget_class, EphyLangRow, dnd_bottom_revealer);
 
@@ -101,7 +101,7 @@ void
 ephy_lang_row_set_title (EphyLangRow *self,
                          const char  *title)
 {
-  hdy_preferences_row_set_title (HDY_PREFERENCES_ROW (self->action_row), title);
+  adw_preferences_row_set_title (ADW_PREFERENCES_ROW (self->action_row), title);
 }
 
 void
@@ -121,9 +121,9 @@ ephy_lang_row_get_code (EphyLangRow *self)
 }
 
 GtkWidget *
-ephy_lang_row_get_drag_event_box (EphyLangRow *self)
+ephy_lang_row_get_drag_handle (EphyLangRow *self)
 {
-  return self->drag_event_box;
+  return self->drag_handle;
 }
 
 void
diff --git a/src/preferences/ephy-lang-row.h b/src/preferences/ephy-lang-row.h
index 612bc4f32..42a859112 100644
--- a/src/preferences/ephy-lang-row.h
+++ b/src/preferences/ephy-lang-row.h
@@ -20,7 +20,7 @@
 
 #pragma once
 
-#include <handy.h>
+#include <adwaita.h>
 
 G_BEGIN_DECLS
 
@@ -37,7 +37,7 @@ const char     *ephy_lang_row_get_code                (EphyLangRow *self);
 void            ephy_lang_row_set_code                (EphyLangRow *self,
                                                        const char  *code);
 
-GtkWidget      *ephy_lang_row_get_drag_event_box      (EphyLangRow *self);
+GtkWidget      *ephy_lang_row_get_drag_handle         (EphyLangRow *self);
 
 void            ephy_lang_row_set_delete_sensitive    (EphyLangRow *self,
                                                        gboolean     sensitive);
diff --git a/src/preferences/ephy-prefs-dialog.c b/src/preferences/ephy-prefs-dialog.c
index 6089b0860..feb77d747 100644
--- a/src/preferences/ephy-prefs-dialog.c
+++ b/src/preferences/ephy-prefs-dialog.c
@@ -22,25 +22,26 @@
 
 #include "config.h"
 
-#include "clear-data-view.h"
-#include "ephy-data-view.h"
+//#include "clear-data-view.h"
+//#include "ephy-data-view.h"
 #include "ephy-embed-utils.h"
 #include "ephy-gui.h"
 #include "ephy-prefs-dialog.h"
 #include "ephy-settings.h"
-#include "passwords-view.h"
-#include "prefs-general-page.h"
+//#include "passwords-view.h"
+//#include "prefs-general-page.h"
 
 struct _EphyPrefsDialog {
-  HdyPreferencesWindow parent_instance;
+  AdwPreferencesWindow parent_instance;
 
-  PrefsGeneralPage *general_page;
+//  PrefsGeneralPage *general_page;
 
   GtkWidget *active_data_view;
 };
 
-G_DEFINE_TYPE (EphyPrefsDialog, ephy_prefs_dialog, HDY_TYPE_PREFERENCES_WINDOW)
+G_DEFINE_TYPE (EphyPrefsDialog, ephy_prefs_dialog, ADW_TYPE_PREFERENCES_WINDOW)
 
+#if 0
 static gboolean
 on_key_press_event (EphyPrefsDialog *prefs_dialog,
                     GdkEvent        *event,
@@ -63,12 +64,13 @@ on_delete_event (EphyPrefsDialog *prefs_dialog)
   gtk_widget_destroy (GTK_WIDGET (prefs_dialog));
   g_settings_apply (EPHY_SETTINGS_MAIN);
 }
+#endif
 
 static void
 on_any_data_view_back_button_clicked (GtkWidget       *data_view,
                                       EphyPrefsDialog *prefs_dialog)
 {
-  hdy_preferences_window_close_subpage (HDY_PREFERENCES_WINDOW (prefs_dialog));
+  adw_preferences_window_close_subpage (ADW_PREFERENCES_WINDOW (prefs_dialog));
 
   prefs_dialog->active_data_view = NULL;
 }
@@ -81,7 +83,7 @@ present_data_view (EphyPrefsDialog *prefs_dialog,
                            G_CALLBACK (on_any_data_view_back_button_clicked),
                            prefs_dialog, 0);
 
-  hdy_preferences_window_present_subpage (HDY_PREFERENCES_WINDOW (prefs_dialog),
+  adw_preferences_window_present_subpage (ADW_PREFERENCES_WINDOW (prefs_dialog),
                                           presented_view);
 
   prefs_dialog->active_data_view = presented_view;
@@ -91,22 +93,18 @@ static void
 on_passwords_row_activated (GtkWidget       *privacy_page,
                             EphyPrefsDialog *prefs_dialog)
 {
-  GtkWidget *view = g_object_new (EPHY_TYPE_PASSWORDS_VIEW,
-                                  "visible", TRUE,
-                                  NULL);
+//  GtkWidget *view = g_object_new (EPHY_TYPE_PASSWORDS_VIEW, NULL);
 
-  present_data_view (prefs_dialog, view);
+//  present_data_view (prefs_dialog, view);
 }
 
 static void
 on_clear_data_row_activated (GtkWidget       *privacy_page,
                              EphyPrefsDialog *prefs_dialog)
 {
-  GtkWidget *view = g_object_new (EPHY_TYPE_CLEAR_DATA_VIEW,
-                                  "visible", TRUE,
-                                  NULL);
+//  GtkWidget *view = g_object_new (EPHY_TYPE_CLEAR_DATA_VIEW, NULL);
 
-  present_data_view (prefs_dialog, view);
+//  present_data_view (prefs_dialog, view);
 }
 
 static void
@@ -117,11 +115,11 @@ ephy_prefs_dialog_class_init (EphyPrefsDialogClass *klass)
   gtk_widget_class_set_template_from_resource (widget_class,
                                                "/org/gnome/epiphany/gtk/prefs-dialog.ui");
 
-  gtk_widget_class_bind_template_child (widget_class, EphyPrefsDialog, general_page);
+//  gtk_widget_class_bind_template_child (widget_class, EphyPrefsDialog, general_page);
 
   /* Template file callbacks */
-  gtk_widget_class_bind_template_callback (widget_class, on_key_press_event);
-  gtk_widget_class_bind_template_callback (widget_class, on_delete_event);
+//  gtk_widget_class_bind_template_callback (widget_class, on_key_press_event);
+//  gtk_widget_class_bind_template_callback (widget_class, on_delete_event);
   gtk_widget_class_bind_template_callback (widget_class, on_passwords_row_activated);
   gtk_widget_class_bind_template_callback (widget_class, on_clear_data_row_activated);
 }
diff --git a/src/preferences/ephy-prefs-dialog.h b/src/preferences/ephy-prefs-dialog.h
index d5252ef83..bff692bd0 100644
--- a/src/preferences/ephy-prefs-dialog.h
+++ b/src/preferences/ephy-prefs-dialog.h
@@ -21,12 +21,12 @@
 
 #pragma once
 
-#include <handy.h>
+#include <adwaita.h>
 
 G_BEGIN_DECLS
 
 #define EPHY_TYPE_PREFS_DIALOG (ephy_prefs_dialog_get_type ())
 
-G_DECLARE_FINAL_TYPE (EphyPrefsDialog, ephy_prefs_dialog, EPHY, PREFS_DIALOG, HdyPreferencesWindow)
+G_DECLARE_FINAL_TYPE (EphyPrefsDialog, ephy_prefs_dialog, EPHY, PREFS_DIALOG, AdwPreferencesWindow)
 
 G_END_DECLS
diff --git a/src/preferences/ephy-search-engine-row.c b/src/preferences/ephy-search-engine-row.c
index 30b0377fa..6cf5a8306 100644
--- a/src/preferences/ephy-search-engine-row.c
+++ b/src/preferences/ephy-search-engine-row.c
@@ -30,7 +30,7 @@
 #include "ephy-embed-shell.h"
 
 struct _EphySearchEngineRow {
-  HdyExpanderRow parent_instance;
+  AdwExpanderRow parent_instance;
 
   /* Widgets */
   GtkWidget *name_entry;
@@ -49,7 +49,7 @@ struct _EphySearchEngineRow {
   EphySearchEngineManager *manager;
 };
 
-G_DEFINE_TYPE (EphySearchEngineRow, ephy_search_engine_row, HDY_TYPE_EXPANDER_ROW)
+G_DEFINE_TYPE (EphySearchEngineRow, ephy_search_engine_row, ADW_TYPE_EXPANDER_ROW)
 
 enum {
   PROP_0,
@@ -132,10 +132,10 @@ ephy_search_engine_row_set_can_remove (EphySearchEngineRow *self,
  */
 void
 ephy_search_engine_row_set_radio_button_group (EphySearchEngineRow *self,
-                                               GtkRadioButton      *radio_button_group)
+                                               GtkCheckButton      *radio_button_group)
 {
-  gtk_radio_button_set_group (GTK_RADIO_BUTTON (self->radio_button),
-                              gtk_radio_button_get_group (radio_button_group));
+  gtk_check_button_set_group (GTK_CHECK_BUTTON (self->radio_button),
+                              radio_button_group);
 }
 
 /**
@@ -158,9 +158,11 @@ static gboolean
 search_engine_already_exists (EphySearchEngineRow *searched_row,
                               const char          *engine_name)
 {
-  GList *children = gtk_container_get_children (GTK_CONTAINER (gtk_widget_get_parent (GTK_WIDGET 
(searched_row))));
+  int i;
+  GtkListBoxRow *row;
+  GtkListBox *parent = GTK_LIST_BOX (gtk_widget_get_ancestor (GTK_WIDGET (searched_row), GTK_TYPE_LIST_BOX));
 
-  for (; children->next != NULL; children = children->next) {
+  while ((row = gtk_list_box_get_row_at_index (parent, i++))) {
     EphySearchEngineRow *iterated_row;
 
     /* As it iterates on the whole list box, this function will run on the "add search engine" row, which 
isn't an EphySearchEngineRow. */
@@ -267,7 +269,7 @@ on_bang_entry_text_changed_cb (EphySearchEngineRow *row,
                                GParamSpec          *pspec,
                                GtkEntry            *bang_entry)
 {
-  const char *bang = gtk_entry_get_text (bang_entry);
+  const char *bang = gtk_editable_get_text (GTK_EDITABLE (bang_entry));
   const char *engine_from_bang = ephy_search_engine_manager_engine_from_bang (row->manager, bang);
 
   /* Checks if the bang already exists */
@@ -278,7 +280,7 @@ on_bang_entry_text_changed_cb (EphySearchEngineRow *row,
     ephy_search_engine_manager_modify_engine (row->manager,
                                               row->saved_name,
                                               ephy_search_engine_manager_get_address (row->manager, 
row->saved_name),
-                                              gtk_entry_get_text (bang_entry));
+                                              gtk_editable_get_text (GTK_EDITABLE (bang_entry)));
   }
 }
 
@@ -290,13 +292,13 @@ on_address_entry_text_changed_cb (EphySearchEngineRow *row,
   const char *validation_message = NULL;
 
   /* Address in invalid. */
-  if (!validate_search_engine_address (gtk_entry_get_text (address_entry), &validation_message)) {
+  if (!validate_search_engine_address (gtk_editable_get_text (GTK_EDITABLE (address_entry)), 
&validation_message)) {
     set_entry_as_invalid (address_entry, validation_message);
   } else { /* Address in valid. */
     set_entry_as_valid (address_entry);
     ephy_search_engine_manager_modify_engine (row->manager,
                                               row->saved_name,
-                                              gtk_entry_get_text (address_entry),
+                                              gtk_editable_get_text (GTK_EDITABLE (address_entry)),
                                               ephy_search_engine_manager_get_bang (row->manager,
                                                                                    row->saved_name));
   }
@@ -387,11 +389,11 @@ update_bang_for_name (EphySearchEngineRow *row,
   }
   lowercase_acronym = g_utf8_strdown (acronym, -1); /* Bangs are usually lowercase */
   final_bang = g_strconcat ("!", lowercase_acronym, NULL); /* "!" is the prefix for the bang */
-  gtk_entry_set_text (GTK_ENTRY (row->bang_entry), final_bang);
+  gtk_editable_set_text (GTK_EDITABLE (row->bang_entry), final_bang);
   ephy_search_engine_manager_modify_engine (row->manager,
                                             row->saved_name,
                                             ephy_search_engine_manager_get_address (row->manager, 
row->saved_name),
-                                            gtk_entry_get_text (GTK_ENTRY (row->bang_entry)));
+                                            gtk_editable_get_text (GTK_EDITABLE (row->bang_entry)));
 }
 
 static void
@@ -400,7 +402,7 @@ on_name_entry_text_changed_cb (EphySearchEngineRow *row,
                                GtkEntry            *name_entry)
 {
   EphySearchEngineListBox *search_engine_list_box = EPHY_SEARCH_ENGINE_LIST_BOX (gtk_widget_get_parent 
(GTK_WIDGET (row)));
-  const char *new_name = gtk_entry_get_text (name_entry);
+  const char *new_name = gtk_editable_get_text (GTK_EDITABLE (name_entry));
 
   /* This is an edge case when you copy the whole name then paste it again in
    * place of the whole current name. GtkEntry will record a notify signal even
@@ -413,7 +415,7 @@ on_name_entry_text_changed_cb (EphySearchEngineRow *row,
   g_free (row->previous_name);
   row->previous_name = g_strdup (new_name);
 
-  hdy_preferences_row_set_title (HDY_PREFERENCES_ROW (row), new_name);
+  adw_preferences_row_set_title (ADW_PREFERENCES_ROW (row), new_name);
 
   if (g_strcmp0 (new_name, EMPTY_NEW_SEARCH_ENGINE_NAME) == 0)
     ephy_search_engine_list_box_set_can_add_engine (search_engine_list_box, FALSE);
@@ -469,16 +471,11 @@ on_remove_button_clicked_cb (EphySearchEngineRow *row,
   ephy_search_engine_manager_delete_engine (row->manager,
                                             row->saved_name);
 
-  /* FIXME: this should be fixed in libhandy
-   * Unexpand the row before removing it so the styling isn't broken.
-   * See the checked-expander-row-previous-sibling style class in HdyExpanderRow documentation.
-   */
-  hdy_expander_row_set_expanded (HDY_EXPANDER_ROW (row), FALSE);
   if (!search_engine_already_exists (row, row->saved_name))
     ephy_search_engine_list_box_set_can_add_engine (EPHY_SEARCH_ENGINE_LIST_BOX (parent_list_box),
                                                     TRUE);
 
-  gtk_container_remove (GTK_CONTAINER (parent_list_box), GTK_WIDGET (row));
+  gtk_list_box_remove (parent_list_box, GTK_WIDGET (row));
 
   top_row = EPHY_SEARCH_ENGINE_ROW (gtk_list_box_get_row_at_index (parent_list_box, 0));
   /* Set an other row (the first one) as default search engine to replace this one (if it was the default 
one). */
@@ -533,13 +530,13 @@ on_ephy_search_engine_row_constructed (GObject *object)
   g_assert (self->saved_name != NULL);
   g_assert (g_strcmp0 (self->previous_name, self->saved_name) == 0);
 
-  gtk_entry_set_text (GTK_ENTRY (self->name_entry), self->saved_name);
-  hdy_preferences_row_set_title (HDY_PREFERENCES_ROW (self), self->saved_name);
+  gtk_editable_set_text (GTK_EDITABLE (self->name_entry), self->saved_name);
+  adw_preferences_row_set_title (ADW_PREFERENCES_ROW (self), self->saved_name);
 
-  gtk_entry_set_text (GTK_ENTRY (self->address_entry),
-                      ephy_search_engine_manager_get_address (self->manager, self->saved_name));
-  gtk_entry_set_text (GTK_ENTRY (self->bang_entry),
-                      ephy_search_engine_manager_get_bang (self->manager, self->saved_name));
+  gtk_editable_set_text (GTK_EDITABLE (self->address_entry),
+                         ephy_search_engine_manager_get_address (self->manager, self->saved_name));
+  gtk_editable_set_text (GTK_EDITABLE (self->bang_entry),
+                         ephy_search_engine_manager_get_bang (self->manager, self->saved_name));
 
   /* Tick the radio button if it's the default search engine. */
   if (g_strcmp0 (self->saved_name, default_search_engine_name) == 0)
diff --git a/src/preferences/ephy-search-engine-row.h b/src/preferences/ephy-search-engine-row.h
index 4e5da5555..02f0bfd61 100644
--- a/src/preferences/ephy-search-engine-row.h
+++ b/src/preferences/ephy-search-engine-row.h
@@ -21,20 +21,20 @@
 
 #pragma once
 
-#include <handy.h>
+#include <adwaita.h>
 
 G_BEGIN_DECLS
 
 #define EPHY_TYPE_SEARCH_ENGINE_ROW (ephy_search_engine_row_get_type())
 
-G_DECLARE_FINAL_TYPE (EphySearchEngineRow, ephy_search_engine_row, EPHY, SEARCH_ENGINE_ROW, HdyExpanderRow)
+G_DECLARE_FINAL_TYPE (EphySearchEngineRow, ephy_search_engine_row, EPHY, SEARCH_ENGINE_ROW, AdwExpanderRow)
 
 EphySearchEngineRow *ephy_search_engine_row_new                    (const char *search_engine_name);
 GtkListBoxSortFunc   ephy_search_engine_row_get_sort_func          (void);
 void                 ephy_search_engine_row_set_can_remove         (EphySearchEngineRow *self,
                                                                     gboolean can_remove);
 void                 ephy_search_engine_row_set_radio_button_group (EphySearchEngineRow *self,
-                                                                    GtkRadioButton      *radio_button_group);
+                                                                    GtkCheckButton      *radio_button_group);
 void                 ephy_search_engine_row_set_as_default         (EphySearchEngineRow *self);
 
 G_END_DECLS
diff --git a/src/preferences/prefs-appearance-page.c b/src/preferences/prefs-appearance-page.c
index 42193af00..7f1f6faeb 100644
--- a/src/preferences/prefs-appearance-page.c
+++ b/src/preferences/prefs-appearance-page.c
@@ -32,7 +32,7 @@
 #include <math.h>
 
 struct _PrefsAppearancePage {
-  HdyPreferencesPage parent_instance;
+  AdwPreferencesPage parent_instance;
 
   /* Fonts */
   GtkWidget *use_gnome_fonts_row;
@@ -53,58 +53,22 @@ struct _PrefsAppearancePage {
   GtkWidget *default_zoom_spin_button;
 };
 
-G_DEFINE_TYPE (PrefsAppearancePage, prefs_appearance_page, HDY_TYPE_PREFERENCES_PAGE)
+G_DEFINE_TYPE (PrefsAppearancePage, prefs_appearance_page, ADW_TYPE_PREFERENCES_PAGE)
 
 static gchar *
-reader_font_style_get_name (HdyEnumValueObject *value,
-                            gpointer            user_data)
+reader_font_style_get_name (gpointer                 user_data,
+                            EphyPrefsReaderFontStyle style)
 {
-  g_assert (HDY_IS_ENUM_VALUE_OBJECT (value));
-
-  switch (hdy_enum_value_object_get_value (value)) {
+  switch (style) {
     case EPHY_PREFS_READER_FONT_STYLE_SANS:
-      return g_strdup_printf ("<span font-family=\"%s\">%s</span>", "sans", _("Sans"));
+      return g_strdup (_("Sans"));
     case EPHY_PREFS_READER_FONT_STYLE_SERIF:
-      return g_strdup_printf ("<span font-family=\"%s\">%s</span>", "serif", _("Serif"));
+      return g_strdup (_("Serif"));
     default:
-      return NULL;
+      g_assert_not_reached ();
   }
 }
 
-static GtkWidget *
-reader_font_style_create_list_widget (gpointer item,
-                                      gpointer user_data)
-{
-  g_autofree gchar *name = reader_font_style_get_name (item, NULL);
-
-  return g_object_new (GTK_TYPE_LABEL,
-                       "ellipsize", PANGO_ELLIPSIZE_END,
-                       "label", name,
-                       "use-markup", TRUE,
-                       "max-width-chars", 20,
-                       "valign", GTK_ALIGN_CENTER,
-                       "visible", TRUE,
-                       "xalign", 0.0,
-                       NULL);
-}
-
-static GtkWidget *
-reader_font_style_create_current_widget (gpointer item,
-                                         gpointer user_data)
-{
-  g_autofree gchar *name = reader_font_style_get_name (item, NULL);
-
-  return g_object_new (GTK_TYPE_LABEL,
-                       "ellipsize", PANGO_ELLIPSIZE_END,
-                       "halign", GTK_ALIGN_END,
-                       "label", name,
-                       "use-markup", TRUE,
-                       "valign", GTK_ALIGN_CENTER,
-                       "visible", TRUE,
-                       "xalign", 0.0,
-                       NULL);
-}
-
 static gboolean
 reader_font_style_get_mapping (GValue   *value,
                                GVariant *variant,
@@ -113,9 +77,9 @@ reader_font_style_get_mapping (GValue   *value,
   const char *reader_colors = g_variant_get_string (variant, NULL);
 
   if (g_strcmp0 (reader_colors, "sans") == 0)
-    g_value_set_int (value, EPHY_PREFS_READER_FONT_STYLE_SANS);
+    g_value_set_uint (value, EPHY_PREFS_READER_FONT_STYLE_SANS);
   else if (g_strcmp0 (reader_colors, "serif") == 0)
-    g_value_set_int (value, EPHY_PREFS_READER_FONT_STYLE_SERIF);
+    g_value_set_uint (value, EPHY_PREFS_READER_FONT_STYLE_SERIF);
 
   return TRUE;
 }
@@ -125,7 +89,7 @@ reader_font_style_set_mapping (const GValue       *value,
                                const GVariantType *expected_type,
                                gpointer            user_data)
 {
-  switch (g_value_get_int (value)) {
+  switch (g_value_get_uint (value)) {
     case EPHY_PREFS_READER_FONT_STYLE_SANS:
       return g_variant_new_string ("sans");
     case EPHY_PREFS_READER_FONT_STYLE_SERIF:
@@ -136,18 +100,16 @@ reader_font_style_set_mapping (const GValue       *value,
 }
 
 static gchar *
-reader_color_scheme_get_name (HdyEnumValueObject *value,
-                              gpointer            user_data)
+reader_color_scheme_get_name (gpointer                   user_data,
+                              EphyPrefsReaderColorScheme scheme)
 {
-  g_assert (HDY_IS_ENUM_VALUE_OBJECT (value));
-
-  switch (hdy_enum_value_object_get_value (value)) {
+  switch (scheme) {
     case EPHY_PREFS_READER_COLORS_LIGHT:
       return g_strdup (_("Light"));
     case EPHY_PREFS_READER_COLORS_DARK:
       return g_strdup (_("Dark"));
     default:
-      return NULL;
+      g_assert_not_reached ();
   }
 }
 
@@ -159,9 +121,9 @@ reader_color_scheme_get_mapping (GValue   *value,
   const char *reader_colors = g_variant_get_string (variant, NULL);
 
   if (g_strcmp0 (reader_colors, "light") == 0)
-    g_value_set_int (value, EPHY_PREFS_READER_COLORS_LIGHT);
+    g_value_set_uint (value, EPHY_PREFS_READER_COLORS_LIGHT);
   else if (g_strcmp0 (reader_colors, "dark") == 0)
-    g_value_set_int (value, EPHY_PREFS_READER_COLORS_DARK);
+    g_value_set_uint (value, EPHY_PREFS_READER_COLORS_DARK);
 
   return TRUE;
 }
@@ -171,7 +133,7 @@ reader_color_scheme_set_mapping (const GValue       *value,
                                  const GVariantType *expected_type,
                                  gpointer            user_data)
 {
-  switch (g_value_get_int (value)) {
+  switch (g_value_get_uint (value)) {
     case EPHY_PREFS_READER_COLORS_LIGHT:
       return g_variant_new_string ("light");
     case EPHY_PREFS_READER_COLORS_DARK:
@@ -198,7 +160,7 @@ css_file_created_cb (GObject      *source,
       g_autofree char *uri = g_file_get_uri (file);
       ephy_open_uri_via_flatpak_portal (uri);
     } else {
-      ephy_file_launch_handler (file, gtk_get_current_event_time ());
+      ephy_file_launch_handler (file, GDK_CURRENT_TIME);
     }
   }
 }
@@ -233,7 +195,7 @@ js_file_created_cb (GObject      *source,
       g_autofree char *uri = g_file_get_uri (file);
       ephy_open_uri_via_flatpak_portal (uri);
     } else {
-      ephy_file_launch_handler (file, gtk_get_current_event_time ());
+      ephy_file_launch_handler (file, GDK_CURRENT_TIME);
     }
   }
 }
@@ -262,7 +224,7 @@ on_default_zoom_spin_button_output (GtkSpinButton *spin,
   adjustment = gtk_spin_button_get_adjustment (spin);
   value = (int)gtk_adjustment_get_value (adjustment);
   text = g_strdup_printf ("%.f%%", value);
-  gtk_entry_set_text (GTK_ENTRY (spin), text);
+  gtk_editable_set_text (GTK_EDITABLE (spin), text);
 
   return TRUE;
 }
@@ -280,26 +242,6 @@ on_default_zoom_spin_button_value_changed (GtkSpinButton *spin,
   g_settings_set_double (EPHY_SETTINGS_WEB, EPHY_PREFS_WEB_DEFAULT_ZOOM_LEVEL, value);
 }
 
-static void
-setup_font_row (PrefsAppearancePage *appearance_page)
-{
-  g_autoptr (GListStore) store = g_list_store_new (HDY_TYPE_ENUM_VALUE_OBJECT);
-  g_autoptr (GEnumClass) enum_class = g_type_class_ref (EPHY_TYPE_PREFS_READER_FONT_STYLE);
-
-  for (guint i = 0; i < enum_class->n_values; i++) {
-    g_autoptr (HdyEnumValueObject) obj = hdy_enum_value_object_new (&enum_class->values[i]);
-
-    g_list_store_append (store, obj);
-  }
-
-  hdy_combo_row_bind_model (HDY_COMBO_ROW (appearance_page->reader_mode_font_style),
-                            G_LIST_MODEL (store),
-                            (GtkListBoxCreateWidgetFunc)reader_font_style_create_list_widget,
-                            (GtkListBoxCreateWidgetFunc)reader_font_style_create_current_widget,
-                            NULL,
-                            NULL);
-}
-
 static void
 setup_appearance_page (PrefsAppearancePage *appearance_page)
 {
@@ -318,48 +260,41 @@ setup_appearance_page (PrefsAppearancePage *appearance_page)
   g_settings_bind (web_settings,
                    EPHY_PREFS_WEB_SANS_SERIF_FONT,
                    appearance_page->sans_fontbutton,
-                   "font-name",
+                   "font",
                    G_SETTINGS_BIND_DEFAULT);
 
   g_settings_bind (web_settings,
                    EPHY_PREFS_WEB_SERIF_FONT,
                    appearance_page->serif_fontbutton,
-                   "font-name",
+                   "font",
                    G_SETTINGS_BIND_DEFAULT);
 
   g_settings_bind (web_settings,
                    EPHY_PREFS_WEB_MONOSPACE_FONT,
                    appearance_page->mono_fontbutton,
-                   "font-name",
+                   "font",
                    G_SETTINGS_BIND_DEFAULT);
 
   /* ======================================================================== */
   /* ========================== Reader Mode ================================= */
   /* ======================================================================== */
-
-  setup_font_row (appearance_page);
-
   g_settings_bind_with_mapping (reader_settings,
                                 EPHY_PREFS_READER_FONT_STYLE,
                                 appearance_page->reader_mode_font_style,
-                                "selected-index",
+                                "selected",
                                 G_SETTINGS_BIND_DEFAULT,
                                 reader_font_style_get_mapping,
                                 reader_font_style_set_mapping,
                                 NULL, NULL);
 
-  g_object_bind_property (hdy_style_manager_get_default (), "system-supports-color-schemes",
+  g_object_bind_property (adw_style_manager_get_default (), "system-supports-color-schemes",
                           appearance_page->reader_mode_color_scheme, "visible",
                           G_BINDING_SYNC_CREATE | G_BINDING_INVERT_BOOLEAN);
 
-  hdy_combo_row_set_for_enum (HDY_COMBO_ROW (appearance_page->reader_mode_color_scheme),
-                              EPHY_TYPE_PREFS_READER_COLOR_SCHEME,
-                              reader_color_scheme_get_name, NULL, NULL);
-
   g_settings_bind_with_mapping (reader_settings,
                                 EPHY_PREFS_READER_COLOR_SCHEME,
                                 appearance_page->reader_mode_color_scheme,
-                                "selected-index",
+                                "selected",
                                 G_SETTINGS_BIND_DEFAULT,
                                 reader_color_scheme_get_mapping,
                                 reader_color_scheme_set_mapping,
@@ -433,6 +368,8 @@ prefs_appearance_page_class_init (PrefsAppearancePageClass *klass)
   gtk_widget_class_bind_template_child (widget_class, PrefsAppearancePage, default_zoom_spin_button);
 
   /* Signals */
+  gtk_widget_class_bind_template_callback (widget_class, reader_font_style_get_name);
+  gtk_widget_class_bind_template_callback (widget_class, reader_color_scheme_get_name);
   gtk_widget_class_bind_template_callback (widget_class, on_default_zoom_spin_button_output);
   gtk_widget_class_bind_template_callback (widget_class, on_default_zoom_spin_button_value_changed);
 }
diff --git a/src/preferences/prefs-appearance-page.h b/src/preferences/prefs-appearance-page.h
index 6489ba8cf..052e403d8 100644
--- a/src/preferences/prefs-appearance-page.h
+++ b/src/preferences/prefs-appearance-page.h
@@ -21,12 +21,12 @@
 #pragma once
 
 #include <glib-object.h>
-#include <handy.h>
+#include <adwaita.h>
 
 G_BEGIN_DECLS
 
 #define EPHY_TYPE_PREFS_APPEARANCE_PAGE (prefs_appearance_page_get_type ())
 
-G_DECLARE_FINAL_TYPE (PrefsAppearancePage, prefs_appearance_page, EPHY, PREFS_APPEARANCE_PAGE, 
HdyPreferencesPage)
+G_DECLARE_FINAL_TYPE (PrefsAppearancePage, prefs_appearance_page, EPHY, PREFS_APPEARANCE_PAGE, 
AdwPreferencesPage)
 
 G_END_DECLS
diff --git a/src/preferences/prefs-general-page.c b/src/preferences/prefs-general-page.c
index 4bae44c72..55131dc7f 100644
--- a/src/preferences/prefs-general-page.c
+++ b/src/preferences/prefs-general-page.c
@@ -442,7 +442,7 @@ language_editor_add (PrefsGeneralPage *general_page,
   ephy_lang_row_set_title (EPHY_LANG_ROW (row), desc);
   gtk_style_context_add_class (gtk_widget_get_style_context (row), "row");
 
-  event_box = ephy_lang_row_get_drag_event_box (EPHY_LANG_ROW (row));
+  event_box = ephy_lang_row_get_drag_handle (EPHY_LANG_ROW (row));
   gtk_drag_source_set (event_box, GDK_BUTTON1_MASK, entries, 1, GDK_ACTION_MOVE);
   g_signal_connect (event_box, "drag-begin", G_CALLBACK (drag_begin), general_page);
   g_signal_connect (event_box, "drag-end", G_CALLBACK (drag_end), general_page);
diff --git a/src/preferences/prefs-privacy-page.c b/src/preferences/prefs-privacy-page.c
index d8caea0e9..1c85c5d8e 100644
--- a/src/preferences/prefs-privacy-page.c
+++ b/src/preferences/prefs-privacy-page.c
@@ -34,7 +34,7 @@ enum {
 };
 
 struct _PrefsPrivacyPage {
-  HdyPreferencesPage parent_instance;
+  AdwPreferencesPage parent_instance;
 
   /* Web Safety */
   GtkWidget *safe_browsing_group;
@@ -53,7 +53,7 @@ struct _PrefsPrivacyPage {
 
 static guint signals[LAST_SIGNAL];
 
-G_DEFINE_TYPE (PrefsPrivacyPage, prefs_privacy_page, HDY_TYPE_PREFERENCES_PAGE)
+G_DEFINE_TYPE (PrefsPrivacyPage, prefs_privacy_page, ADW_TYPE_PREFERENCES_PAGE)
 
 static void
 on_passwords_row_activated (GtkWidget        *row,
diff --git a/src/preferences/prefs-privacy-page.h b/src/preferences/prefs-privacy-page.h
index 2a07a2234..7a0c71057 100644
--- a/src/preferences/prefs-privacy-page.h
+++ b/src/preferences/prefs-privacy-page.h
@@ -20,13 +20,12 @@
 
 #pragma once
 
-#include <glib-object.h>
-#include <handy.h>
+#include <adwaita.h>
 
 G_BEGIN_DECLS
 
 #define EPHY_TYPE_PREFS_PRIVACY_PAGE (prefs_privacy_page_get_type ())
 
-G_DECLARE_FINAL_TYPE (PrefsPrivacyPage, prefs_privacy_page, EPHY, PREFS_PRIVACY_PAGE, HdyPreferencesPage)
+G_DECLARE_FINAL_TYPE (PrefsPrivacyPage, prefs_privacy_page, EPHY, PREFS_PRIVACY_PAGE, AdwPreferencesPage)
 
 G_END_DECLS
diff --git a/src/resources/gtk/action-bar-end.ui b/src/resources/gtk/action-bar-end.ui
index 2c74b14bd..811e5235e 100644
--- a/src/resources/gtk/action-bar-end.ui
+++ b/src/resources/gtk/action-bar-end.ui
@@ -4,27 +4,26 @@
     <property name="spacing">6</property>
     <child>
       <object class="GtkBox" id="browser_action_box">
-        <property name="visible">True</property>
         <property name="spacing">6</property>
       </object>
     </child>
     <child>
       <object class="GtkRevealer" id="downloads_revealer">
-        <property name="visible">True</property>
         <property name="transition-type">crossfade</property>
         <child>
           <object class="GtkMenuButton" id="downloads_button">
             <!-- Translators: tooltip for the downloads button -->
             <property name="tooltip_text" translatable="yes">View downloads</property>
-            <property name="visible">True</property>
             <property name="receives_default">True</property>
+            <style>
+              <class name="image-button"/>
+            </style>
             <child>
               <object class="GtkOverlay">
-                <property name="visible">True</property>
                 <property name="valign">center</property>
+                <property name="can-target">False</property>
                 <child>
                   <object class="GtkImage" id="downloads_icon">
-                    <property name="visible">True</property>
                     <property name="icon_name">ephy-download-symbolic</property>
                     <style>
                       <class name="download_icon"/>
@@ -33,15 +32,11 @@
                 </child>
                 <child type="overlay">
                   <object class="GtkProgressBar" id="downloads_progress">
-                    <property name="visible">True</property>
                     <property name="valign">end</property>
                     <style>
                       <class name="download_progress"/>
                     </style>
                   </object>
-                  <packing>
-                    <property name="pass-through">True</property>
-                  </packing>
                 </child>
               </object>
             </child>
@@ -51,41 +46,20 @@
     </child>
     <child>
       <object class="GtkButton" id="bookmark_button">
-        <property name="visible">True</property>
         <!-- Translators: tooltip for the bookmark button -->
         <property name="tooltip_text" translatable="yes">Bookmark page</property>
-        <child>
-          <object class="GtkImage" id="bookmark_image">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="icon_name">non-starred-symbolic</property>
-          </object>
-        </child>
-        <style>
-          <class name="image-button"/>
-        </style>
+        <property name="icon_name">non-starred-symbolic</property>
       </object>
     </child>
     <child>
       <object class="GtkMenuButton" id="bookmarks_button">
-        <property name="visible">True</property>
         <!-- Translators: tooltip for the bookmarks popover button -->
         <property name="tooltip_text" translatable="yes">View and manage your bookmarks</property>
-        <property name="popover">bookmarks_popover</property>
-        <style>
-          <class name="image-button"/>
-        </style>
-        <child>
-          <object class="GtkImage" id="bookmarks_image">
-            <property name="visible">True</property>
-            <property name="icon-name">ephy-library-symbolic</property>
-            <property name="icon-size">1</property>
-          </object>
-        </child>
+        <property name="icon-name">ephy-library-symbolic</property>
+<!--        <property name="popover">
+          <object class="EphyBookmarksPopover" id="bookmarks_popover"/>
+        </property>-->
       </object>
     </child>
   </template>
-  <object class="EphyBookmarksPopover" id="bookmarks_popover">
-    <property name="visible">True</property>
-  </object>
 </interface>
diff --git a/src/resources/gtk/action-bar-start.ui b/src/resources/gtk/action-bar-start.ui
index 3c8b22a10..0163b8127 100644
--- a/src/resources/gtk/action-bar-start.ui
+++ b/src/resources/gtk/action-bar-start.ui
@@ -4,106 +4,53 @@
     <property name="spacing">6</property>
     <child>
       <object class="GtkBox" id="navigation_box">
-        <property name="visible">True</property>
         <property name="orientation">horizontal</property>
+        <property name="spacing">6</property>
         <style>
-          <class name="linked"/>
           <class name="navigation-box"/>
         </style>
         <child>
           <object class="GtkButton" id="navigation_back">
-            <property name="visible">True</property>
             <property name="action-name">toolbar.navigation-back</property>
+            <property name="icon-name">go-previous-symbolic</property>
             <!-- Translators: tooltip for the back button -->
             <property name="tooltip_text" translatable="yes">Go back to the previous page</property>
-            <style>
-              <class name="image-button"/>
-            </style>
-            <child>
-              <object class="GtkImage" id="back_image">
-                <property name="visible">True</property>
-                <property name="icon-name">go-previous-symbolic</property>
-                <property name="icon-size">1</property>
-              </object>
-            </child>
           </object>
         </child>
         <child>
           <object class="GtkButton" id="navigation_forward">
-            <property name="visible">True</property>
             <property name="action-name">toolbar.navigation-forward</property>
+            <property name="icon-name">go-next-symbolic</property>
             <!-- Translators: tooltip for the forward button -->
             <property name="tooltip_text" translatable="yes">Go forward to the next page</property>
-            <style>
-              <class name="image-button"/>
-            </style>
-            <child>
-              <object class="GtkImage" id="forward_image">
-                <property name="visible">True</property>
-                <property name="icon-name">go-next-symbolic</property>
-                <property name="icon-size">1</property>
-              </object>
-            </child>
           </object>
         </child>
       </object>
     </child>
     <child>
       <object class="GtkButton" id="combined_stop_reload_button">
-        <property name="visible">True</property>
         <property name="action-name">toolbar.combined-stop-reload</property>
-        <style>
-          <class name="image-button"/>
-        </style>
-        <child>
-          <object class="GtkImage" id="combined_stop_reload_image">
-            <property name="visible">True</property>
-            <property name="icon-name">view-refresh-symbolic</property>
-            <property name="icon-size">1</property>
-          </object>
-        </child>
+        <property name="icon-name">view-refresh-symbolic</property>
       </object>
     </child>
     <child>
       <object class="GtkButton" id="homepage_button">
-        <property name="visible">True</property>
         <property name="action-name">win.home</property>
+        <property name="icon-name">go-home-symbolic</property>
         <!-- Translators: tooltip for the secret homepage button -->
         <property name="tooltip_text" translatable="yes">Go to your homepage</property>
-        <style>
-          <class name="image-button"/>
-        </style>
-        <child>
-          <object class="GtkImage" id="homepage_image">
-            <property name="visible">True</property>
-            <property name="icon-name">go-home-symbolic</property>
-            <property name="icon-size">1</property>
-          </object>
-        </child>
       </object>
     </child>
     <child>
       <object class="GtkButton" id="new_tab_button">
-        <property name="visible">True</property>
         <property name="action-name">win.new-tab</property>
+        <property name="icon-name">tab-new-symbolic</property>
         <!-- Translators: tooltip for the new tab button -->
         <property name="tooltip_text" translatable="yes">Open a new tab</property>
-        <style>
-          <class name="image-button"/>
-        </style>
-        <child>
-          <object class="GtkImage" id="new_tab_image">
-            <property name="visible">True</property>
-            <property name="icon-name">tab-new-symbolic</property>
-            <property name="icon-size">1</property>
-          </object>
-        </child>
       </object>
     </child>
     <child>
-      <object class="GtkBox" id="placeholder">
-        <property name="visible">True</property>
-      </object>
+      <object class="GtkBox" id="placeholder"/>
     </child>
   </template>
 </interface>
diff --git a/src/resources/gtk/action-bar.ui b/src/resources/gtk/action-bar.ui
index 102cd5f71..dc1851c20 100644
--- a/src/resources/gtk/action-bar.ui
+++ b/src/resources/gtk/action-bar.ui
@@ -1,42 +1,23 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <template class="EphyActionBar" parent="GtkBin">
+  <template class="EphyActionBar" parent="AdwBin">
     <child>
       <object class="GtkRevealer" id="revealer">
-        <property name="visible">True</property>
         <property name="transition-type">slide-up</property>
         <child>
           <object class="GtkActionBar" id="action_bar">
-            <property name="visible">True</property>
-            <child>
-              <object class="EphyActionBarStart" id="action_bar_start">
-                <property name="visible">True</property>
-              </object>
-              <packing>
-                <property name="pack-type">start</property>
-              </packing>
+            <child type="start">
+              <object class="EphyActionBarStart" id="action_bar_start"/>
             </child>
-            <child>
+            <child type="end">
               <object class="EphyPagesButton" id="pages_button">
-                <property name="visible">True</property>
                 <!-- Translators: tooltip for the page switcher button -->
                 <property name="tooltip_text" translatable="yes">View open pages</property>
                 <property name="action_name">win.tabs-view</property>
-                <style>
-                  <class name="image-button"/>
-                </style>
               </object>
-              <packing>
-                <property name="pack-type">end</property>
-              </packing>
             </child>
-            <child>
-              <object class="EphyActionBarEnd" id="action_bar_end">
-                <property name="visible">True</property>
-              </object>
-              <packing>
-                <property name="pack-type">end</property>
-              </packing>
+            <child type="end">
+              <object class="EphyActionBarEnd" id="action_bar_end"/>
             </child>
           </object>
         </child>
diff --git a/src/resources/gtk/bookmark-properties.ui b/src/resources/gtk/bookmark-properties.ui
index a89a90514..5f3ddf071 100644
--- a/src/resources/gtk/bookmark-properties.ui
+++ b/src/resources/gtk/bookmark-properties.ui
@@ -3,7 +3,6 @@
 <interface>
   <requires lib="gtk+" version="3.18"/>
   <template class="EphyBookmarkProperties" parent="GtkBox">
-    <property name="visible">True</property>
     <property name="margin-top">12</property>
     <property name="margin-bottom">12</property>
     <property name="margin-start">12</property>
@@ -12,7 +11,6 @@
     <property name="spacing">6</property>
     <child>
       <object class="GtkLabel" id="popover_bookmark_label">
-        <property name="visible">True</property>
         <property name="label" translatable="yes">Bookmark</property>
         <attributes>
           <attribute name="weight" value="bold"/>
@@ -21,7 +19,6 @@
     </child>
     <child>
       <object class="GtkLabel">
-        <property name="visible">True</property>
         <property name="xalign">0</property>
         <property name="label" translatable="yes">_Name</property>
         <property name="use-underline">True</property>
@@ -33,13 +30,11 @@
     </child>
     <child>
       <object class="GtkEntry" id="name_entry">
-        <property name="visible">True</property>
         <property name="max_width_chars">32</property>
       </object>
     </child>
     <child>
       <object class="GtkLabel" id="address_label">
-        <property name="visible">True</property>
         <property name="xalign">0</property>
         <property name="margin_top">6</property>
         <property name="label" translatable="yes">_Address</property>
@@ -51,13 +46,10 @@
       </object>
     </child>
     <child>
-      <object class="GtkEntry" id="address_entry">
-        <property name="visible">True</property>
-      </object>
+      <object class="GtkEntry" id="address_entry"/>
     </child>
     <child>
       <object class="GtkLabel" id="popover_tags_label">
-        <property name="visible">True</property>
         <property name="xalign">0</property>
         <property name="margin_top">12</property>
         <property name="label" translatable="yes">Tags</property>
@@ -68,7 +60,6 @@
     </child>
     <child>
       <object class="GtkScrolledWindow" id="tags_scrolled_window">
-        <property name="visible">True</property>
         <property name="vexpand">True</property>
         <property name="min_content_height">38</property>
         <property name="max_content_width">270</property>
@@ -77,7 +68,6 @@
         <property name="propagate_natural_height">True</property>
         <child>
           <object class="GtkFlowBox" id="tags_box">
-            <property name="visible">True</property>
             <property name="homogeneous">True</property>
             <property name="valign">start</property>
             <property name="column_spacing">6</property>
@@ -91,10 +81,8 @@
     </child>
     <child>
       <object class="GtkBox">
-        <property name="visible">True</property>
         <child>
           <object class="GtkEntry" id="add_tag_entry">
-            <property name="visible">True</property>
             <property name="hexpand">True</property>
             <property name="activates_default">True</property>
             <property name="placeholder_text" translatable="yes">Add Tag…</property>
@@ -102,7 +90,6 @@
         </child>
         <child>
           <object class="GtkButton" id="add_tag_button">
-            <property name="label" translatable="yes">_Add</property>
             <property name="visible">True</property>
             <property name="can_default">True</property>
             <property name="receives_default">False</property>
@@ -117,7 +104,6 @@
     </child>
     <child>
       <object class="GtkButton" id="remove_bookmark_button">
-        <property name="label" translatable="yes">_Remove</property>
         <property name="visible">True</property>
         <property name="receives_default">False</property>
         <property name="halign">end</property>
diff --git a/src/resources/gtk/bookmark-row.ui b/src/resources/gtk/bookmark-row.ui
index b3f29d8de..b26fb5286 100644
--- a/src/resources/gtk/bookmark-row.ui
+++ b/src/resources/gtk/bookmark-row.ui
@@ -3,20 +3,16 @@
 <interface>
   <requires lib="gtk+" version="3.18"/>
   <template class="EphyBookmarkRow" parent="GtkListBoxRow">
-    <property name="visible">True</property>
     <child>
       <object class="GtkBox">
-        <property name="visible">True</property>
         <property name="spacing">6</property>
         <child>
           <object class="GtkImage" id="favicon_image">
-            <property name="visible">True</property>
             <property name="margin-start">6</property>
           </object>
         </child>
         <child>
           <object class="GtkLabel" id="title_label">
-            <property name="visible">True</property>
             <property name="hexpand">True</property>
             <property name="ellipsize">end</property>
             <property name="max_width_chars">1</property>
@@ -26,13 +22,8 @@
         <child>
           <object class="GtkButton" id="properties_button">
             <property name="visible">True</property>
+            <property name="icon_name">emblem-system-symbolic</property>
             <property name="receives_default">False</property>
-            <child>
-              <object class="GtkImage">
-                <property name="visible">True</property>
-                <property name="icon_name">emblem-system-symbolic</property>
-              </object>
-            </child>
             <style>
               <class name="flat"/>
             </style>
diff --git a/src/resources/gtk/data-view.ui b/src/resources/gtk/data-view.ui
index d46584ff7..d1c7c4bc8 100644
--- a/src/resources/gtk/data-view.ui
+++ b/src/resources/gtk/data-view.ui
@@ -2,70 +2,37 @@
 <interface>
   <requires lib="gtk+" version="3.20"/>
   <requires lib="libhandy" version="0.0"/>
-  <object class="GtkImage" id="search_image">
-    <property name="visible">True</property>
-    <property name="icon_name">edit-find-symbolic</property>
-  </object>
-  <object class="GtkImage" id="back_image">
-    <property name="visible">True</property>
-    <property name="icon_name">go-previous-symbolic</property>
-  </object>
-  <template class="EphyDataView" parent="GtkBin">
+  <template class="EphyDataView" parent="GtkWidget">
     <child>
       <object class="GtkBox" id="box">
-        <property name="visible">True</property>
         <property name="orientation">vertical</property>
         <child>
-          <object class="HdyWindowHandle">
-            <property name="visible">True</property>
-            <child>
-              <object class="GtkHeaderBar" id="header_bar">
-                <property name="visible">True</property>
-                <property name="show_close_button">True</property>
-                <child>
-                  <object class="GtkButton" id="back_button">
-                    <property name="visible">True</property>
-                    <property name="image">back_image</property>
-                    <signal name="clicked" handler="on_back_button_clicked"/>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkToggleButton" id="search_button">
-                    <property name="visible">True</property>
-                    <property name="receives_default">True</property>
-                    <property name="image">search_image</property>
-                    <property name="always_show_image">True</property>
-                    <property name="active" bind-source="search_bar" bind-property="search-mode-enabled" 
bind-flags="sync-create|bidirectional"/>
-                    <style>
-                      <class name="image-button"/>
-                    </style>
-                    <child internal-child="accessible">
-                      <object class="AtkObject">
-                        <property name="AtkObject::accessible-name" translatable="yes">Search</property>
-                      </object>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="pack_type">end</property>
-                  </packing>
-                </child>
+          <object class="GtkHeaderBar" id="header_bar">
+            <property name="title=widget">
+              <object class="AdwWindowTitle" id="window_title"/>
+            </property>
+            <child type="start">
+              <object class="GtkButton" id="back_button">
+                <property name="icon-name">go-previous-symbolic</property>
+                <signal name="clicked" handler="on_back_button_clicked"/>
+              </object>
+            </child>
+            <child type="end">
+              <object class="GtkToggleButton" id="search_button">
+                <property name="icon-name">edit-find-symbolic</property>
+                <property name="active" bind-source="search_bar" bind-property="search-mode-enabled" 
bind-flags="sync-create|bidirectional"/>
+                <property name="tooltip-text" translatable="yes">Search</property>
               </object>
             </child>
           </object>
         </child>
         <child>
-          <object class="HdySearchBar" id="search_bar">
-            <property name="visible">True</property>
+          <object class="GtkSearchBar" id="search_bar">
             <property name="search_mode_enabled">False</property>
             <child>
-              <object class="HdyClamp">
-                <property name="visible">True</property>
+              <object class="AdwClamp">
                 <child>
                   <object class="GtkSearchEntry" id="search_entry">
-                    <property name="visible">True</property>
-                    <property name="primary_icon_name">edit-find-symbolic</property>
-                    <property name="primary_icon_activatable">False</property>
-                    <property name="primary_icon_sensitive">False</property>
                     <signal name="search-changed" handler="on_search_entry_changed" swapped="no"/>
                   </object>
                 </child>
@@ -76,52 +43,46 @@
         <child>
           <object class="GtkStack" id="stack">
             <property name="vexpand">True</property>
-            <property name="visible">True</property>
             <child>
-              <object class="GtkSpinner" id="spinner">
-                <property name="visible">True</property>
-              </object>
-              <packing>
+              <object class="GtkStackPage">
                 <property name="name">loading</property>
-              </packing>
+                <property name="child">
+                  <object class="GtkSpinner" id="spinner"/>
+                </property>
+              </object>
             </child>
             <child>
-              <object class="HdyStatusPage" id="empty_page">
-                <property name="visible">True</property>
-              </object>
-              <packing>
+              <object class="GtkStackPage">
                 <property name="name">empty</property>
-              </packing>
+                <property name="child">
+                  <object class="AdwStatusPage" id="empty_page"/>
+                </property>
+              </object>
             </child>
             <child>
-              <object class="HdyStatusPage">
-                <property name="visible">True</property>
-                <property name="icon_name">edit-find-symbolic</property>
-                <property name="title" translatable="yes">No Results Found</property>
-                <property name="description" translatable="yes">Try a different search</property>
-              </object>
-              <packing>
+              <object class="GtkStackPage">
                 <property name="name">no-results</property>
-              </packing>
+                <property name="child">
+                  <object class="AdwStatusPage">
+                    <property name="icon_name">edit-find-symbolic</property>
+                    <property name="title" translatable="yes">No Results Found</property>
+                    <property name="description" translatable="yes">Try a different search</property>
+                  </object>
+                </property>
+              </object>
             </child>
           </object>
         </child>
         <child>
           <object class="GtkActionBar">
-            <property name="visible">True</property>
-            <child>
+            <child type="end">
               <object class="GtkButton" id="clear_button">
-                <property name="visible">True</property>
-                <property name="receives_default">True</property>
                 <property name="use_underline">True</property>
                 <signal name="clicked" handler="on_clear_button_clicked" swapped="yes"/>
                 <style>
                   <class name="destructive-action"/>
                 </style>
               </object>
-              <packing>
-                <property name="pack-type">end</property>
-              </packing>
             </child>
           </object>
         </child>
diff --git a/src/resources/gtk/encoding-row.ui b/src/resources/gtk/encoding-row.ui
index 966a1017f..d22827a8d 100644
--- a/src/resources/gtk/encoding-row.ui
+++ b/src/resources/gtk/encoding-row.ui
@@ -2,17 +2,15 @@
 <interface>
   <!-- interface-requires gtk+ 3.0 -->
   <template class="EphyEncodingRow" parent="GtkBox">
-    <property name="visible">True</property> <!-- TODO remove when never called manually -->
     <property name="halign">center</property>
     <property name="height-request">30</property>
     <property name="spacing">8</property>
     <child>
-      <object class="GtkLabel" id="encoding_label">
-        <property name="visible">True</property>
-      </object>
+      <object class="GtkLabel" id="encoding_label"/>
     </child>
     <child>
       <object class="GtkImage" id="selected_image">
+        <property name="visible">False</property>
         <property name="icon-name">object-select-symbolic</property>
       </object>
     </child>
diff --git a/src/resources/gtk/firefox-sync-dialog.ui b/src/resources/gtk/firefox-sync-dialog.ui
index 7011a4264..8349aa499 100644
--- a/src/resources/gtk/firefox-sync-dialog.ui
+++ b/src/resources/gtk/firefox-sync-dialog.ui
@@ -1,203 +1,169 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <requires lib="gtk+" version="3.0"/>
-  <template class="EphyFirefoxSyncDialog" parent="HdyWindow">
-    <property name="visible">True</property>
+  <template class="EphyFirefoxSyncDialog" parent="GtkWindow">
     <property name="modal">False</property>
-    <property name="window-position">center-on-parent</property>
     <property name="default-width">640</property>
     <property name="default-height">800</property>
     <property name="destroy-with-parent">True</property>
-    <property name="type-hint">dialog</property>
+    <property name="title" translatable="yes">Firefox Sync</property>
+    <child type="titlebar">
+      <object class="GtkHeaderBar"/>
+    </child>
     <child>
-      <object class="GtkBox">
-        <property name="visible">True</property>
-        <property name="orientation">vertical</property>
+      <object class="AdwPreferencesPage">
         <child>
-          <object class="HdyHeaderBar">
-            <property name="visible">True</property>
-            <property name="show-close-button">True</property>
-            <property name="title" translatable="yes">Firefox Sync</property>
+          <object class="AdwPreferencesGroup" id="sync_page_group">
+            <property name="description" translatable="yes">Sign in with your Firefox account to sync your 
data with GNOME Web and Firefox on other computers. GNOME Web is not Firefox and is not produced or endorsed 
by Mozilla.</property>
+            <child>
+              <object class="GtkBox" id="sync_firefox_iframe_box">
+                <property name="orientation">vertical</property>
+                <property name="spacing">6</property>
+                <child>
+                  <object class="GtkLabel" id="sync_firefox_iframe_label">
+                    <property name="visible">False</property>
+                    <property name="xalign">0</property>
+                  </object>
+                </child>
+              </object>
+            </child>
           </object>
         </child>
         <child>
-          <object class="HdyPreferencesPage">
-            <property name="visible">True</property>
+          <object class="AdwPreferencesGroup" id="sync_firefox_account_group">
+            <property name="title" translatable="yes">Firefox Account</property>
+            <child>
+              <object class="AdwActionRow" id="sync_firefox_account_row">
+                <property name="subtitle" translatable="yes">Logged in</property>
+                <property name="use_underline">True</property>
+                <child>
+                  <object class="GtkButton" id="sync_sign_out_button">
+                    <property name="label" translatable="yes">Sign _out</property>
+                    <property name="use-underline">True</property>
+                    <property name="valign">center</property>
+                    <signal name="clicked" handler="on_sync_sign_out_button_clicked"/>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="AdwPreferencesGroup" id="sync_options_group">
+            <property name="title" translatable="yes">Sync Options</property>
+            <child>
+              <object class="AdwActionRow">
+                <property name="activatable_widget">sync_bookmarks_switch</property>
+                <property name="title" translatable="yes">Sync _Bookmarks</property>
+                <property name="use_underline">True</property>
+                <child>
+                  <object class="GtkSwitch" id="sync_bookmarks_switch">
+                    <property name="valign">center</property>
+                  </object>
+                </child>
+              </object>
+            </child>
             <child>
-              <object class="HdyPreferencesGroup" id="sync_page_group">
-                <property name="description" translatable="yes">Sign in with your Firefox account to sync 
your data with GNOME Web and Firefox on other computers. GNOME Web is not Firefox and is not produced or 
endorsed by Mozilla.</property>
-                <property name="visible">True</property>
+              <object class="AdwActionRow">
+                <property name="activatable_widget">sync_passwords_switch</property>
+                <property name="title" translatable="yes">Sync _Passwords</property>
+                <property name="use_underline">True</property>
                 <child>
-                  <object class="GtkBox" id="sync_firefox_iframe_box">
-                    <property name="visible">True</property>
-                    <property name="orientation">vertical</property>
-                    <property name="spacing">6</property>
-                    <child>
-                      <object class="GtkLabel" id="sync_firefox_iframe_label">
-                        <property name="visible">False</property>
-                        <property name="xalign">0</property>
-                      </object>
-                    </child>
+                  <object class="GtkSwitch" id="sync_passwords_switch">
+                    <property name="valign">center</property>
                   </object>
                 </child>
               </object>
             </child>
             <child>
-              <object class="HdyPreferencesGroup" id="sync_firefox_account_group">
-                <property name="title" translatable="yes">Firefox Account</property>
-                <property name="visible">True</property>
+              <object class="AdwActionRow">
+                <property name="activatable_widget">sync_history_switch</property>
+                <property name="title" translatable="yes">Sync _History</property>
+                <property name="use_underline">True</property>
                 <child>
-                  <object class="HdyActionRow" id="sync_firefox_account_row">
-                    <property name="subtitle" translatable="yes">Logged in</property>
-                    <property name="use_underline">True</property>
-                    <property name="visible">True</property>
-                    <child>
-                      <object class="GtkButton" id="sync_sign_out_button">
-                        <property name="label" translatable="yes">Sign _out</property>
-                        <property name="use-underline">True</property>
-                        <property name="valign">center</property>
-                        <property name="visible">True</property>
-                        <signal name="clicked" handler="on_sync_sign_out_button_clicked"/>
-                      </object>
-                    </child>
+                  <object class="GtkSwitch" id="sync_history_switch">
+                    <property name="valign">center</property>
                   </object>
                 </child>
               </object>
             </child>
             <child>
-              <object class="HdyPreferencesGroup" id="sync_options_group">
-                <property name="title" translatable="yes">Sync Options</property>
-                <property name="visible">True</property>
+              <object class="AdwActionRow">
+                <property name="activatable_widget">sync_open_tabs_switch</property>
+                <property name="title" translatable="yes">Sync Open _Tabs</property>
+                <property name="use_underline">True</property>
                 <child>
-                  <object class="HdyActionRow">
-                    <property name="activatable_widget">sync_bookmarks_switch</property>
-                    <property name="title" translatable="yes">Sync _Bookmarks</property>
-                    <property name="use_underline">True</property>
-                    <property name="visible">True</property>
-                    <child>
-                      <object class="GtkSwitch" id="sync_bookmarks_switch">
-                        <property name="valign">center</property>
-                        <property name="visible">True</property>
-                      </object>
-                    </child>
+                  <object class="GtkSwitch" id="sync_open_tabs_switch">
+                    <property name="valign">center</property>
                   </object>
                 </child>
                 <child>
-                  <object class="HdyActionRow">
-                    <property name="activatable_widget">sync_passwords_switch</property>
-                    <property name="title" translatable="yes">Sync _Passwords</property>
-                    <property name="use_underline">True</property>
-                    <property name="visible">True</property>
-                    <child>
-                      <object class="GtkSwitch" id="sync_passwords_switch">
-                        <property name="valign">center</property>
-                        <property name="visible">True</property>
-                      </object>
-                    </child>
+                  <object class="GtkButton" id="synced_tabs_button">
+                    <property name="label" translatable="yes">S_ynced tabs</property>
+                    <property name="use-underline">True</property>
+                    <property name="valign">center</property>
+                    <signal name="clicked" handler="on_sync_synced_tabs_button_clicked"/>
                   </object>
                 </child>
+              </object>
+            </child>
+            <child>
+              <object class="AdwComboRow" id="sync_frequency_row">
+                <property name="title" translatable="yes">Frequency</property>
+                <child>
+                  <object class="GtkSeparator">
+                    <property name="margin_bottom">8</property>
+                    <property name="margin_top">8</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkButton" id="sync_now_button">
+                    <property name="label" translatable="yes">Sync _now</property>
+                    <property name="use-underline">True</property>
+                    <property name="valign">center</property>
+                    <signal name="clicked" handler="on_sync_sync_now_button_clicked"/>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="AdwActionRow">
+                <property name="activatable">False</property>
+                <property name="title" translatable="yes">Device name</property>
+                <property name="use_underline">True</property>
                 <child>
-                  <object class="HdyActionRow">
-                    <property name="activatable_widget">sync_history_switch</property>
-                    <property name="title" translatable="yes">Sync _History</property>
-                    <property name="use_underline">True</property>
-                    <property name="visible">True</property>
-                    <child>
-                      <object class="GtkSwitch" id="sync_history_switch">
-                        <property name="valign">center</property>
-                        <property name="visible">True</property>
-                      </object>
-                    </child>
+                  <object class="GtkButton" id="sync_device_name_cancel_button">
+                    <property name="label" translatable="yes">_Cancel</property>
+                    <property name="use-underline">True</property>
+                    <property name="valign">center</property>
+                    <property name="visible">False</property>
+                    <signal name="clicked" handler="on_sync_device_name_cancel_button_clicked"/>
                   </object>
                 </child>
                 <child>
-                  <object class="HdyActionRow">
-                    <property name="activatable_widget">sync_open_tabs_switch</property>
-                    <property name="title" translatable="yes">Sync Open _Tabs</property>
-                    <property name="use_underline">True</property>
-                    <property name="visible">True</property>
-                    <child>
-                      <object class="GtkSwitch" id="sync_open_tabs_switch">
-                        <property name="valign">center</property>
-                        <property name="visible">True</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkButton" id="synced_tabs_button">
-                        <property name="label" translatable="yes">S_ynced tabs</property>
-                        <property name="use-underline">True</property>
-                        <property name="valign">center</property>
-                        <property name="visible">True</property>
-                        <signal name="clicked" handler="on_sync_synced_tabs_button_clicked"/>
-                      </object>
-                    </child>
+                  <object class="GtkButton" id="sync_device_name_save_button">
+                    <property name="label" translatable="yes">_Save</property>
+                    <property name="use-underline">True</property>
+                    <property name="valign">center</property>
+                    <property name="visible">False</property>
+                    <signal name="clicked" handler="on_sync_device_name_save_button_clicked"/>
                   </object>
                 </child>
                 <child>
-                  <object class="HdyComboRow" id="sync_frequency_row">
-                    <property name="title" translatable="yes">Frequency</property>
-                    <property name="visible">True</property>
-                    <child>
-                      <object class="GtkSeparator">
-                        <property name="margin_bottom">8</property>
-                        <property name="margin_top">8</property>
-                        <property name="visible">True</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkButton" id="sync_now_button">
-                        <property name="label" translatable="yes">Sync _now</property>
-                        <property name="use-underline">True</property>
-                        <property name="valign">center</property>
-                        <property name="visible">True</property>
-                        <signal name="clicked" handler="on_sync_sync_now_button_clicked"/>
-                      </object>
-                    </child>
+                  <object class="GtkButton" id="sync_device_name_change_button">
+                    <property name="label" translatable="yes">_Change</property>
+                    <property name="use-underline">True</property>
+                    <property name="valign">center</property>
+                    <signal name="clicked" handler="on_sync_device_name_change_button_clicked"/>
                   </object>
                 </child>
                 <child>
-                  <object class="HdyActionRow">
-                    <property name="activatable">False</property>
-                    <property name="title" translatable="yes">Device name</property>
-                    <property name="use_underline">True</property>
-                    <property name="visible">True</property>
-                    <child>
-                      <object class="GtkButton" id="sync_device_name_cancel_button">
-                        <property name="label" translatable="yes">_Cancel</property>
-                        <property name="use-underline">True</property>
-                        <property name="valign">center</property>
-                        <property name="visible">False</property>
-                        <signal name="clicked" handler="on_sync_device_name_cancel_button_clicked"/>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkButton" id="sync_device_name_save_button">
-                        <property name="label" translatable="yes">_Save</property>
-                        <property name="use-underline">True</property>
-                        <property name="valign">center</property>
-                        <property name="visible">False</property>
-                        <signal name="clicked" handler="on_sync_device_name_save_button_clicked"/>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkButton" id="sync_device_name_change_button">
-                        <property name="label" translatable="yes">_Change</property>
-                        <property name="use-underline">True</property>
-                        <property name="valign">center</property>
-                        <property name="visible">True</property>
-                        <signal name="clicked" handler="on_sync_device_name_change_button_clicked"/>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkEntry" id="sync_device_name_entry">
-                        <property name="sensitive">False</property>
-                        <property name="margin-start">12</property>
-                        <property name="margin-end">12</property>
-                        <property name="margin-top">8</property>
-                        <property name="margin-bottom">8</property>
-                        <property name="visible">True</property>
-                      </object>
-                    </child>
+                  <object class="GtkEntry" id="sync_device_name_entry">
+                    <property name="sensitive">False</property>
+                    <property name="margin-start">12</property>
+                    <property name="margin-end">12</property>
+                    <property name="margin-top">8</property>
+                    <property name="margin-bottom">8</property>
                   </object>
                 </child>
               </object>
diff --git a/src/resources/gtk/history-dialog.ui b/src/resources/gtk/history-dialog.ui
index 89830749b..718c02684 100644
--- a/src/resources/gtk/history-dialog.ui
+++ b/src/resources/gtk/history-dialog.ui
@@ -2,139 +2,73 @@
 <interface>
   <requires lib="gtk+" version="3.20"/>
   <requires lib="libhandy" version="0.0"/>
-  <template class="EphyHistoryDialog" parent="HdyWindow">
-    <!--property name="search_description" translatable="yes">Search history</property-->
+  <template class="EphyHistoryDialog" parent="AdwWindow">
     <property name="modal">True</property>
-    <property name="window-position">center-on-parent</property>
     <property name="default-width">640</property>
     <property name="default-height">800</property>
     <property name="destroy-with_parent">True</property>
-    <property name="type-hint">dialog</property>
+    <property name="title" translatable="yes">History</property>
     <signal name="key-press-event" handler="on_key_press_event" swapped="no"/>
     <signal name="key-release-event" handler="on_key_release_event"/>
     <child>
       <object class="GtkBox">
-        <property name="visible">True</property>
         <property name="orientation">vertical</property>
         <child>
           <object class="GtkStack" id="header_bars_stack">
-            <property name="visible">True</property>
-            <property name="transition-type">GTK_STACK_TRANSITION_TYPE_CROSSFADE</property>
+            <property name="transition-type">crossfade</property>
             <child>
-              <object class="HdyHeaderBar" id="window_header_bar">
-                <property name="visible">True</property>
-                <property name="show_close_button">True</property>
-                <property name="title" translatable="yes">History</property>
-                <child>
+              <object class="GtkHeaderBar" id="window_header_bar">
+                <child type="end">
                   <object class="GtkButton" id="selection_button">
-                    <property name="visible">True</property>
-                    <property name="valign">center</property>
                     <property name="use-underline">True</property>
+                    <property name="icon-name">selection-mode-symbolic</property>
+                    <property name="tooltip-text" translatable="yes">Select Items</property>
                     <signal name="clicked" handler="on_selection_button_clicked"/>
-                    <style>
-                      <class name="image-button"/>
-                    </style>
-                    <child internal-child="accessible">
-                      <object class="AtkObject" id="a11y-button3">
-                        <property name="accessible-name" translatable="yes">Select Items</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkImage">
-                        <property name="visible">True</property>
-                        <property name="icon-name">object-select-symbolic</property>
-                        <property name="icon-size">1</property>
-                      </object>
-                    </child>
                   </object>
-                  <packing>
-                    <property name="pack-type">end</property>
-                  </packing>
                 </child>
-                <child>
+                <child type="end">
                   <object class="GtkToggleButton" id="search_button">
-                    <property name="visible">True</property>
-                    <property name="receives_default">True</property>
-                    <property name="always_show_image">True</property>
+                    <property name="icon-name">edit-find-symbolic</property>
+                    <property name="tooltip-text" translatable="yes">Search</property>
                     <property name="active" bind-source="search_bar" bind-property="search-mode-enabled" 
bind-flags="sync-create|bidirectional"/>
                     <accelerator key="F" modifiers="GDK_CONTROL_MASK" signal="clicked"/>
-                    <child>
-                      <object class="GtkImage">
-                        <property name="visible">True</property>
-                        <property name="icon_name">edit-find-symbolic</property>
-                      </object>
-                    </child>
-                    <child internal-child="accessible">
-                      <object class="AtkObject">
-                        <property name="AtkObject::accessible-name" translatable="yes">Search</property>
-                      </object>
-                    </child>
                   </object>
-                  <packing>
-                    <property name="pack_type">end</property>
-                  </packing>
                 </child>
               </object>
             </child>
             <child>
-              <object class="HdyHeaderBar" id="selection_header_bar">
-                <property name="visible">True</property>
-                <property name="title" translatable="yes">History</property>
+              <object class="GtkHeaderBar" id="selection_header_bar">
                 <style>
                   <class name="selection-mode"/>
                 </style>
-                <child>
+                <child type="end">
                   <object class="GtkButton" id="selection_cancel_button">
-                    <property name="visible">True</property>
-                    <property name="valign">center</property>
                     <property name="use-underline">True</property>
                     <property name="label" translatable="yes">_Cancel</property>
                     <signal name="clicked" handler="on_selection_cancel_button_clicked"/>
-                    <style>
-                      <class name="text-button"/>
-                    </style>
                   </object>
-                  <packing>
-                    <property name="pack-type">end</property>
-                  </packing>
                 </child>
-                <child>
+                <child type="end">
                   <object class="GtkToggleButton" id="selection_search_button">
-                    <property name="visible">True</property>
+                    <property name="icon-name">edit-find-symbolic</property>
+                    <property name="tooltip-text" translatable="yes">Search</property>
                     <property name="active" bind-source="search_bar" bind-property="search-mode-enabled" 
bind-flags="sync-create|bidirectional"/>
                     <accelerator key="F" modifiers="GDK_CONTROL_MASK" signal="clicked"/>
-                    <child>
-                      <object class="GtkImage">
-                        <property name="visible">True</property>
-                        <property name="icon_name">edit-find-symbolic</property>
-                      </object>
-                    </child>
-                    <child internal-child="accessible">
-                      <object class="AtkObject">
-                        <property name="AtkObject::accessible-name" translatable="yes">Search</property>
-                      </object>
-                    </child>
                   </object>
-                  <packing>
-                    <property name="pack_type">end</property>
-                  </packing>
                 </child>
               </object>
             </child>
           </object>
         </child>
         <child>
-          <object class="HdySearchBar" id="search_bar">
-            <property name="visible">True</property>
+          <object class="GtkSearchBar" id="search_bar">
             <property name="search_mode_enabled">False</property>
             <child>
-              <object class="HdyClamp">
-                <property name="visible">True</property>
+              <object class="GtkClamp">
                 <property name="maximum_size">400</property>
                 <property name="tightening_threshold">300</property>
                 <child>
                   <object class="GtkSearchEntry" id="search_entry">
-                    <property name="visible">True</property>
                     <property name="placeholder-text" translatable="yes">Search history</property>
                     <property name="primary_icon_name">edit-find-symbolic</property>
                     <property name="primary_icon_activatable">False</property>
@@ -148,31 +82,32 @@
         </child>
         <child>
           <object class="GtkStack" id="history_presentation_stack">
-            <property name="visible">True</property>
             <property name="vexpand">True</property>
             <child>
               <object class="GtkScrolledWindow" id="history_scrolled_window">
-                <property name="visible">True</property>
                 <signal name="edge-reached" handler="on_edge_reached" object="EphyHistoryDialog" 
swapped="no"/>
                 <child>
-                  <object class="HdyClamp">
-                    <property name="visible">True</property>
-                    <property name="margin_start">6</property>
-                    <property name="margin_end">6</property>
-                    <property name="maximum_size">1024</property>
+                  <object class="GtkViewport">
+                    <property name="scroll-to-focus">True</property>
                     <child>
-                      <object class="GtkListBox" id="listbox">
-                        <property name="visible">True</property>
-                        <property name="margin_top">6</property>
-                        <property name="margin_bottom">6</property>
-                        <property name="valign">start</property>
-                        <property name="selection_mode">none</property>
-                        <property name="activate_on_single_click">True</property>
-                        <signal name="key-press-event" handler="on_listbox_key_press_event" swapped="no"/>
-                        <signal name="row-activated" handler="on_listbox_row_activated"/>
-                        <style>
-                          <class name="content"/>
-                        </style>
+                      <object class="AdwClamp">
+                        <property name="margin_start">6</property>
+                        <property name="margin_end">6</property>
+                        <property name="maximum_size">1024</property>
+                        <child>
+                          <object class="GtkListBox" id="listbox">
+                            <property name="margin_top">6</property>
+                            <property name="margin_bottom">6</property>
+                            <property name="valign">start</property>
+                            <property name="selection_mode">none</property>
+                            <property name="activate_on_single_click">True</property>
+                            <signal name="key-press-event" handler="on_listbox_key_press_event" 
swapped="no"/>
+                            <signal name="row-activated" handler="on_listbox_row_activated"/>
+                            <style>
+                              <class name="boxed-list"/>
+                            </style>
+                          </object>
+                        </child>
                       </object>
                     </child>
                   </object>
@@ -180,20 +115,16 @@
               </object>
             </child>
             <child>
-              <object class="GtkSpinner" id="loading_spinner">
-                <property name="visible">True</property>
-              </object>
+              <object class="GtkSpinner" id="loading_spinner"/>
             </child>
             <child>
-              <object class="HdyStatusPage" id="empty_history_message">
-                <property name="visible">True</property>
+              <object class="AdwStatusPage" id="empty_history_message">
                 <property name="title" translatable="yes">The History is Empty</property>
                 <property name="description" translatable="yes">Visited pages will be listed here</property>
               </object>
             </child>
             <child>
-              <object class="HdyStatusPage" id="no_search_results_message">
-                <property name="visible">True</property>
+              <object class="AdwStatusPage" id="no_search_results_message">
                 <property name="icon_name">edit-find-symbolic</property>
                 <property name="title" translatable="yes">No Results Found</property>
                 <property name="description" translatable="yes">Try a different search</property>
@@ -203,37 +134,26 @@
         </child>
         <child>
           <object class="GtkStack" id="action_bars_stack">
-            <property name="visible">True</property>
-            <property name="transition-type">GTK_STACK_TRANSITION_TYPE_CROSSFADE</property>
+            <property name="transition-type">crossfade</property>
             <child>
               <object class="GtkActionBar" id="regular_action_bar">
-                <property name="visible">True</property>
-                <child>
+                <child type="end">
                   <object class="GtkButton" id="clear_all_button">
-                    <property name="visible">True</property>
-                    <property name="receives_default">True</property>
                     <property name="use-underline">True</property>
                     <property name="label" translatable="yes">_Clear All</property>
                     <signal name="clicked" handler="on_clear_all_button_clicked"/>
                     <accelerator key="Delete" modifiers="GDK_SHIFT_MASK" signal="clicked"/>
                     <style>
                       <class name="destructive-action"/>
-                      <class name="image-button"/>
                     </style>
                   </object>
-                  <packing>
-                    <property name="pack-type">end</property>
-                  </packing>
                 </child>
               </object>
             </child>
             <child>
               <object class="GtkActionBar" id="selection_action_bar">
-                <property name="visible">True</property>
-                <child>
+                <child type="end">
                   <object class="GtkButton" id="selection_delete_button">
-                    <property name="visible">True</property>
-                    <property name="receives_default">True</property>
                     <property name="sensitive">False</property>
                     <property name="use_underline">True</property>
                     <property name="label" translatable="yes">_Delete</property>
@@ -242,14 +162,9 @@
                       <class name="destructive-action"/>
                     </style>
                   </object>
-                  <packing>
-                    <property name="pack-type">end</property>
-                  </packing>
                 </child>
                 <child>
                   <object class="GtkButton" id="selection_open_button">
-                    <property name="visible">True</property>
-                    <property name="receives_default">True</property>
                     <property name="sensitive">False</property>
                     <property name="use_underline">True</property>
                     <property name="label" translatable="yes">_Open</property>
diff --git a/src/resources/gtk/lang-row.ui b/src/resources/gtk/lang-row.ui
index 09318894c..c20e67002 100644
--- a/src/resources/gtk/lang-row.ui
+++ b/src/resources/gtk/lang-row.ui
@@ -2,63 +2,37 @@
 <interface>
   <requires lib="gtk+" version="3.20"/>
   <template class="EphyLangRow" parent="GtkListBoxRow">
-    <property name="visible">True</property>
     <child>
       <object class="GtkBox">
-        <property name="visible">True</property>
-        <property name="orientation">GTK_ORIENTATION_VERTICAL</property>
+        <property name="orientation">vertical</property>
         <child>
           <object class="GtkRevealer" id="dnd_top_revealer">
-            <property name="visible">True</property>
             <child>
-              <object class="HdyActionRow">
-                <property name="visible">True</property>
-              </object>
+              <object class="AdwActionRow"/>
             </child>
           </object>
         </child>
         <child>
-          <object class="HdyActionRow" id="action_row">
-            <property name="visible">True</property>
+          <object class="AdwActionRow" id="action_row">
             <child type="prefix">
-              <object class="GtkEventBox" id="drag_event_box">
-                <property name="visible">True</property>
-                <child>
-                  <object class="GtkImage">
-                    <property name="visible">True</property>
-                    <property name="icon-name">list-drag-handle-symbolic</property>
-                    <property name="icon-size">1</property>
-                  </object>
-                </child>
+              <object class="GtkImage" id="drag_handle">
+                <property name="icon-name">list-drag-handle-symbolic</property>
               </object>
             </child>
             <child>
               <object class="GtkButton" id="delete_button">
-                <property name="visible">True</property>
                 <property name="valign">center</property>
+                <property name="icon-name">edit-delete-symbolic</property>
                 <property name="tooltip-text" translatable="yes">Delete language</property>
                 <signal name="clicked" handler="on_delete_button_clicked"/>
-                <child>
-                  <object class="GtkImage">
-                    <property name="visible">True</property>
-                    <property name="icon-name">edit-delete-symbolic</property>
-                    <property name="icon-size">2</property>
-                    <style>
-                      <class name="image-button"/>
-                    </style>
-                  </object>
-                </child>
               </object>
             </child>
           </object>
         </child>
         <child>
           <object class="GtkRevealer" id="dnd_bottom_revealer">
-            <property name="visible">True</property>
             <child>
-              <object class="HdyActionRow">
-                <property name="visible">True</property>
-              </object>
+              <object class="AdwActionRow"/>
             </child>
           </object>
         </child>
diff --git a/src/resources/gtk/page-menu-popover.ui b/src/resources/gtk/page-menu-popover.ui
index 0e1b5b786..592844f92 100644
--- a/src/resources/gtk/page-menu-popover.ui
+++ b/src/resources/gtk/page-menu-popover.ui
@@ -1,374 +1,178 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
+  <menu id="menu">
+    <section>
+      <item>
+        <attribute name="custom">zoom</attribute>
+      </item>
+      <item>
+        <attribute name="custom">header</attribute>
+      </item>
+    </section>
+    <section>
+      <item>
+        <attribute name="label" translatable="yes">_Run in Background</attribute>
+        <attribute name="action">app.run-in-background</attribute>
+        <attribute name="hidden-when">action-disabled</attribute>
+      </item>
+    </section>
+    <section>
+      <item>
+        <attribute name="label" translatable="yes">_New Window</attribute>
+        <attribute name="action">app.new-window</attribute>
+      </item>
+      <item>
+        <attribute name="label" translatable="yes">New _Incognito Window</attribute>
+        <attribute name="action">app.new-incognito</attribute>
+      </item>
+    </section>
+    <section>
+      <item>
+        <attribute name="label" translatable="yes">Reopen Closed _Tab</attribute>
+        <attribute name="action">app.reopen-closed-tab</attribute>
+      </item>
+      <item>
+        <attribute name="label" translatable="yes">_History</attribute>
+        <attribute name="action">app.history</attribute>
+      </item>
+    </section>
+    <section>
+      <item>
+        <attribute name="label" translatable="yes">Firefox _Sync</attribute>
+        <attribute name="action">app.firefox-sync-dialog</attribute>
+      </item>
+      <submenu>
+        <attribute name="label" translatable="yes">I_mport and Export</attribute>
+        <section>
+          <item>
+            <attribute name="label" translatable="yes">I_mport Bookmarks…</attribute>
+            <attribute name="action">app.import-bookmarks</attribute>
+          </item>
+          <item>
+            <attribute name="label" translatable="yes">E_xport Bookmarks…</attribute>
+            <attribute name="action">app.export-bookmarks</attribute>
+          </item>
+        </section>
+        <section>
+          <item>
+            <attribute name="label" translatable="yes">Import _Passwords…</attribute>
+            <attribute name="action">app.import-passwords</attribute>
+          </item>
+        </section>
+      </submenu>
+    </section>
+    <section>
+      <item>
+        <attribute name="label" translatable="yes">Install Site as Web _Application…</attribute>
+        <attribute name="action">win.save-as-application</attribute>
+      </item>
+      <item>
+        <attribute name="label" translatable="yes">Open Appli_cation Manager</attribute>
+        <attribute name="action">win.open-application-manager</attribute>
+      </item>
+      <item>
+        <attribute name="label" translatable="yes">E_xtensions</attribute>
+        <attribute name="action">win.extensions</attribute>
+      </item>
+    </section>
+    <section>
+      <item>
+        <attribute name="label" translatable="yes">_Override Text Encoding…</attribute>
+        <attribute name="action">win.encoding</attribute>
+      </item>
+    </section>
+    <section>
+      <item>
+        <attribute name="label" translatable="yes">Pr_eferences</attribute>
+        <attribute name="action">app.preferences</attribute>
+      </item>
+      <item>
+        <attribute name="label" translatable="yes">_Keyboard Shortcuts</attribute>
+        <attribute name="action">app.shortcuts</attribute>
+      </item>
+      <item>
+        <attribute name="label" translatable="yes">_Help</attribute>
+        <attribute name="action">app.help</attribute>
+      </item>
+      <item>
+        <attribute name="label" translatable="yes">_About Web</attribute>
+        <attribute name="action">app.about</attribute>
+      </item>
+    </section>
+  </menu>
   <object class="GtkPopoverMenu" id="page-menu-popover">
-    <child>
-      <object class="GtkBox">
-        <property name="margin-top">12</property>
-        <property name="orientation">vertical</property>
-        <property name="visible">True</property>
-        <property name="spacing">6</property>
+    <property name="menu-model">menu</property>
+    <child type="zoom">
+      <object class="GtkBox" id="zoom-box">
+        <property name="orientation">horizontal</property>
+        <property name="homogeneous">True</property>
+        <style>
+          <class name="linked"/>
+          <class name="page-menu-zoom-box"/>
+        </style>
         <child>
-          <object class="GtkBox" id="zoom-box">
-            <property name="visible">True</property>
-            <property name="orientation">horizontal</property>
-            <property name="homogeneous">True</property>
-            <property name="margin-start">12</property>
-            <property name="margin-end">12</property>
-            <style>
-              <class name="linked"/>
-              <class name="page-menu-zoom-box"/>
-            </style>
-            <child>
-              <object class="GtkButton">
-                <property name="tooltip_text" translatable="yes" context="tooltip">Zoom Out</property>
-                <property name="action-name">win.zoom-out</property>
-                <property name="visible">True</property>
-                <child>
-                  <object class="GtkImage">
-                    <property name="visible">True</property>
-                    <property name="icon_name">zoom-out-symbolic</property>
-                  </object>
-                </child>
-              </object>
-            </child>
-            <child>
-              <object class="GtkButton">
-                <property name="tooltip_text" translatable="yes">Restore Zoom</property>
-                <property name="action-name">win.zoom-normal</property>
-                <property name="visible">True</property>
-                <child>
-                  <object class="GtkLabel" id="zoom-level">
-                    <property name="visible">True</property>
-                    <property name="width-chars">5</property>
-                  </object>
-                </child>
-              </object>
-            </child>
-            <child>
-              <object class="GtkButton">
-                <property name="tooltip_text" translatable="yes" context="tooltip">Zoom In</property>
-                <property name="action-name">win.zoom-in</property>
-                <property name="visible">True</property>
-                <child>
-                  <object class="GtkImage">
-                    <property name="visible">True</property>
-                    <property name="icon_name">zoom-in-symbolic</property>
-                  </object>
-                </child>
-              </object>
-            </child>
+          <object class="GtkButton">
+            <property name="tooltip_text" translatable="yes" context="tooltip">Zoom Out</property>
+            <property name="icon_name">zoom-out-symbolic</property>
+            <property name="action-name">win.zoom-out</property>
           </object>
         </child>
         <child>
-          <object class="GtkBox">
-            <property name="visible">True</property>
-            <property name="orientation">horizontal</property>
-            <property name="spacing">6</property>
-            <property name="homogeneous">True</property>
-            <property name="margin-start">12</property>
-            <property name="margin-end">12</property>
+          <object class="GtkButton">
+            <property name="tooltip_text" translatable="yes">Restore Zoom</property>
+            <property name="action-name">win.zoom-normal</property>
             <child>
-              <object class="GtkModelButton">
-                <property name="tooltip_text" translatable="yes">Print…</property>
-                <property name="action-name">win.print</property>
-                <property name="iconic">True</property>
-                <property name="centered">True</property>
-                <property name="icon">print</property>
+              <object class="GtkLabel" id="zoom-level">
                 <property name="visible">True</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkModelButton">
-                <property name="tooltip_text" translatable="yes">Find…</property>
-                <property name="action-name">win.find</property>
-                <property name="iconic">True</property>
-                <property name="centered">True</property>
-                <property name="icon">find</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkModelButton">
-                <property name="tooltip_text" translatable="yes">Fullscreen</property>
-                <property name="action-name">win.fullscreen</property>
-                <property name="iconic">True</property>
-                <property name="centered">True</property>
-                <property name="icon">fullscreen</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkButton" id="combined_stop_reload_button">
-                <property name="tooltip_text" translatable="yes">Reload</property>
-                <property name="action-name">toolbar.combined-stop-reload</property>
-                <property name="visible">True</property>
-                <style>
-                  <class name="image-button"/>
-                </style>
-                <child>
-                  <object class="GtkImage" id="combined_stop_reload_image">
-                    <property name="visible">True</property>
-                    <property name="icon-name">view-refresh-symbolic</property>
-                    <property name="icon-size">1</property>
-                  </object>
-                </child>
+                <property name="width-chars">5</property>
               </object>
             </child>
           </object>
         </child>
         <child>
-          <object class="GtkBox">
-            <property name="orientation">vertical</property>
-            <property name="visible">True</property>
-            <style>
-              <class name="page-menu-contents"/>
-            </style>
-
-            <!-- FRAGILE: These buttons are manually removed for non app mode in ephy-header-bar.c. -->
-            <child>
-              <object class="GtkSeparator" id="run-in-background-separator">
-                <property name="orientation">horizontal</property>
-                <property name="margin-top">6</property>
-                <property name="margin-bottom">6</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkModelButton" id="run-in-background-button">
-                <property name="text" translatable="yes">_Run in Background</property>
-                <property name="action-name">app.run-in-background</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-
-            <!-- FRAGILE: These buttons are manually removed for app mode in ephy-header-bar.c. -->
-            <child>
-              <object class="GtkSeparator" id="new-window-separator">
-                <property name="orientation">horizontal</property>
-                <property name="margin-top">6</property>
-                <property name="margin-bottom">6</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkModelButton" id="new-window-button">
-                <property name="text" translatable="yes">_New Window</property>
-                <property name="action-name">app.new-window</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkModelButton" id="new-incognito-window-button">
-                <property name="text" translatable="yes">New _Incognito Window</property>
-                <property name="action-name">app.new-incognito</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkSeparator">
-                <property name="orientation">horizontal</property>
-                <property name="margin-top">6</property>
-                <property name="margin-bottom">6</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <!-- FRAGILE: This button is manually removed for app mode in ephy-header-bar.c. -->
-            <child>
-              <object class="GtkModelButton" id="reopen-closed-tab-button">
-                <property name="text" translatable="yes">Reopen Closed _Tab</property>
-                <property name="action-name">app.reopen-closed-tab</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkModelButton">
-                <property name="text" translatable="yes">_History</property>
-                <property name="action-name">app.history</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <!-- FRAGILE: These buttons are manually removed for app mode in ephy-header-bar.c. -->
-            <child>
-              <object class="GtkSeparator" id="firefox-sync-separator">
-                <property name="orientation">horizontal</property>
-                <property name="margin-top">6</property>
-                <property name="margin-bottom">6</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkModelButton" id="firefox-sync-button">
-                <property name="text" translatable="yes">Firefox _Sync</property>
-                <property name="action-name">app.firefox-sync-dialog</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkModelButton" id="import-export-menu">
-                <property name="text" translatable="yes">I_mport and Export</property>
-                <property name="visible">True</property>
-                <property name="menu-name">import_export</property>
-              </object>
-            </child>
-            <!-- FRAGILE: These buttons are manually removed for app mode in ephy-header-bar.c. -->
-            <child>
-              <object class="GtkSeparator" id="save-as-application-separator">
-                <property name="orientation">horizontal</property>
-                <property name="margin-top">6</property>
-                <property name="margin-bottom">6</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkModelButton" id="save-as-application-button">
-                <property name="text" translatable="yes">Install Site as Web _Application…</property>
-                <property name="action-name">win.save-as-application</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkModelButton" id="application-manager-button">
-                <property name="text" translatable="yes">Open Appli_cation Manager</property>
-                <property name="action-name">win.open-application-manager</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkModelButton" id="extensions-button">
-                <property name="text" translatable="yes">E_xtensions</property>
-                <property name="action-name">win.extensions</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <!-- FRAGILE: These buttons are manually removed for app mode in ephy-header-bar.c. -->
-            <child>
-              <object class="GtkSeparator" id="override-text-encoding-separator">
-                <property name="orientation">horizontal</property>
-                <property name="margin-top">6</property>
-                <property name="margin-bottom">6</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkModelButton" id="override-text-encoding-button">
-                <property name="text" translatable="yes">_Override Text Encoding…</property>
-                <property name="action-name">win.encoding</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkSeparator">
-                <property name="orientation">horizontal</property>
-                <property name="margin-top">6</property>
-                <property name="margin-bottom">6</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkModelButton">
-                <property name="text" translatable="yes">Pr_eferences</property>
-                <property name="action-name">app.preferences</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <!-- FRAGILE: This button is manually removed for app mode in ephy-header-bar.c. -->
-            <child>
-              <object class="GtkModelButton" id="keyboard-shortcuts-button">
-                <property name="text" translatable="yes">_Keyboard Shortcuts</property>
-                <property name="action-name">app.shortcuts</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <!-- FRAGILE: This button is manually removed for app mode/Pantheon in ephy-header-bar.c. -->
-            <child>
-              <object class="GtkModelButton" id="help-button">
-                <property name="text" translatable="yes">_Help</property>
-                <property name="action-name">app.help</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-            <!-- FRAGILE: This button is manually removed for Pantheon in ephy-header-bar.c. -->
-            <child>
-              <object class="GtkModelButton" id="about-button">
-                <property name="text" translatable="yes">_About Web</property>
-                <property name="action-name">app.about</property>
-                <property name="visible">True</property>
-              </object>
-            </child>
-
+          <object class="GtkButton">
+            <property name="tooltip_text" translatable="yes" context="tooltip">Zoom In</property>
+            <property name="icon_name">zoom-in-symbolic</property>
+            <property name="action-name">win.zoom-in</property>
           </object>
         </child>
       </object>
-      <packing>
-        <property name="submenu">main</property>
-      </packing>
     </child>
-    <child>
+    <child type="header">
       <object class="GtkBox">
-        <property name="margin-top">12</property>
-        <property name="orientation">vertical</property>
-        <property name="visible">True</property>
-        <style>
-          <class name="page-menu-contents"/>
-        </style>
-        <child>
-          <object class="GtkModelButton">
-            <property name="text" translatable="yes">Import and Export</property>
-            <property name="visible">True</property>
-            <property name="centered">True</property>
-            <property name="menu-name">main</property>
-            <property name="inverted">True</property>
-            <property name="margin-bottom">6</property>
-          </object>
-        </child>
+        <property name="orientation">horizontal</property>
+        <property name="spacing">6</property>
+        <property name="homogeneous">True</property>
+        <property name="margin-top">6</property>
         <child>
-          <object class="GtkModelButton">
-            <property name="text" translatable="yes">I_mport Bookmarks…</property>
-            <property name="action-name">app.import-bookmarks</property>
-            <property name="visible">True</property>
+          <object class="GtkButton">
+            <property name="tooltip_text" translatable="yes">Print…</property>
+            <property name="icon-name">document-print-symbolic</property>
+            <property name="action-name">win.print</property>
           </object>
         </child>
         <child>
-          <object class="GtkModelButton">
-            <property name="text" translatable="yes">E_xport Bookmarks…</property>
-            <property name="action-name">app.export-bookmarks</property>
-            <property name="visible">True</property>
+          <object class="GtkButton">
+            <property name="tooltip_text" translatable="yes">Find…</property>
+            <property name="icon-name">edit-find-symbolic</property>
+            <property name="action-name">win.find</property>
           </object>
         </child>
         <child>
-          <object class="GtkSeparator">
-            <property name="orientation">horizontal</property>
-            <property name="margin-top">6</property>
-            <property name="margin-bottom">6</property>
-            <property name="visible">True</property>
+          <object class="GtkButton">
+            <property name="tooltip_text" translatable="yes">Fullscreen</property>
+            <property name="icon-name">view-fullscreen-symbolic</property>
+            <property name="action-name">win.fullscreen</property>
           </object>
         </child>
         <child>
-          <object class="GtkModelButton">
-            <property name="text" translatable="yes">Import _Passwords…</property>
-            <property name="action-name">app.import-passwords</property>
-            <property name="visible">True</property>
+          <object class="GtkButton" id="combined_stop_reload_button">
+            <property name="tooltip_text" translatable="yes">Reload</property>
+            <property name="icon-name">view-refresh-symbolic</property>
+            <property name="action-name">toolbar.combined-stop-reload</property>
           </object>
         </child>
       </object>
-      <packing>
-        <property name="submenu">import_export</property>
-      </packing>
     </child>
   </object>
-    <object class="GThemedIcon" id="zoom_out">
-    <property name="name">zoom-out-symbolic</property>
-  </object>
-  <object class="GThemedIcon" id="zoom_in">
-    <property name="name">zoom-in-symbolic</property>
-  </object>
-  <object class="GThemedIcon" id="print">
-    <property name="name">document-print-symbolic</property>
-  </object>
-  <object class="GThemedIcon" id="find">
-    <property name="name">system-search-symbolic</property>
-  </object>
-  <object class="GThemedIcon" id="fullscreen">
-    <property name="name">view-fullscreen-symbolic</property>
-  </object>
 </interface>
diff --git a/src/resources/gtk/page-row.ui b/src/resources/gtk/page-row.ui
index 0cb1a93e5..e3a301fe8 100644
--- a/src/resources/gtk/page-row.ui
+++ b/src/resources/gtk/page-row.ui
@@ -6,77 +6,59 @@
     <signal name="map" handler="update_spinner" swapped="true"/>
     <signal name="unmap" handler="update_spinner" swapped="true"/>
     <child>
-      <object class="GtkEventBox">
-        <property name="visible">True</property>
-        <signal name="button-release-event" handler="button_release_event" swapped="no"/>
+      <object class="GtkGestureClick">
+        <property name="button">2</property>
+        <signal name="released" handler="released_cb"/>
+      </object>
+    </child>
+    <child>
+      <object class="GtkBox" id="box">
+        <property name="margin-start">3</property>
+        <property name="margin-end">1</property>
         <child>
-          <object class="GtkBox" id="box">
-            <property name="visible">True</property>
-            <property name="margin-start">3</property>
-            <property name="margin-end">1</property>
-            <child>
-              <object class="GtkStack" id="icon_stack">
-                <property name="visible">True</property>
-                <property name="margin_start">4</property>
-                <property name="margin_end">4</property>
-                <child>
-                  <object class="GtkImage" id="icon">
-                    <property name="visible">True</property>
-                    <property name="icon_size">1</property>
-                    <property name="pixel_size">16</property>
-                    <property name="margin_top">6</property>
-                    <property name="margin_bottom">6</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkSpinner" id="spinner">
-                    <property name="visible">True</property>
-                  </object>
-                </child>
-              </object>
-            </child>
+          <object class="GtkStack" id="icon_stack">
+            <property name="margin_start">4</property>
+            <property name="margin_end">4</property>
             <child>
-              <object class="GtkLabel" id="title">
-                <property name="visible">True</property>
-                <property name="margin_start">4</property>
-                <property name="hexpand">True</property>
-                <property name="ellipsize">end</property>
-                <property name="single_line_mode">True</property>
-                <property name="xalign">0</property>
+              <object class="GtkImage" id="icon">
+                <property name="pixel_size">16</property>
+                <property name="margin_top">6</property>
+                <property name="margin_bottom">6</property>
               </object>
             </child>
             <child>
-              <object class="GtkImage" id="speaker_icon">
-                <property name="visible">True</property>
-                <property name="margin_start">8</property>
-                <property name="icon_name">audio-volume-high-symbolic</property>
-                <property name="icon_size">1</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkButton" id="close_button">
-                <property name="visible">True</property>
-                <property name="focus_on_click">False</property>
-                <property name="receives_default">False</property>
-                <property name="tooltip_text" translatable="yes">Close page</property>
-                <property name="valign">center</property>
-                <signal name="clicked" handler="close_clicked_cb" swapped="yes"/>
-                <child>
-                  <object class="GtkImage">
-                    <property name="visible">True</property>
-                    <property name="icon_name">window-close-symbolic</property>
-                    <property name="icon_size">1</property>
-                  </object>
-                </child>
-                <style>
-                  <class name="flat"/>
-                  <class name="image-button"/>
-                  <class name="close-button"/>
-                </style>
-              </object>
+              <object class="GtkSpinner" id="spinner"/>
             </child>
           </object>
         </child>
+        <child>
+          <object class="GtkLabel" id="title">
+            <property name="margin_start">4</property>
+            <property name="hexpand">True</property>
+            <property name="ellipsize">end</property>
+            <property name="single_line_mode">True</property>
+            <property name="xalign">0</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkImage" id="speaker_icon">
+            <property name="margin_start">8</property>
+            <property name="icon_name">audio-volume-high-symbolic</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkButton" id="close_button">
+            <property name="focus_on_click">False</property>
+            <property name="tooltip_text" translatable="yes">Close page</property>
+            <property name="valign">center</property>
+            <property name="icon_name">window-close-symbolic</property>
+            <signal name="clicked" handler="close_clicked_cb" swapped="yes"/>
+            <style>
+              <class name="flat"/>
+              <class name="close-button"/>
+            </style>
+          </object>
+        </child>
       </object>
     </child>
   </template>
diff --git a/src/resources/gtk/pages-button.ui b/src/resources/gtk/pages-button.ui
index b08d4c320..c42512a02 100644
--- a/src/resources/gtk/pages-button.ui
+++ b/src/resources/gtk/pages-button.ui
@@ -2,17 +2,17 @@
 <interface>
   <!-- interface-requires gtk+ 3.16 -->
   <template class="EphyPagesButton" parent="GtkButton">
+    <style>
+    <class name="image-button"/>
+    </style>
     <child>
       <object class="GtkOverlay">
-        <property name="visible">True</property>
+        <property name="can-focus">False</property>
         <child>
-          <object class="GtkImage" id="pages_icon">
-            <property name="visible">True</property>
-          </object>
+          <object class="GtkImage" id="pages_icon"/>
         </child>
         <child type="overlay">
           <object class="GtkLabel" id="pages_label">
-            <property name="visible">True</property>
             <property name="width-chars">2</property>
             <attributes>
               <attribute name="font-features" value="tnum=1"/>
@@ -20,9 +20,6 @@
               <attribute name="weight" value="ultrabold"/>
             </attributes>
           </object>
-          <packing>
-            <property name="pass_through">True</property>
-          </packing>
         </child>
       </object>
     </child>
diff --git a/src/resources/gtk/pages-popover.ui b/src/resources/gtk/pages-popover.ui
index 9557d511a..e17212aa9 100644
--- a/src/resources/gtk/pages-popover.ui
+++ b/src/resources/gtk/pages-popover.ui
@@ -3,18 +3,16 @@
   <!-- interface-requires gtk+ 3.16 -->
   <template class="EphyPagesPopover" parent="GtkPopover">
     <style>
-      <class name="combo"/>
+      <class name="menu"/>
     </style>
     <child>
       <object class="GtkScrolledWindow" id="scrolled_window">
         <property name="hscrollbar_policy">never</property>
         <property name="propagate_natural_height">True</property>
         <property name="max-content-height">700</property>
-        <property name="visible">True</property>
         <child>
           <object class="GtkListBox" id="list_box">
             <property name="selection_mode">single</property>
-            <property name="visible">True</property>
             <property name="width_request">300</property>
             <signal name="row-activated" handler="row_activated_cb" swapped="true"/>
             <style>
diff --git a/src/resources/gtk/pages-view.ui b/src/resources/gtk/pages-view.ui
index 9ee40daa3..1077a53db 100644
--- a/src/resources/gtk/pages-view.ui
+++ b/src/resources/gtk/pages-view.ui
@@ -5,53 +5,38 @@
     <property name="name">pages-view</property>
     <property name="orientation">vertical</property>
     <child>
-      <object class="HdyHeaderBar">
-        <property name="visible">True</property>
-        <property name="show-close-button">True</property>
-        <property name="title" translatable="yes">Tabs</property>
-        <property name="has-subtitle">False</property>
-        <child>
+      <object class="GtkHeaderBar">
+        <property name="title-widget">
+          <object class="AdwWindowTitle">
+            <property name="title" translatable="yes">Tabs</property>
+          </object>
+        </property>
+        <child type="start">
           <object class="GtkButton">
-            <property name="visible">True</property>
             <property name="action-name">win.content</property>
-            <child>
-              <object class="GtkImage">
-                <property name="visible">True</property>
-                <property name="icon-name">go-previous-symbolic</property>
-              </object>
-            </child>
+            <property name="icon-name">go-previous-symbolic</property>
           </object>
         </child>
-        <child>
+        <child type="end">
           <object class="GtkButton">
-            <property name="visible">True</property>
             <property name="action-name">win.new-tab</property>
-            <child>
-              <object class="GtkImage">
-                <property name="visible">True</property>
-                <property name="icon-name">tab-new-symbolic</property>
-              </object>
-            </child>
+            <property name="icon-name">tab-new-symbolic</property>
           </object>
-          <packing>
-            <property name="pack-type">end</property>
-          </packing>
         </child>
       </object>
     </child>
     <child>
       <object class="GtkScrolledWindow">
-        <property name="visible">True</property>
         <property name="hscrollbar_policy">never</property>
         <property name="vexpand">True</property>
         <child>
           <object class="GtkListBox" id="list_box">
             <property name="selection_mode">single</property>
-            <property name="visible">True</property>
             <property name="width_request">300</property>
             <signal name="row-activated" handler="row_activated_cb" swapped="true"/>
             <style>
               <class name="pages-list"/>
+              <class name="navigation-sidebar"/>
             </style>
           </object>
         </child>
diff --git a/src/resources/gtk/prefs-appearance-page.ui b/src/resources/gtk/prefs-appearance-page.ui
index 3c1987985..b7180bb2d 100644
--- a/src/resources/gtk/prefs-appearance-page.ui
+++ b/src/resources/gtk/prefs-appearance-page.ui
@@ -1,60 +1,51 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <requires lib="gtk+" version="3.0"/>
-  <template class="PrefsAppearancePage" parent="HdyPreferencesPage">
+  <template class="PrefsAppearancePage" parent="AdwPreferencesPage">
     <property name="icon_name">document-edit-symbolic</property>
     <property name="title" translatable="yes">Appearance</property>
-    <property name="visible">True</property>
     <child>
-      <object class="HdyPreferencesGroup">
+      <object class="AdwPreferencesGroup">
         <property name="title" translatable="yes">Fonts</property>
-        <property name="visible">True</property>
         <child>
-          <object class="HdyExpanderRow" id="use_gnome_fonts_row">
+          <object class="AdwExpanderRow" id="use_gnome_fonts_row">
             <property name="show_enable_switch">True</property>
             <property name="title" translatable="yes">Use Custom Fonts</property>
-            <property name="visible">True</property>
             <child>
-              <object class="HdyActionRow">
+              <object class="AdwActionRow">
                 <property name="activatable">False</property>
                 <property name="title" translatable="yes">Sans serif font</property>
-                <property name="visible">True</property>
                 <child>
                   <object class="GtkFontButton" id="sans_fontbutton">
                     <property name="font">Sans 12</property>
                     <property name="use-font">True</property>
                     <property name="valign">center</property>
-                    <property name="visible">True</property>
                   </object>
                 </child>
               </object>
             </child>
             <child>
-              <object class="HdyActionRow">
+              <object class="AdwActionRow">
                 <property name="activatable">False</property>
                 <property name="title" translatable="yes">Serif font</property>
-                <property name="visible">True</property>
                 <child>
                   <object class="GtkFontButton" id="serif_fontbutton">
                     <property name="font">Sans 12</property>
                     <property name="use-font">True</property>
                     <property name="valign">center</property>
-                    <property name="visible">True</property>
                   </object>
                 </child>
               </object>
             </child>
             <child>
-              <object class="HdyActionRow">
+              <object class="AdwActionRow">
                 <property name="activatable">False</property>
                 <property name="title" translatable="yes">Monospace font</property>
-                <property name="visible">True</property>
                 <child>
                   <object class="GtkFontButton" id="mono_fontbutton">
                     <property name="font">Sans 12</property>
                     <property name="use-font">True</property>
                     <property name="valign">center</property>
-                    <property name="visible">True</property>
                   </object>
                 </child>
               </object>
@@ -64,110 +55,106 @@
       </object>
     </child>
     <child>
-      <object class="HdyPreferencesGroup" id="reader_mode_box">
+      <object class="AdwPreferencesGroup" id="reader_mode_box">
         <property name="title" translatable="yes">Reader Mode</property>
-        <property name="visible">True</property>
         <child>
-          <object class="HdyComboRow" id="reader_mode_font_style">
+          <object class="AdwComboRow" id="reader_mode_font_style">
             <property name="title" translatable="yes">Font Style</property>
-            <property name="visible">True</property>
+            <property name="expression">
+              <closure type="gchararray" function="reader_font_style_get_name">
+                <lookup name="value" type="AdwEnumListItem"/>
+              </closure>
+            </property>
+            <property name="model">
+              <object class="AdwEnumListModel">
+                <property name="enum-type">EphyPrefsReaderFontStyle</property>
+              </object>
+            </property>
           </object>
         </child>
         <child>
-          <object class="HdyComboRow" id="reader_mode_color_scheme">
+          <object class="AdwComboRow" id="reader_mode_color_scheme">
             <property name="title" translatable="yes">Color Scheme</property>
-            <property name="visible">True</property>
+            <property name="expression">
+              <closure type="gchararray" function="reader_color_scheme_get_name">
+                <lookup name="value" type="AdwEnumListItem"/>
+              </closure>
+            </property>
+            <property name="model">
+              <object class="AdwEnumListModel">
+                <property name="enum-type">EphyPrefsReaderColorScheme</property>
+              </object>
+            </property>
           </object>
         </child>
       </object>
     </child>
     <child>
-      <object class="HdyPreferencesGroup">
+      <object class="AdwPreferencesGroup">
         <property name="title" translatable="yes">Style</property>
-        <property name="visible">True</property>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable_widget">css_switch</property>
             <property name="title" translatable="yes">Use Custom Stylesheet</property>
-            <property name="visible">True</property>
             <child>
               <object class="GtkSwitch" id="css_switch">
                 <property name="valign">center</property>
-                <property name="visible">True</property>
               </object>
             </child>
             <child>
               <object class="GtkSeparator">
                 <property name="margin_bottom">8</property>
                 <property name="margin_top">8</property>
-                <property name="visible">True</property>
               </object>
             </child>
             <child>
               <object class="GtkButton" id="css_edit_button">
                 <property name="valign">center</property>
-                <property name="visible">True</property>
-                <style>
-                  <class name="image-button"/>
-                </style>
-                <child>
-                  <object class="GtkImage">
-                    <property name="icon_name">document-edit-symbolic</property>
-                    <property name="visible">True</property>
-                  </object>
-                </child>
+                <property name="icon_name">document-edit-symbolic</property>
               </object>
             </child>
           </object>
         </child>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable_widget">js_switch</property>
             <property name="title" translatable="yes">Use Custom JavaScript</property>
-            <property name="visible">True</property>
             <child>
               <object class="GtkSwitch" id="js_switch">
                 <property name="valign">center</property>
-                <property name="visible">True</property>
               </object>
             </child>
             <child>
               <object class="GtkSeparator">
                 <property name="margin_bottom">8</property>
                 <property name="margin_top">8</property>
-                <property name="visible">True</property>
               </object>
             </child>
             <child>
               <object class="GtkButton" id="js_edit_button">
                 <property name="valign">center</property>
-                <property name="visible">True</property>
-                <style>
-                  <class name="image-button"/>
-                </style>
-                <child>
-                  <object class="GtkImage">
-                    <property name="icon_name">document-edit-symbolic</property>
-                    <property name="visible">True</property>
-                  </object>
-                </child>
+                <property name="icon_name">document-edit-symbolic</property>
               </object>
             </child>
           </object>
         </child>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable">False</property>
             <property name="title" translatable="yes">Default Zoom Level</property>
-            <property name="visible">True</property>
             <child>
               <object class="GtkSpinButton" id="default_zoom_spin_button">
-                <property name="adjustment">zoom_adjustment</property>
-                <property name="input_purpose">number</property>
+                <property name="adjustment">
+                  <object class="GtkAdjustment" id="zoom_adjustment">
+                    <property name="lower">33</property>
+                    <property name="upper">300</property>
+                    <property name="step_increment">1</property>
+                    <property name="page_increment">10</property>
+                  </object>
+                </property>
                 <property name="max_width_chars">5</property>
                 <property name="valign">center</property>
                 <property name="value">100</property>
-                <property name="visible">True</property>
                 <signal name="output" handler="on_default_zoom_spin_button_output"/>
                 <signal name="value-changed" handler="on_default_zoom_spin_button_value_changed"/>
               </object>
@@ -185,10 +172,4 @@
       <widget name="mono_fontbutton"/>
     </widgets>
   </object>
-  <object class="GtkAdjustment" id="zoom_adjustment">
-    <property name="lower">33</property>
-    <property name="upper">300</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">10</property>
-  </object>
 </interface>
diff --git a/src/resources/gtk/prefs-dialog.ui b/src/resources/gtk/prefs-dialog.ui
index 9556fbbe5..7398a0ed9 100644
--- a/src/resources/gtk/prefs-dialog.ui
+++ b/src/resources/gtk/prefs-dialog.ui
@@ -1,20 +1,18 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <requires lib="gtk+" version="3.0"/>
-  <template class="EphyPrefsDialog" parent="HdyPreferencesWindow">
-    <property name="role">epiphany-preferences</property>
+  <template class="EphyPrefsDialog" parent="AdwPreferencesWindow">
     <property name="modal">True</property>
-    <property name="window-position">center</property>
     <property name="destroy-with-parent">True</property>
     <property name="icon-name">gtk-preferences</property>
     <property name="default-width">640</property>
     <property name="default-height">800</property>
-    <property name="can-swipe-back">True</property>
-    <signal name="key-press-event" handler="on_key_press_event"/>
+    <property name="can-navigate-back">True</property>
+<!--    <signal name="key-press-event" handler="on_key_press_event"/>
     <signal name="delete-event" handler="on_delete_event"/>
     <child>
       <object class="PrefsGeneralPage" id="general_page"/>
-    </child>
+    </child>-->
     <child>
       <object class="PrefsPrivacyPage">
         <signal name="passwords-row-activated" handler="on_passwords_row_activated"/>
diff --git a/src/resources/gtk/prefs-general-page.ui b/src/resources/gtk/prefs-general-page.ui
index 98d534899..affde7c63 100644
--- a/src/resources/gtk/prefs-general-page.ui
+++ b/src/resources/gtk/prefs-general-page.ui
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <requires lib="gtk+" version="3.0"/>
-  <template class="PrefsGeneralPage" parent="HdyPreferencesPage">
+  <template class="PrefsGeneralPage" parent="AdwPreferencesPage">
     <property name="icon_name">applications-system-symbolic</property>
     <property name="title" translatable="yes">General</property>
     <property name="visible">True</property>
     <child>
-      <object class="HdyPreferencesGroup" id="webapp_box">
+      <object class="AdwPreferencesGroup" id="webapp_box">
         <property name="title" translatable="yes">Web Application</property>
         <property name="visible">True</property>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable">False</property>
             <property name="title" translatable="yes">_Icon</property>
             <property name="use_underline">True</property>
@@ -33,7 +33,7 @@
           </object>
         </child>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable">False</property>
             <property name="title" translatable="yes">_Homepage</property>
             <property name="use_underline">True</property>
@@ -48,7 +48,7 @@
           </object>
         </child>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable">False</property>
             <property name="title" translatable="yes">_Title</property>
             <property name="use_underline">True</property>
@@ -63,7 +63,7 @@
           </object>
         </child>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable">False</property>
             <property name="title" translatable="yes">_Manage Additional URLs</property>
             <property name="use_underline">True</property>
@@ -89,11 +89,11 @@
       </object>
     </child>
     <child>
-      <object class="HdyPreferencesGroup">
+      <object class="AdwPreferencesGroup">
         <property name="title" translatable="yes">Web Content</property>
         <property name="visible">True</property>
         <child>
-          <object class="HdyActionRow" id="adblock_allow_row">
+          <object class="AdwActionRow" id="adblock_allow_row">
             <property name="activatable_widget">adblock_allow_switch</property>
             <property name="title" translatable="yes">Block _Advertisements</property>
             <property name="use_underline">True</property>
@@ -107,7 +107,7 @@
           </object>
         </child>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable_widget">popups_allow_switch</property>
             <property name="title" translatable="yes">Block _Popup Windows</property>
             <property name="use_underline">True</property>
@@ -123,11 +123,11 @@
       </object>
     </child>
     <child>
-      <object class="HdyPreferencesGroup" id="homepage_box">
+      <object class="AdwPreferencesGroup" id="homepage_box">
         <property name="title" translatable="yes">Homepage</property>
         <property name="visible">True</property>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable_widget">new_tab_homepage_radiobutton</property>
             <property name="title" translatable="yes">Most _Visited Pages</property>
             <property name="use_underline">True</property>
@@ -141,7 +141,7 @@
           </object>
         </child>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable_widget">blank_homepage_radiobutton</property>
             <property name="title" translatable="yes">_Blank Page</property>
             <property name="use_underline">True</property>
@@ -156,7 +156,7 @@
           </object>
         </child>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable_widget">custom_homepage_radiobutton</property>
             <property name="title" translatable="yes">_Custom</property>
             <property name="use_underline">True</property>
@@ -181,11 +181,11 @@
       </object>
     </child>
     <child>
-      <object class="HdyPreferencesGroup" id="download_box">
+      <object class="AdwPreferencesGroup" id="download_box">
         <property name="title" translatable="yes">Downloads</property>
         <property name="visible">True</property>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable_widget">ask_on_download_switch</property>
             <property name="title" translatable="yes">Ask o_n Download</property>
             <property name="use_underline">True</property>
@@ -200,7 +200,7 @@
           </object>
         </child>
         <child>
-          <object class="HdyActionRow" id="download_folder_row">
+          <object class="AdwActionRow" id="download_folder_row">
             <property name="sensitive" bind-source="ask_on_download_switch" bind-property="active" 
bind-flags="sync-create|invert-boolean"/>
             <property name="title" translatable="yes">_Download Folder</property>
             <property name="use_underline">True</property>
@@ -210,7 +210,7 @@
       </object>
     </child>
     <child>
-      <object class="HdyPreferencesGroup" id="search_engine_group">
+      <object class="AdwPreferencesGroup" id="search_engine_group">
         <property name="title" translatable="yes">Search Engines</property>
         <property name="visible">True</property>
         <child>
@@ -221,11 +221,11 @@
       </object>
     </child>
     <child>
-      <object class="HdyPreferencesGroup" id="session_box">
+      <object class="AdwPreferencesGroup" id="session_box">
         <property name="title" translatable="yes">Session</property>
         <property name="visible">True</property>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable_widget">start_in_incognito_mode_switch</property>
             <property name="title" translatable="yes">Start in _Incognito Mode</property>
             <property name="use_underline">True</property>
@@ -239,7 +239,7 @@
           </object>
         </child>
         <child>
-          <object class="HdyActionRow" id="restore_session_row">
+          <object class="AdwActionRow" id="restore_session_row">
             <property name="activatable_widget">restore_session_switch</property>
             <property name="title" translatable="yes">_Restore Tabs on Startup</property>
             <property name="use_underline">True</property>
@@ -255,11 +255,11 @@
       </object>
     </child>
     <child>
-      <object class="HdyPreferencesGroup" id="browsing_box">
+      <object class="AdwPreferencesGroup" id="browsing_box">
         <property name="title" translatable="yes">Browsing</property>
         <property name="visible">True</property>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable_widget">enable_mouse_gesture_switch</property>
             <property name="title" translatable="yes">Mouse _Gestures</property>
             <property name="use_underline">True</property>
@@ -273,7 +273,7 @@
           </object>
         </child>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable_widget">enable_switch_to_new_tab</property>
             <property name="title" translatable="yes">S_witch Immediately to New Tabs</property>
             <property name="use_underline">True</property>
@@ -289,7 +289,7 @@
       </object>
     </child>
     <child>
-      <object class="HdyPreferencesGroup" id="lang_group">
+      <object class="AdwPreferencesGroup" id="lang_group">
         <property name="title" translatable="yes">Languages</property>
         <property name="visible">True</property>
         <child>
@@ -304,11 +304,11 @@
       </object>
     </child>
     <child>
-      <object class="HdyPreferencesGroup">
+      <object class="AdwPreferencesGroup">
         <property name="title" translatable="yes"></property>
         <property name="visible">True</property>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable_widget">enable_spell_checking_switch</property>
             <property name="title" translatable="yes">_Spell Checking</property>
             <property name="use_underline">True</property>
diff --git a/src/resources/gtk/prefs-privacy-page.ui b/src/resources/gtk/prefs-privacy-page.ui
index bf61d6b91..9ebf61acf 100644
--- a/src/resources/gtk/prefs-privacy-page.ui
+++ b/src/resources/gtk/prefs-privacy-page.ui
@@ -1,24 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <requires lib="gtk+" version="3.0"/>
-  <template class="PrefsPrivacyPage" parent="HdyPreferencesPage">
+  <template class="PrefsPrivacyPage" parent="AdwPreferencesPage">
     <property name="icon_name">preferences-system-privacy-symbolic</property>
     <property name="title" translatable="yes">Privacy</property>
-    <property name="visible">True</property>
     <child>
-      <object class="HdyPreferencesGroup" id="safe_browsing_group">
+      <object class="AdwPreferencesGroup" id="safe_browsing_group">
         <property name="title" translatable="yes">Web Safety</property>
-        <property name="visible">True</property>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable_widget">enable_safe_browsing_switch</property>
             <property name="title" translatable="yes">Block Dangerous Web_sites</property>
             <property name="use_underline">True</property>
-            <property name="visible">True</property>
             <child>
               <object class="GtkSwitch" id="enable_safe_browsing_switch">
                 <property name="valign">center</property>
-                <property name="visible">True</property>
               </object>
             </child>
           </object>
@@ -26,25 +22,23 @@
       </object>
     </child>
     <child>
-      <object class="HdyPreferencesGroup">
+      <object class="AdwPreferencesGroup">
         <property name="title" translatable="yes">Web Tracking</property>
         <property name="visible">True</property>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable_widget">enable_itp_switch</property>
             <property name="title" translatable="yes">Intelligent _Tracking Prevention</property>
             <property name="use_underline">True</property>
-            <property name="visible">True</property>
             <child>
               <object class="GtkSwitch" id="enable_itp_switch">
                 <property name="valign">center</property>
-                <property name="visible">True</property>
               </object>
             </child>
           </object>
         </child>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable_widget">enable_website_data_storage_switch</property>
             <property name="subtitle" translatable="yes">Allow websites to store cookies, databases, and 
local storage data.</property>
             <property name="title" translatable="yes">_Website Data Storage</property>
@@ -61,11 +55,11 @@
       </object>
     </child>
     <child>
-      <object class="HdyPreferencesGroup">
+      <object class="AdwPreferencesGroup">
         <property name="title" translatable="yes">Search Suggestions</property>
         <property name="visible">True</property>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable_widget">enable_google_search_suggestions_switch</property>
             <property name="subtitle" translatable="yes">Enable search suggestions in the URL 
entry.</property>
             <property name="title" translatable="yes">_Google Search Suggestions</property>
@@ -82,11 +76,11 @@
       </object>
     </child>
     <child>
-      <object class="HdyPreferencesGroup">
+      <object class="AdwPreferencesGroup">
         <property name="title" translatable="yes">Personal Data</property>
         <property name="visible">True</property>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable">True</property>
             <property name="subtitle" translatable="yes">You can clear stored personal data.</property>
             <property name="title" translatable="yes">Clear Personal _Data</property>
@@ -104,11 +98,11 @@
       </object>
     </child>
     <child>
-      <object class="HdyPreferencesGroup">
+      <object class="AdwPreferencesGroup">
         <property name="title" translatable="yes">Passwords</property>
         <property name="visible">True</property>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable">True</property>
             <property name="title" translatable="yes">_Passwords</property>
             <property name="use_underline">True</property>
@@ -123,15 +117,13 @@
           </object>
         </child>
         <child>
-          <object class="HdyActionRow">
+          <object class="AdwActionRow">
             <property name="activatable_widget">remember_passwords_switch</property>
             <property name="title" translatable="yes">_Remember Passwords</property>
             <property name="use_underline">True</property>
-            <property name="visible">True</property>
             <child>
               <object class="GtkSwitch" id="remember_passwords_switch">
                 <property name="valign">center</property>
-                <property name="visible">True</property>
               </object>
             </child>
           </object>
diff --git a/src/resources/gtk/search-engine-row.ui b/src/resources/gtk/search-engine-row.ui
index 2656603bf..91b3cf894 100644
--- a/src/resources/gtk/search-engine-row.ui
+++ b/src/resources/gtk/search-engine-row.ui
@@ -1,11 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <requires lib="gtk+" version="3.20"/>
-  <template class="EphySearchEngineRow" parent="HdyExpanderRow">
-    <property name="visible">True</property>
+  <template class="EphySearchEngineRow" parent="AdwExpanderRow">
     <child type="prefix">
       <object class="GtkRadioButton" id="radio_button">
-        <property name="visible">True</property>
         <property name="valign">center</property>
         <property name="tooltip-text" translatable="yes">Selects the default search engine</property>
         <signal name="clicked" handler="on_radio_button_clicked_cb" object="EphySearchEngineRow" 
swapped="yes"/>
@@ -14,10 +12,8 @@
     <child>
       <object class="GtkListBoxRow">
         <property name="activatable">False</property>
-        <property name="visible">True</property>
         <child>
           <object class="GtkGrid">
-            <property name="visible">True</property>
             <property name="margin-top">12</property>
             <property name="margin-bottom">12</property>
             <property name="margin-start">12</property>
@@ -27,7 +23,6 @@
             <!-- Name field -->
             <child>
               <object class="GtkLabel">
-                <property name="visible">True</property>
                 <property name="label" translatable="yes">Name</property>
                 <property name="xalign">1</property>
               </object>
@@ -38,7 +33,6 @@
             </child>
             <child>
               <object class="GtkEntry" id="name_entry">
-                <property name="visible">True</property>
                 <property name="hexpand">True</property>
               </object>
               <packing>
@@ -49,7 +43,6 @@
             <!-- Address field -->
             <child>
               <object class="GtkLabel">
-                <property name="visible">True</property>
                 <property name="label" translatable="yes">Address</property>
                 <property name="xalign">1</property>
               </object>
@@ -60,7 +53,6 @@
             </child>
             <child>
               <object class="GtkEntry" id="address_entry">
-                <property name="visible">True</property>
                 <property name="hexpand">True</property>
 
                 <property name="placeholder-text">https://www.example.com/search?q=%s</property>
@@ -75,7 +67,6 @@
             <!-- Bang field -->
             <child>
               <object class="GtkLabel">
-                <property name="visible">True</property>
                 <property name="label" translatable="yes">Shortcut</property>
                 <property name="xalign">1</property>
               </object>
@@ -86,7 +77,6 @@
             </child>
             <child>
               <object class="GtkEntry" id="bang_entry">
-                <property name="visible">True</property>
                 <property name="hexpand">True</property>
 
                 <property name="placeholder-text">!e</property>
@@ -101,8 +91,6 @@
             <!-- Search engine address insight -->
             <child>
               <object class="GtkLabel">
-                <property name="visible">True</property>
-
                 <property name="label" translatable="yes">To determine the search address, perform a search 
using the search engine that you want to add and replace the search term with %s.</property>
                 <property name="xalign">0</property>
                 <property name="wrap">True</property>
@@ -120,7 +108,6 @@
 
             <child>
               <object class="GtkButton" id="remove_button">
-                <property name="visible">True</property>
                 <property name="halign">end</property>
 
                 <property name="label" translatable="yes">R_emove Search Engine</property>
diff --git a/src/resources/gtk/web-extensions-dialog.ui b/src/resources/gtk/web-extensions-dialog.ui
index 67dd0b025..85087bdb6 100644
--- a/src/resources/gtk/web-extensions-dialog.ui
+++ b/src/resources/gtk/web-extensions-dialog.ui
@@ -2,70 +2,56 @@
 <!-- Generated with glade 3.38.0 -->
 <interface>
   <requires lib="gtk+" version="3.20"/>
-  <template class="EphyWebExtensionDialog" parent="HdyWindow">
+  <template class="EphyWebExtensionDialog" parent="GtkWindow">
     <property name="modal">True</property>
-    <property name="window-position">center-on-parent</property>
     <property name="default-width">640</property>
     <property name="default-height">400</property>
     <property name="destroy-with_parent">True</property>
-    <property name="type-hint">dialog</property>
     <property name="title" translatable="yes">Extensions</property>
-    <child>
-      <object class="GtkBox">
-        <property name="visible">True</property>
-        <property name="orientation">vertical</property>
+    <child type="titlebar">
+      <object class="GtkHeaderBar">
         <child>
-          <object class="HdyHeaderBar">
-            <property name="visible">True</property>
-            <property name="show-close-button">True</property>
-            <property name="title" translatable="yes">Extensions</property>
-            <child>
-              <object class="GtkButton" id="add_button">
-                <property name="visible">True</property>
-                <property name="use-underline">True</property>
-                <property name="label" translatable="yes">_Add…</property>
-                <signal name="clicked" handler="on_add_button_clicked"/>
-              </object>
-            </child>
+          <object class="GtkButton" id="add_button">
+            <property name="icon-name">list-add-symbolic</property>
+            <property name="tooltip-text" translatable="yes">Add an Extension</property>
+            <signal name="clicked" handler="on_add_button_clicked"/>
           </object>
         </child>
+      </object>
+    </child>
+    <child>
+      <object class="GtkStack" id="stack">
         <child>
-          <object class="GtkStack" id="stack">
-            <property name="visible">True</property>
-            <property name="vexpand">True</property>
-            <child>
-              <object class="HdyStatusPage">
-                <property name="visible">True</property>
+          <object class="GtkStackPage">
+            <property name="name">empty</property>
+            <property name="child">
+              <object class="AdwStatusPage">
                 <property name="icon-name">application-x-addon-symbolic</property>
                 <property name="title" translatable="yes">No Extensions Installed</property>
                 <property name="description" translatable="yes">Add some extensions to display them 
here.</property>
               </object>
-              <packing>
-                <property name="name">empty</property>
-              </packing>
-            </child>
-            <child>
-              <object class="HdyPreferencesPage">
-                <property name="visible">True</property>
+            </property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkStackPage">
+            <property name="name">list</property>
+            <property name="child">
+              <object class="AdwPreferencesPage">
                 <child>
-                  <object class="HdyPreferencesGroup">
-                    <property name="visible">True</property>
+                  <object class="AdwPreferencesGroup">
                     <child>
                       <object class="GtkListBox" id="listbox">
-                        <property name="visible">True</property>
                         <property name="selection-mode">none</property>
                         <style>
-                          <class name="content"/>
+                          <class name="boxed-list"/>
                         </style>
                       </object>
                     </child>
                   </object>
                 </child>
               </object>
-              <packing>
-                <property name="name">list</property>
-              </packing>
-            </child>
+            </property>
           </object>
         </child>
       </object>
diff --git a/src/resources/gtk/webapp-additional-urls-dialog.ui 
b/src/resources/gtk/webapp-additional-urls-dialog.ui
index a0aaa7649..b58ee4351 100644
--- a/src/resources/gtk/webapp-additional-urls-dialog.ui
+++ b/src/resources/gtk/webapp-additional-urls-dialog.ui
@@ -9,17 +9,14 @@
   </object>
   <template class="EphyWebappAdditionalURLsDialog" parent="GtkDialog">
     <property name="modal">True</property>
-    <property name="window_position">center-on-parent</property>
     <property name="default_width">300</property>
     <property name="default_height">400</property>
     <property name="destroy_with_parent">True</property>
-    <property name="type_hint">dialog</property>
     <property name="title" translatable="yes">Additional URLs</property>
     <child internal-child="vbox">
       <object class="GtkBox">
         <child>
           <object class="GtkLabel">
-            <property name="visible">True</property>
             <property name="xalign">0</property>
             <property name="margin-top">12</property>
             <property name="margin-bottom">12</property>
@@ -31,12 +28,10 @@
         </child>
         <child>
           <object class="GtkScrolledWindow">
-            <property name="visible">True</property>
             <property name="vexpand">True</property>
             <property name="hscrollbar_policy">never</property>
             <child>
               <object class="GtkTreeView" id="treeview">
-                <property name="visible">True</property>
                 <property name="model">liststore</property>
                 <property name="enable_search">False</property>
                 <property name="search_column">0</property>
@@ -70,50 +65,32 @@
         </child>
         <child>
           <object class="GtkActionBar">
-            <property name="visible">True</property>
             <child>
-              <object class="GtkButton">
-                <property name="visible">True</property>
+              <object class="GtkButton" type="start">
+                <property name="icon_name">list-add-symbolic</property>
                 <property name="tooltip_text" translatable="yes">Add new URL</property>
                 <property name="action-name">webapp-additional-urls.new</property>
-                <child>
-                  <object class="GtkImage">
-                    <property name="visible">True</property>
-                    <property name="icon_name">list-add-symbolic</property>
-                  </object>
-                </child>
               </object>
             </child>
-            <child>
+            <child type="start">
               <object class="GtkButton">
-                <property name="visible">True</property>
                 <property name="tooltip_text" translatable="yes">Remove the selected URLs</property>
+                <property name="icon_name">list-remove-symbolic</property>
                 <property name="action-name">webapp-additional-urls.forget</property>
                 <accelerator key="Delete" signal="clicked"/>
                 <accelerator key="KP_Delete" signal="clicked"/>
-                <child>
-                  <object class="GtkImage">
-                    <property name="visible">True</property>
-                    <property name="icon_name">list-remove-symbolic</property>
-                  </object>
-                </child>
               </object>
             </child>
-            <child>
+            <child type="end">
               <object class="GtkButton">
                 <property name="label" translatable="yes">C_lear All</property>
-                <property name="visible">True</property>
                 <property name="use_underline">True</property>
                 <property name="action-name">webapp-additional-urls.forget-all</property>
                 <accelerator key="Delete" modifiers="GDK_SHIFT_MASK" signal="clicked"/>
                 <style>
                   <class name="destructive-action"/>
-                  <class name="text-button"/>
                 </style>
               </object>
-              <packing>
-                <property name="pack-type">end</property>
-              </packing>
             </child>
           </object>
         </child>
diff --git a/src/webextension/api/pageaction.c b/src/webextension/api/pageaction.c
index 1f2d53ff4..7ee94ec90 100644
--- a/src/webextension/api/pageaction.c
+++ b/src/webextension/api/pageaction.c
@@ -57,6 +57,7 @@ pageaction_handler_seticon (EphyWebExtension *self,
   GtkWidget *action;
   g_autoptr (JSCValue) path = NULL;
   g_autoptr (GdkPixbuf) pixbuf = NULL;
+  GtkWidget *child;
 
   action = pageaction_get_action (self, args);
   if (!action)
@@ -65,7 +66,10 @@ pageaction_handler_seticon (EphyWebExtension *self,
   path = jsc_value_object_get_property (args, "path");
   pixbuf = ephy_web_extension_load_pixbuf (self, jsc_value_to_string (path));
 
-  gtk_image_set_from_pixbuf (GTK_IMAGE (gtk_bin_get_child (GTK_BIN (action))), pixbuf);
+  /* action can be a GtkButton or GtkMenuButton. They both have a "child" property */
+  g_object_get (action, "child", &child, NULL);
+
+  gtk_image_set_from_pixbuf (GTK_IMAGE (child), pixbuf);
 
   return NULL;
 }
@@ -94,7 +98,7 @@ pageaction_handler_gettitle (EphyWebExtension *self,
                              JSCValue         *args)
 {
   GtkWidget *action;
-  g_autofree char *title = NULL;
+  const char *title = NULL;
 
   action = pageaction_get_action (self, args);
   if (!action)
diff --git a/src/webextension/ephy-web-extension-manager.c b/src/webextension/ephy-web-extension-manager.c
index 4aaa9f9fe..db78f8697 100644
--- a/src/webextension/ephy-web-extension-manager.c
+++ b/src/webextension/ephy-web-extension-manager.c
@@ -26,7 +26,7 @@
 #include "ephy-embed-utils.h"
 #include "ephy-file-helpers.h"
 #include "ephy-header-bar.h"
-#include "ephy-location-entry.h"
+//#include "ephy-location-entry.h"
 #include "ephy-notification.h"
 #include "ephy-settings.h"
 #include "ephy-shell.h"
@@ -40,6 +40,7 @@
 #include "api/runtime.h"
 #include "api/tabs.h"
 
+#include <adwaita.h>
 #include <json-glib/json-glib.h>
 
 struct _EphyWebExtensionManager {
@@ -149,6 +150,16 @@ ephy_web_extension_manager_scan_directory (EphyWebExtensionManager *self,
   }
 }
 
+static void
+destroy_action (GtkWidget *action)
+{
+  GtkWidget *parent = gtk_widget_get_parent (action);
+
+  g_assert (GTK_IS_BOX (parent));
+
+  gtk_box_remove (GTK_BOX (parent), action);
+}
+
 static void
 ephy_web_extension_manager_constructed (GObject *object)
 {
@@ -157,7 +168,7 @@ ephy_web_extension_manager_constructed (GObject *object)
 
   self->background_web_views = g_hash_table_new (NULL, NULL);
   self->page_action_map = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)g_hash_table_destroy);
-  self->browser_action_map = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)gtk_widget_destroy);
+  self->browser_action_map = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)destroy_action);
   self->web_extensions = NULL;
 
   ephy_web_extension_manager_scan_directory (self, dir);
@@ -282,11 +293,11 @@ ephy_web_extension_manager_uninstall (EphyWebExtensionManager *self,
   ephy_web_extension_remove (web_extension);
   ephy_web_extension_manager_remove_from_list (self, web_extension);
 }
-
 void
 ephy_web_extension_manager_update_location_entry (EphyWebExtensionManager *self,
                                                   EphyWindow              *window)
 {
+/*
   GtkWidget *title_widget;
   EphyLocationEntry *lentry;
   EphyTabView *tab_view = ephy_window_get_tab_view (EPHY_WINDOW (window));
@@ -312,6 +323,7 @@ ephy_web_extension_manager_update_location_entry (EphyWebExtensionManager *self,
     if (action)
       ephy_location_entry_page_action_add (lentry, action);
   }
+*/
 }
 
 EphyWebView *
@@ -329,10 +341,12 @@ ephy_web_extension_manager_set_background_web_view (EphyWebExtensionManager *sel
   g_hash_table_insert (self->background_web_views, web_extension, web_view);
 }
 
-static gboolean
-page_action_clicked (GtkWidget      *event_box,
-                     GdkEventButton *event,
-                     gpointer        user_data)
+static void
+page_action_clicked (GtkGesture *gesture,
+                     int         n_press,
+                     double      x,
+                     double      y,
+                     gpointer    user_data)
 {
   EphyWebExtension *web_extension = EPHY_WEB_EXTENSION (user_data);
   EphyShell *shell = ephy_shell_get_default ();
@@ -344,6 +358,8 @@ page_action_clicked (GtkWidget      *event_box,
   EphyWebExtensionManager *self = ephy_shell_get_web_extension_manager (shell);
   WebKitWebView *web_view = WEBKIT_WEB_VIEW (ephy_web_extension_manager_get_background_web_view (self, 
web_extension));
 
+  gtk_gesture_set_state (gesture, GTK_EVENT_SEQUENCE_CLAIMED);
+
   json_builder_begin_object (builder);
   json_builder_set_member_name (builder, "url");
   json_builder_add_string_value (builder, ephy_web_view_get_address (view));
@@ -362,8 +378,6 @@ page_action_clicked (GtkWidget      *event_box,
                                            NULL,
                                            NULL,
                                            NULL);
-
-  return GDK_EVENT_STOP;
 }
 
 static GtkWidget *
@@ -372,17 +386,20 @@ create_page_action_widget (EphyWebExtensionManager *self,
 {
   GtkWidget *image;
   GtkWidget *event_box;
-  GtkStyleContext *context;
+  GtkGesture *gesture;
 
   /* Create new event box with page action */
-  event_box = gtk_event_box_new ();
+  // FIXME: the bin is here so if some code does get_parent(), it won't fall
+  // apart. Remove this once we know nothing is doing this
+  event_box = adw_bin_new ();
   image = gtk_image_new ();
-  gtk_container_add (GTK_CONTAINER (event_box), image);
-  g_signal_connect_object (event_box, "button_press_event", G_CALLBACK (page_action_clicked), web_extension, 
0);
-  gtk_widget_show_all (event_box);
+  adw_bin_set_child (ADW_BIN (event_box), image);
+  gtk_widget_add_css_class (image, "entry_icon");
 
-  context = gtk_widget_get_style_context (image);
-  gtk_style_context_add_class (context, "entry_icon");
+  gesture = gtk_gesture_click_new ();
+  g_signal_connect_object (gesture, "released",
+                           G_CALLBACK (page_action_clicked), web_extension, 0);
+  gtk_widget_add_controller (image, GTK_EVENT_CONTROLLER (gesture));
 
   return g_object_ref (event_box);
 }
@@ -536,7 +553,7 @@ ephy_web_extension_manager_add_web_extension_to_webview (EphyWebExtensionManager
                                                          EphyWindow              *window,
                                                          EphyWebView             *web_view)
 {
-  GtkWidget *title_widget = GTK_WIDGET (ephy_header_bar_get_title_widget (EPHY_HEADER_BAR 
(ephy_window_get_header_bar (window))));
+/*  GtkWidget *title_widget = GTK_WIDGET (ephy_header_bar_get_title_widget (EPHY_HEADER_BAR 
(ephy_window_get_header_bar (window))));
   EphyLocationEntry *lentry = NULL;
 
   if (EPHY_IS_LOCATION_ENTRY (title_widget)) {
@@ -554,22 +571,22 @@ ephy_web_extension_manager_add_web_extension_to_webview (EphyWebExtensionManager
 
       g_hash_table_insert (table, web_view, g_steal_pointer (&page_action));
     }
-  }
+  }*/
 
   update_translations (web_extension);
   add_content_scripts (web_extension, web_view);
 }
 
 static void
-page_attached_cb (HdyTabView *tab_view,
-                  HdyTabPage *page,
+page_attached_cb (AdwTabView *tab_view,
+                  AdwTabPage *page,
                   gint        position,
                   gpointer    user_data)
 {
   EphyWebExtension *web_extension = EPHY_WEB_EXTENSION (user_data);
-  GtkWidget *child = hdy_tab_page_get_child (page);
+  GtkWidget *child = adw_tab_page_get_child (page);
   EphyWebView *web_view = ephy_embed_get_web_view (EPHY_EMBED (child));
-  EphyWindow *window = EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (tab_view)));
+  EphyWindow *window = EPHY_WINDOW (gtk_widget_get_root (GTK_WIDGET (tab_view)));
   EphyWebExtensionManager *self = ephy_shell_get_web_extension_manager (ephy_shell_get_default ());
 
   ephy_web_extension_manager_add_web_extension_to_webview (self, web_extension, window, web_view);
@@ -671,7 +688,7 @@ create_browser_popup (EphyWebExtension *web_extension)
   g_autofree char *dir_name = NULL;
   const char *popup;
 
-  popover = gtk_popover_new (NULL);
+  popover = gtk_popover_new ();
 
   web_view = create_web_extensions_webview (web_extension, TRUE);
 
@@ -680,8 +697,7 @@ create_browser_popup (EphyWebExtension *web_extension)
   base_uri = g_strdup_printf ("ephy-webextension:///%s/", dir_name);
   data = ephy_web_extension_get_resource_as_string (web_extension, popup);
   webkit_web_view_load_html (WEBKIT_WEB_VIEW (web_view), (char *)data, base_uri);
-  gtk_container_add (GTK_CONTAINER (popover), web_view);
-  gtk_widget_show_all (web_view);
+  gtk_popover_set_child (GTK_POPOVER (popover), web_view);
 
   return popover;
 }
@@ -728,8 +744,7 @@ create_browser_action (EphyWebExtension *web_extension)
     popover = create_browser_popup (web_extension);
     gtk_menu_button_set_popover (GTK_MENU_BUTTON (button), popover);
 
-    gtk_button_set_image (GTK_BUTTON (button), image);
-    gtk_widget_set_visible (button, TRUE);
+    gtk_menu_button_set_child (GTK_MENU_BUTTON (button), image);
   } else {
     GdkPixbuf *pixbuf = ephy_web_extension_browser_action_get_icon (web_extension, 16);
 
@@ -738,11 +753,10 @@ create_browser_action (EphyWebExtension *web_extension)
     if (pixbuf)
       image = gtk_image_new_from_pixbuf (pixbuf);
     else
-      image = gtk_image_new_from_icon_name ("application-x-addon-symbolic", GTK_ICON_SIZE_BUTTON);
+      image = gtk_image_new_from_icon_name ("application-x-addon-symbolic");
 
     g_signal_connect_object (button, "clicked", G_CALLBACK (on_browser_action_clicked), web_extension, 0);
-    gtk_button_set_image (GTK_BUTTON (button), image);
-    gtk_widget_set_visible (button, TRUE);
+    gtk_button_set_child (GTK_BUTTON (button), image);
   }
 
   return button;
@@ -754,7 +768,7 @@ ephy_web_extension_manager_add_web_extension_to_window (EphyWebExtensionManager
                                                         EphyWindow              *window)
 {
   EphyTabView *tab_view = ephy_window_get_tab_view (EPHY_WINDOW (window));
-  HdyTabView *view = ephy_tab_view_get_tab_view (tab_view);
+  AdwTabView *view = ephy_tab_view_get_tab_view (tab_view);
 
   if (!ephy_web_extension_manager_is_active (self, web_extension))
     return;
@@ -791,14 +805,14 @@ ephy_web_extension_manager_remove_web_extension_from_webview (EphyWebExtensionMa
                                                               EphyWindow              *window,
                                                               EphyWebView             *web_view)
 {
-  GtkWidget *title_widget = GTK_WIDGET (ephy_header_bar_get_title_widget (EPHY_HEADER_BAR 
(ephy_window_get_header_bar (window))));
-  EphyLocationEntry *lentry = NULL;
+//  GtkWidget *title_widget = GTK_WIDGET (ephy_header_bar_get_title_widget (EPHY_HEADER_BAR 
(ephy_window_get_header_bar (window))));
+//  EphyLocationEntry *lentry = NULL;
   GHashTableIter iter;
   gpointer key;
   GHashTable *table;
 
-  if (EPHY_IS_LOCATION_ENTRY (title_widget))
-    lentry = EPHY_LOCATION_ENTRY (title_widget);
+//  if (EPHY_IS_LOCATION_ENTRY (title_widget))
+//    lentry = EPHY_LOCATION_ENTRY (title_widget);
 
   g_hash_table_iter_init (&iter, self->page_action_map);
   while (g_hash_table_iter_next (&iter, &key, (gpointer) & table)) {
@@ -808,8 +822,8 @@ ephy_web_extension_manager_remove_web_extension_from_webview (EphyWebExtensionMa
     g_hash_table_foreach_remove (table, remove_page_action, web_view);
   }
 
-  if (lentry)
-    ephy_location_entry_page_action_clear (lentry);
+//  if (lentry)
+//    ephy_location_entry_page_action_clear (lentry);
 
   remove_content_scripts (web_extension, web_view);
   remove_custom_css (web_extension, web_view);
@@ -821,7 +835,7 @@ ephy_web_extension_manager_remove_web_extension_from_window (EphyWebExtensionMan
                                                              EphyWindow              *window)
 {
   EphyTabView *tab_view = ephy_window_get_tab_view (EPHY_WINDOW (window));
-  HdyTabView *view = ephy_tab_view_get_tab_view (tab_view);
+  AdwTabView *view = ephy_tab_view_get_tab_view (tab_view);
   GtkWidget *browser_action_widget;
 
   if (ephy_web_extension_manager_is_active (self, web_extension))
diff --git a/src/window-commands.c b/src/window-commands.c
index d101f0d93..35f10139a 100644
--- a/src/window-commands.c
+++ b/src/window-commands.c
@@ -25,7 +25,7 @@
 
 #include "window-commands.h"
 
-#include "ephy-add-bookmark-popover.h"
+//#include "ephy-add-bookmark-popover.h"
 #include "ephy-bookmarks-export.h"
 #include "ephy-bookmarks-import.h"
 #include "ephy-bookmarks-manager.h"
@@ -43,9 +43,9 @@
 #include "ephy-flatpak-utils.h"
 #include "ephy-gui.h"
 #include "ephy-header-bar.h"
-#include "ephy-history-dialog.h"
+//#include "ephy-history-dialog.h"
 #include "ephy-link.h"
-#include "ephy-location-entry.h"
+//#include "ephy-location-entry.h"
 #include "ephy-password-import.h"
 #include "ephy-prefs.h"
 #include "ephy-session.h"
@@ -252,10 +252,10 @@ show_import_export_result (GtkWindow  *parent,
 
   if (destroy_parent)
     g_signal_connect_swapped (info_dialog, "response",
-                              G_CALLBACK (gtk_widget_destroy), parent);
+                              G_CALLBACK (gtk_window_destroy), parent);
 
   g_signal_connect (info_dialog, "response",
-                    G_CALLBACK (gtk_widget_destroy), NULL);
+                    G_CALLBACK (gtk_window_destroy), NULL);
 
   gtk_window_present (GTK_WINDOW (info_dialog));
 }
@@ -275,11 +275,11 @@ show_firefox_profile_selector_cb (GtkDialog       *selector,
 
     list_box = g_object_get_data (G_OBJECT (selector), "list_box");
     row = gtk_list_box_get_selected_row (GTK_LIST_BOX (list_box));
-    row_widget = gtk_bin_get_child (GTK_BIN (row));
+    row_widget = gtk_list_box_row_get_child (GTK_LIST_BOX_ROW (row));
     selected_profile = g_object_steal_data (G_OBJECT (row_widget), "profile_path");
   }
 
-  gtk_widget_destroy (GTK_WIDGET (selector));
+  gtk_window_destroy (GTK_WINDOW (selector));
 
   /* If there are multiple profiles, but the user didn't select one in
    * the profile (he pressed Cancel), don't display the import info dialog
@@ -332,11 +332,9 @@ show_firefox_profile_selector (GtkWindow *parent,
     gtk_widget_set_margin_bottom (label, 6);
     gtk_list_box_insert (GTK_LIST_BOX (list_box), label, -1);
   }
-  gtk_container_add (GTK_CONTAINER (content_area), list_box);
+  gtk_box_append (GTK_BOX (content_area), list_box);
   g_object_set_data (G_OBJECT (selector), "list_box", list_box);
 
-  gtk_widget_show_all (content_area);
-
   g_signal_connect (selector, "response",
                     G_CALLBACK (show_firefox_profile_selector_cb),
                     parent);
@@ -351,6 +349,7 @@ dialog_bookmarks_import_file_chooser_cb (GtkNativeDialog *file_chooser_dialog,
 {
   EphyBookmarksManager *manager = ephy_shell_get_bookmarks_manager (ephy_shell_get_default ());
   g_autoptr (GError) error = NULL;
+  g_autoptr (GFile) file = NULL;
   g_autofree char *filename = NULL;
   gboolean imported;
 
@@ -359,7 +358,8 @@ dialog_bookmarks_import_file_chooser_cb (GtkNativeDialog *file_chooser_dialog,
   if (response != GTK_RESPONSE_ACCEPT)
     return;
 
-  filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_chooser_dialog));
+  file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (file_chooser_dialog));
+  filename = g_file_get_path (file);
   imported = ephy_bookmarks_import (manager, filename, &error);
 
   show_import_export_result (parent, imported, imported, error,
@@ -396,6 +396,7 @@ dialog_bookmarks_import_from_html_file_chooser_cb (GtkNativeDialog *file_chooser
 {
   EphyBookmarksManager *manager = ephy_shell_get_bookmarks_manager (ephy_shell_get_default ());
   g_autoptr (GError) error = NULL;
+  g_autoptr (GFile) file = NULL;
   g_autofree char *filename = NULL;
   gboolean imported;
 
@@ -404,7 +405,8 @@ dialog_bookmarks_import_from_html_file_chooser_cb (GtkNativeDialog *file_chooser
   if (response != GTK_RESPONSE_ACCEPT)
     return;
 
-  filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_chooser_dialog));
+  file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (file_chooser_dialog));
+  filename = g_file_get_path (file);
   imported = ephy_bookmarks_import_from_html (manager, filename, &error);
 
   show_import_export_result (parent, imported, imported, error,
@@ -522,7 +524,7 @@ dialog_bookmarks_import_cb (GtkWindow       *parent,
         g_assert_not_reached ();
     }
   } else if (response == GTK_RESPONSE_CANCEL) {
-    gtk_widget_destroy (GTK_WIDGET (parent));
+    gtk_window_destroy (GTK_WINDOW (parent));
   }
 }
 
@@ -562,9 +564,10 @@ window_cmd_import_bookmarks (GSimpleAction *action,
   gtk_widget_set_margin_end (content_area, 30);
 
   hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
+  gtk_widget_set_vexpand (hbox, TRUE);
 
   label = gtk_label_new (_("From:"));
-  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
+  gtk_box_append (GTK_BOX (hbox), label);
 
   tree_model = create_tree_model ();
   combo_box = gtk_combo_box_new_with_model (GTK_TREE_MODEL (tree_model));
@@ -580,16 +583,16 @@ window_cmd_import_bookmarks (GSimpleAction *action,
   gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), cell_renderer, TRUE);
   gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), cell_renderer,
                                   "text", 0, NULL);
-  gtk_box_pack_start (GTK_BOX (hbox), combo_box, FALSE, TRUE, 0);
+  gtk_box_append (GTK_BOX (hbox), combo_box);
 
-  gtk_container_add (GTK_CONTAINER (content_area), hbox);
+  gtk_box_append (GTK_BOX (content_area), hbox);
 
   gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
   g_signal_connect (dialog, "response",
                     G_CALLBACK (dialog_bookmarks_import_cb),
                     GTK_COMBO_BOX (combo_box));
 
-  gtk_widget_show_all (dialog);
+  gtk_window_present (GTK_WINDOW (dialog));
 }
 
 static void
@@ -617,6 +620,7 @@ export_bookmarks_file_chooser_cb (GtkNativeDialog *dialog,
                                   GtkWindow       *parent)
 {
   EphyBookmarksManager *manager = ephy_shell_get_bookmarks_manager (ephy_shell_get_default ());
+  g_autoptr (GFile) file = NULL;
   g_autofree char *filename = NULL;
 
   gtk_native_dialog_destroy (dialog);
@@ -624,7 +628,8 @@ export_bookmarks_file_chooser_cb (GtkNativeDialog *dialog,
   if (response != GTK_RESPONSE_ACCEPT)
     return;
 
-  filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
+  file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
+  filename = g_file_get_path (file);
   ephy_bookmarks_export (g_object_ref (manager),
                          filename,
                          NULL,
@@ -646,7 +651,6 @@ window_cmd_export_bookmarks (GSimpleAction *action,
                                                           GTK_FILE_CHOOSER_ACTION_SAVE,
                                                           _("_Save"),
                                                           _("_Cancel")));
-  gtk_file_chooser_set_show_hidden (dialog, TRUE);
 
   /* Translators: Only translate the part before ".html" (e.g. "bookmarks") */
   gtk_file_chooser_set_current_name (dialog, _("bookmarks.html"));
@@ -748,7 +752,7 @@ dialog_passwords_import_cb (GtkDialog   *dialog,
         g_assert_not_reached ();
     }
   } else {
-    gtk_widget_destroy (GTK_WIDGET (dialog));
+    gtk_window_destroy (GTK_WINDOW (dialog));
   }
 }
 
@@ -804,9 +808,10 @@ window_cmd_import_passwords (GSimpleAction *action,
   gtk_widget_set_margin_end (content_area, 30);
 
   hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
+  gtk_widget_set_vexpand (hbox, TRUE);
 
   label = gtk_label_new (_("From:"));
-  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
+  gtk_box_append (GTK_BOX (hbox), label);
 
   tree_model = create_import_passwords_tree_model ();
 
@@ -829,19 +834,20 @@ window_cmd_import_passwords (GSimpleAction *action,
   gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), cell_renderer, TRUE);
   gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), cell_renderer,
                                   "text", 0, NULL);
-  gtk_box_pack_start (GTK_BOX (hbox), combo_box, FALSE, TRUE, 0);
+  gtk_box_append (GTK_BOX (hbox), combo_box);
 
-  gtk_container_add (GTK_CONTAINER (content_area), hbox);
+  gtk_box_append (GTK_BOX (content_area), hbox);
 
   gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
   g_signal_connect (dialog, "response",
                     G_CALLBACK (dialog_passwords_import_cb),
                     GTK_COMBO_BOX (combo_box));
 
-  gtk_widget_show_all (dialog);
+  gtk_window_present (GTK_WINDOW (dialog));
 }
 
 
+/*
 void
 window_cmd_show_history (GSimpleAction *action,
                          GVariant      *parameter,
@@ -854,7 +860,7 @@ window_cmd_show_history (GSimpleAction *action,
   if (GTK_WINDOW (user_data) != gtk_window_get_transient_for (GTK_WINDOW (dialog)))
     gtk_window_set_transient_for (GTK_WINDOW (dialog),
                                   GTK_WINDOW (user_data));
-  gtk_window_present_with_time (GTK_WINDOW (dialog), gtk_get_current_event_time ());
+  gtk_window_present (GTK_WINDOW (dialog));
 }
 
 void
@@ -869,8 +875,9 @@ window_cmd_show_firefox_sync (GSimpleAction *action,
   if (GTK_WINDOW (user_data) != gtk_window_get_transient_for (GTK_WINDOW (dialog)))
     gtk_window_set_transient_for (GTK_WINDOW (dialog),
                                   GTK_WINDOW (user_data));
-  gtk_window_present_with_time (GTK_WINDOW (dialog), gtk_get_current_event_time ());
+  gtk_window_present (GTK_WINDOW (dialog));
 }
+*/
 
 void
 window_cmd_show_preferences (GSimpleAction *action,
@@ -885,7 +892,15 @@ window_cmd_show_preferences (GSimpleAction *action,
     gtk_window_set_transient_for (dialog,
                                   GTK_WINDOW (user_data));
 
-  gtk_window_present_with_time (dialog, gtk_get_current_event_time ());
+  gtk_window_present (dialog);
+}
+
+static void
+window_destroyed (GtkWidget  *widget,
+                  GtkWidget **widget_pointer)
+{
+  if (widget_pointer)
+    *widget_pointer = NULL;
 }
 
 void
@@ -922,7 +937,7 @@ window_cmd_show_shortcuts (GSimpleAction *action,
 
     g_signal_connect (shortcuts_window,
                       "destroy",
-                      G_CALLBACK (gtk_widget_destroyed),
+                      G_CALLBACK (window_destroyed),
                       &shortcuts_window);
 
     g_object_unref (builder);
@@ -931,7 +946,7 @@ window_cmd_show_shortcuts (GSimpleAction *action,
   if (gtk_window_get_transient_for (GTK_WINDOW (shortcuts_window)) != GTK_WINDOW (user_data))
     gtk_window_set_transient_for (GTK_WINDOW (shortcuts_window), GTK_WINDOW (user_data));
 
-  gtk_window_present_with_time (GTK_WINDOW (shortcuts_window), gtk_get_current_event_time ());
+  gtk_window_present (GTK_WINDOW (shortcuts_window));
 }
 
 void
@@ -1045,7 +1060,7 @@ window_cmd_show_about (GSimpleAction *action,
   gtk_about_dialog_set_translator_credits (dialog, _("translator-credits"));
 
   g_signal_connect (dialog, "response",
-                    G_CALLBACK (gtk_widget_destroy), NULL);
+                    G_CALLBACK (gtk_window_destroy), NULL);
   gtk_window_present (GTK_WINDOW (dialog));
 
   g_free (comments);
@@ -1123,7 +1138,7 @@ window_cmd_navigation_new_tab (GSimpleAction *action,
     back_uri = webkit_back_forward_list_item_get_original_uri (back_item);
 
     embed = ephy_shell_new_tab (ephy_shell_get_default (),
-                                EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (embed))),
+                                EPHY_WINDOW (gtk_widget_get_root (GTK_WIDGET (embed))),
                                 NULL,
                                 0);
 
@@ -1143,7 +1158,7 @@ window_cmd_navigation_new_tab (GSimpleAction *action,
     forward_uri = webkit_back_forward_list_item_get_original_uri (forward_item);
 
     embed = ephy_shell_new_tab (ephy_shell_get_default (),
-                                EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (embed))),
+                                EPHY_WINDOW (gtk_widget_get_root (GTK_WIDGET (embed))),
                                 embed,
                                 0);
 
@@ -1176,7 +1191,7 @@ check_tab_has_modified_forms_confirm_cb (GtkDialog       *dialog,
 {
   WebKitWebView *view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed);
 
-  gtk_widget_destroy (GTK_WIDGET (dialog));
+  gtk_window_destroy (GTK_WINDOW (dialog));
 
   if (response == GTK_RESPONSE_ACCEPT) {
     gtk_widget_grab_focus (GTK_WIDGET (embed));
@@ -1191,7 +1206,7 @@ check_tab_has_modified_forms_and_reload_cb (EphyWebView  *view,
                                             GAsyncResult *result,
                                             EphyEmbed    *embed)
 {
-  EphyWindow *window = EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view)));
+  EphyWindow *window = EPHY_WINDOW (gtk_widget_get_root (GTK_WIDGET (view)));
   GtkWidget *dialog;
   GtkWidget *button;
   gboolean has_modified_forms;
@@ -1272,7 +1287,7 @@ window_cmd_combined_stop_reload (GSimpleAction *action,
   GAction *gaction;
   GVariant *state;
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (user_data), "toolbar");
+  action_group = ephy_window_get_action_group (EPHY_WINDOW (user_data), "toolbar");
 
   state = g_action_get_state (G_ACTION (action));
   /* If loading */
@@ -1295,12 +1310,10 @@ window_cmd_page_menu (GSimpleAction *action,
   EphyWindow *window = EPHY_WINDOW (user_data);
   EphyHeaderBar *header_bar;
   GtkMenuButton *button;
-  GtkPopover *popover;
 
   header_bar = EPHY_HEADER_BAR (ephy_window_get_header_bar (window));
   button = GTK_MENU_BUTTON (ephy_header_bar_get_page_menu_button (header_bar));
-  popover = gtk_menu_button_get_popover (button);
-  gtk_popover_popup (popover);
+  gtk_menu_button_popup (button);
 }
 
 void
@@ -1324,6 +1337,7 @@ window_cmd_new_tab (GSimpleAction *action,
   g_free (url);
 }
 
+#if 0
 static void
 open_response_cb (GtkNativeDialog *dialog,
                   int              response,
@@ -2218,6 +2232,7 @@ window_cmd_redo (GSimpleAction *action,
     }
   }
 }
+
 void
 window_cmd_cut (GSimpleAction *action,
                 GVariant      *parameter,
@@ -2296,6 +2311,7 @@ window_cmd_paste_as_plain_text (GSimpleAction *action,
     webkit_web_view_execute_editing_command (EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed), 
WEBKIT_EDITING_COMMAND_PASTE_AS_PLAIN_TEXT);
   }
 }
+#endif
 
 void
 window_cmd_delete (GSimpleAction *action,
@@ -2374,6 +2390,7 @@ window_cmd_find_next (GSimpleAction *action,
   ephy_find_toolbar_find_next (toolbar);
 }
 
+#if 0
 void
 window_cmd_open_bookmark (GSimpleAction *action,
                           GVariant      *parameter,
@@ -2419,6 +2436,7 @@ window_cmd_bookmarks (GSimpleAction *action,
   action_bar_end = EPHY_ACTION_BAR_END (ephy_header_bar_get_action_bar_end (header_bar));
   ephy_action_bar_end_show_bookmarks (action_bar_end);
 }
+#endif
 
 void
 window_cmd_show_downloads (GSimpleAction *action,
@@ -2463,6 +2481,7 @@ window_cmd_zoom_normal (GSimpleAction *action,
   ephy_window_set_zoom (window, 0.0);
 }
 
+#if 0
 void
 window_cmd_encoding (GSimpleAction *action,
                      GVariant      *parameter,
@@ -2475,6 +2494,7 @@ window_cmd_encoding (GSimpleAction *action,
   gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (window));
   gtk_window_present (GTK_WINDOW (dialog));
 }
+#endif
 
 void
 window_cmd_page_source (GSimpleAction *action,
@@ -2518,7 +2538,7 @@ window_cmd_page_source (GSimpleAction *action,
 
   new_embed = ephy_shell_new_tab
                 (ephy_shell_get_default (),
-                EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (embed))),
+                EPHY_WINDOW (gtk_widget_get_root (GTK_WIDGET (embed))),
                 embed,
                 EPHY_NEW_TAB_JUMP | EPHY_NEW_TAB_APPEND_AFTER);
 
@@ -2585,7 +2605,6 @@ window_cmd_send_to (GSimpleAction *action,
   EphyEmbed *embed;
   char *command, *subject, *body;
   const char *location, *title;
-  GError *error = NULL;
 
   embed = ephy_embed_container_get_active_child
             (EPHY_EMBED_CONTAINER (window));
@@ -2604,10 +2623,7 @@ window_cmd_send_to (GSimpleAction *action,
   g_free (subject);
   g_free (body);
 
-  if (!gtk_show_uri_on_window (GTK_WINDOW (window), command, gtk_get_current_event_time (), &error)) {
-    g_warning ("Unable to send link by email: %s\n", error->message);
-    g_error_free (error);
-  }
+  gtk_show_uri (GTK_WINDOW (window), command, GDK_CURRENT_TIME);
 
   g_free (command);
 }
@@ -2620,6 +2636,7 @@ window_cmd_go_location (GSimpleAction *action,
   ephy_window_activate_location (user_data);
 }
 
+#if 0
 void
 window_cmd_location_search (GSimpleAction *action,
                             GVariant      *parameter,
@@ -2627,6 +2644,7 @@ window_cmd_location_search (GSimpleAction *action,
 {
   ephy_window_location_search (user_data);
 }
+#endif
 
 void
 window_cmd_go_home (GSimpleAction *action,
@@ -2659,10 +2677,10 @@ enable_browse_with_caret_state_cb (GtkMessageDialog *dialog,
                                    GtkResponseType   response,
                                    EphyWindow       *window)
 {
-  GActionGroup *action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "win");
+  GActionGroup *action_group = ephy_window_get_action_group (window, "win");
   GAction *action;
 
-  gtk_widget_destroy (GTK_WIDGET (dialog));
+  gtk_window_destroy (GTK_WINDOW (dialog));
 
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group),
                                        "browse-with-caret");
@@ -2904,7 +2922,7 @@ window_cmd_homepage_new_tab (GSimpleAction *action,
   g_assert (embed != NULL);
 
   embed = ephy_shell_new_tab (ephy_shell_get_default (),
-                              EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (embed))),
+                              EPHY_WINDOW (gtk_widget_get_root (GTK_WIDGET (embed))),
                               NULL,
                               0);
 
@@ -2917,18 +2935,26 @@ window_cmd_homepage_new_tab (GSimpleAction *action,
 }
 
 static void
-clipboard_text_received_cb (GtkClipboard *clipboard,
-                            const gchar  *text,
+clipboard_text_received_cb (GdkClipboard *clipboard,
+                            GAsyncResult *res,
                             EphyWindow   *window)
 {
   EphyEmbed *embed;
   EphyWebView *web_view;
+  g_autoptr (GError) error = NULL;
+  g_autofree char *text;
+
+  text = gdk_clipboard_read_text_finish (clipboard, res, &error);
+  if (error) {
+    g_warning ("Failed to the URL from clipboard: %s", error->message);
+    return;
+  }
 
   embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window));
   g_assert (embed != NULL);
 
   embed = ephy_shell_new_tab (ephy_shell_get_default (),
-                              EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (embed))),
+                              EPHY_WINDOW (gtk_widget_get_root (GTK_WIDGET (embed))),
                               NULL,
                               0);
 
@@ -2947,12 +2973,13 @@ window_cmd_new_tab_from_clipboard (GSimpleAction *action,
                                    gpointer       user_data)
 {
   EphyWindow *ephy_window = EPHY_WINDOW (user_data);
-  GtkClipboard *clipboard;
+  GdkClipboard *clipboard;
 
-  clipboard = gtk_clipboard_get_default (gdk_display_get_default ());
-  gtk_clipboard_request_text (clipboard,
-                              (GtkClipboardTextReceivedFunc)clipboard_text_received_cb,
-                              g_object_ref (ephy_window));
+  clipboard = gtk_widget_get_clipboard (GTK_WIDGET (ephy_window));
+  gdk_clipboard_read_text_async (clipboard,
+                                 NULL,
+                                 (GAsyncReadyCallback) clipboard_text_received_cb,
+                                 g_object_ref (ephy_window));
 }
 
 void
@@ -3010,5 +3037,5 @@ window_cmd_extensions (GSimpleAction *action,
 
   dialog = ephy_web_extension_dialog_new ();
   gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (window));
-  gtk_widget_show_all (dialog);
+  gtk_window_present (GTK_WINDOW (dialog));
 }
diff --git a/tests/ephy-embed-shell-test.c b/tests/ephy-embed-shell-test.c
index a3107dac9..335bab82a 100644
--- a/tests/ephy-embed-shell-test.c
+++ b/tests/ephy-embed-shell-test.c
@@ -50,9 +50,9 @@ test_ephy_embed_shell_web_view_created (void)
   g_signal_connect (embed_shell, "web-view-created",
                     G_CALLBACK (web_view_created_cb), &web_view_created);
 
-  view = ephy_web_view_new ();
+  view = g_object_ref_sink (ephy_web_view_new ());
   g_assert_true (web_view_created);
-  gtk_widget_destroy (view);
+  g_object_unref (view);
 }
 
 int
diff --git a/tests/ephy-web-view-test.c b/tests/ephy-web-view-test.c
index 3c359237e..2c50a8860 100644
--- a/tests/ephy-web-view-test.c
+++ b/tests/ephy-web-view-test.c
@@ -168,10 +168,10 @@ test_ephy_web_view_load_url (void)
     URLTest test;
     GMainLoop *loop;
     EphyWebView *view;
-    GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    GtkWidget *window = gtk_window_new ();
 
     view = EPHY_WEB_VIEW (ephy_web_view_new ());
-    gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (view));
+    gtk_window_set_child (GTK_WINDOW (window), GTK_WIDGET (view));
     test = test_load_url[i];
     loop = g_main_loop_new (NULL, FALSE);
 
@@ -187,7 +187,7 @@ test_ephy_web_view_load_url (void)
 
     g_main_loop_run (loop);
     g_main_loop_unref (loop);
-    g_object_unref (g_object_ref_sink (view));
+    g_object_unref (window);
   }
 }
 
diff --git a/tests/meson.build b/tests/meson.build
index bfee4398c..a00dc89e5 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -72,25 +72,25 @@ if get_option('unit_tests').enabled()
        env: envs
   )
 
-  history_test = executable('test-ephy-history',
-    'ephy-history-test.c',
-    dependencies: ephymain_dep,
-    c_args: test_cargs,
-  )
-  test('History test',
-       history_test,
-       env: envs
-  )
-
-  location_entry_test = executable('test-location-entry',
-    'ephy-location-entry-test.c',
-    dependencies: ephymain_dep,
-    c_args: test_cargs,
-  )
-  test('Location entry test',
-       location_entry_test,
-       env: envs
-  )
+#  history_test = executable('test-ephy-history',
+#    'ephy-history-test.c',
+#    dependencies: ephymain_dep,
+#    c_args: test_cargs,
+#  )
+#  test('History test',
+#       history_test,
+#       env: envs
+#  )
+
+#  location_entry_test = executable('test-location-entry',
+#    'ephy-location-entry-test.c',
+#    dependencies: ephymain_dep,
+#    c_args: test_cargs,
+#  )
+#  test('Location entry test',
+#       location_entry_test,
+#       env: envs
+#  )
 
   migration_test = executable('test-ephy-migration',
     'ephy-migration-test.c',


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]