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




commit 195aead32df1a0e819e54e74dd0ef752728595ac
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/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.h                |   4 +-
 src/ephy-fullscreen-box.c                     | 181 ++++-----
 src/ephy-fullscreen-box.h                     |   2 +-
 src/ephy-header-bar.c                         |  99 +++--
 src/ephy-header-bar.h                         |   4 +-
 src/ephy-history-dialog.c                     |  41 +--
 src/ephy-history-dialog.h                     |   4 +-
 src/ephy-link.c                               |   2 +
 src/ephy-pages-button.c                       |   2 +-
 src/ephy-session.c                            |  42 ++-
 src/ephy-shell.c                              |  41 +--
 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                             | 510 ++++++++++++--------------
 src/ephy-window.h                             |   4 +-
 src/meson.build                               |  70 ++--
 src/popup-commands.c                          |  13 +-
 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/encoding-row.ui             |   6 +-
 src/resources/gtk/history-dialog.ui           | 171 +++------
 src/resources/gtk/page-menu-popover.ui        | 482 ++++++++----------------
 src/resources/gtk/pages-button.ui             |  13 +-
 src/resources/gtk/web-extensions-dialog.ui    |  66 ++--
 src/webextension/api/pageaction.c             |   8 +-
 src/webextension/ephy-web-extension-manager.c |  90 +++--
 src/window-commands.c                         | 138 ++++---
 tests/ephy-embed-shell-test.c                 |   4 +-
 tests/ephy-web-view-test.c                    |   6 +-
 tests/meson.build                             |  38 +-
 68 files changed, 1440 insertions(+), 2017 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/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.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..f5607995c 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)
@@ -176,6 +176,7 @@ restore_button_clicked_cb (GtkButton     *button,
 
   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..f8c610aca 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
@@ -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);
 
@@ -465,8 +460,8 @@ create_row (EphyHistoryDialog *self,
   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);
+  adw_action_row_add_prefix (ADW_ACTION_ROW (row), check_button);
+  adw_action_row_add_prefix (ADW_ACTION_ROW (row), separator);
   gtk_container_add (GTK_CONTAINER (row), date);
   gtk_container_add (GTK_CONTAINER (row), copy_url_button);
 
@@ -611,7 +606,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 +614,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 +630,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 +964,7 @@ 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));
+  adw_search_bar_connect_entry (ADW_SEARCH_BAR (self->search_bar), GTK_ENTRY (self->search_entry));
 
   ephy_gui_ensure_window_group (GTK_WINDOW (self));
 
@@ -984,6 +979,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-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-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..b2d1da396 100644
--- a/src/ephy-shell.c
+++ b/src/ephy-shell.c
@@ -28,15 +28,15 @@
 #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"
 #include "ephy-prefs.h"
-#include "ephy-prefs-dialog.h"
+//#include "ephy-prefs-dialog.h"
 #include "ephy-session.h"
 #include "ephy-settings.h"
 #include "ephy-sync-utils.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,
@@ -267,6 +267,7 @@ show_preferences (GSimpleAction *action,
 
   window_cmd_show_preferences (NULL, NULL, EPHY_WINDOW (window));
 }
+*/
 
 static void
 show_shortcuts (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,9 +364,9 @@ 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 },
-  { "preferences", show_preferences, 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 },
   { "about", show_about, NULL, NULL, NULL },
@@ -380,8 +381,8 @@ static GActionEntry non_incognito_extra_app_entries[] = {
 };
 
 static GActionEntry app_mode_app_entries[] = {
-  { "history", show_history, NULL, NULL, NULL },
-  { "preferences", show_preferences, 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 },
   { "run-in-background", NULL, NULL, "false", 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 ();
@@ -795,6 +791,7 @@ ephy_shell_before_emit (GApplication *application,
                                                               platform_data);
 }
 
+#if 0
 static GObject *
 ephy_shell_get_lockdown (EphyShell *shell)
 {
@@ -805,6 +802,7 @@ ephy_shell_get_lockdown (EphyShell *shell)
 
   return G_OBJECT (shell->session);
 }
+#endif
 
 static void
 ephy_shell_constructed (GObject *object)
@@ -819,12 +817,12 @@ 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. */
-  ephy_shell_get_lockdown (EPHY_SHELL (object));
+//  ephy_shell_get_lockdown (EPHY_SHELL (object));
 
   if (G_OBJECT_CLASS (ephy_shell_parent_class)->constructed)
     G_OBJECT_CLASS (ephy_shell_parent_class)->constructed (object);
@@ -876,7 +874,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 +1167,6 @@ ephy_shell_get_bookmarks_manager (EphyShell *shell)
 
   return shell->bookmarks_manager;
 }
