Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/glibmm/ChangeLog,v
retrieving revision 1.189
diff -u -r1.189 ChangeLog
--- ChangeLog	7 Feb 2006 23:43:42 -0000	1.189
+++ ChangeLog	18 Feb 2006 20:47:21 -0000
@@ -1,3 +1,16 @@
+2006-02-18  Rob Page  <page.rob@gmail.com>
+
+	Wraps GKeyFile (Bug #330535)
+	* glib/glibmm.h: Added include of keyfile.h
+	* glib/glibmm/Makefile.am: Added keyfile.h
+	* glib/glibmm/containerhandle_shared.h: Added a TypeTraits
+	specialization for converting between bool and gboolean*.
+	* glib/src/Makefile_list_of_hg.am_fragment: Added keyfile.hg
+	to files_general_hg.
+	* glib/src/keyfile.hg: KeyFile header
+	* glib/src/keyfile.ccg: KeyFile implementation
+	* tools/m4/convert_glib.m4: Added a conversion for KeyFileFlags
+
 2006-02-07  Rob Page  <page.rob@gmail.com>
 
 	* glib/glibmm/ustring.h: fix a typo in the documenation for uppercase()
Index: glib/glibmm.h
===================================================================
RCS file: /cvs/gnome/glibmm/glib/glibmm.h,v
retrieving revision 1.4
diff -u -r1.4 glibmm.h
--- glib/glibmm.h	10 Oct 2004 21:03:41 -0000	1.4
+++ glib/glibmm.h	18 Feb 2006 20:47:22 -0000
@@ -38,6 +38,7 @@
 #include <glibmm/interface.h>
 #include <glibmm/iochannel.h>
 #include <glibmm/init.h>
+#include <glibmm/keyfile.h>
 #include <glibmm/streamiochannel.h>
 #include <glibmm/listhandle.h>
 #include <glibmm/main.h>
Index: glib/glibmm/Makefile.am
===================================================================
RCS file: /cvs/gnome/glibmm/glib/glibmm/Makefile.am,v
retrieving revision 1.7
diff -u -r1.7 Makefile.am
--- glib/glibmm/Makefile.am	11 Apr 2004 14:07:06 -0000	1.7
+++ glib/glibmm/Makefile.am	18 Feb 2006 20:47:22 -0000
@@ -62,6 +62,7 @@
   i18n.h \
   interface.h \
   iochannel.h \
+  keyfile.h \
   listhandle.h \
   main.h \
   miscutils.h \
Index: glib/glibmm/containerhandle_shared.h
===================================================================
RCS file: /cvs/gnome/glibmm/glib/glibmm/containerhandle_shared.h,v
retrieving revision 1.11
diff -u -r1.11 containerhandle_shared.h
--- glib/glibmm/containerhandle_shared.h	21 Jan 2005 19:26:04 -0000	1.11
+++ glib/glibmm/containerhandle_shared.h	18 Feb 2006 20:47:22 -0000
@@ -314,6 +314,36 @@
     { g_free(const_cast<CTypeNonConst>(str)); }
 };
 
+/** Specialization for bool
+ * @ingroup ContHelpers
+ */
+template <>
+struct TypeTraits<bool>
+{
+  typedef bool          CppType;
+  typedef gboolean*     CType;
+  typedef gboolean*     CTypeNonConst;
+
+  static CType to_c_type (CppType val) { return (int*)GINT_TO_POINTER(val); }
+  static CType to_c_type (CType ptr)   { return ptr;                        }  
+
+  static CppType to_cpp_type(CType ptr)
+  { 
+    if(ptr)
+    {
+	  //We use this for gboolean too, because it is actually an int.
+	  return GPOINTER_TO_INT(ptr);
+	}
+	else
+	  return CppType();
+  }
+
+  static void release_c_type(CType /* ptr */)
+  {
+
+  }
+};
+
 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
 
 
Index: glib/src/Makefile_list_of_hg.am_fragment
===================================================================
RCS file: /cvs/gnome/glibmm/glib/src/Makefile_list_of_hg.am_fragment,v
retrieving revision 1.2
diff -u -r1.2 Makefile_list_of_hg.am_fragment
--- glib/src/Makefile_list_of_hg.am_fragment	26 Sep 2004 07:49:25 -0000	1.2
+++ glib/src/Makefile_list_of_hg.am_fragment	18 Feb 2006 20:47:23 -0000
@@ -5,4 +5,4 @@
 
 files_posix_hg =
 files_win32_hg =
