試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

libnotifyをVala言語で使用する(メモ)

ここではVala言語でlibnotifyを使う上でのメモを扱い、コード例は別記事に貼り付ける。

初期化

main()の最初など、プログラム内の初期段階において、GTK+の初期化と同様にNotify.init()によるlibnotifyの初期化処理が必須(引数にはアプリケーション名を指定)。
初期化に成功したかどうかが戻り値になるので、チェックするようにするとよい。

class MainClass
{
  public static void main (string[] args)
  {
    Gtk.init (ref args);
    if (!Notify.init ("libnotifytest"))
    {
      (初期化失敗時の処理...)
    }
    ...
    Gtk.main ();
  }
}

通知の表示項目

libnotifyの通知の表示は概要/タイトル,本文,アイコンから成り、表示位置は任意のGUI部品かシステムトレイアイコンが指定できる。いずれの場合も吹き出しでその位置を示す。
どちらも指定されない場合は画面隅の通知スタックに積み上げられる(複数の通知オブジェクトがあるときに同時に表示可)。このときは四角い通知でどこかを指し示す形ではない。
この他、通知の下部にボタンを幾つか表示し、ボタンごとに押されたときの処理を記述できる*1ようにもなっていて、動作を実行するためのスイッチとして使ったり、複数のボタンを選択肢として配置して使ったりできる。ボタン表示時には右下に円グラフのような形の図形が表示され、時間の経過とともに領域が消えていき、これが完全に消えるときに通知も隠れ、「いずれのボタンも押されずに時間切れ」という扱いになる。

重要度

libnotifyの通知には

  • LOW(低)
  • NORMAL(中/既定値)
  • CRITICAL(高)

という3つの重要度(緊急度)が設定でき、それぞれ色が異なる。

通知オブジェクト

オブジェクトと初期化

libnotifyの通知はNotify.Notificationオブジェクトで扱い、コンストラクタ引数は

  1. string summary(概要)
  2. string? body(本文)
  3. string? icon(アイコン名)
  4. Gtk.Widget? attach(吹き出しをくっつけるGUI部品)

となる。
システムトレイアイコン使用で初期化する場合はNotification.with_status_icon()の名前付きコンストラクタでオブジェクトを作成することもできる。

バルーンを画面上に表示

作成したNotify.Notificationオブジェクトのメンバ関数show()で通知を表示し、このときtry-catch構文を用いてGLib.Errorオブジェクトを処理するようにする。

(Notify.Notificationオブジェクトnがあるものとする)
...
try
{
  n.show ();
}
catch (GLib.Error e)
{
  (失敗時の処理・「e.message」で文字列が取り出せる)
}

表示後に通知が画面から隠れてもオブジェクトはそのままの状態で、繰り返しshow()を呼ぶことで再表示することができる。ただし、別途内容を書き換えない限りは同じ内容しか表示されない。

内容の更新

概要やメッセージの内容を更新する(書き換える)ときにはメンバ関数update()を用いる。このときの引数は

  1. string summary(新しい概要)
  2. string body(新しい本文)
  3. string icon(新しいアイコン名)

となる。

ボタンとアクション

通知の中に幾つかのボタンを表示し、それが押されたときに関数を呼ぶようにするにはメンバ関数add_action()を用い、最初の引数にはボタンのアクション名(「save」「open」「delete」などを指定するとアイコンも付く)、次にボタン上の文字列、最後に呼び出す関数を指定する。

重要度の設定

通知オブジェクトに重要度を設定するにはメンバ関数set_urgency()を用いる。

(に続く)

関連記事:

使用したバージョン:

  • libnotify 0.4.4
  • Vala 0.7.7

*1:呼ばれる関数を指定する形となる