以前 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 とかも同じ方法で実装できるよ。