diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,7 @@ include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings) +include(ECMQtDeclareLoggingCategory) find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Quick Widgets DBus) find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS Plasma WindowSystem) diff --git a/plugin/libdbusmenuqt/CMakeLists.txt b/plugin/libdbusmenuqt/CMakeLists.txt --- a/plugin/libdbusmenuqt/CMakeLists.txt +++ b/plugin/libdbusmenuqt/CMakeLists.txt @@ -5,6 +5,11 @@ utils.cpp ) +ecm_qt_declare_logging_category(libdbusmenu_SRCS HEADER debug.h + IDENTIFIER DBUSMENUQT + CATEGORY_NAME org.kde.libdbusmenuqt + DEFAULT_SEVERITY Info) + set_source_files_properties(com.canonical.dbusmenu.xml PROPERTIES NO_NAMESPACE true INCLUDE "dbusmenutypes_p.h" @@ -18,3 +23,5 @@ Qt5::DBus Qt5::Widgets ) + +# add_subdirectory(test) diff --git a/plugin/libdbusmenuqt/com.canonical.dbusmenu.xml b/plugin/libdbusmenuqt/com.canonical.dbusmenu.xml --- a/plugin/libdbusmenuqt/com.canonical.dbusmenu.xml +++ b/plugin/libdbusmenuqt/com.canonical.dbusmenu.xml @@ -2,8 +2,8 @@ - - + + diff --git a/plugin/libdbusmenuqt/dbusmenuimporter.h b/plugin/libdbusmenuqt/dbusmenuimporter.h --- a/plugin/libdbusmenuqt/dbusmenuimporter.h +++ b/plugin/libdbusmenuqt/dbusmenuimporter.h @@ -22,7 +22,7 @@ #define DBUSMENUIMPORTER_H // Qt -#include +#include class QAction; class QDBusPendingCallWatcher; @@ -43,7 +43,7 @@ /** * Creates a DBusMenuImporter listening over DBus on service, path */ - DBusMenuImporter(const QString &service, const QString &path, QObject *parent = 0); + DBusMenuImporter(const QString &service, const QString &path, QObject *parent = nullptr); ~DBusMenuImporter() override; diff --git a/plugin/libdbusmenuqt/dbusmenuimporter.cpp b/plugin/libdbusmenuqt/dbusmenuimporter.cpp --- a/plugin/libdbusmenuqt/dbusmenuimporter.cpp +++ b/plugin/libdbusmenuqt/dbusmenuimporter.cpp @@ -20,6 +20,8 @@ */ #include "dbusmenuimporter.h" +#include "debug.h" + // Qt #include #include @@ -46,12 +48,11 @@ //#define BENCHMARK #ifdef BENCHMARK -#include static QTime sChrono; #endif #define DMRETURN_IF_FAIL(cond) if (!(cond)) { \ - qWarning() << "Condition failed: " #cond; \ + qCWarning(DBUSMENUQT) << "Condition failed: " #cond; \ return; \ } @@ -61,7 +62,7 @@ static QAction *createKdeTitle(QAction *action, QWidget *parent) { - QToolButton *titleWidget = new QToolButton(0); + QToolButton *titleWidget = new QToolButton(nullptr); QFont font = titleWidget->font(); font.setBold(true); titleWidget->setFont(font); @@ -182,7 +183,7 @@ } else if (key == QLatin1String("shortcut")) { updateActionShortcut(action, value); } else { - qWarning() << "Unhandled property update" << key; + qDebug(DBUSMENUQT) << "Unhandled property update" << key; } } @@ -230,7 +231,7 @@ action->setProperty(DBUSMENU_PROPERTY_ICON_DATA_HASH, dataHash); QPixmap pix; if (!pix.loadFromData(data)) { - qWarning() << "Failed to decode icon-data property for action" << action->text(); + qDebug(DBUSMENUQT) << "Failed to decode icon-data property for action" << action->text(); action->setIcon(QIcon()); return; } @@ -258,7 +259,7 @@ } QAction *action = m_actionForId.value(id); if (!action) { - return 0; + return nullptr; } return action->menu(); } @@ -279,7 +280,7 @@ d->q = this; d->m_interface = new DBusMenuInterface(service, path, QDBusConnection::sessionBus(), this); - d->m_menu = 0; + d->m_menu = nullptr; d->m_pendingLayoutUpdateTimer = new QTimer(this); d->m_pendingLayoutUpdateTimer->setSingleShot(true); @@ -327,7 +328,7 @@ QMenu *DBusMenuImporter::menu() const { if (!d->m_menu) { - d->m_menu = d->createMenu(0); + d->m_menu = d->createMenu(nullptr); } return d->m_menu; } @@ -383,7 +384,7 @@ QDBusPendingReply reply = *watcher; if (!reply.isValid()) { - qWarning() << reply.error().message(); + qDebug(DBUSMENUQT) << reply.error().message(); if (menu) { emit menuUpdated(menu); } @@ -396,7 +397,7 @@ DBusMenuLayoutItem rootItem = reply.argumentAt<1>(); if (!menu) { - qWarning() << "No menu for id" << parentId; + qDebug(DBUSMENUQT) << "No menu for id" << parentId; return; } @@ -409,6 +410,7 @@ for (QAction *action: menu->actions()) { int id = action->property(DBUSMENU_PROPERTY_ID).toInt(); if (! newDBusMenuItemIds.contains(id)) { + menu->removeAction(action); action->deleteLater(); d->m_actionForId.remove(id); } @@ -477,6 +479,9 @@ watcher->setProperty(DBUSMENU_PROPERTY_ID, id); connect(watcher, &QDBusPendingCallWatcher::finished, this, &DBusMenuImporter::slotAboutToShowDBusCallFinished); + + // Firefox deliberately ignores "aboutToShow" whereas Qt ignores" opened", so we'll just send both all the time... + d->sendEvent(id, QStringLiteral("opened")); } void DBusMenuImporter::slotAboutToShowDBusCallFinished(QDBusPendingCallWatcher *watcher) @@ -491,7 +496,7 @@ QDBusPendingReply reply = *watcher; if (reply.isError()) { - qWarning() << "Call to AboutToShow() failed:" << reply.error().message(); + qDebug(DBUSMENUQT) << "Call to AboutToShow() failed:" << reply.error().message(); menuUpdated(menu); return; } @@ -525,12 +530,6 @@ Q_ASSERT(menu); updateMenu(menu); - - QAction *action = menu->menuAction(); - Q_ASSERT(action); - - int id = action->property(DBUSMENU_PROPERTY_ID).toInt(); - d->sendEvent(id, QStringLiteral("opened")); } QMenu *DBusMenuImporter::createMenu(QWidget *parent) diff --git a/plugin/libdbusmenuqt/dbusmenushortcut_p.h b/plugin/libdbusmenuqt/dbusmenushortcut_p.h --- a/plugin/libdbusmenuqt/dbusmenushortcut_p.h +++ b/plugin/libdbusmenuqt/dbusmenushortcut_p.h @@ -22,8 +22,8 @@ #define DBUSMENUSHORTCUT_H // Qt -#include -#include +#include +#include class QKeySequence; diff --git a/plugin/libdbusmenuqt/dbusmenushortcut_p.cpp b/plugin/libdbusmenuqt/dbusmenushortcut_p.cpp --- a/plugin/libdbusmenuqt/dbusmenushortcut_p.cpp +++ b/plugin/libdbusmenuqt/dbusmenushortcut_p.cpp @@ -21,7 +21,7 @@ #include "dbusmenushortcut_p.h" // Qt -#include +#include static const int QT_COLUMN = 0; static const int DM_COLUMN = 1; @@ -41,11 +41,11 @@ // cf https://bugs.launchpad.net/libdbusmenu-qt/+bug/712565 {"+", "plus"}, {"-", "minus"}, - {0, 0} + {nullptr, nullptr} }; const Row* ptr = table; - for (; ptr->zero != 0; ++ptr) { + for (; ptr->zero != nullptr; ++ptr) { const char* from = (*ptr)[srcCol]; const char* to = (*ptr)[dstCol]; tokens->replaceInStrings(from, to); diff --git a/plugin/libdbusmenuqt/dbusmenutypes_p.h b/plugin/libdbusmenuqt/dbusmenutypes_p.h --- a/plugin/libdbusmenuqt/dbusmenutypes_p.h +++ b/plugin/libdbusmenuqt/dbusmenutypes_p.h @@ -22,9 +22,9 @@ #define DBUSMENUTYPES_P_H // Qt -#include -#include -#include +#include +#include +#include class QDBusArgument;