diff options
| -rw-r--r-- | src/dolphincontextmenu.cpp | 21 | ||||
| -rw-r--r-- | src/dolphincontextmenu.h | 14 | ||||
| -rw-r--r-- | src/dolphinmainwindow.cpp | 5 |
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()); |