-
 /**
  * ephy_shell_get_history_manager:
  * @shell: the #EphyShell
@@ -1220,6 +1217,7 @@ ephy_shell_get_net_monitor (EphyShell *shell)
   return shell->network_monitor;
 }
 
+#if 0
 /**
  * ephy_shell_get_history_dialog:
  *
@@ -1283,6 +1281,7 @@ ephy_shell_get_prefs_dialog (EphyShell *shell)
 
   return shell->prefs_dialog;
 }
+#endif
 
 void
 _ephy_shell_create_instance (EphyEmbedShellMode mode)
@@ -1359,7 +1358,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..3377fa03c 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;
@@ -195,8 +193,6 @@ struct _EphyWindow {
   guint checking_modified_forms : 1;
   guint confirmed_close_with_multiple_tabs : 1;
   guint present_on_insert : 1;
-
-  guint32 present_on_insert_user_time;
 };
 
 enum {
@@ -204,7 +200,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 +347,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 +393,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,6 +442,7 @@ sync_tab_load_status (EphyWebView     *view,
 
   loading = ephy_web_view_is_loading (view);
 
+#if 0
   action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "win");
 
   /* disable print while loading, see bug #116344 */
@@ -464,6 +460,7 @@ sync_tab_load_status (EphyWebView     *view,
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group),
                                        "combined-stop-reload");
   g_action_change_state (action, g_variant_new_boolean (loading));
+#endif
 }
 
 static void
@@ -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 = 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));
 }
 
+#if 0
 static gboolean
 ephy_window_should_view_receive_key_press_event (EphyWindow  *window,
                                                  GdkEventKey *event)
@@ -681,9 +693,11 @@ ephy_window_delete_event (GtkWidget   *widget,
 
   return FALSE;
 }
+#endif
 
 #define MAX_SPELL_CHECK_GUESSES 4
 
+#if 0
 static void
 update_link_actions_sensitivity (EphyWindow *window,
                                  gboolean    link_has_web_scheme)
@@ -770,10 +784,12 @@ update_edit_actions_sensitivity (EphyWindow *window,
   update_edit_action_sensitivity (window, "undo", can_undo, hide);
   update_edit_action_sensitivity (window, "redo", can_redo, hide);
 }
+#endif
 
 static void
 enable_edit_actions_sensitivity (EphyWindow *window)
 {
+#if 0
   GActionGroup *action_group;
   GAction *action;
 
@@ -792,6 +808,7 @@ enable_edit_actions_sensitivity (EphyWindow *window)
   g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE);
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "redo");
   g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE);
+#endif
 }
 
 static void
@@ -817,16 +834,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 +852,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,13 +866,13 @@ 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 },
 
   /* Toggle actions */
-  { "browse-with-caret", NULL, NULL, "false", window_cmd_change_browse_with_caret_state },
+//  { "browse-with-caret", NULL, NULL, "false", window_cmd_change_browse_with_caret_state },
   { "fullscreen", NULL, NULL, "false", window_cmd_change_fullscreen_state },
 };
 
@@ -883,11 +900,11 @@ static const GActionEntry toolbar_entries [] = {
   { "reload", window_cmd_reload },
   { "reload-bypass-cache", window_cmd_reload_bypass_cache },
   { "always-stop", window_cmd_stop },
-  { "combined-stop-reload", window_cmd_combined_stop_reload, NULL, "false", 
change_combined_stop_reload_state }
+//  { "combined-stop-reload", window_cmd_combined_stop_reload, NULL, "false", 
change_combined_stop_reload_state }
 };
 
 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 },
@@ -1007,6 +1024,7 @@ _ephy_window_set_default_actions_sensitive (EphyWindow *window,
                                             guint       flags,
                                             gboolean    set)
 {
+#if 0
   GActionGroup *action_group;
   GAction *action;
   int i;
@@ -1042,6 +1060,7 @@ _ephy_window_set_default_actions_sensitive (EphyWindow *window,
                                        "combined-stop-reload");
   ephy_action_change_sensitivity_flags (G_SIMPLE_ACTION (action),
                                         flags, set);
+#endif
 }
 
 static void
