以前 GTK4 のメニューサンプルコードを書いたけど。
toggled なんてシグナルは GTK4 版には無かったね。
エラーが出なかったのは GTK4 に無視されていただけだったようだ。
んで、GTK4 版 GtkMenuButton には primary というプロパティが追加されていた。
コレを True にすると F10 キーでポップアップできるようになる。
ただ、それを利用するとフルスクリーンで使えない。
フルスクリーンにしないアプリなら問題ないんだけど。
それとコレを実装していて気が付いたんだけど。
GTK4 はボタン類の cricked 関数が全部消えている。
つまりコードで模擬クリックすることができなくなってしまった。
アレ便利だったのに、しかたがないから別の手段で。
ということで GTK4 にてフルスクリーン用メニューが別にある場合。
F10 を振り分けする必要がある。
class ComipoliApplication(Gtk.Application): def __init__(self, version): # etc... def do_startup(self): Gtk.Application.do_startup(self) self.set_accels_for_action('win.action_f10', ['F10'])
GtkApplication.
class ComipoliWindow(Gtk.ApplicationWindow): def __init__(self, app): # etc... action_f10 = Gio.SimpleAction.new('action_f10', None) action_f10.connect('activate', self.on_action_function_key, 10) self.add_action(action_f10) def on_action_function_key(self, action, param, num): if num == 10: if self.is_fullscreen: self.upperbar.show() GLib.idle_add(self.show_fullscreen_menu) else: self.menu.popup() def show_fullscreen_menu(self): self.menuf.popup() return False
GtkApplicationWindow.
コレでなんとかなったけど F10 の二度押しで消すことができない。
おまけにポップアップ状態から矢印キーでメニュー選択もできない。
gnome-text-editor も同じだから仕様なんだろうね。
それより、ポップアップを出すとフォーカスを取られてキー操作を受け付けない。
GtkMenuButton の popdown 関数は何のためにあるのだ?
これを利用して F10 二度押しを実装しようとしたけど、無理っぽい。
ということで GTK4 でポップアップを消すには Esc を使いましょう。
逆に言えば現状 GTK4 製かどうかはソレで見分けできる。
今回は GTK4 でのショートカット実装方法でした。
<Control>W とかも同じ方法で実装できるよ。