┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dolphincontextmenu.cpp21
-rw-r--r--src/dolphincontextmenu.h14
-rw-r--r--src/dolphinmainwindow.cpp5
3 files changed, 33 insertions, 7 deletions
diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp
index 2a2994086..116edf4f0 100644
--- a/src/dolphincontextmenu.cpp
+++ b/src/dolphincontextmenu.cpp
@@ -53,6 +53,8 @@
#include "views/dolphinview.h"
#include "views/viewmodecontroller.h"
+KModifierKeyInfo* DolphinContextMenu::m_keyInfo = 0;
+
DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent,
const KFileItem& fileInfo,
const KUrl& baseUrl) :
@@ -65,7 +67,6 @@ DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent,
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
@@ -74,13 +75,14 @@ DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent,
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()));
}
@@ -123,6 +125,13 @@ void DolphinContextMenu::open()
}
}
+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;
diff --git a/src/dolphincontextmenu.h b/src/dolphincontextmenu.h
index ff8d13210..028dc4649 100644
--- a/src/dolphincontextmenu.h
+++ b/src/dolphincontextmenu.h
@@ -77,6 +77,17 @@ public:
/** 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
@@ -155,8 +166,9 @@ private:
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
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp
index 722a90f93..e72c52bfc 100644
--- a/src/dolphinmainwindow.cpp
+++ b/src/dolphinmainwindow.cpp
@@ -116,6 +116,11 @@ DolphinMainWindow::DolphinMainWindow(int id) :
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());