Hello,
I recently opened a topic that was closed without getting a valuable answer as my question was misunderstood and then not answered again after clarification…
I will try to explain the problem again in the hopes that this time it may be clearer…
An action with a shortcut (accelerator) in the example case <primary>p
can successfully called via shortcut. But as soon as a PopoverMenu is opened and closed again, the previously working shortcut ceases to work.
What I found out already is, that if the Popover Menu has no items in it, this bug will not be triggered. But as soon as an item is added, even though it has nothing to do with the initially registered action and shortcut, said shortcut will no longer be working.
Here is the code again:
# -*- coding: utf-8 -*-
import gi
gi.require_version(namespace='Gtk', version='4.0')
from gi.repository import Gio, Gtk
TRIGGER_BUG = True
class ExampleWindow(Gtk.ApplicationWindow):
def __init__(self):
super().__init__()
self.set_title(title='Menu Shortcut Bug PoC')
gio_menu = Gio.Menu.new()
if TRIGGER_BUG:
gio_menu.append(label='test')
popover_menu = Gtk.PopoverMenu.new_from_model(gio_menu)
headerbar = Gtk.HeaderBar.new()
self.set_titlebar(titlebar=headerbar)
menu_button = Gtk.MenuButton.new()
menu_button.set_popover(popover=popover_menu)
headerbar.pack_end(child=menu_button)
class ExampleApplication(Gtk.Application):
def __init__(self):
super().__init__(application_id='org.poc')
action = Gio.SimpleAction.new('poc', None)
action.connect('activate', self.on_poc_action)
self.add_action(action)
self.set_accels_for_action(f'app.poc', ['<primary>p'])
def do_activate(self):
win = self.props.active_window
if not win:
win = ExampleWindow(application=self)
win.present()
def on_poc_action(self, action, param):
print('Action activated')
if __name__ == '__main__':
app = ExampleApplication()
app.run()