おまたせ、gjs の ES6 class でアプリを作る方法がやっと解ったよ。
PyGObject みたく親切に例外を吐くなんてしてくれないので厳しい。
注意点、constructor はマジでコンストラクタです。
Python の __init__ 等と違う、動的言語でまさかこの仕様だとは。
細かい説明はしないけど、つまり super() 以外は何もできない。
継承で色々行う場合は下記のように別関数にする等の必要あり。
/* const MyWindow = new Lang.Class({ Name: 'MyWindow', Extends: Gtk.ApplicationWindow, _init: function(app) { this.parent({application: app}); this.createContents(); // etc... */ var MyWindow = GObject.registerClass({ GTypeName: "MyWindow", }, class MyWindow extends Gtk.ApplicationWindow { constructor(props={}) { super(props); } create() { this.createContents(); // etc...
…
更に constructor の引数はベースへの property を JSON でに限定。
他を入れるとエラーになるのでとにかくこう書く以外に手段は無いみたい。
override で継承元の関数を呼ぶには super からドットで呼び出す。
Lang.Class ではないので this.parent() は使えない。
var MyApplication = GObject.registerClass({ GTypeName: "MyApplication" }, class MyApplication extends Gtk.Application { constructor(props={}) { super(props); } vfunc_startup() { //this.parent(); super.vfunc_startup();
コレはすぐ気が付くか。
それ以外は今までのコードをそのまんま使えるようだ。
var にする必要があるのは外部から使う class だけでいいみたい。
本当は物凄い遠回りをしたんだけど以上であるようだ。
ということで、もう少し実験してから Y901x を更新する。
ぶっちゃけ動画プレイヤーは gnome-mpv でイイんだけど
Y901x は gjs のサンプルコードがメインの仕事だったことを忘れる所だった。