gconf を使ってみる

gconfは、アプリケーションを終了しても残したいデータを保存するため、データベースに登録するアプリケーション。これまでは、"/etc"ディレクトリにシステム全体のファイルを、dotファイル(ピリオドではじまるファイル名)に各ユーザごとのデータを保存していた。でも、GNOMEでは.gconfというフォルダにxml形式で保存するようになっている。

基本的には、アプリケーションごとの初期設定値を保存することがほとんどなので、そんなに難しく考えずに、簡単なアプリを作ってみる。

今回は、gconf-helloというアプリで、gconfで指定する初期値(int型)の回数だけ"Hello World!"と表示してみる。

はじめに、プロジェクト用のディレクトリを作る。

$ mkdir gconf-hello
$ cd gconf-hello/

ソース作成。glib-hello.cをほぼそのまま。。。

$ cat gconf-hello.c 
#include <config.h>
#include <stdio.h>
#include <glib.h>
#include <glib/gi18n.h>
#include <gconf/gconf-client.h>

int
main (int argc, char* argv[])
{
	GConfClient* client;
	gint i, count;

	setlocale (LC_ALL, "");

	bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
	textdomain (GETTEXT_PACKAGE);

	client = gconf_client_get_default ();
	count = gconf_client_get_int (client, "/extra/gconf-hello/times", NULL);

	for (i = 0; i < count; i++)
	{
		printf (_("Hello, World!\n"));
	}
	return 0;
}

説明すべきなのは2点あって、

	GConfClient* client;

これは、GConfClient型のポインタ宣言して、後で利用する。

	client = gconf_client_get_default ();
	count = gconf_client_get_int (client, "/extra/gconf-hello/times", NULL);

これは、GConfClientのデフォルトを作成して、そこから"/extra/gconf-hello/times"の値(int型)を取得している。後の説明は不要だろう。

configure.ac の作成。

$ cat configure.ac 
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.63])
AC_INIT([gconf-hello], [0.0.1], [futoshi _at_ momonga-linux.org])
AC_CONFIG_SRCDIR([gconf-hello.c])
AC_CONFIG_HEADERS([config.h])

AM_INIT_AUTOMAKE([foreign 1.11])

# Checks for programs.
AC_PROG_CC
AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
IT_PROG_INTLTOOL
GETTEXT_PACKAGE=$PACKAGE
AC_SUBST(GETTEXT_PACKAGE)
AC_PATH_PROG(GCONFTOOL, gconftool-2)
AM_GCONF_SOURCE_2

# Checks for libraries.
PKG_CHECK_MODULES([GH], [glib-2.0 gconf-2.0])

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.
AC_CHECK_FUNCS([setlocale])

AC_CONFIG_FILES([Makefile po/Makefile.in])
AC_OUTPUT

変更点は二つ。

AC_PATH_PROG(GCONFTOOL, gconftool-2)
AM_GCONF_SOURCE_2

これは、gconftool-2の存在調査と、AM_GCONF_SOURCE_2というマクロですが、今回はschemasファイルを使わないので不要だと思う。(schemasファイルは別途書こうと思う)

PKG_CHECK_MODULES([GH], [glib-2.0 gconf-2.0])

こちらは、gconf_client_get_default()とgconf_client_get_int()を使うために必要。

後は、glib-gettextize intltoolize autoreconf等を使って、ja.poを作ってビルドインストールする。

$ gconf-hello
$

何も表示されなくて正解。

$ gconftool-2 --set /extra/gconf-hello/times 5 --type int
$ gconf-hello
今日は、世界!
今日は、世界!
今日は、世界!
今日は、世界!
今日は、世界!

intで5に設定すると5回表示される。

ということで、結構いい加減なgconfの説明は終わり。。。気が向いたら真面目に書こうと思う。