Hello community, here is the log from the commit of package libdbusmenu-qt for openSUSE:Factory checked in at Fri Sep 2 09:53:17 CEST 2011.
-------- --- KDE/libdbusmenu-qt/libdbusmenu-qt.changes 2011-06-25 12:58:44.000000000 +0200 +++ /mounts/work_src_done/STABLE/libdbusmenu-qt/libdbusmenu-qt.changes 2011-09-01 20:12:30.000000000 +0200 @@ -1,0 +2,12 @@ +Thu Sep 1 18:12:05 UTC 2011 - [email protected] + +- Update to 0.9.0: + * Add support for the "Status" dbusmenu property. Will be used by appmenu-qt + for LP BUG 737419 + - Collapse multiple separators, get rid of starting and trailing separators + (LP BUG 793339) (Aurelien Gateau) +- Spec file updates: + * Changed License: to LGPL-2.0+. + * Minor other updates. + +------------------------------------------------------------------- calling whatdependson for head-i586 Old: ---- libdbusmenu-qt-0.8.3.tar.bz2 New: ---- libdbusmenu-qt-0.9.0.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libdbusmenu-qt.spec ++++++ --- /var/tmp/diff_new_pack.jI3ezi/_old 2011-09-02 09:50:49.000000000 +0200 +++ /var/tmp/diff_new_pack.jI3ezi/_new 2011-09-02 09:50:49.000000000 +0200 @@ -19,9 +19,9 @@ Name: libdbusmenu-qt -Version: 0.8.3 +Version: 0.9.0 Release: 1 -License: LGPLv2+ +License: LGPL-2.0+ Url: https://launchpad.net/libdbusmenu-qt/ Summary: A Qt implementation of the DBusMenu protocol Group: System/Libraries @@ -44,7 +44,7 @@ their menus over DBus. %package devel -License: LGPLv2+ +License: LGPL-2.0+ Summary: Development package for libdbusmenu-qt Group: Development/Libraries/Other Requires: libdbusmenu-qt2 = %{version} @@ -55,7 +55,7 @@ This package contains development files for libdbusmenu-qt. %package -n libdbusmenu-qt2 -License: LGPLv2+ +License: LGPL-2.0+ Summary: Development package for dbusmenu-qt Group: System/Libraries %requires_ge libqt4-x11 @@ -70,22 +70,22 @@ %setup -q %build - mkdir build - cd build - export CFLAGS="%{optflags}" - export CXXFLAGS="%{optflags}" - export LDFLAGS="-Wl,-Bsymbolic-functions $LDFLAGS" - _libsuffix=$(echo %{_lib} | cut -b4-) - cmake -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \ +mkdir build +cd build +export CFLAGS="%{optflags}" +export CXXFLAGS="%{optflags}" +export LDFLAGS="-Wl,-Bsymbolic-functions $LDFLAGS" +_libsuffix=$(echo %{_lib} | cut -b4-) +cmake -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \ -DLIB_SUFFIX="$_libsuffix" \ -DCMAKE_BUILD_TYPE=release .. - make %{?_smp_mflags} VERBOSE=1 - cd .. +make %{?_smp_mflags} VERBOSE=1 +cd .. %install - cd build - %makeinstall - cd .. +cd build +%makeinstall +cd .. rm -rf %{buildroot}%{_datadir}/doc/dbusmenu-qt/ ++++++ libdbusmenu-qt-0.8.3.tar.bz2 -> libdbusmenu-qt-0.9.0.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdbusmenu-qt-0.8.3/CMakeLists.txt new/libdbusmenu-qt-0.9.0/CMakeLists.txt --- old/libdbusmenu-qt-0.8.3/CMakeLists.txt 2011-06-21 10:54:36.000000000 +0200 +++ new/libdbusmenu-qt-0.9.0/CMakeLists.txt 2011-08-30 11:40:07.000000000 +0200 @@ -8,8 +8,8 @@ # Versions ## Package version set(dbusmenu_qt_VERSION_MAJOR 0) -set(dbusmenu_qt_VERSION_MINOR 8) -set(dbusmenu_qt_VERSION_PATCH 3) +set(dbusmenu_qt_VERSION_MINOR 9) +set(dbusmenu_qt_VERSION_PATCH 0) set(dbusmenu_qt_VERSION ${dbusmenu_qt_VERSION_MAJOR}.${dbusmenu_qt_VERSION_MINOR}.${dbusmenu_qt_VERSION_PATCH}) ## Lib version @@ -17,10 +17,10 @@ set(dbusmenu_qt_lib_SOVERSION 2) ### Bump this one when the API is extended in a binary-compatible way -set(dbusmenu_qt_lib_API_VERSION 5) +set(dbusmenu_qt_lib_API_VERSION 6) ### Bump this one when changes do not extend the API -set(dbusmenu_qt_lib_PATCH_VERSION 2) +set(dbusmenu_qt_lib_PATCH_VERSION 0) set(dbusmenu_qt_lib_VERSION ${dbusmenu_qt_lib_SOVERSION}.${dbusmenu_qt_lib_API_VERSION}.${dbusmenu_qt_lib_PATCH_VERSION}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdbusmenu-qt-0.8.3/NEWS new/libdbusmenu-qt-0.9.0/NEWS --- old/libdbusmenu-qt-0.8.3/NEWS 2011-06-21 10:54:36.000000000 +0200 +++ new/libdbusmenu-qt-0.9.0/NEWS 2011-08-30 11:40:07.000000000 +0200 @@ -1,3 +1,7 @@ +# 0.9.0 - 2011.08.30 +- Add support for the "Status" dbusmenu property. Will be used by appmenu-qt for LP BUG 737419 (Aurelien Gateau) +- Collapse multiple separators, get rid of starting and trailing separators (LP BUG 793339) (Aurelien Gateau) + # 0.8.3 - 2011.06.21 - If DBusMenuExporter is deleted, delete all DBusMenu instances which were working with it (Aurelien Gateau) - Only show icons in menu if the platform allows them (Michael Terry) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdbusmenu-qt-0.8.3/RELEASE_CHECK_LIST new/libdbusmenu-qt-0.9.0/RELEASE_CHECK_LIST --- old/libdbusmenu-qt-0.8.3/RELEASE_CHECK_LIST 2011-06-21 10:54:36.000000000 +0200 +++ new/libdbusmenu-qt-0.9.0/RELEASE_CHECK_LIST 2011-08-30 11:40:07.000000000 +0200 @@ -10,6 +10,10 @@ - Unpack tarball, build and run tests - Test with KDE trunk - Sync the gitorious repository (at least the version number changes) + bzr format-patch -r tag:x.y.z-1.. + mv *.diff $gitorious + cd $gitorious + git am --reject *.diff - If ok, create tag tag=x.y.z bzr tag $tag diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdbusmenu-qt-0.8.3/src/com.canonical.dbusmenu.xml new/libdbusmenu-qt-0.9.0/src/com.canonical.dbusmenu.xml --- old/libdbusmenu-qt-0.8.3/src/com.canonical.dbusmenu.xml 2011-06-21 10:54:36.000000000 +0200 +++ new/libdbusmenu-qt-0.9.0/src/com.canonical.dbusmenu.xml 2011-08-30 11:40:07.000000000 +0200 @@ -171,6 +171,16 @@ </dox:d> </property> + <property name="Status" type="s" access="read"> + <dox:d> + Tells if the menus are in a normal state or they believe that they + could use some attention. Cases for showing them would be if help + were referring to them or they accessors were being highlighted. + This property can have two values: "normal" in almost all cases and + "notice" when they should have a higher priority to be shown. + </dox:d> + </property> + <!-- Functions --> <method name="GetLayout"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdbusmenu-qt-0.8.3/src/dbusmenuexporter.cpp new/libdbusmenu-qt-0.9.0/src/dbusmenuexporter.cpp --- old/libdbusmenu-qt-0.8.3/src/dbusmenuexporter.cpp 2011-06-21 10:54:36.000000000 +0200 +++ new/libdbusmenu-qt-0.9.0/src/dbusmenuexporter.cpp 2011-08-30 11:40:07.000000000 +0200 @@ -245,6 +245,78 @@ // "icon-data"; } +static void collapseSeparator(QAction* action) +{ + action->setVisible(false); +} + +// Unless the separatorsCollapsible property is set to false, Qt will get rid +// of separators at the beginning and at the end of menus as well as collapse +// multiple separators in the middle. For example, a menu like this: +// +// --- +// Open +// --- +// --- +// Quit +// --- +// +// is displayed like this: +// +// Open +// --- +// Quit +// +// We fake this by setting separators invisible before exporting them. +// +// cf. https://bugs.launchpad.net/libdbusmenu-qt/+bug/793339 +void DBusMenuExporterPrivate::collapseSeparators(QMenu* menu) +{ + QList<QAction*> actions = menu->actions(); + if (actions.isEmpty()) { + return; + } + + QList<QAction*>::Iterator it, begin = actions.begin(), end = actions.end(); + + // Get rid of separators at end + it = end - 1; + for (; it != begin; --it) { + if ((*it)->isSeparator()) { + collapseSeparator(*it); + } else { + break; + } + } + // end now points after the last visible entry + end = it + 1; + it = begin; + + // Get rid of separators at beginnning + for (; it != end; ++it) { + if ((*it)->isSeparator()) { + collapseSeparator(*it); + } else { + break; + } + } + + // Collapse separators in between + bool previousWasSeparator = false; + for (; it != end; ++it) { + QAction* action = *it; + if (action->isSeparator()) { + if (previousWasSeparator) { + collapseSeparator(action); + } else { + previousWasSeparator = true; + } + } else { + previousWasSeparator = false; + } + } +} + //------------------------------------------------- // // DBusMenuExporter @@ -255,6 +327,7 @@ , d(new DBusMenuExporterPrivate) { d->q = this; + d->m_objectPath = objectPath; d->m_rootMenu = menu; d->m_nextId = 1; d->m_revision = 1; @@ -348,6 +421,10 @@ void DBusMenuExporter::doEmitLayoutUpdated() { Q_FOREACH(int id, d->m_layoutUpdatedIds) { + QMenu* menu = d->menuForId(id); + if (menu && menu->separatorsCollapsible()) { + d->collapseSeparators(menu); + } d->m_dbusObject->LayoutUpdated(d->m_revision, id); } d->m_layoutUpdatedIds.clear(); @@ -381,4 +458,14 @@ d->removeActionInternal(object); } +void DBusMenuExporter::setStatus(const QString& status) +{ + d->m_dbusObject->setStatus(status); +} + +QString DBusMenuExporter::status() const +{ + return d->m_dbusObject->status(); +} + #include "dbusmenuexporter.moc" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdbusmenu-qt-0.8.3/src/dbusmenuexporter.h new/libdbusmenu-qt-0.9.0/src/dbusmenuexporter.h --- old/libdbusmenu-qt-0.8.3/src/dbusmenuexporter.h 2011-06-21 10:54:36.000000000 +0200 +++ new/libdbusmenu-qt-0.9.0/src/dbusmenuexporter.h 2011-08-30 11:40:07.000000000 +0200 @@ -55,6 +55,20 @@ */ void activateAction(QAction *action); + /** + * The status of the menu. Can be one of "normal" or "notice". This can be + * used to notify the other side the menu should be made more visible. + * For example, appmenu uses it to tell Unity panel to show/hide the menubar + * when the Alt modifier is pressed/released. + */ + void setStatus(const QString &status); + + /** + * Returns the status of the menu. + * @ref setStatus + */ + QString status() const; + protected: /** * Must extract the icon name for action. This is the name which will diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdbusmenu-qt-0.8.3/src/dbusmenuexporterdbus_p.cpp new/libdbusmenu-qt-0.9.0/src/dbusmenuexporterdbus_p.cpp --- old/libdbusmenu-qt-0.8.3/src/dbusmenuexporterdbus_p.cpp 2011-06-21 10:54:36.000000000 +0200 +++ new/libdbusmenu-qt-0.9.0/src/dbusmenuexporterdbus_p.cpp 2011-08-30 11:40:07.000000000 +0200 @@ -21,7 +21,9 @@ #include "dbusmenuexporterdbus_p.h" // Qt +#include <QDBusMessage> #include <QMenu> +#include <QVariant> // Local #include "dbusmenuadaptor.h" @@ -29,9 +31,13 @@ #include "dbusmenushortcut_p.h" #include "debug_p.h" +static const char *DBUSMENU_INTERFACE = "com.canonical.dbusmenu"; +static const char *FDO_PROPERTIES_INTERFACE = "org.freedesktop.DBus.Properties"; + DBusMenuExporterDBus::DBusMenuExporterDBus(DBusMenuExporter *exporter) : QObject(exporter) , m_exporter(exporter) +, m_status("normal") { DBusMenuTypes_register(); new DbusmenuAdaptor(this); @@ -151,5 +157,30 @@ return filter.mChanged; } +void DBusMenuExporterDBus::setStatus(const QString& status) +{ + if (m_status == status) { + return; + } + m_status = status; + + QVariantMap map; + map.insert("Status", QVariant(status)); + + QDBusMessage msg = QDBusMessage::createSignal(m_exporter->d->m_objectPath, FDO_PROPERTIES_INTERFACE, "PropertiesChanged"); + QVariantList args = QVariantList() + << DBUSMENU_INTERFACE + << map + << QStringList() // New properties: none + ; + msg.setArguments(args); + QDBusConnection::sessionBus().send(msg); +} + +QString DBusMenuExporterDBus::status() const +{ + return m_status; +} + #include "dbusmenuexporterdbus_p.moc" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdbusmenu-qt-0.8.3/src/dbusmenuexporterdbus_p.h new/libdbusmenu-qt-0.9.0/src/dbusmenuexporterdbus_p.h --- old/libdbusmenu-qt-0.8.3/src/dbusmenuexporterdbus_p.h 2011-06-21 10:54:36.000000000 +0200 +++ new/libdbusmenu-qt-0.9.0/src/dbusmenuexporterdbus_p.h 2011-08-30 11:40:07.000000000 +0200 @@ -42,11 +42,15 @@ Q_OBJECT Q_CLASSINFO("D-Bus Interface", "com.canonical.dbusmenu") Q_PROPERTY(uint Version READ Version) + Q_PROPERTY(QString Status READ status) public: DBusMenuExporterDBus(DBusMenuExporter *m_exporter); uint Version() const { return 2; } + QString status() const; + void setStatus(const QString &status); + public Q_SLOTS: Q_NOREPLY void Event(int id, const QString &eventId, const QDBusVariant &data, uint timestamp); QDBusVariant GetProperty(int id, const QString &property); @@ -61,6 +65,7 @@ private: DBusMenuExporter *m_exporter; + QString m_status; friend class DBusMenuExporter; friend class DBusMenuExporterPrivate; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdbusmenu-qt-0.8.3/src/dbusmenuexporterprivate_p.h new/libdbusmenu-qt-0.9.0/src/dbusmenuexporterprivate_p.h --- old/libdbusmenu-qt-0.8.3/src/dbusmenuexporterprivate_p.h 2011-06-21 10:54:36.000000000 +0200 +++ new/libdbusmenu-qt-0.9.0/src/dbusmenuexporterprivate_p.h 2011-08-30 11:40:07.000000000 +0200 @@ -40,6 +40,8 @@ public: DBusMenuExporter *q; + QString m_objectPath; + DBusMenuExporterDBus *m_dbusObject; QMenu *m_rootMenu; @@ -80,6 +82,8 @@ void emitLayoutUpdated(int id); void insertIconProperty(QVariantMap* map, QAction *action) const; + + void collapseSeparators(QMenu*); }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdbusmenu-qt-0.8.3/tests/dbusmenuexportertest.cpp new/libdbusmenu-qt-0.9.0/tests/dbusmenuexportertest.cpp --- old/libdbusmenu-qt-0.8.3/tests/dbusmenuexportertest.cpp 2011-06-21 10:54:36.000000000 +0200 +++ new/libdbusmenu-qt-0.9.0/tests/dbusmenuexportertest.cpp 2011-08-30 11:40:07.000000000 +0200 @@ -649,4 +649,118 @@ QVERIFY(!hasInternalDBusMenuObject(&inputMenu)); } +void DBusMenuExporterTest::testSeparatorCollapsing_data() +{ + QTest::addColumn<QString>("input"); + QTest::addColumn<QString>("expected"); + + QTest::newRow("one-separator") << "a-b" << "a-b"; + QTest::newRow("two-separators") << "a-b-c" << "a-b-c"; + QTest::newRow("middle-separators") << "a--b" << "a-b"; + QTest::newRow("separators-at-begin") << "--a-b" << "a-b"; + QTest::newRow("separators-at-end") << "a-b--" << "a-b"; + QTest::newRow("separators-everywhere") << "--a---bc--d--" << "a-bc-d"; + QTest::newRow("empty-menu") << "" << ""; + QTest::newRow("separators-only") << "---" << ""; +} + +void DBusMenuExporterTest::testSeparatorCollapsing() +{ + QFETCH(QString, input); + QFETCH(QString, expected); + + // Create menu from menu string + QMenu inputMenu; + + QVERIFY(QDBusConnection::sessionBus().registerService(TEST_SERVICE)); + DBusMenuExporter *exporter = new DBusMenuExporter(TEST_OBJECT_PATH, &inputMenu); + + if (input.isEmpty()) { + // Pretend there was an action so that doEmitLayoutUpdated() is called + // even if the new menu is empty. If we don't do this we don't test + // DBusMenuExporterPrivate::collapseSeparators() for empty menus. + delete inputMenu.addAction("dummy"); + } + + Q_FOREACH(QChar ch, input) { + if (ch == '-') { + inputMenu.addSeparator(); + } else { + inputMenu.addAction(ch); + } + } + + QTest::qWait(500); + + // Check out exporter is on DBus + QDBusInterface iface(TEST_SERVICE, TEST_OBJECT_PATH); + QVERIFY2(iface.isValid(), qPrintable(iface.lastError().message())); + + // Get exported menu info + QStringList propertyNames = QStringList(); + DBusMenuLayoutItemList list = getChildren(&iface, /*parentId=*/0, propertyNames); + + // Recreate a menu string from the item list + QString output; + Q_FOREACH(const DBusMenuLayoutItem& item, list) { + QVariantMap properties = item.properties; + if (properties.contains("visible") && !properties.value("visible").toBool()) { + continue; + } + QString type = properties.value("type").toString(); + if (type == "separator") { + output += '-'; + } else { + output += properties.value("label").toString(); + } + } + + // Check it matches + QCOMPARE(output, expected); +} + +static void checkPropertiesChangedArgs(const QVariantList& args, const QString& name, const QVariant& value) +{ + QCOMPARE(args[0].toString(), QString("com.canonical.dbusmenu")); + QVariantMap map; + map.insert(name, value); + QCOMPARE(args[1].toMap(), map); + QCOMPARE(args[2].toStringList(), QStringList()); +} + +void DBusMenuExporterTest::testSetStatus() +{ + QMenu inputMenu; + QVERIFY(QDBusConnection::sessionBus().registerService(TEST_SERVICE)); + DBusMenuExporter *exporter = new DBusMenuExporter(TEST_OBJECT_PATH, &inputMenu); + ManualSignalSpy spy; + QDBusConnection::sessionBus().connect(TEST_SERVICE, TEST_OBJECT_PATH, "org.freedesktop.DBus.Properties", "PropertiesChanged", "sa{sv}as", &spy, SLOT(receiveCall(QString, QVariantMap, QStringList))); + + QTest::qWait(500); + + // Check our exporter is on DBus + QDBusInterface iface(TEST_SERVICE, TEST_OBJECT_PATH); + QVERIFY2(iface.isValid(), qPrintable(iface.lastError().message())); + + QCOMPARE(exporter->status(), QString("normal")); + + // Change status, a DBus signal should be emitted + exporter->setStatus("notice"); + QCOMPARE(exporter->status(), QString("notice")); + QTest::qWait(500); + QCOMPARE(spy.count(), 1); + checkPropertiesChangedArgs(spy.takeFirst(), "Status", "notice"); + + // Same status => no signal + exporter->setStatus("notice"); + QTest::qWait(500); + QCOMPARE(spy.count(), 0); + + // Change status, a DBus signal should be emitted + exporter->setStatus("normal"); + QTest::qWait(500); + QCOMPARE(spy.count(), 1); + checkPropertiesChangedArgs(spy.takeFirst(), "Status", "normal"); +} + #include "dbusmenuexportertest.moc" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdbusmenu-qt-0.8.3/tests/dbusmenuexportertest.h new/libdbusmenu-qt-0.9.0/tests/dbusmenuexportertest.h --- old/libdbusmenu-qt-0.8.3/tests/dbusmenuexportertest.h 2011-06-21 10:54:36.000000000 +0200 +++ new/libdbusmenu-qt-0.9.0/tests/dbusmenuexportertest.h 2011-08-30 11:40:07.000000000 +0200 @@ -51,6 +51,9 @@ void testTrackActionsOnlyOnce(); void testHonorDontShowIconsInMenusAttribute(); void testDBusMenuObjectIsDeletedWhenExporterIsDeleted(); + void testSeparatorCollapsing_data(); + void testSeparatorCollapsing(); + void testSetStatus(); void init(); void cleanup(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libdbusmenu-qt-0.8.3/tests/testutils.h new/libdbusmenu-qt-0.9.0/tests/testutils.h --- old/libdbusmenu-qt-0.8.3/tests/testutils.h 2011-06-21 10:54:36.000000000 +0200 +++ new/libdbusmenu-qt-0.9.0/tests/testutils.h 2011-08-30 11:40:07.000000000 +0200 @@ -65,6 +65,15 @@ args.push_back(removedPropsIds); append(args); } + + void receiveCall(const QString& service, const QVariantMap& modifiedProperties, const QStringList& newProperties) + { + QVariantList args; + args.push_back(service); + args.push_back(modifiedProperties); + args.push_back(newProperties); + append(args); + } }; class MenuFiller : public QObject ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
