Skip to content

Commit 6106164

Browse files
committed
dbus/dbusmenu: add DBusMenu support
1 parent 7cc1b54 commit 6106164

File tree

13 files changed

+984
-11
lines changed

13 files changed

+984
-11
lines changed

src/core/imageprovider.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#include <qpixmap.h>
99
#include <qqmlengine.h>
1010

11-
static QMap<QString, QsImageHandle*> liveImages;
11+
static QMap<QString, QsImageHandle*> liveImages; // NOLINT
1212

1313
QsImageHandle::QsImageHandle(QQmlImageProviderBase::ImageType type, QObject* parent)
1414
: QObject(parent)

src/dbus/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ target_include_directories(quickshell-dbus PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
1818
target_link_libraries(quickshell-dbus PRIVATE ${QT_DEPS})
1919

2020
qs_pch(quickshell-dbus)
21-
#qs_pch(quickshell-dbusplugin)
21+
22+
add_subdirectory(dbusmenu)

src/dbus/dbusmenu/CMakeLists.txt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
set_source_files_properties(com.canonical.dbusmenu.xml PROPERTIES
2+
CLASSNAME DBusMenuInterface
3+
INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/dbus_menu_types.hpp
4+
)
5+
6+
qt_add_dbus_interface(DBUS_INTERFACES
7+
com.canonical.dbusmenu.xml
8+
dbus_menu
9+
)
10+
11+
qt_add_library(quickshell-dbusmenu STATIC
12+
dbus_menu_types.cpp
13+
dbusmenu.cpp
14+
${DBUS_INTERFACES}
15+
)
16+
17+
qt_add_qml_module(quickshell-dbusmenu URI Quickshell.DBusMenu VERSION 0.1)
18+
19+
# dbus headers
20+
target_include_directories(quickshell-dbusmenu PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
21+
22+
target_link_libraries(quickshell-dbusmenu PRIVATE ${QT_DEPS})
23+
24+
qs_pch(quickshell-dbusmenu)
25+
qs_pch(quickshell-dbusmenuplugin)
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<node>
2+
<interface name="com.canonical.dbusmenu">
3+
<property name="Version" type="u" access="read"/>
4+
<property name="TextDirection" type="s" access="read"/>
5+
<property name="Status" type="s" access="read"/>
6+
<property name="IconThemePath" type="as" access="read"/>
7+
8+
<method name="GetLayout">
9+
<arg type="i" name="parentId" direction="in"/>
10+
<arg type="i" name="recursionDepth" direction="in"/>
11+
<arg type="as" name="propertyNames" direction="in"/>
12+
<arg type="u" name="revision" direction="out"/>
13+
<arg type="(ia{sv}av)" name="layout" direction="out"/>
14+
<annotation name="org.qtproject.QtDBus.QtTypeName.Out1" value="DBusMenuLayout"/>
15+
</method>
16+
<method name="GetGroupProperties">
17+
<arg type="ai" name="ids" direction="in"/>
18+
<arg type="as" name="propertyNames" direction="in"/>
19+
<arg type="a(ia{sv})" name="properties" direction="out"/>
20+
<annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="DBusMenuIdList"/>
21+
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="DBusMenuItemPropertiesList"/>
22+
</method>
23+
<method name="GetProperty">
24+
<arg type="i" name="id" direction="in"/>
25+
<arg type="s" name="name" direction="in"/>
26+
<arg type="v" name="value" direction="out"/>
27+
</method>
28+
<method name="Event">
29+
<arg type="i" name="id" direction="in"/>
30+
<arg type="s" name="eventId" direction="in"/>
31+
<arg type="v" name="data" direction="in"/>
32+
<arg type="u" name="timestamp" direction="in"/>
33+
</method>
34+
<!--<method name="EventGroup">
35+
<arg type="a(isvu)" name="events" direction="in"/>
36+
<arg type="ai" name="idErrors" direction="out"/>
37+
<annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="DBusMenuEventList"/>
38+
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="DBusMenuIdList"/>
39+
</method>-->
40+
<method name="AboutToShow">
41+
<arg type="i" name="id" direction="in"/>
42+
<arg type="b" name="needUpdate" direction="out"/>
43+
</method>
44+
<method name="AboutToShowGroup">
45+
<arg type="ai" name="ids" direction="in"/>
46+
<arg type="ai" name="updatesNeeded" direction="out"/>
47+
<arg type="ai" name="idErrors" direction="out"/>
48+
<annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="DBusMenuIdList"/>
49+
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="DBusMenuIdList"/>
50+
<annotation name="org.qtproject.QtDBus.QtTypeName.Out1" value="DBusMenuIdList"/>
51+
</method>
52+
53+
<signal name="ItemsPropertiesUpdated">
54+
<arg type="a(ia{sv})" name="updatedProps" direction="out"/>
55+
<arg type="a(ias)" name="removedProps" direction="out"/>
56+
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="DBusMenuItemPropertiesList"/>
57+
<annotation name="org.qtproject.QtDBus.QtTypeName.Out1" value="DBusMenuItemPropertyNamesList"/>
58+
</signal>
59+
<signal name="LayoutUpdated">
60+
<arg type="u" name="revision" direction="out"/>
61+
<arg type="i" name="parent" direction="out"/>
62+
</signal>
63+
<signal name="ItemActivationRequested">
64+
<arg type="i" name="id" direction="out"/>
65+
<arg type="u" name="timestamp" direction="out"/>
66+
</signal>
67+
</interface>
68+
</node>
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
#include "dbus_menu_types.hpp"
2+
3+
#include <qdbusargument.h>
4+
#include <qdbusextratypes.h>
5+
#include <qdebug.h>
6+
#include <qmetatype.h>
7+
#include <qvariant.h>
8+
9+
const QDBusArgument& operator>>(const QDBusArgument& argument, DBusMenuLayout& layout) {
10+
layout.children.clear();
11+
12+
argument.beginStructure();
13+
argument >> layout.id;
14+
argument >> layout.properties;
15+
16+
argument.beginArray();
17+
while (!argument.atEnd()) {
18+
auto childArgument = qdbus_cast<QDBusVariant>(argument).variant().value<QDBusArgument>();
19+
auto child = qdbus_cast<DBusMenuLayout>(childArgument);
20+
layout.children.append(child);
21+
}
22+
argument.endArray();
23+
24+
argument.endStructure();
25+
return argument;
26+
}
27+
28+
const QDBusArgument& operator<<(QDBusArgument& argument, const DBusMenuLayout& layout) {
29+
argument.beginStructure();
30+
argument << layout.id;
31+
argument << layout.properties;
32+
33+
argument.beginArray(qMetaTypeId<QDBusVariant>());
34+
for (const auto& child: layout.children) {
35+
argument << QDBusVariant(QVariant::fromValue(child));
36+
}
37+
argument.endArray();
38+
39+
argument.endStructure();
40+
return argument;
41+
}
42+
43+
const QDBusArgument& operator>>(const QDBusArgument& argument, DBusMenuItemProperties& item) {
44+
argument.beginStructure();
45+
argument >> item.id;
46+
argument >> item.properties;
47+
argument.endStructure();
48+
return argument;
49+
}
50+
51+
const QDBusArgument& operator<<(QDBusArgument& argument, const DBusMenuItemProperties& item) {
52+
argument.beginStructure();
53+
argument << item.id;
54+
argument << item.properties;
55+
argument.endStructure();
56+
return argument;
57+
}
58+
59+
const QDBusArgument& operator>>(const QDBusArgument& argument, DBusMenuItemPropertyNames& names) {
60+
argument.beginStructure();
61+
argument >> names.id;
62+
argument >> names.properties;
63+
argument.endStructure();
64+
return argument;
65+
}
66+
67+
const QDBusArgument& operator<<(QDBusArgument& argument, const DBusMenuItemPropertyNames& names) {
68+
argument.beginStructure();
69+
argument << names.id;
70+
argument << names.properties;
71+
argument.endStructure();
72+
return argument;
73+
}
74+
75+
QDebug operator<<(QDebug debug, const DBusMenuLayout& layout) {
76+
debug.nospace() << "DBusMenuLayout(id=" << layout.id << ", properties=" << layout.properties
77+
<< ", children=" << layout.children << ")";
78+
79+
return debug;
80+
}
81+
82+
QDebug operator<<(QDebug debug, const DBusMenuItemProperties& item) {
83+
debug.nospace() << "DBusMenuItemProperties(id=" << item.id << ", properties=" << item.properties
84+
<< ")";
85+
return debug;
86+
}
87+
88+
QDebug operator<<(QDebug debug, const DBusMenuItemPropertyNames& names) {
89+
debug.nospace() << "DBusMenuItemPropertyNames(id=" << names.id
90+
<< ", properties=" << names.properties << ")";
91+
return debug;
92+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#pragma once
2+
3+
#include <qcontainerfwd.h>
4+
#include <qdbusargument.h>
5+
#include <qdebug.h>
6+
#include <qlist.h>
7+
#include <qtypes.h>
8+
9+
struct DBusMenuLayout {
10+
qint32 id = 0;
11+
QVariantMap properties;
12+
QList<DBusMenuLayout> children;
13+
};
14+
15+
using DBusMenuIdList = QList<qint32>;
16+
17+
struct DBusMenuItemProperties {
18+
qint32 id = 0;
19+
QVariantMap properties;
20+
};
21+
22+
using DBusMenuItemPropertiesList = QList<DBusMenuItemProperties>;
23+
24+
struct DBusMenuItemPropertyNames {
25+
qint32 id = 0;
26+
QStringList properties;
27+
};
28+
29+
using DBusMenuItemPropertyNamesList = QList<DBusMenuItemPropertyNames>;
30+
31+
const QDBusArgument& operator>>(const QDBusArgument& argument, DBusMenuLayout& layout);
32+
const QDBusArgument& operator<<(QDBusArgument& argument, const DBusMenuLayout& layout);
33+
const QDBusArgument& operator>>(const QDBusArgument& argument, DBusMenuItemProperties& item);
34+
const QDBusArgument& operator<<(QDBusArgument& argument, const DBusMenuItemProperties& item);
35+
const QDBusArgument& operator>>(const QDBusArgument& argument, DBusMenuItemPropertyNames& names);
36+
const QDBusArgument& operator<<(QDBusArgument& argument, const DBusMenuItemPropertyNames& names);
37+
38+
QDebug operator<<(QDebug debug, const DBusMenuLayout& layout);
39+
QDebug operator<<(QDebug debug, const DBusMenuItemProperties& item);
40+
QDebug operator<<(QDebug debug, const DBusMenuItemPropertyNames& names);
41+
42+
Q_DECLARE_METATYPE(DBusMenuLayout);
43+
Q_DECLARE_METATYPE(DBusMenuIdList);
44+
Q_DECLARE_METATYPE(DBusMenuItemProperties);
45+
Q_DECLARE_METATYPE(DBusMenuItemPropertiesList);
46+
Q_DECLARE_METATYPE(DBusMenuItemPropertyNames);
47+
Q_DECLARE_METATYPE(DBusMenuItemPropertyNamesList);

0 commit comments

Comments
 (0)