システムトレイをいじってみる 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が生成されます。
MakefileCC = 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
`はバッククォート(日本語キーボードならshift + @)