Adw.AlertDialog

本日は休日出勤無しだが雨、野鳥撮影ヤメにしてプログラミングでも。
とりあえず Adw.AlertDialog を試しに書いてみることにした。

#!/usr/bin/env python3

import gi, sys
gi.require_version('Gtk', '4.0')
gi.require_version('Adw', '1')
from gi.repository import Gtk, Adw

class Win(Adw.ApplicationWindow):
    '''
        Gtk.ApplicationWindow is Gtk-CRITICAL
        Widget of type “AdwAlertDialog” already has an accessible role of type “GTK_ACCESSIBLE_ROLE_GENERIC”
    '''
    def __init__(self, a):
        # Set Adwaita Style
        manager = Adw.StyleManager.get_default()
        manager.set_color_scheme(Adw.ColorScheme.DEFAULT)
        # init
        Adw.ApplicationWindow.__init__(self, application=a)
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        # Header
        title = Adw.WindowTitle(title='test')
        header = Adw.HeaderBar(title_widget=title)
        vbox.append(header)
        for s in ('Simple', 'Yes No', 'Vertical'):
            # Button
            button = Gtk.Button(label=s)
            button.connect('clicked', self.on_button_clicked, s)
            vbox.append(button)
        # self
        self.set_content(vbox)
        self.set_default_size(600, 500)

    def on_button_clicked(self, button, text):
        match text:
            case 'Simple':
                alert = Adw.AlertDialog(body='Same for ESC')
                alert.add_response('close', 'OK')
                alert.present(self)
            case 'Yes No':
                alert = Adw.AlertDialog(body='Close to the Edge')
                # add_responces is no...
                alert.add_response('close', 'No')
                alert.add_response('yes', 'Yes')
                alert.set_response_appearance('yes', Adw.ResponseAppearance.SUGGESTED)
                alert.choose(self, None, self.on_dialog_responce)
            case 'Vertical':
                alert = Adw.AlertDialog(heading='Head', body='body', prefer_wide_layout=True)
                alert.add_response('close', 'Cancel')
                alert.add_response('no', 'Destroy this document')
                alert.add_response('ok', 'Save this document')
                alert.set_response_appearance('ok', Adw.ResponseAppearance.SUGGESTED)
                alert.set_response_appearance('no', Adw.ResponseAppearance.DESTRUCTIVE)
                alert.choose(self, None, self.on_dialog_responce)
            case _:
                alert = Adw.AlertDialog(body='???')
                alert.add_response('close', 'ok')
                alert.present(self)

    def on_dialog_responce(self, alert, res):
        text = alert.choose_finish(res)
        match text:
            case 'ok':
                print('Saved')
            case 'no':
                print('Discarded')
            case 'yes':
                print("You're a fan of Yes")
            case 'close':
                print('Oh my good!')

app = Gtk.Application()
app.connect('activate', lambda a: Win(a).present())
app.run()

GtkAlertDialog

Gtk.ApplicationWindow から呼び出ししても普通に動くんだけど。
Gtk-CRITICAL エラーを stdout に吐くのを気にしなければ、ですけど。
素直に Adw.ApplicationWindow から呼び出したほうが無難。

それと呼び出し Window より Dialog のほうが大きいと Warning になる。
ボタンは基本が横並びで横幅がはみ出しする場合は自動的に縦並びになる。
強制縦並びにしたければ prefer-wide-layout プロパティで可能。

id の文字列は日本語でも使えた、Python だからかもだけど。
外国人も検索で来るかもだからここでは英語にしましたけど。

Adw.MessageDialog 同様に Widget を載せることもできる。
gnome-text-editor で変更破棄すればどんな感じなのかは見れます。

Adw も洗練された Widget という謳い文句らしくなってきましたね。
というのを Kate というダサい Qt のエディタで書いているのがなんとも。
gnome-text-editor に拡張機能付けてくれないかなぁ、見た目はいいのに。
スニペットのショートカット挿入と html のエスケープ機能だけでもいいのに。

Fedora 41 Upgrade

Fedora に 41 へのアップグレード通知が来たので更新。

nautilus

おいおい Nautilus のサイドバーが更に使い辛くなってもーた。
別ページだった Network や使っていない Recent や Star が一等地に。
DnD で下に移動させようとしてもできないし、勘弁してくださいよ。

Whats new in Fedora Workstation 41 – Fedora Magazine

