This fixes the position of Folder panel's context menus on multi-screens
on Wayland, because `QCursor::pos()` is not reliable on those setups.
void FoldersPanel::slotItemContextMenuRequested(int index, const QPointF& pos)
{
void FoldersPanel::slotItemContextMenuRequested(int index, const QPointF& pos)
{
const KFileItem fileItem = m_model->fileItem(index);
QPointer<TreeViewContextMenu> contextMenu = new TreeViewContextMenu(this, fileItem);
const KFileItem fileItem = m_model->fileItem(index);
QPointer<TreeViewContextMenu> contextMenu = new TreeViewContextMenu(this, fileItem);
- contextMenu.data()->open();
+ contextMenu.data()->open(pos.toPoint());
if (contextMenu.data()) {
delete contextMenu.data();
}
if (contextMenu.data()) {
delete contextMenu.data();
}
void FoldersPanel::slotViewContextMenuRequested(const QPointF& pos)
{
void FoldersPanel::slotViewContextMenuRequested(const QPointF& pos)
{
QPointer<TreeViewContextMenu> contextMenu = new TreeViewContextMenu(this, KFileItem());
QPointer<TreeViewContextMenu> contextMenu = new TreeViewContextMenu(this, KFileItem());
- contextMenu.data()->open();
+ contextMenu.data()->open(pos.toPoint());
if (contextMenu.data()) {
delete contextMenu.data();
}
if (contextMenu.data()) {
delete contextMenu.data();
}
-void TreeViewContextMenu::open()
+void TreeViewContextMenu::open(const QPoint& pos)
{
QMenu* popup = new QMenu(m_parent);
{
QMenu* popup = new QMenu(m_parent);
}
QPointer<QMenu> popupPtr = popup;
}
QPointer<QMenu> popupPtr = popup;
- popup->exec(QCursor::pos());
if (popupPtr.data()) {
popupPtr.data()->deleteLater();
}
if (popupPtr.data()) {
popupPtr.data()->deleteLater();
}
~TreeViewContextMenu() override;
/** Opens the context menu modal. */
~TreeViewContextMenu() override;
/** Opens the context menu modal. */
+ void open(const QPoint& pos);
private slots:
/** Cuts the item m_fileItem. */
private slots:
/** Cuts the item m_fileItem. */