GConf

GConfとは

GConfは、アプリケーションの設定を保存するためのシステムです。Microsoft Windowsのレジストリに似ていますが、よりベターな実装になっています。

設定可能な値の種類

  • 整数型
  • 浮動小数点型
  • 文字列
  • 論理値(TRUEまたはFALSE)
  • スキーマ型
  • リスト型(ネスト不可)
  • ペア型(ネスト不可)

GConfの利用手順

基本的にGConfClientを介して利用します。これは、非常に良くできたラッパーでGConfの初期化処理やエラー処理などの面倒を見てくれます。

GConfClientの取得

通常は、gconf_client_get_default()を使ってGConfClientを取得します。

  1. GConfClient *client;
  2. client = gconf_client_get_default()

監視させるディレクトリのセット

GConfClientに監視させるディレクトリをセットします。これは、ファイルシステム上のディレクトリではなく、GConfの仮想ディレクトリでいくつかの規則があります。

ディレクトリ名目的
/appsアプリケーションの設定を保存する
/desktopデスクトップ環境の設定を保存する
/systemシステムレベルの設定を保存する
/extra以上のカテゴリに分類できない特殊な設定を保存する。通常は、使用しない。

上記のディレクトリに直接、設定を保存することは避けるべきです。例えば、アプリケーションhogeのための設定であれば、/apps/hoge以下に設定を保存する様にしましょう。この場合、次の様にします。

  1. gconf_client_add_dir (client, "/apps/hoge", GCONF_CLIENT_PRELOAD_NONE, NULL);

一番目の引数は、適切なGConfClientを指定します。二番目の引数は、監視させるディレクトリです。三番目の引数は、事前に設定をキャッシュしておくかどうかを表すフラグで以下の三種類が指定可能です。

GCONF_CLIENT_PRELOAD_NONE事前にキャッシュしない
GCONF_CLIENT_PRELOAD_ONELEVEL指定したディレクトリ直下の設定のみキャッシュする
GCONF_CLIENT_PRELOAD_RECURSIVE再帰的にサブディレクトリの設定もキャッシュする。場合によっては非常に負荷がかかります。

設定値の取得

主に以下の関数を利用します。

gconf_client_get_int整数型
gconf_client_get_float浮動小数点型
gconf_client_get_string文字列
gconf_client_get_bool論理値型
gconf_client_get_schemaスキーマ型
gconf_client_get_listリスト型
gconf_client_get_pairペア型

設定値の設定

主に以下の関数を利用します。

gconf_client_set_int整数型
gconf_client_set_float浮動小数点型
gconf_client_set_string文字列
gconf_client_set_bool論理値型
gconf_client_set_schemaスキーマ型
gconf_client_set_listリスト型
gconf_client_set_pairペア型

注意事項

キー名に関する注意

基本的にASCIIコードの範囲で構成される文字列を使える。ただし、以下の文字は使えない。

  • (空白)
  • \t(タブ)
  • \r(キャリッジリターン)
  • \n(改行)
  • "
  • $
  • &
  • <
  • >
  • ,(カンマ)
  • +
  • =
  • #
  • !
  • (
  • )
  • '
  • |
  • {
  • }
  • [
  • ]
  • ?
  • ~(チルダ)
  • ;
  • %
  • \(バックスラッシュ)

GConf-2.10.0では、gconf/gconf.cの2573行で以下の様に定義されている。

  1. static const gchar invalid_chars[] = " \t\r\n\"$&<>,+=#!()'||{}[]?~`;%\\";

gconf_client_set_pairでGCONF_VALUE_STRINGをセットするには

  1. GConfClient *client;
  2. gchar *first;
  3. gchar *second;
  4. ... (それぞれの値がセットされた)
  5. gconf_client_set_pair (client, "/apps/hoge/key", GCONF_VALUE_STRING, GCONF_VALUE_STRING, &first, &second, NULL)

の様にgchar型へのポインタへのポインタを渡す。