dbusmenu: Map showPopup method to ItemActivationRequested signal

This way the Qt accelerator shortcuts (i.e. Alt+F for the File menu)
will cause the matching menu to be opened on the server side.

Change-Id: I02a5b3c20c6eae130d0f133b33c9e247cff38d44
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
bb10
Dmitry Shachnev 2016-11-02 20:40:12 +03:00 committed by Shawn Rutledge
parent 9ae3c94690
commit 3e31b71b9c
3 changed files with 18 additions and 7 deletions

View File

@ -59,6 +59,8 @@ QDBusMenuBar::QDBusMenuBar()
m_menuAdaptor, &QDBusMenuAdaptor::ItemsPropertiesUpdated);
connect(m_menu, &QDBusPlatformMenu::updated,
m_menuAdaptor, &QDBusMenuAdaptor::LayoutUpdated);
connect(m_menu, &QDBusPlatformMenu::popupRequested,
m_menuAdaptor, &QDBusMenuAdaptor::ItemActivationRequested);
}
QDBusMenuBar::~QDBusMenuBar()

View File

@ -39,6 +39,7 @@
#include "qdbusplatformmenu_p.h"
#include <QDateTime>
#include <QDebug>
#include <QWindow>
@ -210,6 +211,8 @@ void QDBusPlatformMenu::removeMenuItem(QPlatformMenuItem *menuItem)
this, &QDBusPlatformMenu::propertiesUpdated);
disconnect(menu, &QDBusPlatformMenu::updated,
this, &QDBusPlatformMenu::updated);
disconnect(menu, &QDBusPlatformMenu::popupRequested,
this, &QDBusPlatformMenu::popupRequested);
}
emitUpdated();
}
@ -222,6 +225,8 @@ void QDBusPlatformMenu::syncSubMenu(const QDBusPlatformMenu *menu)
this, &QDBusPlatformMenu::propertiesUpdated, Qt::UniqueConnection);
connect(menu, &QDBusPlatformMenu::updated,
this, &QDBusPlatformMenu::updated, Qt::UniqueConnection);
connect(menu, &QDBusPlatformMenu::popupRequested,
this, &QDBusPlatformMenu::popupRequested, Qt::UniqueConnection);
}
void QDBusPlatformMenu::syncMenuItem(QPlatformMenuItem *menuItem)
@ -278,6 +283,15 @@ void QDBusPlatformMenu::setContainingMenuItem(QDBusPlatformMenuItem *item)
m_containingMenuItem = item;
}
void QDBusPlatformMenu::showPopup(const QWindow *parentWindow, const QRect &targetRect, const QPlatformMenuItem *item)
{
Q_UNUSED(parentWindow);
Q_UNUSED(targetRect);
Q_UNUSED(item);
setVisible(true);
emit popupRequested(m_containingMenuItem->dbusID(), QDateTime::currentMSecsSinceEpoch());
}
QPlatformMenuItem *QDBusPlatformMenu::menuItemAt(int position) const
{
return m_items.value(position);

View File

@ -161,13 +161,7 @@ public:
void setMenuType(MenuType type) Q_DECL_OVERRIDE { Q_UNUSED(type); }
void setContainingMenuItem(QDBusPlatformMenuItem *item);
void showPopup(const QWindow *parentWindow, const QRect &targetRect, const QPlatformMenuItem *item) Q_DECL_OVERRIDE
{
Q_UNUSED(parentWindow);
Q_UNUSED(targetRect);
Q_UNUSED(item);
setVisible(true);
}
void showPopup(const QWindow *parentWindow, const QRect &targetRect, const QPlatformMenuItem *item) Q_DECL_OVERRIDE;
void dismiss() Q_DECL_OVERRIDE { } // Closes this and all its related menu popups
@ -187,6 +181,7 @@ public:
signals:
void updated(uint revision, int dbusId);
void propertiesUpdated(QDBusMenuItemList updatedProps, QDBusMenuItemKeysList removedProps);
void popupRequested(int id, uint timestamp);
private:
quintptr m_tag;