#include <kservice.h>
#include <kurl.h>
#include <konq_copytomenu.h>
-#include <kmodifierkeyinfo.h>
#include <QtCore/QObject>
Q_OBJECT
public:
+ enum Command
+ {
+ None,
+ OpenParentFolderInNewWindow,
+ OpenParentFolderInNewTab
+ };
+
/**
* @parent Pointer to the main window the context menu
* belongs to.
virtual ~DolphinContextMenu();
void setCustomActions(const QList<QAction*>& actions);
- void setShiftIsPressed(bool pressed);
- /** Opens the context menu model. */
- void open();
+ /**
+ * Opens the context menu model and returns the requested
+ * command, that should be triggered by the caller. If
+ * Command::None has been returned, either the context-menu
+ * had been closed without executing an action or an
+ * already available action from the main-window has been
+ * executed.
+ */
+ Command 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();
-public slots:
- void deleteOrTrashMenuEntry(Qt::Key key, bool pressed);
+private slots:
+ /**
+ * Is invoked if a key modifier has been pressed and updates the context
+ * menu to show the 'Delete' action instead of the 'Move To Trash' action
+ * if the shift-key has been pressed.
+ */
+ void slotKeyModifierPressed(Qt::Key key, bool pressed);
+
+ /**
+ * Triggers the 'Delete'-action if the shift-key has been pressed, otherwise
+ * the 'Move to Trash'-action gets triggered.
+ */
+ void slotRemoveActionTriggered();
private:
void openTrashContextMenu();
QAction* createPasteAction();
-private:
KFileItemListProperties& capabilities();
void addServiceActions(KFileItemActions& fileItemActions);
void addVersionControlActions();
void addCustomActions();
+ /**
+ * Updates m_removeAction to represent the 'Delete'-action if the shift-key
+ * has been pressed. Otherwise it represents the 'Move to Trash'-action.
+ */
+ void updateRemoveAction();
+
private:
struct Entry
{
KonqCopyToMenu m_copyToMenu;
QList<QAction*> m_customActions;
QScopedPointer<KMenu> m_popup;
- bool m_showDeleteCommand;
- bool m_shiftIsPressed;
+
+ Command m_command;
+
+ bool m_shiftPressed;
+ QAction* m_removeAction; // Action that represents either 'Move To Trash' or 'Delete'
};
#endif