Merge lp:~torkvemada/libdbusmenu-qt/libdbusmenu-qt into lp:libdbusmenu-qt

Proposed by Vsevolod Velichko
Status: Work in progress
Proposed branch: lp:~torkvemada/libdbusmenu-qt/libdbusmenu-qt
Merge into: lp:libdbusmenu-qt
Diff against target: 99 lines (+36/-2)
5 files modified
src/dbusmenu_p.cpp (+5/-0)
src/dbusmenu_p.h (+2/-0)
src/dbusmenuexporter.cpp (+4/-2)
tests/dbusmenuexportertest.cpp (+24/-0)
tests/dbusmenuexportertest.h (+1/-0)
To merge this branch: bzr merge lp:~torkvemada/libdbusmenu-qt/libdbusmenu-qt
Reviewer Review Type Date Requested Status
Albert Astals Cid (community) Approve
Review via email: mp+269273@code.launchpad.net

Description of the change

Support for menu to be exported with multiple DBusMenuExporter's.
Example when it's needed: if one wants to export main menu (which is exported by default with appmenu-qt) as the Unity dock menu. Since Qt exports appmenu by default, the menu cannot be exported to dock without the patch.

To post a comment you must log in.
Revision history for this message
Albert Astals Cid (aacid) wrote :

Looks good to me, do you have an application that needs this to work?

review: Approve
Revision history for this message
Vsevolod Velichko (torkvemada) wrote :

Yes, we have an IM qutIM who exports its main menu to Unity dock, but it doesn't work since the time when Ubuntu started auto-exporting main menu for Qt applications.

Revision history for this message
Albert Astals Cid (aacid) wrote :

Is 0.2.0-0ubuntu9 new enough? What's the difference i should see when running it with and without this patch?

Revision history for this message
Vsevolod Velichko (torkvemada) wrote :

No, 0.2 is forgotten and buried. There's an pre-alfa version 0.4 affected, which is currently available only on github and is hard to build :)

Revision history for this message
Albert Astals Cid (aacid) wrote :

Tried building the git version, didn't succeeed.

Honestly without a way to try this actually improves things in real life (besides the test) I don't feel like I approve this merge request, problem is that libdbusmenu-qt is kind of unmaintained

Revision history for this message
Albert Astals Cid (aacid) wrote :

Putting it to Work In Progress until submitter can provide a better use case of why this is needed.

Unmerged revisions

271. By Vsevolod Velichko

test for multiple exporters

270. By Vsevolod Velichko

