#include "views/dolphinview.h"
#include "views/viewmodecontroller.h"
+KModifierKeyInfo* DolphinContextMenu::m_keyInfo = 0;
+
DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent,
const KFileItem& fileInfo,
const KUrl& baseUrl) :
m_customActions(),
m_popup(new KMenu(m_mainWindow)),
m_shiftPressed(false),
- m_keyInfo(),
m_removeAction(0)
{
// The context menu either accesses the URLs of the selected items
m_selectedUrls = view->selectedUrls();
m_selectedItems = view->selectedItems();
- if (m_keyInfo.isKeyPressed(Qt::Key_Shift) || m_keyInfo.isKeyLatched(Qt::Key_Shift)) {
- m_shiftPressed = true;
+ if (m_keyInfo != 0) {
+ if (m_keyInfo->isKeyPressed(Qt::Key_Shift) || m_keyInfo->isKeyLatched(Qt::Key_Shift)) {
+ m_shiftPressed = true;
+ }
+ connect(m_keyInfo, SIGNAL(keyPressed(Qt::Key, bool)),
+ this, SLOT(slotKeyModifierPressed(Qt::Key, bool)));
}
- connect(&m_keyInfo, SIGNAL(keyPressed(Qt::Key, bool)),
- this, SLOT(slotKeyModifierPressed(Qt::Key, bool)));
-
m_removeAction = new QAction(this);
connect(m_removeAction, SIGNAL(triggered()), this, SLOT(slotRemoveActionTriggered()));
}
}
}
+void DolphinContextMenu::initializeModifierKeyInfo()
+{
+ if (m_keyInfo == 0) {
+ m_keyInfo = new KModifierKeyInfo();
+ }
+}
+
void DolphinContextMenu::slotKeyModifierPressed(Qt::Key key, bool pressed)
{
m_shiftPressed = (key == Qt::Key_Shift) && pressed;
/** Opens the context menu model. */
void open();
+ /**
+ * TODO: This method is a workaround for a X11-issue in combination
+ * with KModifierKeyInfo: When constructing KModifierKeyInfo in the
+ * constructor of the context menu, the user interface might freeze.
+ * To bypass this, the KModifierKeyInfo is constructed in DolphinMainWindow
+ * directly after starting the application. Remove this method, if
+ * the X11-issue got fixed (contact the maintainer of KModifierKeyInfo for
+ * more details).
+ */
+ static void initializeModifierKeyInfo();
+
private slots:
/**
* Is invoked if a key modifier has been pressed and updates the context
QScopedPointer<KMenu> m_popup;
bool m_shiftPressed;
- KModifierKeyInfo m_keyInfo;
QAction* m_removeAction; // Action that represents either 'Move To Trash' or 'Delete'
+
+ static KModifierKeyInfo* m_keyInfo;
};
#endif
m_settingsDialog(0),
m_lastHandleUrlStatJob(0)
{
+ // Workaround for a X11-issue in combination with KModifierInfo
+ // (see DolphinContextMenu::initializeModifierKeyInfo() for
+ // more information):
+ DolphinContextMenu::initializeModifierKeyInfo();
+
setObjectName("Dolphin#");
m_viewTab.append(ViewTab());