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