diff --git a/Ladybird/Qt/Tab.cpp b/Ladybird/Qt/Tab.cpp index 36a13d1b2d2..92c13c2cf06 100644 --- a/Ladybird/Qt/Tab.cpp +++ b/Ladybird/Qt/Tab.cpp @@ -271,7 +271,7 @@ Tab::Tab(BrowserWindow* window, WebContentOptions const& web_content_options, St select_dropdown_add_item(m_select_dropdown, item); } - m_select_dropdown->exec(view().mapToGlobal(QPoint(content_position.x(), content_position.y()) / view().device_pixel_ratio())); + m_select_dropdown->exec(view().map_point_to_global_position(content_position)); }; QObject::connect(focus_location_editor_action, &QAction::triggered, this, &Tab::focus_location_editor); @@ -406,7 +406,7 @@ Tab::Tab(BrowserWindow* window, WebContentOptions const& web_content_options, St search_selected_text_action->setVisible(false); } - m_page_context_menu->exec(view().mapToGlobal(QPoint(content_position.x(), content_position.y()) / view().device_pixel_ratio())); + m_page_context_menu->exec(view().map_point_to_global_position(content_position)); }; auto* open_link_action = new QAction("&Open", this); @@ -450,7 +450,7 @@ Tab::Tab(BrowserWindow* window, WebContentOptions const& web_content_options, St break; } - m_link_context_menu->exec(view().mapToGlobal(QPoint(content_position.x(), content_position.y()) / view().device_pixel_ratio())); + m_link_context_menu->exec(view().map_point_to_global_position(content_position)); }; auto* open_image_action = new QAction("&Open Image", this); @@ -503,7 +503,7 @@ Tab::Tab(BrowserWindow* window, WebContentOptions const& web_content_options, St m_image_context_menu_url = image_url; m_image_context_menu_bitmap = shareable_bitmap; - m_image_context_menu->exec(view().mapToGlobal(QPoint(content_position.x(), content_position.y()) / view().device_pixel_ratio())); + m_image_context_menu->exec(view().map_point_to_global_position(content_position)); }; m_media_context_menu_play_icon = load_icon_from_uri("resource://icons/16x16/play.png"sv); @@ -619,7 +619,7 @@ Tab::Tab(BrowserWindow* window, WebContentOptions const& web_content_options, St m_media_context_menu_controls_action->setChecked(menu.has_user_agent_controls); m_media_context_menu_loop_action->setChecked(menu.is_looping); - auto screen_position = view().mapToGlobal(QPoint(content_position.x(), content_position.y()) / view().device_pixel_ratio()); + auto screen_position = view().map_point_to_global_position(content_position); if (menu.is_video) m_video_context_menu->exec(screen_position); else diff --git a/Ladybird/Qt/WebContentView.cpp b/Ladybird/Qt/WebContentView.cpp index 26fc3320550..2227509016d 100644 --- a/Ladybird/Qt/WebContentView.cpp +++ b/Ladybird/Qt/WebContentView.cpp @@ -644,6 +644,11 @@ Web::DevicePixelRect WebContentView::viewport_rect() const return m_viewport_rect.to_type(); } +QPoint WebContentView::map_point_to_global_position(Gfx::IntPoint position) const +{ + return mapToGlobal(QPoint { position.x(), position.y() } / device_pixel_ratio()); +} + Gfx::IntPoint WebContentView::to_content_position(Gfx::IntPoint widget_position) const { return widget_position.translated(max(0, horizontalScrollBar()->value()), max(0, verticalScrollBar()->value())); diff --git a/Ladybird/Qt/WebContentView.h b/Ladybird/Qt/WebContentView.h index 55531c91b9c..95442e6994c 100644 --- a/Ladybird/Qt/WebContentView.h +++ b/Ladybird/Qt/WebContentView.h @@ -81,6 +81,8 @@ public: using ViewImplementation::client; + QPoint map_point_to_global_position(Gfx::IntPoint) const; + signals: void urls_dropped(QList const&);