From 40896c02d996f69f7bf4e8adebe28acdbff8d350 Mon Sep 17 00:00:00 2001 From: =?utf8?q?M=C3=A9ven=20Car?= Date: Tue, 12 Mar 2019 08:54:46 -0600 Subject: [PATCH] Correctly position context menu of the information panel under wayland with a secondary screen Summary: According to my testing this bug occurs because Qcursor::pos() does not work as expected under wayland on a secondary screen, then it returns inaccurate data. This could hide bugs elsewhere. BUG: 404799 FIXED-IN: 19.04.0 Test Plan: Under Wayland test the context menu on both screens. Do the same under Xorg. Reviewers: #dolphin, elvisangelaccio Reviewed By: #dolphin, elvisangelaccio Subscribers: elvisangelaccio, ngraham, nicolasfella, kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D19535 --- src/panels/information/informationpanel.cpp | 2 +- src/panels/information/informationpanelcontent.cpp | 4 ++-- src/panels/information/informationpanelcontent.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/panels/information/informationpanel.cpp b/src/panels/information/informationpanel.cpp index 1ec2696e3..a0aeaaa37 100644 --- a/src/panels/information/informationpanel.cpp +++ b/src/panels/information/informationpanel.cpp @@ -158,7 +158,7 @@ void InformationPanel::resizeEvent(QResizeEvent* event) void InformationPanel::contextMenuEvent(QContextMenuEvent* event) { // TODO: Move code from InformationPanelContent::configureSettings() here - m_content->configureSettings(customContextMenuActions()); + m_content->configureSettings(customContextMenuActions(), event->globalPos()); Panel::contextMenuEvent(event); } diff --git a/src/panels/information/informationpanelcontent.cpp b/src/panels/information/informationpanelcontent.cpp index 6f671e683..bf87f9b5a 100644 --- a/src/panels/information/informationpanelcontent.cpp +++ b/src/panels/information/informationpanelcontent.cpp @@ -264,7 +264,7 @@ bool InformationPanelContent::eventFilter(QObject* obj, QEvent* event) return QWidget::eventFilter(obj, event); } -void InformationPanelContent::configureSettings(const QList& customContextMenuActions) +void InformationPanelContent::configureSettings(const QList& customContextMenuActions, const QPointF& pos) { QMenu popup(this); @@ -288,7 +288,7 @@ void InformationPanelContent::configureSettings(const QList& customCon // Open the popup and adjust the settings for the // selected action. - QAction* action = popup.exec(QCursor::pos()); + QAction* action = popup.exec(pos.toPoint()); if (!action) { return; } diff --git a/src/panels/information/informationpanelcontent.h b/src/panels/information/informationpanelcontent.h index 9223fcc5a..ca9afab09 100644 --- a/src/panels/information/informationpanelcontent.h +++ b/src/panels/information/informationpanelcontent.h @@ -78,7 +78,7 @@ public: * * TODO: Move this code to the class InformationPanel */ - void configureSettings(const QList& customContextMenuActions); + void configureSettings(const QList& customContextMenuActions, const QPointF& pos); signals: void urlActivated( const QUrl& url ); -- 2.47.3