@@ -1103,15 +1122,15 @@ sync_tab_zoom (WebKitWebView *web_view,
     can_zoom_normal = TRUE;
   }
 
-  action_group = gtk_widget_get_action_group (GTK_WIDGET (window),
-                                              "win");
+//  action_group = gtk_widget_get_action_group (GTK_WIDGET (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);
-  action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "zoom-out");
-  g_simple_action_set_enabled (G_SIMPLE_ACTION (action), can_zoom_out);
-  action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "zoom-normal");
-  g_simple_action_set_enabled (G_SIMPLE_ACTION (action), can_zoom_normal);
+//  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);
+//  action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "zoom-out");
+//  g_simple_action_set_enabled (G_SIMPLE_ACTION (action), can_zoom_out);
+//  action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "zoom-normal");
+//  g_simple_action_set_enabled (G_SIMPLE_ACTION (action), can_zoom_normal);
 }
 
 static void
@@ -1135,6 +1154,7 @@ sync_tab_document_type (EphyWebView *view,
   is_image = type == EPHY_WEB_VIEW_DOCUMENT_IMAGE;
   disable = (type != EPHY_WEB_VIEW_DOCUMENT_HTML);
 
+#if 0
   action_group = gtk_widget_get_action_group (GTK_WIDGET (window),
                                               "win");
 
@@ -1148,6 +1168,7 @@ sync_tab_document_type (EphyWebView *view,
   ephy_action_change_sensitivity_flags (G_SIMPLE_ACTION (action), SENS_FLAG_DOCUMENT, !can_find);
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "find-next");
   ephy_action_change_sensitivity_flags (G_SIMPLE_ACTION (action), SENS_FLAG_DOCUMENT, !can_find);
+#endif
 
   if (!can_find) {
     ephy_find_toolbar_request_close (ephy_embed_get_find_toolbar (window->active_embed));
@@ -1158,6 +1179,7 @@ static void
 _ephy_window_set_navigation_flags (EphyWindow                 *window,
                                    EphyWebViewNavigationFlags  flags)
 {
+#if 0
   GActionGroup *action_group;
   GAction *action;
 
@@ -1167,6 +1189,7 @@ _ephy_window_set_navigation_flags (EphyWindow                 *window,
   g_simple_action_set_enabled (G_SIMPLE_ACTION (action), flags & EPHY_WEB_VIEW_NAV_BACK);
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "navigation-forward");
   g_simple_action_set_enabled (G_SIMPLE_ACTION (action), flags & EPHY_WEB_VIEW_NAV_FORWARD);
+#endif
 }
 
 static void
@@ -1198,18 +1221,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 +1251,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 +1269,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
@@ -1494,6 +1517,7 @@ populate_context_menu (WebKitWebView       *web_view,
                        WebKitHitTestResult *hit_test_result,
                        EphyWindow          *window)
 {
+#if 0
   WebKitContextMenuItem *input_methods_item = NULL;
   WebKitContextMenuItem *insert_emoji_item = NULL;
   WebKitContextMenuItem *copy_image_item = NULL;
@@ -1810,6 +1834,7 @@ populate_context_menu (WebKitWebView       *web_view,
     webkit_context_menu_append (context_menu,
                                 webkit_context_menu_item_new_from_stock_action 
(WEBKIT_CONTEXT_MENU_ACTION_INSPECT_ELEMENT));
   }
+#endif
 
   return GDK_EVENT_PROPAGATE;
 }
@@ -1887,6 +1912,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 +1968,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 +1977,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 +2128,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 +2152,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 +2171,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 +2212,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 +2397,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 +2419,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 +2435,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 +2443,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 +2480,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 +2490,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 +2510,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 +2545,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 +2563,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,10 +2580,11 @@ 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)
 {
+#if 0
   EphyWebView *view;
   GActionGroup *action_group;
   GAction *action;
@@ -2573,12 +2596,12 @@ 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));
   }
@@ -2620,15 +2643,13 @@ tab_view_setup_menu_cb (HdyTabView *tab_view,
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group),
                                        "close");
   g_simple_action_set_enabled (G_SIMPLE_ACTION (action), !page || !pinned);
+#endif
 }
 
 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 +2658,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 +2684,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 +2701,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 +2713,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 +2740,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 +2808,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 +2845,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 +2855,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 +2875,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 +2922,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 +2950,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 +2979,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 +2988,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 +3007,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 +3053,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 +3167,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 +3181,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 +3191,7 @@ ephy_window_state_event (GtkWidget           *widget,
 
   return result;
 }
