Workaround for a X11-issue in combination with KModifierKeyInfo: When constructing KModifierKeyInfo in the constructor of the context menu, the user interface might freeze. Thanks to Mark Gaiser for clarifying this with the KModifierKeyInfo maintainer and testing the workaround!

CCMAIL: markg85@gmail.com

svn path=/trunk/KDE/kdebase/apps/; revision=1177658
This commit is contained in:
Peter Penz 2010-09-20 19:52:40 +00:00
parent 4822c2cc3b
commit c7e8c4af3d
3 changed files with 33 additions and 7 deletions

View file

@ -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;

View file

@ -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

View file

@ -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());