Gtk.FileDialog

Gtk.FileDialog

GtkDialog 関連が廃止予定なので GTK+ 4.8 の間に置き換え。
と早めにしようとしたら GtkFileDialog が 4.10 にならないと用意されない。
ということでのんびり 4.10 を待っていたのは筆者だけではないと思う。

FileChooserDialog は GtkDialog ベース。
GtkDialog は GtkWindow ベース、更に GtkWidget ベース更に…
継承の仕組みとはいえ限られた用途な部品とは思えない作りだった。
GtkFileDialog は GObject からの単一継承と解りやすくなった。

いやそんな細かいことはどうでもいいですよね。
とっととサンプルコード。

#!/usr/bin/env python3

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

WRITE_TEXT = 'Python 文字列は UTF-8 に変換する'.encode('utf8')

class Win(Gtk.ApplicationWindow):
    '''
        GtkFileDialog: Sample Code
    '''
    def __init__(self, a):
        # Set Adwaita Style
        manager = Adw.StyleManager.get_default()
        manager.set_color_scheme(Adw.ColorScheme.DEFAULT)
        # init
        Gtk.ApplicationWindow.__init__(self, application=a)
        # Button
        button_open = Gtk.Button(label='_Open', use_underline=True)
        button_open.connect('clicked', self.on_button_open_clicked)
        button_save = Gtk.Button(label='_Save', use_underline=True)
        button_save.connect('clicked', self.on_button_save_clicked)
        button_old = Gtk.Button(label='_GtkFileChooserDialog', use_underline=True)
        button_old.connect('clicked', self.on_button_old_clicked)
        # box
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        vbox.append(button_open)
        vbox.append(button_save)
        vbox.append(button_old)
        self.set_child(vbox)

    def on_button_open_clicked(self, button):
        dlg = Gtk.FileDialog()
        dlg.open(self, None, self.on_open_dlg_callback)

    def on_open_dlg_callback(self, dlg, res):
        try:
            f = dlg.open_finish(res)
            print(f.get_path())
        except Exception as e:
            print('Cancel')

    def on_button_save_clicked(self, button):
        dlg = Gtk.FileDialog()
        dlg.save(self, None, self.on_save_dlg_callback)

    def on_save_dlg_callback(self, dlg, res):
        try:
            f = dlg.save_finish(res)
            stream = f.replace(None, False, Gio.FileCreateFlags.NONE)
            stream.write(WRITE_TEXT)
            stream.close()
        except Exception as e:
            print('Cancel')

    def on_button_old_clicked(self, button):
        dlg = Gtk.FileChooserDialog(title='Open', action=Gtk.FileChooserAction.OPEN, modal=True)
        dlg.add_buttons('_Cancel', Gtk.ResponseType.CANCEL, '_Open', Gtk.ResponseType.ACCEPT)
        dlg.set_transient_for(self)
        dlg.connect('response', self.on_open_dlg_response)
        # CSS CLASS
        dlg.get_widget_for_response(Gtk.ResponseType.ACCEPT).add_css_class('suggested-action')
        # Gtk.Widget.show() is deprecated
        dlg.set_visible(True)

    def on_open_dlg_response(self, dlg, response_id):
        if response_id == Gtk.ResponseType.ACCEPT:
            f = dlg.get_file()
            print(f.get_path())
        dlg.destroy()

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

filedialog

GtkFileChooserDialog は GTK+ 4.10 でもエラーにはなりません。
AppKit|UIKit 同様に廃止予定にして頃合で削除するみたい。

open と save の振り分けはプロパティではなく関数になりました。
複数選択の指定も関数になったけど説明はいらないよね。
シグナルではなくコールバック関数にて処理だけどあまり変わらない。
GtkDialog とは違い自前で破棄する必要は無くなったようです。

open file

ACCEPT ボタンは CSS 指定せずとも勝手に青くなります。
GtkFileFilter は default-filter プロパティで指定可能。
後は公式を見れば使い方は解ると思う。

ついでに気がつく、Gtk.Widget.show|hide も廃止なんだね。
visible プロパティと被っていたし整理したのかな。

ところで WordPress のアップロードがこの FileDialog になった。
複数選択ができないんですけど、一個づつアップロードするのメンドイ。

ということで我が Comipoli も更新しようと思ったのですが。
svg アイコンが摘要されない、128×128 強制になったのだろうか?
現在 Boxy SVG というアプリと格闘中、ということで。

kiji

昨日今日と夏鳥を求めて歩き回って成果はゼロ。
キジなら何故か簡単に見つかってこんなカッコイイ写真が撮れるのに。
筆者は今年も夏鳥とは相性が悪いのか。。。。。

Fedora 38 Install

Fedora 38 への更新通知が出た、早すぎてビックリ。
今回は面倒くさいけどクリーンインストール。
レンダラ廃止等 GTK+ の改訂が何かに影響しそうなので様子見。

Fedora Workstation | The Fedora Project

現状の $HOME 以下をバックアップ。
x86_64 の iso を落とす、USB メモリをパソコンに差す。
iso のコンテキストメニューから「Open With…」を選択。

writer

「ディスクイメージライター」を選択し USB メモリに書き込む。
差したままパソコンの電源 OFF、SSD を取り替える。
再起動時に BIOS にて起動順序を USB メモリ優先に変更。
後は指示に従う、ほんの数分でクリーンインストール完了。