-files_general_hg = convert.hg date.hg fileutils.hg iochannel.hg markup.hg module.hg optioncontext.hg optionentry.hg optiongroup.hg shell.hg spawn.hg thread.hg unicode.hg
+files_general_hg = convert.hg date.hg fileutils.hg iochannel.hg keyfile.hg markup.hg module.hg optioncontext.hg optionentry.hg optiongroup.hg shell.hg spawn.hg thread.hg unicode.hg
Index: glib/src/keyfile.ccg
===================================================================
RCS file: glib/src/keyfile.ccg
diff -N glib/src/keyfile.ccg
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ glib/src/keyfile.ccg	18 Feb 2006 20:47:23 -0000
@@ -0,0 +1,185 @@
+/* Copyright 2006 The gtkmm Development Team
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+namespace Glib
+{
+
+/**** Glib::KeyFile ********************************************************/
+
+KeyFile::KeyFile(){
+  gobject_ = g_key_file_new();
+  glibmm_generated = true;
+}
+
+KeyFile::KeyFile(GKeyFile* castitem, bool delete_c_instance){
+  gobject_ = castitem;
+  glibmm_generated = delete_c_instance;
+}
+
+KeyFile::~KeyFile(){
+  if (glibmm_generated)
+  	g_key_file_free(gobject_);
+}
+
+bool KeyFile::load_from_data(const Glib::ustring& data, KeyFileFlags flags){
+  GError *error = 0;
+  bool retvalue = g_key_file_load_from_data(gobj(), data.c_str(), data.bytes(), ((GKeyFileFlags)(flags)), &(error));
+  if(error) :: Glib::Error::throw_exception(error);
+  return retvalue;
+}
+
+bool KeyFile::load_from_data_dirs(const std::string& file, std::string& full_path, KeyFileFlags flags){
+  GError *error = 0;
+  char *full_path_c;
+  bool retvalue = g_key_file_load_from_data_dirs(gobj(), file.c_str(), &full_path_c, ((GKeyFileFlags)(flags)), &(error));
+  full_path = Glib::convert_return_gchar_ptr_to_ustring(full_path_c);
+  if(error) :: Glib::Error::throw_exception(error);
+  return retvalue;
+}
+
+Glib::ustring KeyFile::to_data(){
+  GError *error = 0;
+  gsize size;
+  Glib::ustring retvalue = Glib::convert_return_gchar_ptr_to_ustring(g_key_file_to_data(gobj(), &size, &error));
+  if(error) :: Glib::Error::throw_exception(error);
+  return retvalue;
+}
+
+Glib::ArrayHandle<Glib::ustring> KeyFile::get_groups(){
+  gchar** group_names      = 0;
+  gsize   number_of_groups = 0;
+  group_names = g_key_file_get_groups(gobj(), &number_of_groups);
+  return Glib::ArrayHandle<Glib::ustring>(group_names, number_of_groups, Glib::OWNERSHIP_DEEP);
+}
+
+Glib::ArrayHandle<Glib::ustring> KeyFile::get_keys(const Glib::ustring& group_name){
+  gchar** key_names      = 0;
+  gsize   number_of_keys = 0;
+  GError* error          = 0;
+  key_names = g_key_file_get_keys(gobj(), group_name.c_str(), &number_of_keys, &error);
+  if(error)
+    Glib::Error::throw_exception(error);
+  return Glib::ArrayHandle<Glib::ustring>(key_names, number_of_keys, Glib::OWNERSHIP_DEEP);
+}
+
+Glib::ustring KeyFile::get_locale_string(const Glib::ustring& group_name, const Glib::ustring& key)
+{
+  GError *error = 0;
+  Glib::ustring retvalue = Glib::convert_return_gchar_ptr_to_ustring(g_key_file_get_locale_string(gobj(), group_name.c_str(), key.c_str(), 0, &(error)));
+  if(error) ::Glib::Error::throw_exception(error);
+  return retvalue;
+}
+
+int KeyFile::get_integer(const Glib::ustring& key)
+{
+  GError *error = 0;
+  int retvalue = g_key_file_get_integer(gobj(), 0, key.c_str(), &(error));
+  if(error) ::Glib::Error::throw_exception(error);
+  return retvalue;
+}
+
+Glib::ArrayHandle<Glib::ustring> KeyFile::get_string_list(const Glib::ustring& group_name, const Glib::ustring& key){
+  gchar** string_list  = 0;
+  gsize length_of_list = 0;
+  GError* error        = 0;
+  string_list = g_key_file_get_string_list(gobj(), group_name.c_str(), key.c_str(),  &length_of_list, &error);
+  if(error)
+    Glib::Error::throw_exception(error);
+  return Glib::ArrayHandle<Glib::ustring>(string_list, length_of_list, Glib::OWNERSHIP_DEEP);
+}
+
+Glib::ArrayHandle<Glib::ustring> KeyFile::get_locale_string_list(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ustring& locale){
+  gchar** string_list  = 0;
+  gsize length_of_list = 0; 
+  GError* error        = 0;
+  string_list = g_key_file_get_locale_string_list(gobj(), group_name.c_str(), key.c_str(), locale.c_str(), &length_of_list, &error);
+  if(error)
+    Glib::Error::throw_exception(error);
+  return Glib::ArrayHandle<Glib::ustring>(string_list, length_of_list, Glib::OWNERSHIP_DEEP);
+}
+
+Glib::ArrayHandle<bool> KeyFile::get_boolean_list(const Glib::ustring& group_name, const Glib::ustring& key){
+  gboolean* bool_list  = 0;
+  gsize length_of_list = 0; 
+  GError* error        = 0;
+  bool_list = g_key_file_get_boolean_list(gobj(), group_name.c_str(), key.c_str(), &length_of_list, &error);
+  if(error)
+    Glib::Error::throw_exception(error);
+  return Glib::ArrayHandle<bool>(&bool_list, length_of_list, Glib::OWNERSHIP_DEEP);
+}
+
+Glib::ArrayHandle<int> KeyFile::get_integer_list(const Glib::ustring& group_name, const Glib::ustring& key){
+  gint* integer_list   = 0;
+  gsize length_of_list = 0; 
+  GError* error        = 0;
+  integer_list = g_key_file_get_integer_list(gobj(), group_name.c_str(), key.c_str(), &length_of_list, &error);
+  if(error)
+    Glib::Error::throw_exception(error);
+  return Glib::ArrayHandle<int>(integer_list, length_of_list, Glib::OWNERSHIP_DEEP);
+}
+
+void KeyFile::set_string_list(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ArrayHandle<Glib::ustring>& list){
+  gsize length_of_list = list.size();
+  g_key_file_set_string_list(gobj(), group_name.c_str(), key.c_str(), list.data(), length_of_list);
+}
+
+void KeyFile::set_locale_string_list(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ustring& locale, const Glib::ArrayHandle<Glib::ustring>& list){
+  gsize length_of_list = list.size();
+  g_key_file_set_locale_string_list(gobj(), group_name.c_str(), key.c_str(), locale.c_str(), list.data(), length_of_list);
+}
+
+void KeyFile::set_integer_list(const Glib::ustring& group_name, const Glib::ustring& key, Glib::ArrayHandle<int>& list){
+  gsize length_of_list = list.size();
+  g_key_file_set_integer_list(gobj(), group_name.c_str(), key.c_str(), const_cast<int*>(list.data()), length_of_list);
+}
+
+void KeyFile::set_boolean_list(const Glib::ustring& group_name, const Glib::ustring& key, Glib::ArrayHandle<bool>& list){
+  gsize length_of_list = list.size();
+  g_key_file_set_boolean_list(gobj(), group_name.c_str(), key.c_str(), *(list.data()), length_of_list);
+}
+
+Glib::ustring KeyFile::get_comment()
+{
+  GError *error = 0;
+  Glib::ustring retvalue = Glib::convert_return_gchar_ptr_to_ustring(g_key_file_get_comment(gobj(), 0, 0, &(error)));
+  if(error) ::Glib::Error::throw_exception(error);
+  return retvalue;
+}
+
+Glib::ustring KeyFile::get_comment(const Glib::ustring& group_name)
+{
+  GError *error = 0;
+  Glib::ustring retvalue = Glib::convert_return_gchar_ptr_to_ustring(g_key_file_get_comment(gobj(), group_name.c_str(), 0, &(error)));
+  if(error) ::Glib::Error::throw_exception(error);
+  return retvalue;
+}
+
+void KeyFile::set_comment(const Glib::ustring& comment)
+{
+  GError *error = 0;
+  g_key_file_set_comment(gobj(), 0, 0, comment.c_str(), &(error));
+  if(error) ::Glib::Error::throw_exception(error);
+}
+
+void KeyFile::set_comment(const Glib::ustring& group_name, const Glib::ustring& comment)
+{
+  GError *error = 0;
+  g_key_file_set_comment(gobj(), group_name.c_str(), 0, comment.c_str(), &(error));
+  if(error) ::Glib::Error::throw_exception(error);
+}
+
+}
Index: glib/src/keyfile.hg
===================================================================
RCS file: glib/src/keyfile.hg
diff -N glib/src/keyfile.hg
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ glib/src/keyfile.hg	18 Feb 2006 20:47:23 -0000
@@ -0,0 +1,273 @@
+/* Copyright(C) 2006 The gtkmm Development Team
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or(at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+_DEFS(glibmm,glib)
+
+#include <glibmm/ustring.h>
+#include <glibmm/arrayhandle.h>
+#include <glibmm/error.h>
+#include <glibmm/utility.h>
+#include <glib/gkeyfile.h>
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+extern "C" { typedef struct _GKeyFile GKeyFile; }
+#endif
+
+namespace Glib
+{
+
+  _WRAP_ENUM(KeyFileFlags, GKeyFileFlags, NO_GTYPE)
+
+  /** Exception class for KeyFile errors.
+   */
+  _WRAP_GERROR(KeyFileError, GKeyFileError, G_KEY_FILE_ERROR, NO_GTYPE)
+
+class KeyFile
+{
+  _CLASS_GENERIC(KeyFile, GKeyFile)
+public:
+
+  /** Creates a new, empty KeyFile object.
+   */
+  KeyFile();
+
+  /** Destructor
+   */
+  ~KeyFile();
+  _IGNORE(g_key_file_free)
+
+  /** Creates a glibmm KeyFile wrapper for a GKeyFile object.
+   * Note, when using this that when the wrapper is deleted, 
+   * it will not automatically deleted the GKeyFile unless you
+   * set the delete_c_instance boolean to true.
+   * @param castitem The C instance to wrap
+   * @param delete_c_instance If the C instance should be deleted when
+   * the wrapper is deleted.
+   */
+  KeyFile(GKeyFile* castitem, bool delete_c_instance = false);
+
+public:
+	
+  _WRAP_METHOD(bool load_from_file(const std::string& filename, KeyFileFlags flags), g_key_file_load_from_file, errthrow)
+
+  /** Loads a KeyFile from memory
+   * @param data The data to use as a KeyFile
+   * @param flags Bitwise combination of the flags to use for the KeyFile
+   * @return true if the KeyFile was successfully loaded, false otherwise
+   * @throw Glib::KeyFileError
+   */
+
+  bool load_from_data(const Glib::ustring& data, KeyFileFlags flags);
+  _IGNORE(g_key_file_load_from_data)
+
+  /** Looks for a KeyFile named @a file in the paths returned from
+   * g_get_user_data_dir() and g_get_system_data_dirs() and loads them
+   * into the keyfile object, placing the full path to the file in
+   * @a full_path.
+   * @param file The file to search for
+   * @param full_path Return location for a string containing the full path of the file
+   * @param flags Bitwise combination of the flags to use for the KeyFile
+   * @return true if the KeyFile was successfully loaded, false otherwise
+   * @throw Glib::KeyFileError
+   * @throw Glib::FileError
+   */
+  bool load_from_data_dirs(const std::string& file, std::string& full_path, KeyFileFlags flags);
+  _IGNORE(g_key_file_load_from_data_dirs)
+
+  /** Outputs the KeyFile as a string
+   * @return A string object holding the contents of KeyFile
+   */
+  Glib::ustring to_data();
+  _IGNORE(g_key_file_to_data)
+
+  _WRAP_METHOD(Glib::ustring get_start_group(), g_key_file_get_start_group)
+	
+  /** Gets a list of all groups in the KeyFile
+   * @returns A list containing the names of the groups
+   */
+  Glib::ArrayHandle<Glib::ustring> get_groups();
+  _IGNORE(g_key_file_get_groups)
+
+  /** Gets a list of all keys from the group @a group_name.
+   * @param group_name The name of a group
+   * @returns A list containing the names of the keys in @a group_name
+   */
+  Glib::ArrayHandle<Glib::ustring> get_keys(const Glib::ustring& group_name);
+  _IGNORE(g_key_file_get_keys)
+
+  _WRAP_METHOD(bool has_group(const Glib::ustring& group_name), g_key_file_has_group)
+  _WRAP_METHOD(bool has_key(const Glib::ustring& group_name, const Glib::ustring& key), g_key_file_has_key, errthrow)
+	
+  _WRAP_METHOD(Glib::ustring get_value(const Glib::ustring& group_name, const Glib::ustring& key), g_key_file_get_value, errthrow)
+  _WRAP_METHOD(Glib::ustring get_string(const Glib::ustring& group_name, const Glib::ustring& key), g_key_file_get_string, errthrow)
+
+  /** Gets the value associated with @a key under @a group_name translated
+  * into the current locale.
+  */
+  Glib::ustring get_locale_string(const Glib::ustring& group_name, const Glib::ustring& key);
+
+  _WRAP_METHOD(Glib::ustring get_locale_string(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ustring& locale), g_key_file_get_locale_string, errthrow)
+  _WRAP_METHOD(bool get_boolean(const Glib::ustring& group_name, const Glib::ustring& key), g_key_file_get_boolean, errthrow)
+
+  /** Gets the value in the first group, under @a key, interpreting it as
+   * an integer.
+   * @param key The name of the key
+   * @return The value of @a key as an integer
+   * @throws Glib::KeyFileError
+   */
+  int get_integer(const Glib::ustring& key);
+
+  _WRAP_METHOD(int get_integer(const Glib::ustring& group_name, const Glib::ustring& key), g_key_file_get_integer, errthrow)
+
+  /** Returns the values associated with @a key under @a group_name
+   * @param group_name The name of a group
+   * @param key The name of a key
+   * @return A list containing the values requested
+   * @throws Glib::KeyFileError
+   */
+  Glib::ArrayHandle<Glib::ustring> get_string_list(const Glib::ustring& group_name, const Glib::ustring& key);
+  _IGNORE(g_key_file_get_string_list)
+	
+  /** Returns the values associated with @a key under @a group_name
+   * translated into the current locale, if available.
+   * @param group_name The name of a group
+   * @param key The name of a key
+   * @return A list containing the values requested
+   * @throws Glib::KeyFileError
+   */
+  Glib::ArrayHandle<Glib::ustring> get_locale_string_list(const Glib::ustring& group_name, const Glib::ustring& key);
+	
+  /** Returns the values associated with @a key under @a group_name
+   * translated into @a locale, if available.
+   * @param group_name The name of a group
+   * @param key The name of a key
+   * @param locale The name of a locale
+   * @return A list containing the values requested
+   * @throws Glib::KeyFileError
+   */
+  Glib::ArrayHandle<Glib::ustring> get_locale_string_list(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ustring& locale);
+  _IGNORE(g_key_file_get_locale_string_list)
+
+  /** Returns the values associated with @a key under @a group_name
+   * @param group_name The name of a group
+   * @param key The name of a key
+   * @return A list of booleans
+   * @throws Glib::KeyFileError
+   */
+  Glib::ArrayHandle<bool> get_boolean_list(const Glib::ustring& group_name, const Glib::ustring& key);
+  _IGNORE(g_key_file_get_boolean_list)
+
+  /** Returns the values associated with @a key under @a group_name
+   * @param group_name The name of a group
+   * @param key The name of a key
+   * @return A list of integers
+   * @throws Glib::KeyFileError
+   */
+  Glib::ArrayHandle<int> get_integer_list(const Glib::ustring& group_name, const Glib::ustring& key);
+  _IGNORE(g_key_file_get_integer_list)
+
+  /** Get comment from top of file
+   * @return The comment
+   */
+  Glib::ustring get_comment();
+
+  /** Get comment from above a group
+   * @param group_name The group
+   * @return The comment
+   */
+  Glib::ustring get_comment(const Glib::ustring& group_name);
+
+  _WRAP_METHOD(Glib::ustring get_comment(const Glib::ustring& group_name, const Glib::ustring& key), g_key_file_get_comment, errthrow)
+	
+  _WRAP_METHOD(void set_list_separator(gchar separator), g_key_file_set_list_separator)
+  _WRAP_METHOD(void set_value(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ustring& value), g_key_file_set_value)
+  _WRAP_METHOD(void set_string(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ustring& string), g_key_file_set_string)
+  _WRAP_METHOD(void set_locale_string(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ustring& locale, const Glib::ustring& string), g_key_file_set_locale_string)
+  _WRAP_METHOD(void set_boolean(const Glib::ustring& group_name, const Glib::ustring& key, bool value), g_key_file_set_boolean)
+  _WRAP_METHOD(void set_integer(const Glib::ustring& group_name, const Glib::ustring& key, int value), g_key_file_set_integer)
+	
+  /** Sets a list of string values for @a key under @a group_name. If 
+   * key cannot be found it is created. If @a group_name cannot be found
+   * it is created.
+   * @param group_name The name of a group
+   * @param key The name of a key
+   * @param list A list holding objects of type Glib::ustring
+   */
+  void set_string_list(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ArrayHandle<Glib::ustring>& list);
+  _IGNORE(g_key_file_set_string_list)
+
+  /** Sets a list of string values for the @a key under @a group_name and marks
+   * them as being for @a locale. If the @a key or @a group_name cannot be
+   * found, they are created.
+   * @param group_name The name of a group
+   * @param key The name of a key
+   * @param locale A locale
+   * @param list A list holding objects of type Glib::ustring
+   */
+  void set_locale_string_list(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ustring& locale, const Glib::ArrayHandle<Glib::ustring>& list);
+  _IGNORE(g_key_file_set_locale_string_list)
+
+  /** Sets a list of booleans for the @a key under @a group_name.
+   * If either the @a key or @a group_name cannot be found they are created
+   * @param group_name The name of a group
+   * @param key The name of a key
+   * @param list A list holding object of type bool
+   */
+  void set_boolean_list(const Glib::ustring& group_name, const Glib::ustring& key, Glib::ArrayHandle<bool>& list);
+  _IGNORE(g_key_file_set_boolean_list)
+	
+  /** Sets a list of integers for the @a key under @a group_name.
+   * If either the @a key or @a group_name cannot be found they are created
+   * @param group_name The name of a group
+   * @param key The name of a key
+   * @param list A list holding object of type int
+   */
+  void set_integer_list(const Glib::ustring& group_name, const Glib::ustring& key, Glib::ArrayHandle<int>& list);
+  _IGNORE(g_key_file_set_integer_list)
+
+  /** Places @a comment at the start of the file, before the first group.
+   * @param comment The Comment
+   */
+  void set_comment(const Glib::ustring& comment);
+
+  /** Places @a comment above @a group_name.
+   * @param group_name The Group the comment should be above
+   * @param comment The comment
+   */
+  void set_comment(const Glib::ustring& group_name, const Glib::ustring& comment);
+
+  /** Places a comment above @a key from @a group_name.
+   * @param key Key comment should be above
+   * @param group_name Group comment is in
+   * @param comment The comment
+   */
+  _WRAP_METHOD(void set_comment(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ustring& comment), g_key_file_set_comment, errthrow)
+
+  _WRAP_METHOD(void remove_comment(const Glib::ustring& group_name, const Glib::ustring& key), g_key_file_remove_comment, errthrow)
+  _WRAP_METHOD(void remove_key(const Glib::ustring& group_name, const Glib::ustring& key), g_key_file_remove_key, errthrow)
+  _WRAP_METHOD(void remove_group(const Glib::ustring& group_name), g_key_file_remove_group, errthrow)
+
+  GKeyFile*       gobj()       { return gobject_; }
+  const GKeyFile* gobj() const { return gobject_; }
+
+protected:
+  GKeyFile* gobject_;
+  bool glibmm_generated;
+};
+
+} // namespace Glib
+
Index: tools/m4/convert_glib.m4
===================================================================
RCS file: /cvs/gnome/glibmm/tools/m4/convert_glib.m4,v
retrieving revision 1.4
diff -u -r1.4 convert_glib.m4
--- tools/m4/convert_glib.m4	17 Oct 2004 20:22:35 -0000	1.4
+++ tools/m4/convert_glib.m4	18 Feb 2006 20:47:24 -0000
@@ -22,6 +22,7 @@
 _CONV_GLIB_ENUM(IOCondition)
 _CONV_GLIB_ENUM(SeekType)
 _CONV_GLIB_ENUM(OptionArg)
+_CONV_GLIB_ENUM(KeyFileFlags)
 
 _CONVERSION(`gunichar&',`gunichar*',`&($3)')
 _CONVERSION(`gsize&',`gsize*',`&($3)')
