From f3c6510b8306d68ec88663c343e96bd46e37d227 Mon Sep 17 00:00:00 2001 From: Karol Kosek Date: Sat, 7 Jan 2023 17:40:04 +0100 Subject: [PATCH] Ladybird: Accept file drops --- Ladybird/BrowserWindow.cpp | 8 ++++++++ Ladybird/WebContentView.cpp | 15 +++++++++++++++ Ladybird/WebContentView.h | 3 +++ 3 files changed, 26 insertions(+) diff --git a/Ladybird/BrowserWindow.cpp b/Ladybird/BrowserWindow.cpp index 724232943d..df3648ca5b 100644 --- a/Ladybird/BrowserWindow.cpp +++ b/Ladybird/BrowserWindow.cpp @@ -349,6 +349,14 @@ void BrowserWindow::new_tab(QString const& url, Activate activate) QObject::connect(tab_ptr, &Tab::title_changed, this, &BrowserWindow::tab_title_changed); QObject::connect(tab_ptr, &Tab::favicon_changed, this, &BrowserWindow::tab_favicon_changed); + QObject::connect(&tab_ptr->view(), &WebContentView::urls_dropped, this, [this](auto& urls) { + VERIFY(urls.size()); + m_current_tab->navigate(urls[0].toString()); + + for (qsizetype i = 1; i < urls.size(); ++i) + new_tab(urls[i].toString(), Activate::No); + }); + tab_ptr->view().on_get_all_cookies = [this](auto const& url) { return m_cookie_jar.get_all_cookies(url); }; diff --git a/Ladybird/WebContentView.cpp b/Ladybird/WebContentView.cpp index 1daa0c3c68..c369f41f98 100644 --- a/Ladybird/WebContentView.cpp +++ b/Ladybird/WebContentView.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include @@ -58,6 +59,7 @@ WebContentView::WebContentView(StringView webdriver_content_ipc_path) : m_webdriver_content_ipc_path(webdriver_content_ipc_path) { setMouseTracking(true); + setAcceptDrops(true); setFocusPolicy(Qt::FocusPolicy::StrongFocus); @@ -312,6 +314,19 @@ void WebContentView::mouseReleaseEvent(QMouseEvent* event) client().async_mouse_up(to_content(position), button, buttons, modifiers); } +void WebContentView::dragEnterEvent(QDragEnterEvent* event) +{ + if (event->mimeData()->hasUrls()) + event->acceptProposedAction(); +} + +void WebContentView::dropEvent(QDropEvent* event) +{ + VERIFY(event->mimeData()->hasUrls()); + emit urls_dropped(event->mimeData()->urls()); + event->acceptProposedAction(); +} + void WebContentView::keyPressEvent(QKeyEvent* event) { switch (event->key()) { diff --git a/Ladybird/WebContentView.h b/Ladybird/WebContentView.h index c66864a5c7..903502949b 100644 --- a/Ladybird/WebContentView.h +++ b/Ladybird/WebContentView.h @@ -78,6 +78,8 @@ public: virtual void mouseMoveEvent(QMouseEvent*) override; virtual void mousePressEvent(QMouseEvent*) override; virtual void mouseReleaseEvent(QMouseEvent*) override; + virtual void dragEnterEvent(QDragEnterEvent*) override; + virtual void dropEvent(QDropEvent*) override; virtual void keyPressEvent(QKeyEvent* event) override; virtual void keyReleaseEvent(QKeyEvent* event) override; virtual void showEvent(QShowEvent*) override; @@ -159,6 +161,7 @@ signals: void navigate_forward(); void refresh(); void restore_window(); + void urls_dropped(QList const&); Gfx::IntPoint reposition_window(Gfx::IntPoint); Gfx::IntSize resize_window(Gfx::IntSize); Gfx::IntRect maximize_window();