すっかり写真ブログ化しているこのブログですが。
今月末には新しい Fedora が出るはずなのでそろそろ本筋でも。
GTK4 のサンプルコードもそろそろ出そろってきたかなって。
GitHub – johnfactotum/quick-lookup: Simple GTK dictionary application powered by Wiktionary
このあたりが解りやすいかな。
省略表記多すぎ、てか文末セミコロンすら絶対に書かない派なのね。
まあ Gjs で GTK4 はこんなふうに書けばいいのかって参考にはなる。
気になったのは notify::is-active シグナル。
アクティブ化の真偽値をこのシグナルで捕まえられるのかな。
#!/usr/bin/gjs imports.gi.versions.Gtk = '4.0' const {GObject, Gtk} = imports.gi; var TestWindow = GObject.registerClass({ GTypeName: 'TestWindow' }, class TestWindow extends Gtk.ApplicationWindow { _init(app) { super._init({ application: app, title: '1' }); try { this.connect('notify::is-active', () => { if (this.is_active) this.title += '1'; }); } catch(e) { printerr(`@@@Error@@@@:\n${e.message}`); app.quit(); } } }); var TestApplication = GObject.registerClass({ GTypeName: 'TestApplication' }, class TestApplication extends Gtk.Application { _init() { super._init({ application_id: 'org.lumix.gh6' }); } vfunc_activate() { let w = new TestWindow(this); w.present(); } }); let app = new TestApplication(); app.run(null);
おぉコレは使いどころがあるぞ。
昔筆者がやってた初回起動時間のセコい短縮なんかにも使えるね。
ウインド表示直後に処理 | Paepoi Blog
ところでこの Notify というシグナルって何だろう?
どうやら GObject のシグナルらしい。
そして is-active は GtkWindow のプロパティ。
つまりこのシグナルは何かプロパティをセットした時に吐きだすようだ。
別のプロパティで試してみよう、PyGObject でもイケるかな?
#!/usr/bin/env python3 import gi, sys gi.require_version('Gtk', '4.0') from gi.repository import Gtk class TestWindow(Gtk.ApplicationWindow): def __init__(self, app): Gtk.ApplicationWindow.__init__(self, application=app) try: self.connect('notify::default-width', self.on_width_change) except Exception as e: print(e, file=sys.stderr) app.quit() def on_width_change(self, this, pspec): self.set_title(f'width: {self.props.default_width}') class TestApplication(Gtk.Application): def __init__(self): Gtk.Application.__init__(self, application_id='org.olympus.pen') def do_activate(self): w = TestWindow(self) w.present() app = TestApplication() app.run()
イケた、ウインドウの横サイズを変更すると即座にタイトルが変更される。
Notify::** シグナルでプロパティを監視することが可能なんですね。
引数の GParamSpec から値を得ることもできると思うけど手段がワカラン。
プロパティを見ればいいだけなので別にいいか。