Fedora を 32 (GNOME 3.36) にして一ヶ月たった。
今更気が付いたんだけーが GtkMessageDialog のバグが直っている。
GNOME 3.34 modal dialog bug | Paepoi Blog
この時に拙作 Comipoli は GtkInfoBar に変更した、そのまんまだ。
コレってフルスクリーンで cbz を見ていた時には解り辛いんだよね。
ダイアログのほうが視覚的に理解しやすいので元に戻すことにした。
戻すだけじゃつまらない、何か機能の追加か変更をしたい。
pixivコミックやニコニコ漫画のように「前の話」機能を追加することに。
って、GtkMessageDialog では YES/NO しか選択できないんだが。
ということで、GtkDialog を使って自作することにした。
Prev のショートカットはどうするか、Enter/Esc は勝手にやってくれるが。
ええい面倒だ、ニーモニックをそのまま描写しちゃえばいいや!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/usr/bin/env python3 from gi.repository import Gtk class ComipolNextDialog(Gtk.Dialog): def __init__( self , text): Gtk.Dialog.__init__( self ) self .set_resizable( False ) # Buttons self .add_button( '_Cancel (ESC)' , Gtk.ResponseType.CLOSE) self .add_button( '_Next (Enter)' , Gtk.ResponseType.YES) self .add_button( '_Prev (Alt+P)' , Gtk.ResponseType.NO) self .set_default_response(Gtk.ResponseType.YES) # Message message = Gtk.Label(label = f '<span bgcolor="#CC0099">Next:</span> {text}' , use_markup = True , visible = True ) self .vbox.pack_start(message, False , False , 30 ) |
こうなった。
YES/NO は最適なものが無いので簡易利用しただけ。
ボタン自体にショートカットが書いてある親切な仕様になってしまった。
んで呼び出し。
一つ前が存在しない時はボタンを無効にする必要があるなと。
1 2 3 4 5 6 7 8 9 10 11 12 | dlg = ComipolNextDialog(html.escape(cbzs[next_index])) dlg.set_transient_for( self ) if next_index < 2 : dlg.set_response_sensitive(Gtk.ResponseType.NO, False ) res = dlg.run() if res = = Gtk.ResponseType.YES: uri = GLib.filename_to_uri(GLib.build_filenamev([path, cbzs[next_index]]), None ) self .set_uri(uri) elif res = = Gtk.ResponseType.NO: uri = GLib.filename_to_uri(GLib.build_filenamev([path, cbzs[next_index - 2 ]]), None ) self .set_uri(uri) dlg.destroy() |
コレでイケた。
どんな感じに表示されるか。
うーん、GtkMessageDialog よりボタンの大きさが小さいなぁ。
勝手に等間隔にはなるけど長いファイル名だと右に寄ってしまうし。
アクションエリアにアクセスが非推奨ではどうにもできない。
タイトルバーも出るんだね、無しにしたいけど手段が解らない。
iPhone を考えるとあのスタイルが普通になるのよね今後は。
とはいえ動作は問題無しなのでコレでいこう。