QGuiApplication::queryKeyboardModifiers() does not work on Wayland [1].
We don't need it in the first place, since we already know (thanks to
the key events) whether Shift has been pressed or released.
So we can just pass this information to DolphinRemoveAction::update().
BUG: 354301
[1]: https://bugreports.qt.io/browse/QTBUG-62786
Differential Revision: https://phabricator.kde.org/D7519
void DolphinContextMenu::keyPressEvent(QKeyEvent *ev)
{
if (m_removeAction && ev->key() == Qt::Key_Shift) {
- m_removeAction->update();
+ m_removeAction->update(DolphinRemoveAction::ShiftState::Pressed);
}
QMenu::keyPressEvent(ev);
}
void DolphinContextMenu::keyReleaseEvent(QKeyEvent *ev)
{
if (m_removeAction && ev->key() == Qt::Key_Shift) {
- m_removeAction->update();
+ m_removeAction->update(DolphinRemoveAction::ShiftState::Released);
}
QMenu::keyReleaseEvent(ev);
}
bool DolphinPart::eventFilter(QObject* obj, QEvent* event)
{
+ using ShiftState = DolphinRemoveAction::ShiftState;
const int type = event->type();
if ((type == QEvent::KeyPress || type == QEvent::KeyRelease) && m_removeAction) {
if (menu && menu->parent() == m_view) {
QKeyEvent* ev = static_cast<QKeyEvent*>(event);
if (ev->key() == Qt::Key_Shift) {
- m_removeAction->update();
+ m_removeAction->update(type == QEvent::KeyPress ? ShiftState::Pressed : ShiftState::Released);
}
}
}
/***************************************************************************
- * Copyright (C) 2013 by Dawit Alemayehu <adawit@kde.org *
+ * Copyright (C) 2013 by Dawit Alemayehu <adawit@kde.org> *
+ * Copyright (C) 2017 by Elvis Angelaccio <elvis.angelaccio@kde.org> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
}
}
-void DolphinRemoveAction::update()
+void DolphinRemoveAction::update(ShiftState shiftState)
{
- Q_ASSERT(m_collection);
- if (qApp->queryKeyboardModifiers() & Qt::ShiftModifier) {
- m_action = m_collection ? m_collection->action(KStandardAction::name(KStandardAction::DeleteFile)) : 0;
- } else {
- m_action = m_collection ? m_collection->action(KStandardAction::name(KStandardAction::MoveToTrash)) : 0;
+ if (!m_collection) {
+ m_action = nullptr;
+ return;
+ }
+
+ if (shiftState == ShiftState::Unknown) {
+ shiftState = QGuiApplication::keyboardModifiers() & Qt::ShiftModifier ? ShiftState::Pressed : ShiftState::Released;
+ }
+
+ switch (shiftState) {
+ case ShiftState::Pressed:
+ m_action = m_collection->action(KStandardAction::name(KStandardAction::DeleteFile));
+ break;
+ case ShiftState::Released:
+ m_action = m_collection->action(KStandardAction::name(KStandardAction::MoveToTrash));
+ break;
+ case ShiftState::Unknown:
+ Q_UNREACHABLE();
+ break;
}
if (m_action) {
/***************************************************************************
- * Copyright (C) 2013 by Dawit Alemayehu <adawit@kde.org *
+ * Copyright (C) 2013 by Dawit Alemayehu <adawit@kde.org> *
+ * Copyright (C) 2017 by Elvis Angelaccio <elvis.angelaccio@kde.org> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
{
Q_OBJECT
public:
+
+ enum class ShiftState {
+ Unknown,
+ Pressed,
+ Released
+ };
+
DolphinRemoveAction(QObject* parent, KActionCollection* collection);
+
/**
- * Updates this action key based on the state of the Shift key.
+ * Updates this action key based on @p shiftState.
+ * Default value is QueryShiftState, meaning it will query QGuiApplication::modifiers().
*/
- void update();
+ void update(ShiftState shiftState = ShiftState::Unknown);
private Q_SLOTS:
void slotRemoveActionTriggered();