Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libdbusmenu-lxqt for
openSUSE:Factory checked in at 2025-04-22 17:26:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libdbusmenu-lxqt (Old)
and /work/SRC/openSUSE:Factory/.libdbusmenu-lxqt.new.30101 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libdbusmenu-lxqt"
Tue Apr 22 17:26:42 2025 rev:3 rq:1270859 version:0.3.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/libdbusmenu-lxqt/libdbusmenu-lxqt.changes
2024-11-11 13:46:44.663377796 +0100
+++
/work/SRC/openSUSE:Factory/.libdbusmenu-lxqt.new.30101/libdbusmenu-lxqt.changes
2025-04-22 17:27:06.544125014 +0200
@@ -1,0 +2,8 @@
+Thu Apr 17 23:49:20 UTC 2025 - Shawn Dunn <[email protected]>
+
+- Update to version 0.3.0:
+ * A workaround is added for a Qt crash on reloading menus
+ * Code Cleanup
+- Removed Group: declarations, no longer used
+
+-------------------------------------------------------------------
Old:
----
libdbusmenu-lxqt-0.2.0.tar.xz
libdbusmenu-lxqt-0.2.0.tar.xz.asc
New:
----
libdbusmenu-lxqt-0.3.0.tar.xz
libdbusmenu-lxqt-0.3.0.tar.xz.asc
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libdbusmenu-lxqt.spec ++++++
--- /var/tmp/diff_new_pack.L0aBNL/_old 2025-04-22 17:27:07.236154055 +0200
+++ /var/tmp/diff_new_pack.L0aBNL/_new 2025-04-22 17:27:07.236154055 +0200
@@ -18,17 +18,15 @@
%define _ver 0
Name: libdbusmenu-lxqt
-Version: 0.2.0
+Version: 0.3.0
Release: 0
Summary: A Qt implementation of the DBusMenu protocol
License: LGPL-2.0-or-later
-Group: System/Libraries
URL: https://github.com/lxqt/libdbusmenu-lxqt
Source0: %{url}/releases/download/%{version}/%{name}-%{version}.tar.xz
Source1:
%{url}/releases/download/%{version}/%{name}-%{version}.tar.xz.asc
Source2: %{name}.keyring
-BuildRequires: cmake >= 3.18.0
-#uildRequires: libqjson-devel
+BuildRequires: cmake >= 3.5.0
BuildRequires: cmake(Qt6Core) >= 6.3.0
BuildRequires: gcc-c++
BuildRequires: cmake(Qt6DBus)
++++++ libdbusmenu-lxqt-0.2.0.tar.xz -> libdbusmenu-lxqt-0.3.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/libdbusmenu-lxqt-0.2.0/CHANGELOG
new/libdbusmenu-lxqt-0.3.0/CHANGELOG
--- old/libdbusmenu-lxqt-0.2.0/CHANGELOG 2024-11-05 06:18:35.000000000
+0100
+++ new/libdbusmenu-lxqt-0.3.0/CHANGELOG 2025-04-17 10:54:29.000000000
+0200
@@ -1,3 +1,9 @@
+libdbusmenu-lxqt-0.3.0 / 2025-04-17
+===================================
+ * Workaround for a Qt crash on reloading menus.
+ * Got rid of `Q_FOREACH`.
+ * Fixed tests after recent changes.
+
libdbusmenu-lxqt-0.2.0 / 2024-11-05
===================================
* Stop checking for `QIcon::name()` existence.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/libdbusmenu-lxqt-0.2.0/CMakeLists.txt
new/libdbusmenu-lxqt-0.3.0/CMakeLists.txt
--- old/libdbusmenu-lxqt-0.2.0/CMakeLists.txt 2024-11-05 06:18:35.000000000
+0100
+++ new/libdbusmenu-lxqt-0.3.0/CMakeLists.txt 2025-04-17 10:54:29.000000000
+0200
@@ -8,7 +8,7 @@
# Versions
## Package version
set(dbusmenu_lxqt_VERSION_MAJOR 0)
-set(dbusmenu_lxqt_VERSION_MINOR 2)
+set(dbusmenu_lxqt_VERSION_MINOR 3)
set(dbusmenu_lxqt_VERSION_PATCH 0)
set(dbusmenu_lxqt_VERSION
${dbusmenu_lxqt_VERSION_MAJOR}.${dbusmenu_lxqt_VERSION_MINOR}.${dbusmenu_lxqt_VERSION_PATCH})
@@ -17,7 +17,7 @@
set(dbusmenu_lxqt_lib_SOVERSION 0)
### Bump this one when the API is extended in a binary-compatible way
-set(dbusmenu_lxqt_lib_API_VERSION 2)
+set(dbusmenu_lxqt_lib_API_VERSION 3)
### Bump this one when changes do not extend the API
set(dbusmenu_lxqt_lib_PATCH_VERSION 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/libdbusmenu-lxqt-0.2.0/src/dbusmenuexporter.cpp
new/libdbusmenu-lxqt-0.3.0/src/dbusmenuexporter.cpp
--- old/libdbusmenu-lxqt-0.2.0/src/dbusmenuexporter.cpp 2024-11-05
06:18:35.000000000 +0100
+++ new/libdbusmenu-lxqt-0.3.0/src/dbusmenuexporter.cpp 2025-04-17
10:54:29.000000000 +0200
@@ -61,7 +61,8 @@
return;
}
new DBusMenu(menu, q, parentId);
- Q_FOREACH(QAction *action, menu->actions()) {
+ const auto mActions = menu->actions();
+ for (QAction *action : mActions) {
addAction(action, parentId);
}
}
@@ -157,7 +158,8 @@
item->properties = m_dbusObject->getProperties(id, propertyNames);
if (depth != 0 && menu) {
- Q_FOREACH(QAction *action, menu->actions()) {
+ const auto mActions = menu->actions();
+ for (QAction *action : mActions) {
int actionId = m_idForAction.value(action, -1);
if (actionId == -1) {
DMWARNING << "No id for action";
@@ -367,7 +369,7 @@
DBusMenuItemList updatedList;
DBusMenuItemKeysList removedList;
- Q_FOREACH(int id, d->m_itemUpdatedIds) {
+ for (int id : std::as_const(d->m_itemUpdatedIds)) {
QAction *action = d->m_actionForId.value(id);
if (!action) {
// Action does not exist anymore
@@ -444,7 +446,7 @@
void DBusMenuExporter::doEmitLayoutUpdated()
{
// Collapse separators for all updated menus
- Q_FOREACH(int id, d->m_layoutUpdatedIds) {
+ for (int id : std::as_const(d->m_layoutUpdatedIds)) {
QMenu* menu = d->menuForId(id);
if (menu && menu->separatorsCollapsible()) {
d->collapseSeparators(menu);
@@ -453,7 +455,7 @@
// Tell the world about the update
if (d->m_emittedLayoutUpdatedOnce) {
- Q_FOREACH(int id, d->m_layoutUpdatedIds) {
+ for (int id : std::as_const(d->m_layoutUpdatedIds)) {
d->m_dbusObject->LayoutUpdated(d->m_revision, id);
}
} else {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/libdbusmenu-lxqt-0.2.0/src/dbusmenuexporterdbus_p.cpp
new/libdbusmenu-lxqt-0.3.0/src/dbusmenuexporterdbus_p.cpp
--- old/libdbusmenu-lxqt-0.2.0/src/dbusmenuexporterdbus_p.cpp 2024-11-05
06:18:35.000000000 +0100
+++ new/libdbusmenu-lxqt-0.3.0/src/dbusmenuexporterdbus_p.cpp 2025-04-17
10:54:29.000000000 +0200
@@ -94,7 +94,7 @@
return all;
} else {
QVariantMap map;
- Q_FOREACH(const QString &name, names) {
+ for (const QString &name : names) {
QVariant value = all.value(name);
if (value.isValid()) {
map.insert(name, value);
@@ -107,7 +107,7 @@
DBusMenuItemList DBusMenuExporterDBus::GetGroupProperties(const QList<int>
&ids, const QStringList &names)
{
DBusMenuItemList list;
- Q_FOREACH(int id, ids) {
+ for (int id : ids) {
DBusMenuItem item;
item.id = id;
item.properties = getProperties(item.id, names);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/libdbusmenu-lxqt-0.2.0/src/dbusmenuimporter.cpp
new/libdbusmenu-lxqt-0.3.0/src/dbusmenuimporter.cpp
--- old/libdbusmenu-lxqt-0.2.0/src/dbusmenuimporter.cpp 2024-11-05
06:18:35.000000000 +0100
+++ new/libdbusmenu-lxqt-0.3.0/src/dbusmenuimporter.cpp 2025-04-17
10:54:29.000000000 +0200
@@ -52,6 +52,7 @@
static const int ABOUT_TO_SHOW_TIMEOUT = 3000;
static const int REFRESH_TIMEOUT = 4000;
+static const int LAYOUT_UPDATE_TIMEOUT = 2000;
static const char *DBUSMENU_PROPERTY_ID = "_dbusmenu_id";
static const char *DBUSMENU_PROPERTY_ICON_NAME = "_dbusmenu_icon_name";
@@ -73,6 +74,25 @@
return titleAction;
}
+Menu::Menu(QWidget *parent) : QMenu(parent), blockEvents(false) {}
+
+bool Menu::event(QEvent *e) {
+ if (blockEvents
+ // These events are dangerous while actions are being replaced:
+ && (e->type() == QEvent::Timer ||
+ e->type() == QEvent::MouseMove ||
+ e->type() == QEvent::MouseButtonPress ||
+ e->type() == QEvent::MouseButtonRelease ||
+ e->type() == QEvent::KeyPress ||
+ e->type() == QEvent::KeyRelease ||
+ e->type() == QEvent::Leave ||
+ e->type() == QEvent::Enter)) {
+ e->accept();
+ return true;
+ }
+ return QMenu::event(e);
+}
+
class DBusMenuImporterPrivate
{
public:
@@ -84,6 +104,7 @@
ActionForId m_actionForId;
QSignalMapper m_mapper;
QTimer *m_pendingLayoutUpdateTimer;
+ bool m_refreshing;
QSet<int> m_idsRefreshedByAboutToShow;
QSet<int> m_pendingLayoutUpdates;
@@ -98,6 +119,9 @@
DMDEBUG << "Starting refresh chrono for id" << id;
sChrono.start();
#endif
+
+ m_refreshing = true;
+
QDBusPendingCall call = m_interface->asyncCall("GetLayout", id, 1,
QStringList());
QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call,
q);
watcher->setProperty(DBUSMENU_PROPERTY_ID, id);
@@ -171,7 +195,7 @@
*/
void updateAction(QAction *action, const QVariantMap &map, const
QStringList &requestedProperties)
{
- Q_FOREACH(const QString &key, requestedProperties) {
+ for (const QString &key : requestedProperties) {
updateActionProperty(action, key, map.value(key));
}
}
@@ -336,6 +360,7 @@
d->m_interface = new QDBusInterface(service, path, DBUSMENU_INTERFACE,
QDBusConnection::sessionBus(), this);
d->m_menu = 0;
d->m_mustEmitMenuUpdated = false;
+ d->m_refreshing = false;
d->m_type = type;
@@ -343,6 +368,18 @@
d->m_pendingLayoutUpdateTimer = new QTimer(this);
d->m_pendingLayoutUpdateTimer->setSingleShot(true);
+ /**
+ * WARNING: To avoid a Qt bug triggered by "QMenu::timerEvent" on
refreshing
+ * a menu that has a visible submenu, a minimum interval of two seconds is
+ * set between two consecutive updates for the sake of certainty.
+ *
+ * With intervals shorter than one second, the pointer "d->currentAction"
in
+ * QMenu's code may become dangling and cause a crash.
+ *
+ * To be on the safe side, we also use "Menu", instead of QMenu, to block
some
+ * events during updates, especially the timer events.
+ */
+ d->m_pendingLayoutUpdateTimer->setInterval(LAYOUT_UPDATE_TIMEOUT);
connect(d->m_pendingLayoutUpdateTimer, SIGNAL(timeout()),
SLOT(processPendingLayoutUpdates()));
// For some reason, using QObject::connect() does not work but
@@ -371,17 +408,19 @@
if (d->m_idsRefreshedByAboutToShow.remove(parentId)) {
return;
}
- d->m_pendingLayoutUpdates << parentId;
- if (!d->m_pendingLayoutUpdateTimer->isActive()) {
+ if (!d->m_pendingLayoutUpdates.contains(parentId)) {
+ d->m_pendingLayoutUpdates << parentId;
+ }
+ if (!d->m_pendingLayoutUpdateTimer->isActive() && !d->m_refreshing) {
d->m_pendingLayoutUpdateTimer->start();
}
}
void DBusMenuImporter::processPendingLayoutUpdates()
{
- QSet<int> ids = d->m_pendingLayoutUpdates;
+ const QSet<int> ids = d->m_pendingLayoutUpdates;
d->m_pendingLayoutUpdates.clear();
- Q_FOREACH(int id, ids) {
+ for (int id : ids) {
d->refresh(id);
}
}
@@ -396,7 +435,7 @@
void DBusMenuImporterPrivate::slotItemsPropertiesUpdated(const
DBusMenuItemList &updatedList, const DBusMenuItemKeysList &removedList)
{
- Q_FOREACH(const DBusMenuItem &item, updatedList) {
+ for (const DBusMenuItem &item : updatedList) {
QAction *action = m_actionForId.value(item.id);
if (!action) {
// We don't know this action. It probably is in a menu we haven't
fetched yet.
@@ -411,14 +450,14 @@
}
}
- Q_FOREACH(const DBusMenuItemKeys &item, removedList) {
+ for (const DBusMenuItemKeys &item : removedList) {
QAction *action = m_actionForId.value(item.id);
if (!action) {
// We don't know this action. It probably is in a menu we haven't
fetched yet.
continue;
}
- Q_FOREACH(const QString &key, item.properties) {
+ for (const QString &key : std::as_const(item.properties)) {
updateActionProperty(action, key, QVariant());
}
}
@@ -439,6 +478,7 @@
QDBusPendingReply<uint, DBusMenuLayoutItem> reply = *watcher;
if (!reply.isValid()) {
DMWARNING << reply.error().message();
+ d->m_refreshing = false;
return;
}
@@ -450,12 +490,26 @@
QMenu *menu = d->menuForId(parentId);
if (!menu) {
DMWARNING << "No menu for id" << parentId;
+ d->m_refreshing = false;
return;
}
+ // Block some menu events while actions are reloaded.
+ auto m = qobject_cast<Menu*>(menu);
+ if (m) {
+ m->blockEvents = true;
+ }
+
+ // Try to restore the active action, such that a visible submenu
+ // will be reopened after reloading actions.
+ menu->setUpdatesEnabled(false);
+ int activeIndex = menu->actions().indexOf(menu->activeAction());
+ QAction *activeAction = nullptr;
+ int index = 0;
+
menu->clear();
- Q_FOREACH(const DBusMenuLayoutItem &dbusMenuItem, rootItem.children) {
+ for (const DBusMenuLayoutItem &dbusMenuItem :
std::as_const(rootItem.children)) {
QAction *action = d->createAction(dbusMenuItem.id,
dbusMenuItem.properties, menu);
DBusMenuImporterPrivate::ActionForId::Iterator it =
d->m_actionForId.find(dbusMenuItem.id);
if (it == d->m_actionForId.end()) {
@@ -470,11 +524,45 @@
&d->m_mapper, SLOT(map()));
d->m_mapper.setMapping(action, dbusMenuItem.id);
- if( action->menu() )
- {
- d->refresh( dbusMenuItem.id )->waitForFinished();
+ if (index == activeIndex) {
+ if (action->isEnabled() && !action->isSeparator()) {
+ activeAction = action;
+ }
+ else {
+ ++activeIndex;
+ }
+ }
+ ++index;
+
+ // NOTE: The new submenus will be refreshed in "slotMenuAboutToShow"
on showing.
+ // So, a recursive call "d->refresh(dbusMenuItem.id)" is not needed
here.
+ }
+
+ if (activeIndex > -1 && !activeAction) { // try to activate the last action
+ const auto acts = menu->actions();
+ for (int i = acts.size() -1; i >= 0; --i) {
+ auto act = acts.at(i);
+ if (act->isEnabled() && !act->isSeparator()) {
+ activeAction = act;
+ break;
+ }
}
}
+ if (activeAction) {
+ menu->setActiveAction(activeAction);
+ }
+ menu->setUpdatesEnabled(true);
+
+ if (m) {
+ m->blockEvents = false;
+ }
+
+ // The next update of pending layouts, if any.
+ d->m_refreshing = false;
+ if (d->m_pendingLayoutUpdateTimer) {
+ d->m_pendingLayoutUpdateTimer->start();
+ }
+
#ifdef BENCHMARK
DMDEBUG << "- Menu filled:" << sChrono.elapsed() << "ms";
#endif
@@ -575,7 +663,7 @@
QMenu *DBusMenuImporter::createMenu(QWidget *parent)
{
- return new QMenu(parent);
+ return new Menu(parent); // use "Menu" for our workaround
}
QIcon DBusMenuImporter::iconForName(const QString &/*name*/)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/libdbusmenu-lxqt-0.2.0/src/dbusmenuimporter.h
new/libdbusmenu-lxqt-0.3.0/src/dbusmenuimporter.h
--- old/libdbusmenu-lxqt-0.2.0/src/dbusmenuimporter.h 2024-11-05
06:18:35.000000000 +0100
+++ new/libdbusmenu-lxqt-0.3.0/src/dbusmenuimporter.h 2025-04-17
10:54:29.000000000 +0200
@@ -23,6 +23,7 @@
// Qt
#include <QtCore/QObject>
+#include <QMenu>
// Local
#include <dbusmenu_export.h>
@@ -32,10 +33,21 @@
class QDBusPendingCallWatcher;
class QDBusVariant;
class QIcon;
-class QMenu;
+class QEvent;
class DBusMenuImporterPrivate;
+// For working around a crash triggered by "QMenu::timerEvent"
+class Menu : public QMenu {
+ Q_OBJECT
+public:
+ Menu(QWidget *parent = nullptr);
+ bool blockEvents;
+
+protected:
+ bool event(QEvent *e) override;
+};
+
/**
* Determine whether internal method calls should allow the Qt event loop
* to execute or not
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/libdbusmenu-lxqt-0.2.0/src/dbusmenushortcut_p.cpp
new/libdbusmenu-lxqt-0.3.0/src/dbusmenushortcut_p.cpp
--- old/libdbusmenu-lxqt-0.2.0/src/dbusmenushortcut_p.cpp 2024-11-05
06:18:35.000000000 +0100
+++ new/libdbusmenu-lxqt-0.3.0/src/dbusmenushortcut_p.cpp 2025-04-17
10:54:29.000000000 +0200
@@ -60,8 +60,8 @@
{
QString string = sequence.toString();
DBusMenuShortcut shortcut;
- QStringList tokens = string.split(", ");
- Q_FOREACH(QString token, tokens) {
+ const QStringList tokens = string.split(", ");
+ for (QString token : tokens) {
// Hack: Qt::CTRL | Qt::Key_Plus is turned into the string "Ctrl++",
// but we don't want the call to token.split() to consider the
// second '+' as a separator so we replace it with its final value.
@@ -76,7 +76,7 @@
QKeySequence DBusMenuShortcut::toKeySequence() const
{
QStringList tmp;
- Q_FOREACH(const QStringList& keyTokens_, *this) {
+ for (const QStringList& keyTokens_ : std::as_const(*this)) {
QStringList keyTokens = keyTokens_;
processKeyTokens(&keyTokens, DM_COLUMN, QT_COLUMN);
tmp << keyTokens.join(QLatin1String("+"));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/libdbusmenu-lxqt-0.2.0/src/dbusmenutypes_p.cpp
new/libdbusmenu-lxqt-0.3.0/src/dbusmenutypes_p.cpp
--- old/libdbusmenu-lxqt-0.2.0/src/dbusmenutypes_p.cpp 2024-11-05
06:18:35.000000000 +0100
+++ new/libdbusmenu-lxqt-0.3.0/src/dbusmenutypes_p.cpp 2025-04-17
10:54:29.000000000 +0200
@@ -68,7 +68,7 @@
argument.beginStructure();
argument << obj.id << obj.properties;
argument.beginArray(qMetaTypeId<QDBusVariant>());
- Q_FOREACH(const DBusMenuLayoutItem& child, obj.children) {
+ for (const DBusMenuLayoutItem& child : std::as_const(obj.children)) {
argument <<
QDBusVariant(QVariant::fromValue<DBusMenuLayoutItem>(child));
}
argument.endArray();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/libdbusmenu-lxqt-0.2.0/tests/dbusmenuexportertest.cpp
new/libdbusmenu-lxqt-0.3.0/tests/dbusmenuexportertest.cpp
--- old/libdbusmenu-lxqt-0.2.0/tests/dbusmenuexportertest.cpp 2024-11-05
06:18:35.000000000 +0100
+++ new/libdbusmenu-lxqt-0.3.0/tests/dbusmenuexportertest.cpp 2025-04-17
10:54:29.000000000 +0200
@@ -352,8 +352,8 @@
QCOMPARE(spy.count(), 1);
QSet<int> updatedIds;
{
- QVariantList lst = spy.takeFirst().at(0).toList();
- Q_FOREACH(QVariant variant, lst) {
+ const QVariantList lst = spy.takeFirst().at(0).toList();
+ for (const QVariant &variant : lst) {
updatedIds << variant.toInt();
}
}
@@ -392,10 +392,10 @@
// Check items are checkmark, not radio
item = list.takeFirst();
QCOMPARE(item.properties.value("toggle-type").toString(),
QString("checkmark"));
- int a1Id = item.id;
+ //int a1Id = item.id;
item = list.takeFirst();
QCOMPARE(item.properties.value("toggle-type").toString(),
QString("checkmark"));
- int a2Id = item.id;
+ //int a2Id = item.id;
}
void DBusMenuExporterTest::testClickDeletedAction()
@@ -459,7 +459,7 @@
// Create a menu containing an action with a shortcut
QMenu inputMenu;
QVERIFY(QDBusConnection::sessionBus().registerService(TEST_SERVICE));
- DBusMenuExporter *exporter = new DBusMenuExporter(TEST_OBJECT_PATH,
&inputMenu);
+ DBusMenuExporter *exporter = new DBusMenuExporter(TEST_OBJECT_PATH,
&inputMenu); Q_UNUSED(exporter)
QAction *a1 = inputMenu.addAction("a1");
a1->setShortcut(Qt::CTRL | Qt::Key_A);
@@ -482,7 +482,7 @@
DBusMenuLayoutItemList list = getChildren(&iface, 0, propertyNames);
QCOMPARE(list.count(), actionList.count());
- Q_FOREACH(const QAction* action, actionList) {
+ for (const QAction* action : std::as_const(actionList)) {
DBusMenuLayoutItem item = list.takeFirst();
if (action->shortcut().isEmpty()) {
QVERIFY(!item.properties.contains("shortcut"));
@@ -501,18 +501,20 @@
// Create a menu containing two actions
QMenu inputMenu;
QVERIFY(QDBusConnection::sessionBus().registerService(TEST_SERVICE));
- DBusMenuExporter *exporter = new DBusMenuExporter(TEST_OBJECT_PATH,
&inputMenu);
+ DBusMenuExporter *exporter = new DBusMenuExporter(TEST_OBJECT_PATH,
&inputMenu); Q_UNUSED(exporter)
- QAction *a1 = inputMenu.addAction("a1");
- QAction *a2 = inputMenu.addAction("a2");
+ inputMenu.addAction("a1");
+ inputMenu.addAction("a2");
// Check exporter is on DBus
QDBusInterface iface(TEST_SERVICE, TEST_OBJECT_PATH);
QVERIFY2(iface.isValid(), qPrintable(iface.lastError().message()));
+ const auto iActions = inputMenu.actions();
+
// Get item ids
DBusMenuLayoutItemList list = getChildren(&iface, 0, QStringList());
- QCOMPARE(list.count(), inputMenu.actions().count());
+ QCOMPARE(list.count(), iActions.count());
int id1 = list.at(0).id;
int id2 = list.at(1).id;
@@ -524,9 +526,9 @@
DBusMenuItemList groupPropertiesList = reply.value();
// Check the info we received
- QCOMPARE(groupPropertiesList.count(), inputMenu.actions().count());
+ QCOMPARE(groupPropertiesList.count(), iActions.count());
- Q_FOREACH(const QAction* action, inputMenu.actions()) {
+ for (const QAction* action : iActions) {
DBusMenuItem item = groupPropertiesList.takeFirst();
QCOMPARE(item.properties.value("label").toString(), action->text());
}
@@ -569,9 +571,9 @@
static int trackCount(QMenu* menu)
{
- QList<QObject*> lst = menu->findChildren<QObject*>();
+ const QList<QObject*> lst = menu->findChildren<QObject*>();
int count = 0;
- Q_FOREACH(QObject* child, lst) {
+ for (QObject* child : lst) {
if (qstrcmp(child->metaObject()->className(), "DBusMenu") == 0) {
++count;
}
@@ -587,7 +589,7 @@
// submenu should not have more than one DBusMenu child object.
QMenu mainMenu;
QVERIFY(QDBusConnection::sessionBus().registerService(TEST_SERVICE));
- DBusMenuExporter *exporter = new DBusMenuExporter(TEST_OBJECT_PATH,
&mainMenu);
+ DBusMenuExporter *exporter = new DBusMenuExporter(TEST_OBJECT_PATH,
&mainMenu); Q_UNUSED(exporter)
QMenu* subMenu = new QMenu("File");
subMenu->addAction("a1");
@@ -631,7 +633,8 @@
static bool hasInternalDBusMenuObject(QMenu* menu)
{
- Q_FOREACH(QObject* obj, menu->children()) {
+ const auto mChildren = menu->children();
+ for (QObject* obj : mChildren) {
if (obj->inherits("DBusMenu")) {
return true;
}
@@ -647,7 +650,7 @@
QVERIFY(QDBusConnection::sessionBus().registerService(TEST_SERVICE));
DBusMenuExporter *exporter = new DBusMenuExporter(TEST_OBJECT_PATH,
&inputMenu);
- QAction *a1 = inputMenu.addAction("a1");
+ inputMenu.addAction("a1");
QVERIFY2(hasInternalDBusMenuObject(&inputMenu), "Test setup failed");
delete exporter;
QVERIFY(!hasInternalDBusMenuObject(&inputMenu));
@@ -677,7 +680,7 @@
QMenu inputMenu;
QVERIFY(QDBusConnection::sessionBus().registerService(TEST_SERVICE));
- DBusMenuExporter *exporter = new DBusMenuExporter(TEST_OBJECT_PATH,
&inputMenu);
+ DBusMenuExporter *exporter = new DBusMenuExporter(TEST_OBJECT_PATH,
&inputMenu); Q_UNUSED(exporter)
if (input.isEmpty()) {
// Pretend there was an action so that doEmitLayoutUpdated() is called
@@ -686,7 +689,7 @@
delete inputMenu.addAction("dummy");
}
- Q_FOREACH(QChar ch, input) {
+ for (QChar ch : std::as_const(input)) {
if (ch == '-') {
inputMenu.addSeparator();
} else {
@@ -702,11 +705,11 @@
// Get exported menu info
QStringList propertyNames = QStringList();
- DBusMenuLayoutItemList list = getChildren(&iface, /*parentId=*/0,
propertyNames);
+ const DBusMenuLayoutItemList list = getChildren(&iface, /*parentId=*/0,
propertyNames);
// Recreate a menu string from the item list
QString output;
- Q_FOREACH(const DBusMenuLayoutItem& item, list) {
+ for (const DBusMenuLayoutItem& item : list) {
QVariantMap properties = item.properties;
if (properties.contains("visible") &&
!properties.value("visible").toBool()) {
continue;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/libdbusmenu-lxqt-0.2.0/tests/dbusmenuimportertest.cpp
new/libdbusmenu-lxqt-0.3.0/tests/dbusmenuimportertest.cpp
--- old/libdbusmenu-lxqt-0.2.0/tests/dbusmenuimportertest.cpp 2024-11-05
06:18:35.000000000 +0100
+++ new/libdbusmenu-lxqt-0.3.0/tests/dbusmenuimportertest.cpp 2025-04-17
10:54:29.000000000 +0200
@@ -58,7 +58,7 @@
void DBusMenuImporterTest::testStandardItem()
{
QMenu inputMenu;
- QAction *action = inputMenu.addAction("Test");
+ inputMenu.addAction("Test");
DBusMenuExporter exporter(TEST_OBJECT_PATH, &inputMenu);
DBusMenuImporter importer(TEST_SERVICE, TEST_OBJECT_PATH);
@@ -73,7 +73,7 @@
void DBusMenuImporterTest::testAddingNewItem()
{
QMenu inputMenu;
- QAction *action = inputMenu.addAction("Test");
+ inputMenu.addAction("Test");
DBusMenuExporter exporter(TEST_OBJECT_PATH, &inputMenu);
DBusMenuImporter importer(TEST_SERVICE, TEST_OBJECT_PATH);
@@ -82,7 +82,8 @@
QCOMPARE(outputMenu->actions().count(), inputMenu.actions().count());
inputMenu.addAction("Test2");
- QTest::qWait(500);
+ inputMenu.addAction("Test3");
+ QTest::qWait(2000); // see "LAYOUT_UPDATE_TIMEOUT" in the c-tor of
"DBusMenuImporter"
QCOMPARE(outputMenu->actions().count(), inputMenu.actions().count());
}
@@ -242,7 +243,7 @@
waitForDeferredDeletes();
// There should be only invalid pointers in children
- Q_FOREACH(QPointer<QObject> child, children) {
+ for (QPointer<QObject> child : std::as_const(children)) {
//qDebug() << child;
QVERIFY(child.isNull());
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/libdbusmenu-lxqt-0.2.0/tests/dbusmenushortcuttest.cpp
new/libdbusmenu-lxqt-0.3.0/tests/dbusmenushortcuttest.cpp
--- old/libdbusmenu-lxqt-0.2.0/tests/dbusmenushortcuttest.cpp 2024-11-05
06:18:35.000000000 +0100
+++ new/libdbusmenu-lxqt-0.3.0/tests/dbusmenushortcuttest.cpp 2025-04-17
10:54:29.000000000 +0200
@@ -36,7 +36,7 @@
char *toString(const DBusMenuShortcut &dmShortcut)
{
QByteArray ba = "DBusMenuShortcut(";
- Q_FOREACH(const QStringList& tokens, dmShortcut) {
+ for(const QStringList& tokens : dmShortcut) {
ba += "(";
ba += tokens.join("+").toUtf8();
ba += ")";
@@ -49,8 +49,8 @@
DBusMenuShortcut createKeyList(const QString& txt)
{
DBusMenuShortcut lst;
- QStringList tokens = txt.split(',');
- Q_FOREACH(const QString& token, tokens) {
+ const QStringList tokens = txt.split(',');
+ for (const QString& token : tokens) {
lst << token.split('+');
}
return lst;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/libdbusmenu-lxqt-0.2.0/tests/testutils.h
new/libdbusmenu-lxqt-0.3.0/tests/testutils.h
--- old/libdbusmenu-lxqt-0.2.0/tests/testutils.h 2024-11-05
06:18:35.000000000 +0100
+++ new/libdbusmenu-lxqt-0.3.0/tests/testutils.h 2025-04-17
10:54:29.000000000 +0200
@@ -52,11 +52,11 @@
void receiveCall(DBusMenuItemList itemList, DBusMenuItemKeysList
removedPropsList)
{
QVariantList propsIds;
- Q_FOREACH(DBusMenuItem item, itemList) {
+ for (DBusMenuItem item : std::as_const(itemList)) {
propsIds << item.id;
}
QVariantList removedPropsIds;
- Q_FOREACH(DBusMenuItemKeys props, removedPropsList) {
+ for (DBusMenuItemKeys props : std::as_const(removedPropsList)) {
removedPropsIds << props.id;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/libdbusmenu-lxqt-0.2.0/tools/testapp/main.cpp
new/libdbusmenu-lxqt-0.3.0/tools/testapp/main.cpp
--- old/libdbusmenu-lxqt-0.2.0/tools/testapp/main.cpp 2024-11-05
06:18:35.000000000 +0100
+++ new/libdbusmenu-lxqt-0.3.0/tools/testapp/main.cpp 2025-04-17
10:54:29.000000000 +0200
@@ -50,8 +50,8 @@
QAction *action = menu->addAction(label);
action->setEnabled(map.value("sensitive").toString() == "true");
if (map.contains("submenu")) {
- QVariantList items = map.value("submenu").toList();
- Q_FOREACH(const QVariant &item, items) {
+ const QVariantList items = map.value("submenu").toList();
+ for (const QVariant &item : items) {
QMenu *subMenu = new QMenu;
action->setMenu(subMenu);
createMenuItem(subMenu, item);
@@ -76,8 +76,8 @@
return;
}
- QVariantList list = tree.toList();
- Q_FOREACH(const QVariant &item, list) {
+ const QVariantList list = tree.toList();
+ for (const QVariant &item : list) {
createMenuItem(menu, item);
}
}