1 /* 2 SPDX-FileCopyrightText: 2018 Michail Vourlakos <mvourlakos@gmail.com> 3 SPDX-License-Identifier: GPL-2.0-or-later 4 */ 5 6 #ifndef CONTEXTMENU_H 7 #define CONTEXTMENU_H 8 9 // Qt 10 #include <QEvent> 11 #include <QMenu> 12 #include <QMetaMethod> 13 #include <QQuickItem> 14 #include <QQuickView> 15 #include <QPointer> 16 #include <QMouseEvent> 17 #include <QObject> 18 19 namespace Plasma { 20 class Applet; 21 class Containment; 22 } 23 24 namespace Latte { 25 class View; 26 } 27 28 namespace Latte { 29 namespace ViewPart { 30 31 class ContextMenu : public QObject 32 { 33 Q_OBJECT 34 35 public: 36 ContextMenu(Latte::View *view); 37 ~ContextMenu() override; 38 39 QMenu *menu(); 40 41 bool mousePressEvent(QMouseEvent *event); 42 bool mousePressEventForContainmentMenu(QQuickView *view, QMouseEvent *event); 43 44 signals: 45 void menuChanged(); 46 47 private slots: 48 void menuAboutToHide(); 49 50 private: 51 void addAppletActions(QMenu *desktopMenu, Plasma::Applet *applet, QEvent *event); 52 void addContainmentActions(QMenu *desktopMenu, QEvent *event); 53 void updateAppletContainsMethod(); 54 55 QPoint popUpRelevantToParent(const QRect &parentItem, const QRect popUpRect); 56 QPoint popUpRelevantToGlobalPoint(const QRect &parentItem, const QRect popUpRect); 57 58 QPoint popUpTopLeft(Plasma::Applet *applet, const QRect popUpRect); 59 60 Plasma::Containment *containmentById(uint id); 61 62 63 private: 64 QPointer<QMenu> m_contextMenu; 65 QMetaMethod m_appletContainsMethod; 66 QQuickItem *m_appletContainsMethodItem{nullptr}; 67 68 Latte::View *m_latteView; 69 70 friend class Latte::View; 71 }; 72 73 } 74 } 75 76 #endif // DOCKMENUMANAGER_H 77