support multiple exporters for one menu

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/dbusmenu_p.cpp'
--- src/dbusmenu_p.cpp 2011-06-20 15:20:18 +0000
+++ src/dbusmenu_p.cpp 2015-08-26 21:06:14 +0000
@@ -91,4 +91,9 @@
91 delete this;91 delete this;
92}92}
9393
94DBusMenuExporter* DBusMenu::exporter() const
95{
96 return m_exporter;
97}
98
94#include "dbusmenu_p.moc"99#include "dbusmenu_p.moc"
95100
=== modified file 'src/dbusmenu_p.h'
--- src/dbusmenu_p.h 2013-11-05 04:18:39 +0000
+++ src/dbusmenu_p.h 2015-08-26 21:06:14 +0000
@@ -41,6 +41,8 @@
41 DBusMenu(QMenu *menu, DBusMenuExporter *exporter, int parentId);41 DBusMenu(QMenu *menu, DBusMenuExporter *exporter, int parentId);
42 virtual ~DBusMenu();42 virtual ~DBusMenu();
4343
44 DBusMenuExporter* exporter() const;
45
44protected:46protected:
45 virtual bool eventFilter(QObject *obj, QEvent *event);47 virtual bool eventFilter(QObject *obj, QEvent *event);
4648
4749
=== modified file 'src/dbusmenuexporter.cpp'
--- src/dbusmenuexporter.cpp 2012-10-24 14:43:10 +0000
+++ src/dbusmenuexporter.cpp 2015-08-26 21:06:14 +0000
@@ -55,10 +55,12 @@
5555
56void DBusMenuExporterPrivate::addMenu(QMenu *menu, int parentId)56void DBusMenuExporterPrivate::addMenu(QMenu *menu, int parentId)
57{57{
58 if (menu->findChild<DBusMenu *>()) {58 Q_FOREACH(DBusMenu *m, menu->findChildren<DBusMenu *>()) {
59 // This can happen if a menu is removed from its parent and added back59 // This can happen if a menu is removed from its parent and added back
60 // See KDE bug 25406660 // See KDE bug 254066
61 return;61 if(m->exporter() == q) {
62 return;
63 }
62 }64 }
63 new DBusMenu(menu, q, parentId);65 new DBusMenu(menu, q, parentId);
64 Q_FOREACH(QAction *action, menu->actions()) {66 Q_FOREACH(QAction *action, menu->actions()) {
6567
=== modified file 'tests/dbusmenuexportertest.cpp'
--- tests/dbusmenuexportertest.cpp 2012-01-23 14:02:42 +0000
+++ tests/dbusmenuexportertest.cpp 2015-08-26 21:06:14 +0000
@@ -42,6 +42,7 @@
4242
43static const char *TEST_SERVICE = "org.kde.dbusmenu-qt-test";43static const char *TEST_SERVICE = "org.kde.dbusmenu-qt-test";
44static const char *TEST_OBJECT_PATH = "/TestMenuBar";44static const char *TEST_OBJECT_PATH = "/TestMenuBar";
45static const char *TEST_OBJECT_PATH2 = "/TestMenuBar2";
4546
46Q_DECLARE_METATYPE(QList<int>)47Q_DECLARE_METATYPE(QList<int>)
4748
@@ -600,6 +601,29 @@
600 QCOMPARE(trackCount(subMenu), 1);601 QCOMPARE(trackCount(subMenu), 1);
601}602}
602603
604// Check that menu can be exported with two different exporters
605void DBusMenuExporterTest::testMultipleExporters()
606{
607 QMenu mainMenu;
608 QVERIFY(QDBusConnection::sessionBus().registerService(TEST_SERVICE));
609 DBusMenuExporter *exporter1 = new DBusMenuExporter(TEST_OBJECT_PATH, &mainMenu);
610 DBusMenuExporter *exporter2 = new DBusMenuExporter(TEST_OBJECT_PATH2, &mainMenu);
611
612 QMenu* subMenu = new QMenu("File");
613 subMenu->addAction("a1");
614 mainMenu.addAction(subMenu->menuAction());
615
616 QDBusInterface iface1(TEST_SERVICE, TEST_OBJECT_PATH);
617 QVERIFY2(iface1.isValid(), qPrintable(iface1.lastError().message()));
618
619 QDBusInterface iface2(TEST_SERVICE, TEST_OBJECT_PATH2);
620 QVERIFY2(iface2.isValid(), qPrintable(iface2.lastError().message()));
621
622 QCOMPARE(getChildren(&iface1, 0, QStringList()).count(), mainMenu.actions().count());
623 QCOMPARE(getChildren(&iface2, 0, QStringList()).count(), mainMenu.actions().count());
624
625}
626
603// If desktop does not want icon in menus, check we do not export them627// If desktop does not want icon in menus, check we do not export them
604void DBusMenuExporterTest::testHonorDontShowIconsInMenusAttribute()628void DBusMenuExporterTest::testHonorDontShowIconsInMenusAttribute()
605{629{
606630
=== modified file 'tests/dbusmenuexportertest.h'
--- tests/dbusmenuexportertest.h 2012-01-18 15:24:13 +0000
+++ tests/dbusmenuexportertest.h 2015-08-26 21:06:14 +0000
@@ -49,6 +49,7 @@
49 void testGetGroupProperties();49 void testGetGroupProperties();
50 void testActivateAction();50 void testActivateAction();
51 void testTrackActionsOnlyOnce();51 void testTrackActionsOnlyOnce();
52 void testMultipleExporters();
52 void testHonorDontShowIconsInMenusAttribute();53 void testHonorDontShowIconsInMenusAttribute();
53 void testDBusMenuObjectIsDeletedWhenExporterIsDeleted();54 void testDBusMenuObjectIsDeletedWhenExporterIsDeleted();
54 void testSeparatorCollapsing_data();55 void testSeparatorCollapsing_data();

Subscribers

People subscribed via source and target branches