自分がお気に入りのLinux mint cinnamon Editionにはdeskletというガジェット機能があります。 こいつの開発手法が国内国外問わず殆どないため、試行錯誤しながら現在学んでいるのですが。 ある程度分かってきたのでメモを残していこうと思います。 第五回はタイマー周りを。 第一回はこちら 第二回はこちら 第三回はこちら 第四回はこちら

MainLoop

まずはこいつをimportさせてあげます。 ループ用のクラスですね。
const Mainloop = imports.mainloop;

コールバック関数

次にコールバック関数を作りましょう。
mytimeout: function() {
        var today = new Date();

        this.lbl.set_text(today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds());
        this.updateLoop = Mainloop.timeout_add(60 * 1000, Lang.bind(this, this.mytimeout));
},
ここでtimeout_addってやつがポイント。 これでタイマーを貼ります。setTimeout関数みたいなもんですね。 この場合は60秒に設定してます。 で、自分の関数を呼ぶタイマーを再帰的に呼び出してる感じです。

削除

デスクレットを閉じる際に消してあげましょ。
    on_desklet_remove: function() {
        Mainloop.source_remove(this.mainloop);
    },
これでよし。 あとはmytimeout関数をsetupUIから呼べば終了。

注意点

なんかプログラム書き間違えて、cinnamonをリスタートさせたら画面が表示されなくなってしまうトラブルが発生しました。 うちのmintにはmateも入っていたのでそっちで再起動させてプログラム修正したのですが、 他のウィンドウマネージャーかsshで入れるようにしておいたほうが良いかもです。

まとめ

github上にも同じようにシステムモニターや天気表示なんかやっているものが多くあります。 参考にすると良いかと。