なんか色分けで解りやすいダイアログが増えたようで。
でもどうせ GTK4 ではなく Adw のほうだろう。

Adw.AlertDialog.set_response_appearance

普通に見つかった、Adw やるやん。
Adw.AboutWindow が廃止で Adw.AboutDialog を使えになっとる。
Adw.MessageDialog も廃止かよ、Tips ページを書き換えしなきゃ。

そうそう、Python は出たばかりの 3.13 が入っているよ。
もしかしてこれに合わせて 41 をリリースしたのか、偶然か。

あとは、筆者の使用範囲では 40 と違いが解らないなぁ。
関係ないけど mpv の osd タイトル設定が反映されなくなっている。

# タイトルはファイル名 -- タイトル名
#title=${filename} -- ${media-title}
windowcontrols_title=${filename} -- ${media-title}

osc.conf をこう書き換えたら摘要されるようになった。
mpv は以前のまま、また ffmpeg 側の仕様変更に巻き添えくらったか。

あとはまた何か見つけたら。

ジョウビタキ

今日は国政選挙なのでみなさん投票に行きましょう。
ただ晴れるのは午前中、その前にちょっと五条川で野鳥探し。

jyoubitaki

ジョウビタキのメス来た、やっぱり入れ替わりですね。
今年の子は勝手に近寄ってくれた、去年の子は人見知りで。

kusashigi

春に続いて秋の渡りでもクサシギが寄り道してくれました。
同じ子だろうな、シギはこのシギ以外見たことないもん。

kisekirei

ジョビオを見つけたら投票へ、と考えていたけど何もおらん。
昼過ぎまで粘ってキセキレイをなんとか見つけたけど太陽が。

jyoubitaki

ジョウビタキのオス、いやメスか。
既にドン曇りなのでオレンジ色が映えないなあ。

まあ冬はずっといる鳥だし、目的は達成したので投票へ。
選挙区変更のおかげで誰も知らんけど、政党の消去法で。
米の値段を戻すアピールとかをする人はおらんのか。

コガモ

愛知県尾張地区も秋な陽気になりました。
五条川にカルガモが増え、留鳥なのに夏はドコにいるんだ?

kogamo

早速コガモ一家がロシアから岩倉市某所に戻ってきました。
毎年一番乗りだな、どんだけココが住みやすいんだよ。

ezobitaki

今日の五条川はヒヨドリも少なく超静か、鳥を探しているのに。
矢戸川横の小さな公園へ移動、エゾビタキがいました。

kibitaki

上記撮影中に突然筆者の 2m 前な水溜りで水浴びを始めた奴が。
あんたキビタキのメスやん!こんな場所で初めて見たぞい。

kosamebitaki

同じ場所で出待ちしているとこんどはコサメビタキが。
なんだ今日はヒタキ科祭りなんですか?オオルリもこい。

ezobitaki

エゾビタキが近い所に現れたのでもう一丁。
まあ今月中にはジョウビタキと入れ替わりでしょうね。

kisekirei

五条川に戻ってキセキレイで締め、ちょっと遠かったですけど。
コイツを見かけると秋になったと感じるのは筆者だけかも。

撮れなかったけどカワセミも何度も見たし野鳥の季節本番ですね。
しかし鳥以外に挑戦といいながらずっと後回しなのも。

エゾビタキ

五条川のヒガンバナも枯れてしまいました。
コサメビタキも見つからなくなり、そうなると。

ezobitaki

エゾビタキ、こいつがやってきます。
アイリングがあいまいなので完全にエゾビタキですね。

ezobitaki

先月最初にコサメさんを見つけた場所と同じ所にいた。
同じもの食っているんだから一緒に渡ればいいのに。

ezobitaki

飛びものも狙ったけどブレた、やっぱり ss2000 は必要か。
-2EV したほうが良かったかな、快晴なので普通に撮ったし。

kichou

他なーんにも見つからないのでキチョウタンポポでも。
いやサギ類もろもろや黄色くないセキレイならいたけど。

さてもう少しで Fedora 41 が出るがどうしよう。
というのも先日の引越しの時デスクトップが邪魔で面倒で。
自作パソコンパーツが Bic 等の電気屋で激減していて驚いたし。
今の Kaby Lake が死んだら自作デスクトップは止めようかと。
Mac mini で Mac に一本化するのが一番だけど、うーん。