mirror of
https://invent.kde.org/system/dolphin
synced 2024-10-28 03:21:56 +00:00
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:
parent
4822c2cc3b
commit
c7e8c4af3d
|
@ -53,6 +53,8 @@
|
||||||
#include "views/dolphinview.h"
|
#include "views/dolphinview.h"
|
||||||
#include "views/viewmodecontroller.h"
|
#include "views/viewmodecontroller.h"
|
||||||
|
|
||||||
|
KModifierKeyInfo* DolphinContextMenu::m_keyInfo = 0;
|
||||||
|
|
||||||
DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent,
|
DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent,
|
||||||
const KFileItem& fileInfo,
|
const KFileItem& fileInfo,
|
||||||
const KUrl& baseUrl) :
|
const KUrl& baseUrl) :
|
||||||
|
@ -65,7 +67,6 @@ DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent,
|
||||||
m_customActions(),
|
m_customActions(),
|
||||||
m_popup(new KMenu(m_mainWindow)),
|
m_popup(new KMenu(m_mainWindow)),
|
||||||
m_shiftPressed(false),
|
m_shiftPressed(false),
|
||||||
m_keyInfo(),
|
|
||||||
m_removeAction(0)
|
m_removeAction(0)
|
||||||
{
|
{
|
||||||
// The context menu either accesses the URLs of the selected items
|
// The context menu either accesses the URLs of the selected items
|
||||||
|
@ -74,13 +75,14 @@ DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent,
|
||||||
m_selectedUrls = view->selectedUrls();
|
m_selectedUrls = view->selectedUrls();
|
||||||
m_selectedItems = view->selectedItems();
|
m_selectedItems = view->selectedItems();
|
||||||
|
|
||||||
if (m_keyInfo.isKeyPressed(Qt::Key_Shift) || m_keyInfo.isKeyLatched(Qt::Key_Shift)) {
|
if (m_keyInfo != 0) {
|
||||||
m_shiftPressed = true;
|
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);
|
m_removeAction = new QAction(this);
|
||||||
connect(m_removeAction, SIGNAL(triggered()), this, SLOT(slotRemoveActionTriggered()));
|
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)
|
void DolphinContextMenu::slotKeyModifierPressed(Qt::Key key, bool pressed)
|
||||||
{
|
{
|
||||||
m_shiftPressed = (key == Qt::Key_Shift) && pressed;
|
m_shiftPressed = (key == Qt::Key_Shift) && pressed;
|
||||||
|
|
|
@ -77,6 +77,17 @@ public:
|
||||||
/** Opens the context menu model. */
|
/** Opens the context menu model. */
|
||||||
void open();
|
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:
|
private slots:
|
||||||
/**
|
/**
|
||||||
* Is invoked if a key modifier has been pressed and updates the context
|
* Is invoked if a key modifier has been pressed and updates the context
|
||||||
|
@ -155,8 +166,9 @@ private:
|
||||||
QScopedPointer<KMenu> m_popup;
|
QScopedPointer<KMenu> m_popup;
|
||||||
|
|
||||||
bool m_shiftPressed;
|
bool m_shiftPressed;
|
||||||
KModifierKeyInfo m_keyInfo;
|
|
||||||
QAction* m_removeAction; // Action that represents either 'Move To Trash' or 'Delete'
|
QAction* m_removeAction; // Action that represents either 'Move To Trash' or 'Delete'
|
||||||
|
|
||||||
|
static KModifierKeyInfo* m_keyInfo;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -116,6 +116,11 @@ DolphinMainWindow::DolphinMainWindow(int id) :
|
||||||
m_settingsDialog(0),
|
m_settingsDialog(0),
|
||||||
m_lastHandleUrlStatJob(0)
|
m_lastHandleUrlStatJob(0)
|
||||||
{
|
{
|
||||||
|
// Workaround for a X11-issue in combination with KModifierInfo
|
||||||
|
// (see DolphinContextMenu::initializeModifierKeyInfo() for
|
||||||
|
// more information):
|
||||||
|
DolphinContextMenu::initializeModifierKeyInfo();
|
||||||
|
|
||||||
setObjectName("Dolphin#");
|
setObjectName("Dolphin#");
|
||||||
|
|
||||||
m_viewTab.append(ViewTab());
|
m_viewTab.append(ViewTab());
|
||||||
|
|
Loading…
Reference in a new issue