日別アーカイブ: 2025/08/15

Gtk.Window.get_toplevels

Vala については Valadoc.org しか知らなかったけど。
GTK4 になって使わない間に Documentation サイトができていたのね。

Vala Documentation

で、よく考えたら筆者は自作した Vala Tips ページがある。
これも GTK3 のまま放置している、そろそろ書き換えしないと。

Vala (C Generator) – Paepoi

Vala 自体も C# の進化に合わせて細かく変わっていると思うけど。
筆者は 3.5 以降の C# を知らない、7 以降の Windows 買っていないし。
まあ後方互換のはずだし細かい違いは勘でなんとかなると読んでみる。
そんなことより下記のサンプルコードが気になってしまった。

Minimal App – Vala Documentation

GtkApplication や GMainLoop を使わずシグナル処理できるの?
ということで試しに PyGObject で書き換えしてみることにした。
書くまでもなく Gjs のほうが文法が近いけど独自機能が多いし。

#!/usr/bin/env python3

import gi
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk, GLib

window = Gtk.Window (title = 'Minimal GTK4 App')

button = Gtk.Button(label='Click me!')
button.connect('clicked', lambda b: b.set_label('Thank you'))

window.props.child = button
window.present()

while (Gtk.Window.get_toplevels().get_n_items() > 0):
    GLib.MainContext.default().iteration (True)

vala

普通に動くんですけど、こんな手段があったのか。
閉じると終了する仕組みがある無限ループならなんでもいいのか。
まあどう考えても GApplication のほうが便利なんですけどね。
WPF なんかもそうでしょ、いや 3.5 以降はマジで知らないけど。

default の前にある @ は何だ?と思ったけど。
キーワードの default と誤認識を防止しビルド時は読み飛ばす仕組みらしい。
知らなかったわい、てか C# にこんな機能あったっけか?