diff --git a/applets/appmenu/lib/appmenuapplet.cpp b/applets/appmenu/lib/appmenuapplet.cpp index 3ba9c95ab..734387f86 100644 --- a/applets/appmenu/lib/appmenuapplet.cpp +++ b/applets/appmenu/lib/appmenuapplet.cpp @@ -125,14 +125,10 @@ QMenu *AppMenuApplet::createMenu(int idx) const QAction *action = nullptr; if (view() == CompactView) { - menu = new QMenu(); - for (int i = 0; i < m_model->rowCount(); i++) { - const QModelIndex index = m_model->index(i, 0); - const QVariant data = m_model->data(index, AppMenuModel::ActionRole); - action = (QAction *)data.value(); - menu->addAction(action); + auto menuAction = static_cast(m_model->data(QModelIndex(), AppMenuModel::ActionRole).value()); + if (menuAction) { + menu = menuAction->menu(); } - menu->setAttribute(Qt::WA_DeleteOnClose); } else if (view() == FullView) { const QModelIndex index = m_model->index(idx, 0); const QVariant data = m_model->data(index, AppMenuModel::ActionRole); diff --git a/applets/appmenu/plugin/appmenumodel.cpp b/applets/appmenu/plugin/appmenumodel.cpp index fa9748e76..857c81e40 100644 --- a/applets/appmenu/plugin/appmenumodel.cpp +++ b/applets/appmenu/plugin/appmenumodel.cpp @@ -234,12 +234,20 @@ QList AppMenuModel::flatActionList() QVariant AppMenuModel::data(const QModelIndex &index, int role) const { - const int row = index.row(); - if (row < 0 || !m_menuAvailable || !m_menu) { + if (!m_menuAvailable || !m_menu) { return QVariant(); } + if (!index.isValid()) { + if (role == MenuRole) { + return QString(); + } else if (role == ActionRole) { + return QVariant::fromValue((void *)(m_menu->menuAction())); + } + } + const auto actions = m_menu->actions(); + const int row = index.row(); if (row == actions.count() && KWindowSystem::isPlatformWayland()) { if (role == MenuRole) { return m_searchAction->text();