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# にこんな機能あったっけか?

雨の公園

連休です、でも昨日はドン曇りで今日は雨。
何かないかと久々に名古屋の某公園まで行ってみた。

hasu

どうやらポケ GO のイベントらしくスマホを持った人が沢山。
いやまあ、数年前は筆者もこの中の一人だったんだよなぁって。

hasu

しばらく来ない間にお店がイッパイ増えていたけど全部ガラガラ。
雨だしポケモンを捕まえにきた人ばっかだしそりゃね、って感じ。

hasu

雨にも負けずご当地アイドルらしきグループのライブもやっていました。
アニソンにしか聴こえないんだが今時のアイドルはこんな感じなのかな。

hasu

と関係ないことを書いてみましたがハスがまだ咲いていました。
小牧の公園は白しかないけどココはピンクが多いのねん。

suzume

雨の中スズメが小さな水たまりで水浴び、なんでやねん。
どうせ濡れるならついでに!なのかな、知らんけど。

雨なら雨ならではの写真を撮ってみたいんですけど。
思いつかなくてこんな感じになりました。

赤い向日葵

猛暑です、川に行っても野鳥はササゴイすら見つかりません。
熱中症になってもアレなので今日は出かけたついでに公園とした。

himawari

花公園では大輪の向日葵がガッツリ満開でした。
2m 超えの元気な奴もいたので筆者には珍しい縦構図にて。

himawari

サンリッチオレンジでいいのかな、大口町の奴と全然違うな。
公園はガラガラです、マジで筆者を含めてカメラマンしかいない。

himawari

赤い向日葵もありました、プロカットレッドでいいのかな?
向日葵って何気に種類がいっぱいあったのね、知らなかったよ。

sekirei

野鳥はハクセキレイがいました、ってドコにでもおるわい。
まあ幼鳥ということで、鳥も暑いと口を開けます。

sekirei

飛び立つ所、セキレイも幼鳥だと可愛いですね。
背中が黒くなるとウザくなるのは見飽きているせいかも。

夏はすぐネタ切れすると思ったけど意外に続くもんだ。
来週からお盆連休だけど今年はどうすべぇ。

蝶も色々

今日は野鳥以外を色々と撮影してきました。
いや撮るには撮ったけどブログに上げるようなのは。。。

sora

一見田舎道に見えて濃尾平野と大量の工場用電線。
The 愛知県、オリンパスブルーは一種の LUT です。

hasu

某公園のハス園は今年も立ち入り禁止で近寄れません。
今回も通路から望遠レンズで見下ろす方法で。

hasu

昨年と変わり映えしないなぁ、プリセットでも試すか。
で、色々やってみたけど結局空以外は自然が一番だと結論。

chou

サトキマダラヒカゲ、目の前に止まりこのまま全然動かない。
五分くらいずっと、こんなに動かない蝶を初めて見た。

chou

ミスジチョウ、全然羽ばたかず水平に飛んでいてビックリ。
調べるとミスジチョウ亜科は全部そうらしい、知らなんだ。

野鳥は今日もサッパリだったけど蝶の勉強になった。
色と大きさが違うだけじゃなく本当に全然別物なのね。
世の中には身近でもまだ知らないことがいっぱいあります。

Gjs: runAsync

世間は三連休です、筆者は明日休日出勤ですけど。
ということで久々に Gjs ネタでも。

import GLib from 'gi://GLib';

const loop = new GLib.MainLoop(null, false);

GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT_IDLE, 1, () => {
    console.log('アイドリングで実行');
    loop.quit(); // 必ずこちらが後で実行されるので
    return false;
});

GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 1, () => {
    console.log('EOF の後に実行');
    return false;
});

//await loop.runAsync();
loop.runAsync().then( ()=> {
    console.log('__END__');
});
console.log('__EOF__');

gjs

await も当然使える、GLib の関数が非同期な Promise になっている。
なんですかコレ、g_main_loop にこんな関数あったか?

GLib.MainLoop

やっぱり無いよな。
そもそも GLib の関数は Python と同じく全部小文字でスネークケース。
つまり Gjs 独自機能、PyGObject からは当然使えない。

#!/usr/bin/env python3

from gi.repository import GLib

loop = GLib.MainLoop.new(None, False)
loop.runAsync() #=> Error

then の所でメインループを quit できそうだと思ったけど。
メインループを抜けないと then に辿り着けないようで、うーん。
使い道がありそうで無さそうな Gjs 独自機能でした。

で、本日はホトトギスを発見したのにカメラを出している間に逃げられて。
超望遠を持たずに出かけた昨日は沢山見たホオジロも本日は全然見つからず。
野鳥は収穫ゼロ、でもオイラにはプログラミングがあるんだーい!