システムトレイをいじってみる 1/3

システムトレイをいじってみようと思います。
Windowsではタスクトレイですが、
Linuxではシステムトレイという呼称が一般的なようです。


GTKではGtkStatusIconというオブジェクトで扱うようですが、
StatusIconはそれなりに新しいGTK(2.10以降?)でないと対応していません。
以前はeggtrayiconというオブジェクトがあり、現在でも使っているアプリは多いようです。


ま、あまり互換性は気にせず、
トレイアイコンでのクリックの検出、メニューの表示などをやってみようと思います。


今日はとりあえずアイコンの表示だけ。(Gladeは使いません)
24x24pixくらいのアイコンを用意してください。
私はこんなのを使っています。


tray.c

#include

int main(int argc, char *argv[])
{
gtk_init(&argc, &argv);

GtkStatusIcon *icon;
icon = gtk_status_icon_new();
gtk_status_icon_set_from_file(icon, "icon.png");
gtk_status_icon_set_tooltip(icon, "StatusIcon Aplication");

gtk_main();

return 0;
}

うまく表示できましたか?
現状ではアプリの終了すら出来ないので、コンソールから起動して、
Ctl + C で終了してください^^;

参考


一応 Makefileも置いておきます。
フォルダにtray.cとMakefileとicon.png*1を入れて、コンソール上でmakeすれば、
フォルダ内にTrayApliが生成されます。


Makefile

CC = gcc
CFLAGS = `pkg-config --cflags gtk+-2.0`
LDFLAGS = `pkg-config --libs-only-L gtk+-2.0`
LIBS = `pkg-config --libs-only-l gtk+-2.0`
SRCS = tray.c
OBJS = $(SRCS:.c=.o)
PROGRAM = TrayApli
all: $(PROGRAM)
$(PROGRAM): $(OBJS) $(HDRS)
$(CC) $(OBJS) $(LDFLAGS) $(LIBS) -o $(PROGRAM)
clean:; rm -f *.o *~ $(PROGRAM)
### End of Makefile

$(CC)の前の空白はtab
`はバッククォート(日本語キーボードならshift + @)

*1:画像ファイルはコンパイル時ではなく実行時に読み込まれますが