diff --git a/Ladybird/Qt/Tab.cpp b/Ladybird/Qt/Tab.cpp index c677ac8f31..29c99faa2d 100644 --- a/Ladybird/Qt/Tab.cpp +++ b/Ladybird/Qt/Tab.cpp @@ -239,7 +239,7 @@ Tab::Tab(BrowserWindow* window, WebContentOptions const& web_content_options, St select_dropdown_add_item(m_select_dropdown, item); } - m_select_dropdown->exec(mapToGlobal(QPoint(content_position.x(), content_position.y()))); + m_select_dropdown->exec(view().mapToGlobal(QPoint(content_position.x(), content_position.y()) / view().device_pixel_ratio())); }; QObject::connect(focus_location_editor_action, &QAction::triggered, this, &Tab::focus_location_editor); diff --git a/Userland/Libraries/LibWeb/HTML/HTMLSelectElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLSelectElement.cpp index 3b0578e15c..3cb37b8545 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLSelectElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLSelectElement.cpp @@ -298,7 +298,8 @@ void HTMLSelectElement::activation_behavior(DOM::Event const&) // Request select dropdown auto weak_element = make_weak_ptr(); auto rect = get_bounding_client_rect(); - document().browsing_context()->top_level_browsing_context()->page().did_request_select_dropdown(weak_element, Gfx::IntPoint { rect->x(), rect->y() }, rect->width(), items); + auto position = document().browsing_context()->to_top_level_position(Web::CSSPixelPoint { rect->x(), rect->y() }); + document().browsing_context()->top_level_browsing_context()->page().did_request_select_dropdown(weak_element, position, CSSPixels(rect->width()), items); set_is_open(true); } diff --git a/Userland/Libraries/LibWeb/Page/Page.cpp b/Userland/Libraries/LibWeb/Page/Page.cpp index e72182e005..a638a2afa1 100644 --- a/Userland/Libraries/LibWeb/Page/Page.cpp +++ b/Userland/Libraries/LibWeb/Page/Page.cpp @@ -331,7 +331,7 @@ void Page::color_picker_closed(Optional picked_color) } } -void Page::did_request_select_dropdown(WeakPtr target, Gfx::IntPoint content_position, i32 minimum_width, Vector items) +void Page::did_request_select_dropdown(WeakPtr target, Web::CSSPixelPoint content_position, Web::CSSPixels minimum_width, Vector items) { if (m_pending_non_blocking_dialog == PendingNonBlockingDialog::None) { m_pending_non_blocking_dialog = PendingNonBlockingDialog::Select; diff --git a/Userland/Libraries/LibWeb/Page/Page.h b/Userland/Libraries/LibWeb/Page/Page.h index d56cacb948..3de089f5f1 100644 --- a/Userland/Libraries/LibWeb/Page/Page.h +++ b/Userland/Libraries/LibWeb/Page/Page.h @@ -129,7 +129,7 @@ public: void did_request_color_picker(WeakPtr target, Color current_color); void color_picker_closed(Optional picked_color); - void did_request_select_dropdown(WeakPtr target, Gfx::IntPoint content_position, i32 minimum_width, Vector items); + void did_request_select_dropdown(WeakPtr target, Web::CSSPixelPoint content_position, Web::CSSPixels minimum_width, Vector items); void select_dropdown_closed(Optional value); enum class PendingNonBlockingDialog { @@ -277,7 +277,7 @@ public: // https://html.spec.whatwg.org/multipage/input.html#show-the-picker,-if-applicable virtual void page_did_request_file_picker(WeakPtr, [[maybe_unused]] bool multiple) {}; virtual void page_did_request_color_picker([[maybe_unused]] Color current_color) {}; - virtual void page_did_request_select_dropdown([[maybe_unused]] Gfx::IntPoint content_position, [[maybe_unused]] i32 minimum_width, [[maybe_unused]] Vector items) {}; + virtual void page_did_request_select_dropdown([[maybe_unused]] Web::CSSPixelPoint content_position, [[maybe_unused]] Web::CSSPixels minimum_width, [[maybe_unused]] Vector items) {}; virtual void page_did_finish_text_test() {}; diff --git a/Userland/Libraries/LibWebView/WebContentClient.cpp b/Userland/Libraries/LibWebView/WebContentClient.cpp index 8c7b9d34a9..679bf0865b 100644 --- a/Userland/Libraries/LibWebView/WebContentClient.cpp +++ b/Userland/Libraries/LibWebView/WebContentClient.cpp @@ -387,7 +387,7 @@ void WebContentClient::did_request_color_picker(Color const& current_color) void WebContentClient::did_request_select_dropdown(Gfx::IntPoint content_position, i32 minimum_width, Vector const& items) { if (m_view.on_request_select_dropdown) - m_view.on_request_select_dropdown(content_position, minimum_width, items); + m_view.on_request_select_dropdown(m_view.to_widget_position(content_position), m_view.to_widget_position(Gfx::IntPoint { minimum_width, 0 }).x(), items); } void WebContentClient::did_finish_handling_input_event(bool event_was_accepted) diff --git a/Userland/Services/WebContent/PageClient.cpp b/Userland/Services/WebContent/PageClient.cpp index 642d307cfd..c5a15b04b1 100644 --- a/Userland/Services/WebContent/PageClient.cpp +++ b/Userland/Services/WebContent/PageClient.cpp @@ -509,9 +509,9 @@ void PageClient::page_did_request_color_picker(Color current_color) client().async_did_request_color_picker(current_color); } -void PageClient::page_did_request_select_dropdown(Gfx::IntPoint content_position, i32 minimum_width, Vector items) +void PageClient::page_did_request_select_dropdown(Web::CSSPixelPoint content_position, Web::CSSPixels minimum_width, Vector items) { - client().async_did_request_select_dropdown(content_position, minimum_width, items); + client().async_did_request_select_dropdown(page().css_to_device_point(content_position).to_type(), minimum_width * device_pixels_per_css_pixel(), items); } void PageClient::page_did_change_theme_color(Gfx::Color color) diff --git a/Userland/Services/WebContent/PageClient.h b/Userland/Services/WebContent/PageClient.h index 384dca189c..5baa2a1def 100644 --- a/Userland/Services/WebContent/PageClient.h +++ b/Userland/Services/WebContent/PageClient.h @@ -119,7 +119,7 @@ private: virtual void page_did_close_browsing_context(Web::HTML::BrowsingContext const&) override; virtual void request_file(Web::FileRequest) override; virtual void page_did_request_color_picker(Color current_color) override; - virtual void page_did_request_select_dropdown(Gfx::IntPoint content_position, i32 minimum_width, Vector items) override; + virtual void page_did_request_select_dropdown(Web::CSSPixelPoint content_position, Web::CSSPixels minimum_width, Vector items) override; virtual void page_did_finish_text_test() override; virtual void page_did_change_theme_color(Gfx::Color color) override; virtual void page_did_insert_clipboard_entry(String data, String presentation_style, String mime_type) override;