summaryrefslogtreecommitdiff
path: root/devel/libdbusmenu-qt/files/patch-src__dbusmenuimporter.cpp
blob: c252a3d9f8cc56956e048bcd11636763a3561175 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
--- ./src/dbusmenuimporter.cpp.orig	2010-09-23 10:08:35.000000000 +0000
+++ ./src/dbusmenuimporter.cpp	2010-11-12 14:49:39.000000000 +0000
@@ -32,6 +32,8 @@
 #include <QSignalMapper>
 #include <QTime>
 #include <QTimer>
+#include <QToolButton>
+#include <QWidgetAction>
 
 // Local
 #include "dbusmenuitem_p.h"
@@ -41,7 +43,6 @@
 
 //#define BENCHMARK
 #ifdef BENCHMARK
-#include <QTime>
 static QTime sChrono;
 #endif
 
@@ -66,6 +67,29 @@
     DBusMenuImporterMethod m_method;
 };
 
+class EventSniffer : public QObject
+{
+public:
+    EventSniffer(QObject *parent = 0)
+        : QObject(parent) { }
+
+    ~EventSniffer() { }
+
+    bool eventFilter(QObject *object, QEvent *event)
+    {
+        Q_UNUSED(object);
+
+        if (event->type() == QEvent::Paint ||
+            event->type() == QEvent::KeyPress ||
+            event->type() == QEvent::KeyRelease) {
+            return false;
+        }
+
+        event->accept();
+        return true;
+    }
+};
+
 class DBusMenuImporterPrivate
 {
 public:
@@ -143,8 +167,30 @@
                 group->addAction(action);
             }
         }
+
+        bool isMenuTitle = map.take("x-kde-title").toBool();
+
         updateAction(action, map, map.keys());
 
+        if (isMenuTitle) {
+            QAction *buttonAction = action;
+            QFont font = buttonAction->font();
+            font.setBold(true);
+            buttonAction->setFont(font);
+            buttonAction->setEnabled(true);
+
+            QWidgetAction *action = new QWidgetAction(parent);
+            action->setObjectName("kmenu_title");
+            QToolButton *titleButton = new QToolButton(0);
+            EventSniffer *eventSniffer = new EventSniffer(titleButton);
+            titleButton->installEventFilter(eventSniffer); // prevent clicks on the title of the menu
+            titleButton->setDefaultAction(buttonAction);
+            titleButton->setDown(true); // prevent hover style changes in some styles
+            titleButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+            action->setDefaultWidget(titleButton);
+            return action;
+        }
+
         return action;
     }