+#endif
 
 void
 ephy_window_set_default_size (EphyWindow *window,
@@ -3210,8 +3207,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 +3223,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 +3230,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 +3244,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,6 +3276,7 @@ ephy_window_destroy (GtkWidget *widget)
 
   GTK_WIDGET_CLASS (ephy_window_parent_class)->destroy (widget);
 }
+#endif
 
 static void
 ephy_window_finalize (GObject *object)
@@ -3303,6 +3286,7 @@ ephy_window_finalize (GObject *object)
   LOG ("EphyWindow finalised %p", object);
 }
 
+#if 0
 static void
 sync_user_input_cb (EphyLocationController *action,
                     GParamSpec             *pspec,
@@ -3363,6 +3347,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 +3355,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 +3368,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,32 +3382,31 @@ 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);
-  ephy_pages_popover_set_tab_view (popover, window->tab_view);
-  gtk_menu_button_set_popover (GTK_MENU_BUTTON (menu_button),
-                               GTK_WIDGET (popover));
-  window->pages_popover = popover;
+//  popover = ephy_pages_popover_new (menu_button);
+//  ephy_pages_popover_set_tab_view (popover, window->tab_view);
+//  gtk_menu_button_set_popover (GTK_MENU_BUTTON (menu_button),
+//                               GTK_WIDGET (popover));
+//  window->pages_popover = popover;
 
   g_signal_connect_object (window->tab_bar, "notify::is-overflowing",
                            G_CALLBACK (update_pages_menu_revealer), window,
                            G_CONNECT_SWAPPED);
-  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));
+//  g_signal_connect_object (window->pages_popover, "notify::visible",
+//                           G_CALLBACK (update_pages_menu_revealer), window,
+//                           G_CONNECT_SWAPPED);
 }
 
+#if 0
 static EphyLocationController *
 setup_location_controller (EphyWindow    *window,
                            EphyHeaderBar *header_bar)
@@ -3449,6 +3425,7 @@ setup_location_controller (EphyWindow    *window,
 
   return location_controller;
 }
+#endif
 
 static GtkWidget *
 setup_action_bar (EphyWindow *window)
@@ -3456,7 +3433,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 +3496,7 @@ set_as_default_browser ()
   }
 }
 
+#if 0
 static void
 on_default_browser_question_response (GtkInfoBar *info_bar,
                                       gint        response_id,
@@ -3561,9 +3538,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)
@@ -3598,14 +3574,15 @@ download_completed_cb (EphyDownload *download,
     g_application_quit (G_APPLICATION (shell));
 }
 
+#if 0
 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);
+  pages_open = adw_leaflet_get_visible_child (ADW_LEAFLET (window->main_leaflet)) == GTK_WIDGET 
(window->pages_view);
   action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "win");
 
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "content");
@@ -3614,17 +3591,23 @@ notify_deck_child_cb (EphyWindow *window)
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "tabs-view");
   g_simple_action_set_enabled (G_SIMPLE_ACTION (action), !pages_open);
 }
+#endif
 
 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);
 }
@@ -3710,21 +3693,25 @@ 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 ();
+//  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));
-  ephy_pages_view_set_tab_view (window->pages_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,41 +3726,34 @@ 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);
 
+#if 0
   /* other notifiers */
   action_group = gtk_widget_get_action_group (GTK_WIDGET (window), "win");
   action = g_action_map_lookup_action (G_ACTION_MAP (action_group),
@@ -3834,6 +3814,7 @@ ephy_window_constructed (GObject *object)
   }
 
   window->mouse_gesture_controller = ephy_mouse_gesture_controller_new (window);
+#endif
 
   ephy_window_set_chrome (window, chrome);
 
@@ -3853,11 +3834,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 +3859,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 +3915,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 +3929,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 +3983,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 +4015,7 @@ ephy_window_location_search (EphyWindow *window)
   g_free (entry_text);
   g_free (search_engine_name);
 }
