libnotify を使ってみる

今日は libnotify を使ってみます。GNOME の下の部分に表示されるやつです。StToolkit を使えば Gjs で簡単にできますが、今日は C で書きます。
まずは Makefile

# $ pkg-config --cflags libnotify
CFLAGS = -pthread -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libpng12  

# $ pkg-config --libs libnotify
LDFLAGS = -lnotify -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0  

コメントアウトしている pkg-config のコマンドライン出力をそのまま使って、CFLAGS と LDFLAGS に代入しているだけです。

早速、 notify.c ってのを書きます。

#include <stdlib.h>
#include <libnotify/notify.h>

int
main (int argc, char *argv[])
{
	char *appname = "notify-test";
	NotifyNotification *notification;

	if (! notify_init (appname))
	{
		g_print ("Notify init Error.\n");
		return EXIT_FAILURE;
	}

	notification = notify_notification_new ("Test",
		"This is a test notify.",
		"stock_dialog-info");
	notify_notification_show (notification, NULL);

	notify_uninit ();
	return EXIT_SUCCESS;
}

EXIT_SUCCESS と EXIT_FAILURE を使うために stdlib.h をインクルード。libnotify を使うために、 libnotify/notify.h をインクルード。後は main 関数です。

libnotify を使うために、 notify_init() を呼び出します。引数はアプリケーション名なので、 autoconf 使っていれば PACKAGE_NAME なんかを使えばよいでしょう。ここでは、 char * で固定値にしています。

次に、notify_notification_new() で NotifyNotification クラスのオブジェクトを作成しています。第一引数は短い説明、第二引数は長い説明、そして第三引数はアイコン名です。/usr/share/icons 以下から適当に見繕って、接尾辞(pngなど)を取り除いたものを使っておけばよいでしょう。

$ find /usr/share/icons/gnome  | cut -f 8 -d "/" | sort -u

から探してみてください。

そして、 notify_notification_show() で表示します。第一引数は先ほど作成した NotifyNotifiction オプジェクト、エラーは無視するので第二引数は NULL にしています。

そして、libnotify は使わないので、 notify_uninit() するだけの簡単なプログラムです。

他にも、 action を追加したり、 notify_notification_close() で閉じたり、 notify_notification_update() で表示内容を変更したりできますが、必要になることはしばらくなさそう。

ビルドと実行は以下のとおりです。

$ make notify
cc -pthread -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libpng12    -lnotify -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0    notify.c   -o notify
$ ./notify 

したのほうになんか表示されて、そのまま下のバーに残ります。