I'm trying to capture MouseClick events on the QgsMapCanvas. The goal is to intercept the right mouse button and display a custom context menu.
If the right mouse button is pressed with a modifier key (SHIFT+CTRL for example), the active tool action should be triggered.

I tried to install an event filter on the QgsMapCanvas provided by the iface, but this is not working.

    class MyPlugin:
        def __init__(self, iface: QgisInterface):
            self.iface = iface
            self.eventFilter: MyEventFilter = None

        def initGui(self):
            self.registerEventFilter()

        def unload(self):
            self.unregisterEventFilter()

        def registerEventFilter(self):
            if not self.eventFilter:
                self.eventFilter = MyEventFilter(self.iface.mapCanvas())
            self.iface.mapCanvas().installEventFilter(self.eventFilter)

        def unregisterEventFilter(self):
            if self.eventFilter:
                self.eventFilter.deleteLater()
                self.eventFilter = None

and the EventHandler looks like this:

    class MyEventFilter(QObject):

        def __init__(self, parent: Optional[QObject] = None) -> None:
            super().__init__(parent)

        def eventFilter(self, caller: QObject, event: QEvent) -> bool:
            if event.type() == QEvent.MouseButtonRelease:
                QMessageBox.information(None, 'MyEventFilter', f'event: {event}')
                return True
            return False

But when I click, nothing happens. I guess the active tool itself is already filtering the click?

I've seen that QgsMapCanvas has signals for the mouse position as well as keypresses, but unfortunately no mouse click signals.

I know that you can implement a map tool, but the idea is to have a global contextmenu handler that is always called first. Only with a modifier key the original tool action should be triggered.

Is there any mechanism to achieve this?