さてデフォルト状態でに確認だ。
フォントがちょっぴり綺麗になった以外は何も変化が無いように見える。
いや、Anthy の PageDown が最初から動作するように改善されていた。

Nautilus のリネームで入力メソッド切り替え初回が無視されるのは同じ。
Nautilus のブックマークが ~/.config/gtk-3.0/bookmarks と変なのも同じ。
てゆーか gnome-terminal のままなのか、kgx への移行はいつなのか。
gnome-texteditor は外部ツール付けて、コレじゃ Gedit から移行できない。

avif や heif にはまだ対応していない、ずるつもりがないのかも。
デバイス名変更でドメイン指定できるようにしてほしいないいかげんに。
gnome-softwere は Flatpak がデフォルトなのをヤメてくれないか?
RPM に毎回変更するの面倒、てか間違えたらキャンセルできないんだがバグ?

ffmpeg

ffmpeg は ffmpeg-free というパッケージで最初から入っていた。
動画の回転等はコレで普通にできたのでこれのままで問題は無いかと。
ただその影響なのか、またしても wmv の再生ができなくなっている。
なんと mpv にも弾かれた、プロプライエタリ排除なんだろうか。

Fedora Tips – Paepoi

fedora

何も変わっていなかった、書き換えするネタが欲しいくらいに。
え?まだ SkyLake のままだよ、RAW 現像とかは M1 Mac でヤルし問題ない。

まて 4k 動画がガクガクだ、ハードウエアアクセラレーションが動いていない。
バグなのか他に何か入れなきゃなのか今はワカラン、しばらく様子見。

GTK4 の変更点とかは次回。

Ken

今日はキジポイントに通りかかると早々にキジの鳴き声が。

kiji

キジの鳴き声って「ケーン」とよく表現されているけど。
キジとは?鳴き声はケーンと聞こえる?性別と鳴き方の種類を解説!
全然そう聞こえないよね。
しかし「ケーン」ってパチスロ北斗の拳かよ(古い!

kiji

去年はここらにコチドリが、ってまたキジだよ。
すっかりキジ専属カメラマンに、いやなっていないが。

kogamo

今年はツグミを全然見ない、代わりにコガモがいまだに残っている。
おいおい桜も終わったよ、てかなんで片足上げて寝ているの?

諸事情で今日はここまで、そろそろ夏鳥を見たいな。

AVIF

Web 用途の画像形式で近年は WebP が人気、筆者も blog で使っている。
文字列に弱い JPEG とサイズが大きめな PNG という欠点を補っています。
更に透過やアニメーションや可逆圧縮まで対応と至れり尽くせり。

でも広まらないと意味が無い、HEIF はもう死んでいる。
そういえば JPEG 2000 とかそんなのあったよなって、他は忘れた。
とはいえ既に結構広まっていますのでこのまま安泰かも。

ところで、似たようなフォーマットに avif という形式があるらしい。
特徴までそっくりで WebP より更にサイズが小さくなるらしい。

AVIFとは?特徴や注意点から変換できるアプリ・ツールまで紹介

AV1 動画と同じ圧縮を画像に展開したもののようです。
とりあえず上記からのリンク先にある avif ファイルで試す。

gnome

GNOME

macos

macOS

macOS スゲェ、すべて Preview.app で普通に表示できるし。
でも avif への変換はできない、これは WebP と同じ。
avif はオープンソースですし GNOME も対応は時間の問題かな。

hex

バイナリを見ると見事に ftypavif の mp4 コンテナですね。
そういえば HEIF もそうだし WebP も RIFF のコンテナだったね。
ということは。

mpv -autofit 400x300 photo.avif

mpv

mpv で普通に開くことができました、当然 WebP も同様に。
totem ではエラー、Quick Time はそもそも受け付けない。

次世代画像形式のWebP、そしてAVIFへ。変わり続ける技術に対応するweb制作の黄金解 – ICS MEDIA

こんなページも見つけた、JPEG XR なんて知らないぞ?
あぁ Windows 専用なのか、7 以降の Windows はマジで知らないし。
てか WebP って ffmpeg で変換できるのか、もしかして今なら。

ffmpeg -i gara.webp gara.avif

ffmpeg

おいおい、できるじゃないか。
これは新たな生き残りゲームが始まる予感。

でも写真は Exif の関係で今後も jpeg のままだろうし。
今は GIF や PNG を選んでいた所を WebP に置き換えが最適解かな。
知らんけど。

Winter Bird

2023.04.02 五条川の桜ラスト、清須まで行ってみる。

kiyosu

川幅は途中で矢戸川や青木川と合流してこんなにデカくなる。
大量に流れてくる花弁は広くなったぶん分散されるみたいね。
桜並木は一宮市区間で一度ぶった斬れるんですけど清須で復活。
ここからだと名古屋のビル群も見えるんですね、天気が残念。

ooban

オオバン、激減したけどまだ冬鳥が少し残っています。
近場の群で一斉に渡るというわけではないのか。

kogamo

コガモ、しかし桜の花弁が流れる川に冬鳥とは。
ツバメも飛んでいるというのに暑くないのだろうか。

hidorigamo

ヒドリガモ、見かけた冬鳥は現在この三種だけ。
四月中には渡ってしまうだろうけど。
サギ等も夏は田圃にいて寂しい五条川に。
いや堰き止めて農業用水になるだけなんだろうけど。