+#endif
 
 /**
  * ephy_window_set_zoom:
@@ -4098,6 +4072,7 @@ ephy_window_get_context_event (EphyWindow *window)
   return window->context_event;
 }
 
+#if 0
 /**
  * ephy_window_get_location:
  * @window: an #EphyWindow widget
@@ -4111,6 +4086,7 @@ ephy_window_get_location (EphyWindow *window)
 {
   return ephy_location_controller_get_address (window->location_controller);
 }
+#endif
 
 /**
  * ephy_window_set_location:
@@ -4127,10 +4103,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 +4123,7 @@ ephy_window_get_location_controller (EphyWindow *window)
 
   return window->location_controller;
 }
+#endif
 
 /**
  * ephy_window_get_header_bar:
@@ -4186,7 +4164,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 +4174,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 +4279,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;
diff --git a/src/ephy-window.h b/src/ephy-window.h
index 35997a3d9..bee8e20c5 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
 {
diff --git a/src/meson.build b/src/meson.build
index eaee92180..7f6618d22 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -1,5 +1,5 @@
 types_headers = [
-  'bookmarks/ephy-bookmark-properties.h',
+#  'bookmarks/ephy-bookmark-properties.h',
   'ephy-link.h',
   'ephy-session.h',
   'ephy-shell.h',
@@ -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-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-lockdown.c',
-  'ephy-mouse-gesture-controller.c',
-  'ephy-page-row.c',
+#  'ephy-location-controller.c',
+#  'ephy-lockdown.c',
+#  'ephy-mouse-gesture-controller.c',
+#  'ephy-page-row.c',
   'ephy-pages-button.c',
-  'ephy-pages-popover.c',
-  'ephy-pages-view.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/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/prefs-appearance-page.c',
-  'preferences/prefs-general-page.c',
-  'preferences/prefs-privacy-page.c',
-  'preferences/webapp-additional-urls-dialog.c',
-  'synced-tabs-dialog.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/prefs-appearance-page.c',
+#  'preferences/prefs-general-page.c',
+#  'preferences/prefs-privacy-page.c',
+#  'preferences/webapp-additional-urls-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/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/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/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/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/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/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/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..86f1c3578 100644
--- a/src/window-commands.c
+++ b/src/window-commands.c
@@ -25,10 +25,10 @@
 
 #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"
+//#include "ephy-bookmarks-manager.h"
 #include "ephy-debug.h"
 #include "ephy-embed-container.h"
 #include "ephy-embed-prefs.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,7 +875,7 @@ 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
@@ -885,7 +891,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 +936,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 +945,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 +1059,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 +1137,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 +1157,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 +1190,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 +1205,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;
@@ -1263,6 +1277,7 @@ window_cmd_reload_bypass_cache (GSimpleAction *action,
   webkit_web_view_reload_bypass_cache (view);
 }
 
+#if 0
 void
 window_cmd_combined_stop_reload (GSimpleAction *action,
                                  GVariant      *parameter,
@@ -1285,6 +1300,7 @@ window_cmd_combined_stop_reload (GSimpleAction *action,
 
   g_variant_unref (state);
 }
+#endif
 
 void
 window_cmd_page_menu (GSimpleAction *action,
@@ -1295,12 +1311,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 +1338,7 @@ window_cmd_new_tab (GSimpleAction *action,
   g_free (url);
 }
 
+#if 0
 static void
 open_response_cb (GtkNativeDialog *dialog,
                   int              response,
@@ -2218,6 +2233,7 @@ window_cmd_redo (GSimpleAction *action,
     }
   }
 }
+
 void
 window_cmd_cut (GSimpleAction *action,
                 GVariant      *parameter,
@@ -2296,6 +2312,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 +2391,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 +2437,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 +2482,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 +2495,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 +2539,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 +2606,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 +2624,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 +2637,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 +2645,7 @@ window_cmd_location_search (GSimpleAction *action,
 {
   ephy_window_location_search (user_data);
 }
+#endif
 
 void
 window_cmd_go_home (GSimpleAction *action,
@@ -2654,6 +2673,7 @@ window_cmd_go_tabs_view (GSimpleAction *action,
   ephy_window_open_pages_view (EPHY_WINDOW (user_data));
 }
 
+#if 0
 static void
 enable_browse_with_caret_state_cb (GtkMessageDialog *dialog,
                                    GtkResponseType   response,
@@ -2717,6 +2737,7 @@ window_cmd_change_browse_with_caret_state (GSimpleAction *action,
   g_settings_set_boolean (EPHY_SETTINGS_MAIN,
                           EPHY_PREFS_ENABLE_CARET_BROWSING, active);
 }
+#endif
 
 void
 window_cmd_change_fullscreen_state (GSimpleAction *action,
@@ -2904,7 +2925,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 +2938,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 +2976,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 +3040,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]