From: Yavor Doganov <yavor@gnu.org>
Date: Tue, 9 Oct 2018 22:09:34 +0300
Subject: Port to GSettings.

---
 configure.ac                         |   8 +-
 po/POTFILES.in                       |   1 +
 src/Makefile.am                      |  11 +-
 src/btnbox.c                         |   3 +-
 src/global.h                         |   6 +-
 src/grdesktop.convert                |  25 +++
 src/grdesktop.schemas                |  89 ----------
 src/main.c                           |  11 +-
 src/options.c                        | 335 ++++++++++++++++++++++-------------
 src/org.nongnu.grdesktop.gschema.xml | 105 +++++++++++
 10 files changed, 363 insertions(+), 231 deletions(-)
 create mode 100644 src/grdesktop.convert
 delete mode 100644 src/grdesktop.schemas
 create mode 100644 src/org.nongnu.grdesktop.gschema.xml

--- grdesktop-0.23+d040330.orig/configure.ac
+++ grdesktop-0.23+d040330/configure.ac
@@ -46,18 +46,14 @@
 AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["${GETTEXT_PACKAGE}"], [gettext domain])
 
 dnl Searching for GTK+ 2 includes/libs and export compiler flags
-PKG_CHECK_MODULES(GTK2, [gtk+-2.0 gconf-2.0], HAVE_GTK=yes, HAVE_GTK=no)
+PKG_CHECK_MODULES(GTK2, [gtk+-2.0], HAVE_GTK=yes, HAVE_GTK=no)
 if test "$HAVE_GTK" = "no"; then
 	AC_MSG_ERROR([cannot find GTK+ 2.0!])
 fi
 AC_SUBST(GTK2_CFLAGS)
 AC_SUBST(GTK2_LIBS)
 
-AC_PATH_PROG(GCONFTOOL, gconftool-2, no)
-if test "$GCONFTOOL" = "no"; then
-	AC_MSG_ERROR([cannot find gconf 2.0!])
-fi
-AM_GCONF_SOURCE_2
+GLIB_GSETTINGS
 
 AC_CHECK_PROG(rdesktop, rdesktop, "yes", "no")
 if test "$rdesktop" = "no"; then
--- grdesktop-0.23+d040330.orig/po/POTFILES.in
+++ grdesktop-0.23+d040330/po/POTFILES.in
@@ -6,3 +6,4 @@
 src/run.c
 src/srvsel.c
 src/sshbox.c
+src/org.nongnu.grdesktop.gschema.xml
--- grdesktop-0.23+d040330.orig/src/Makefile.am
+++ grdesktop-0.23+d040330/src/Makefile.am
@@ -44,9 +44,9 @@
 grdesktopdir = $(datadir)/applications
 grdesktop_DATA = grdesktop.desktop
 
-schemadir = $(sysconfdir)/gconf/schemas
-schema_DATA = grdesktop.schemas
-schema_source_data = $(schema_DATA)
+gsettings_SCHEMAS = org.nongnu.grdesktop.gschema.xml
+
+@GSETTINGS_RULES@
 
 install-data-local:
 	if test -z "$(DESTDIR)"; then \
@@ -55,5 +55,5 @@
 
 EXTRA_DIST = \
 	$(grdesktop_DATA) \
-	$(schema_DATA)
+	$(gsettings_SCHEMAS)
 
--- grdesktop-0.23+d040330.orig/src/btnbox.c
+++ grdesktop-0.23+d040330/src/btnbox.c
@@ -87,8 +87,7 @@
 	if(child_pid != 0)
 		return;
 
-	gconf_client_set_bool(gcfg, GCONF_BASE"/showopts",
-		iSHASH("showopts"), NULL);
+	g_settings_set_boolean(gcfg, "showopts", iSHASH("showopts"));
 
 	gtk_main_quit();
 }
--- grdesktop-0.23+d040330.orig/src/global.h
+++ grdesktop-0.23+d040330/src/global.h
@@ -24,7 +24,6 @@
 #define __CONFIG_H__
 
 #include <gtk/gtk.h>
-#include <gconf/gconf-client.h>
 #include <stdlib.h>
 #include <stdio.h>
 
@@ -65,15 +64,13 @@
 #define KBPATH "/usr/local/share/rdesktop/keymaps/"
 #endif
 
-#define GCONF_BASE "/apps/grdesktop/options"
-
 GList *hostnames;
 GList *rdp_protocols;
 GList *screensize;
 GList *colors;
 GList *sound_options;
 GHashTable *config;
-GConfClient *gcfg;
+GSettings *gcfg;
 
 /* these widgets are used global */
 GtkWidget *window_main;
--- grdesktop-0.23+d040330.orig/src/grdesktop.schemas
+++ /dev/null
@@ -1,89 +0,0 @@
-<gconfschemafile>
-	<schemalist>
-		<schema>
-			<key>/schemas/apps/grdesktop/options/bitmapupd</key>
-			<applyto>/apps/grdesktop/options/bitmapupd</applyto>
-			<owner>grdesktop</owner>
-			<type>bool</type>
-			<default>0</default>
-			<locale name="C">
-				<short>Force bitmap updates</short>
-				<long>Force rdesktop to replaint bitmap updates.</long>
-			</locale>
-		</schema>
-		<schema>
-			<key>/schemas/apps/grdesktop/options/clientname</key>
-			<applyto>/apps/grdesktop/options/clientname</applyto>
-			<owner>grdesktop</owner>
-			<type>string</type>
-			<locale name="C">
-				<short>Fake clientname</short>
-				<long>Fake the local clientname. Used, if the terminal server
-				runs in user-mode.
-				</long>
-			</locale>
-		</schema>
-		<schema>
-			<key>/schemas/apps/grdesktop/options/colorsize</key>
-			<applyto>/apps/grdesktop/options/colorsize</applyto>
-			<owner>grdesktop</owner>
-			<type>int</type>
-			<default>0</default>
-			<locale name="C">
-				<short>Colorsize for remote server.</short>
-				<long>Define the available colors on the remote server. This
-				value is based on the selection box in grdesktop.
-				</long>
-			</locale>
-		</schema>
-		<schema>
-			<key>/schemas/apps/grdesktop/options/domain</key>
-			<applyto>/apps/grdesktop/options/domain</applyto>
-			<owner>grdesktop</owner>
-			<type>string</type>
-			<locale name="C">
-				<short>Domainname to use.</short>
-				<long>Define the Windows-Domain on which rdesktop
-				should default login.
-				</long>
-			</locale>
-		</schema>
-		<schema>
-			<key>/schemas/apps/grdesktop/options/geometry</key>
-			<applyto>/apps/grdesktop/options/geometry</applyto>
-			<owner>grdesktop</owner>
-			<type>string</type>
-			<default>640x480</default>
-			<locale name="C">
-				<short>Windowssize of rdesktop</short>
-				<long>Rdesktop use this windowsize for connection to the
-				remote host.
-				</long>
-			</locale>
-		</schema>
-		<schema>
-			<key>/schemas/apps/grdesktop/options/hidewmdecoration</key>
-			<applyto>/apps/grdesktop/options/hidewmdecoration</applyto>
-			<owner>grdesktop</owner>
-			<type>bool</type>
-			<default>0</default>
-			<locale name="C">
-				<short>Hide the window manager decoration</short>
-				<long>Don't display the decoration (borders, icons, ...) from the
-				current window manager.
-				</long>
-			</locale>
-		</schema>
-		<schema>
-			<key>/schemas/apps/grdesktop/options/hostnames</key>
-			<applyto>/apps/grdesktop/options/hostnames</applyto>
-			<owner>grdesktop</owner>
-			<type>list</type>
-			<list_type>string</list_type>
-			<locale name="C">
-				<short>Last used hostnames</short>
-				<long>Store the last ten hostnames for hostnames combobox.</long>
-			</locale>
-		</schema>
-	</schemalist>
-</gconfschemafile>
--- grdesktop-0.23+d040330.orig/src/main.c
+++ grdesktop-0.23+d040330/src/main.c
@@ -46,8 +46,7 @@
 }
 
 void destroy(GtkWidget *widget, gpointer data) {
-	gconf_client_set_bool(gcfg, GCONF_BASE"/showopts",
-		iSHASH("showopts"), NULL);
+	g_settings_set_boolean(gcfg, "showopts", iSHASH("showopts"));
 
 	gtk_main_quit();
 }
@@ -177,8 +176,7 @@
 	gtk_window_set_default_icon_from_file(icon, NULL);
 	g_free(dir);
 	g_free(icon);
-	gconf_init(argc, argv, NULL);
-	gcfg = gconf_client_get_default();
+	gcfg = g_settings_new("org.nongnu.grdesktop");
 	
 	while((c = getopt(argc, argv, "shv")) != -1) {
 		switch(c) {
--- grdesktop-0.23+d040330.orig/src/options.c
+++ grdesktop-0.23+d040330/src/options.c
@@ -208,7 +208,7 @@
 }
 
 gint loadServers() {
-	GSList *names;
+	gchar **names;
 	gint count, i;
 
 	if(g_list_length(hostnames) != 0) {	/* empty the glist */
@@ -219,14 +219,14 @@
 		}
 	}
 
-	names = gconf_client_get_list(gcfg, GCONF_BASE"/hostnames",
-		GCONF_VALUE_STRING, NULL);
-	count = g_slist_length(names);
+	names = g_settings_get_strv(gcfg, "hostnames");
+	count = g_strv_length(names);
 	for(i=0; i<count; i++) {
 		gchar *name;
-		name = g_slist_nth_data(names, i);
+		name = names[i];
 		hostnames = g_list_append(hostnames, g_strdup(name));
 	}
+	g_strfreev(names);
 
 	if(g_list_length(hostnames) == 0)
 		return(1);
@@ -234,7 +234,8 @@
 }
 
 gint saveServers(gchar *newitem) {
-	GList *tmplist = NULL;
+	GList *walk, *tmplist = NULL;
+	gchar **names;
 	gint i, max=0;
 	guint count;
 
@@ -262,86 +263,131 @@
 		tmplist = g_list_append(tmplist, item);
 	}
 
-	gconf_client_set_list(gcfg, GCONF_BASE"/hostnames",
-		GCONF_VALUE_STRING, (GSList*)tmplist, NULL);
+	names = g_new0(gchar *, g_list_length(tmplist) + 1);
+	for (i = 0, walk = tmplist; walk; walk = walk->next)
+	        names[i++] = g_strdup(walk->data);
+
+	names[i] = NULL;
+
+	g_settings_set_strv(gcfg, "hostnames", (const gchar**)names);
+	g_strfreev(names);
 
 	return(0);
 }
 
+
 gint loadOptions() {
-	GSList *values;
+	gchar *value;
 	gint i;
-	gint count;
 
-	values = gconf_client_all_entries(gcfg, GCONF_BASE, NULL);
-	count = g_slist_length(values);
-	for(i=0; i<count; i++) {
-		GConfEntry *item;
-		GConfValue *typ;
-		gchar *value;
-		gchar **path = NULL;
-		gint y = 0;
-
-		item = g_slist_nth_data(values, i);
-		typ = gconf_entry_get_value(item);
-		if(typ == NULL) {
-#ifdef _DEBUG_
-			g_warning("Gconf item \"%s\" is unassigned!",
-				gconf_entry_get_key(item));
-#endif
-			continue;
-		}
-
-		path = g_strsplit(gconf_entry_get_key(item), "/", 0);
-		while(path[y] != NULL)
-			y++;
-
-		if(!g_ascii_strcasecmp(path[y-1], "hostnames")) {
-			if(path != NULL)
-				g_strfreev(path);
-			continue;
-		}
-
-		switch(typ->type) {
-		case GCONF_VALUE_STRING:
-			value = g_strdup_printf("%s",
-				gconf_client_get_string(gcfg, 
-				gconf_entry_get_key(item), NULL));
-			break;
-		case GCONF_VALUE_INT:
-			value = g_strdup_printf("%d",
-				gconf_client_get_int(gcfg, 
-				gconf_entry_get_key(item), NULL));
-			break;
-		case GCONF_VALUE_FLOAT:
-			value = g_strdup_printf("%f",
-				gconf_client_get_float(gcfg, 
-				gconf_entry_get_key(item), NULL));
-			break;
-		case GCONF_VALUE_BOOL:
-			value = g_strdup_printf("%d",
-				gconf_client_get_bool(gcfg, 
-				gconf_entry_get_key(item), NULL));
-			break;
-		default:
-			g_warning("Unsupported gconf value type (%d)",
-				typ->type);
-			continue;
-		}
-		
-#ifdef _DEBUG_
-		g_warning("Option: %s->%s", path[y-1], value);
-#endif
-
-		g_hash_table_insert(config, g_strdup(path[y-1]),
-			g_strdup(value));
-
-		if(path != NULL)
-			g_strfreev(path);
-	}
+	i = g_settings_get_boolean(gcfg, "bitmapupd");
+	value = g_strdup_printf("%d", i);
+	g_hash_table_insert(config, g_strdup("bitmapupd"), g_strdup(value));
+	g_free(value);
+
+	value = g_settings_get_string(gcfg, "clientname");
+	g_hash_table_insert(config, g_strdup("clientname"), g_strdup(value));
+	g_free(value);
+
+	i = g_settings_get_int(gcfg, "colorsize");
+	value = g_strdup_printf("%d", i);
+	g_hash_table_insert(config, g_strdup("colorsize"), g_strdup(value));
+	g_free(value);
+
+	value = g_settings_get_string(gcfg, "username");
+	g_hash_table_insert(config, g_strdup("username"), g_strdup(value));
+	g_free(value);
+
+	value = g_settings_get_string(gcfg, "password");
+	g_hash_table_insert(config, g_strdup("password"), g_strdup(value));
+	g_free(value);
+
+	i = g_settings_get_boolean(gcfg, "savepw");
+	value = g_strdup_printf("%d", i);
+	g_hash_table_insert(config, g_strdup("savepw"), g_strdup(value));
+	g_free(value);
+
+	value = g_settings_get_string(gcfg, "domain");
+	g_hash_table_insert(config, g_strdup("domain"), g_strdup(value));
+	g_free(value);
+
+	value = g_settings_get_string(gcfg, "geometry");
+	g_hash_table_insert(config, g_strdup("geometry"), g_strdup(value));
+	g_free(value);
+
+	i = g_settings_get_boolean(gcfg, "hidewmdecoration");
+	value = g_strdup_printf("%d", i);
+	g_hash_table_insert(config, g_strdup("hidewmdecoration"),
+	                    g_strdup(value));
+	g_free(value);
+
+	i = g_settings_get_boolean(gcfg, "showopts");
+	value = g_strdup_printf("%d", i);
+	g_hash_table_insert(config, g_strdup("showopts"), g_strdup(value));
+	g_free(value);
+
+	i = g_settings_get_int(gcfg, "rdp-protocol");
+	value = g_strdup_printf("%d", i);
+	g_hash_table_insert(config, g_strdup("rdp_protocol"), g_strdup(value));
+	g_free(value);
+
+	value = g_settings_get_string(gcfg, "keymap");
+	g_hash_table_insert(config, g_strdup("keymap"), g_strdup(value));
+	g_free(value);
+
+	i = g_settings_get_int(gcfg, "sound");
+	value = g_strdup_printf("%d", i);
+	g_hash_table_insert(config, g_strdup("sound"), g_strdup(value));
+	g_free(value);
+
+	value = g_settings_get_string(gcfg, "program");
+	g_hash_table_insert(config, g_strdup("program"), g_strdup(value));
+	g_free(value);
+
+	value = g_settings_get_string(gcfg, "ppath");
+	g_hash_table_insert(config, g_strdup("ppath"), g_strdup(value));
+	g_free(value);
+
+	i = g_settings_get_boolean(gcfg, "runprog");
+	value = g_strdup_printf("%d", i);
+	g_hash_table_insert(config, g_strdup("runprog"), g_strdup(value));
+	g_free(value);
+
+	i = g_settings_get_boolean(gcfg, "motionevt");
+	value = g_strdup_printf("%d", i);
+	g_hash_table_insert(config, g_strdup("motionevt"), g_strdup(value));
+	g_free(value);
+
+	i = g_settings_get_boolean(gcfg, "noencryption");
+	value = g_strdup_printf("%d", i);
+	g_hash_table_insert(config, g_strdup("noencryption"), g_strdup(value));
+	g_free(value);
+
+	i = g_settings_get_boolean(gcfg, "wmkeybindings");
+	value = g_strdup_printf("%d", i);
+	g_hash_table_insert(config, g_strdup("wmkeybindings"), g_strdup(value));
+	g_free(value);
+
+	i = g_settings_get_boolean(gcfg, "attconsole");
+	value = g_strdup_printf("%d", i);
+	g_hash_table_insert(config, g_strdup("attconsole"), g_strdup(value));
+	g_free(value);
+
+	i = g_settings_get_boolean(gcfg, "usessh");
+	value = g_strdup_printf("%d", i);
+	g_hash_table_insert(config, g_strdup("usessh"), g_strdup(value));
+	g_free(value);
+
+	value = g_settings_get_string(gcfg, "sshuser");
+	g_hash_table_insert(config, g_strdup("sshuser"), g_strdup(value));
+	g_free(value);
+
+	value = g_settings_get_string(gcfg, "sshhost");
+	g_hash_table_insert(config, g_strdup("sshhost"), g_strdup(value));
+	g_free(value);
 
 	/* get the current username */
-	if(SHASH("username") == NULL) {
+	if(!strlen(SHASH("username"))) {
 		g_hash_table_insert(config, "username",
 			g_strup((gchar*)g_get_user_name()));
 	}
@@ -350,62 +396,45 @@
 }
 
 gint saveOptions() {
+	/* Apply all changes at once.  */
+	g_settings_delay(gcfg);
+
 	if(SHASH("username") != NULL)
-		gconf_client_set_string(gcfg, GCONF_BASE"/username",
-			SHASH("username"), NULL);
+		g_settings_set_string(gcfg, "username", SHASH("username"));
 	if((SHASH("password") != NULL) && (iSHASH("savepw") == TRUE))
-		gconf_client_set_string(gcfg, GCONF_BASE"/password",
-			SHASH("password"), NULL);
+		g_settings_set_string(gcfg, "password", SHASH("password"));
 	if(SHASH("domain") != NULL)
-		gconf_client_set_string(gcfg, GCONF_BASE"/domain",
-			SHASH("domain"), NULL);
-	gconf_client_set_bool(gcfg, GCONF_BASE"/savepw",
-		iSHASH("savepw"), NULL);
-	gconf_client_set_int(gcfg, GCONF_BASE"/rdp_protocol",
-		iSHASH("rdp_protocol"), NULL);
+		g_settings_set_string(gcfg, "domain", SHASH("domain"));
+	g_settings_set_boolean(gcfg, "savepw", iSHASH("savepw"));
+	g_settings_set_int(gcfg, "rdp-protocol", iSHASH("rdp_protocol"));
 	if(SHASH("geometry") != NULL)
-		gconf_client_set_string(gcfg, GCONF_BASE"/geometry",
-			SHASH("geometry"), NULL);
+		g_settings_set_string(gcfg, "geometry", SHASH("geometry"));
 	if(SHASH("keymap") != NULL)
-		gconf_client_set_string(gcfg, GCONF_BASE"/keymap",
-			SHASH("keymap"), NULL);
-	gconf_client_set_int(gcfg, GCONF_BASE"/colorsize",
-		iSHASH("colorsize"), NULL);
-	gconf_client_set_int(gcfg, GCONF_BASE"/sound",
-		iSHASH("sound"), NULL);
+		g_settings_set_string(gcfg, "keymap", SHASH("keymap"));
+	g_settings_set_int(gcfg, "colorsize", iSHASH("colorsize"));
+	g_settings_set_int(gcfg, "sound", iSHASH("sound"));
 	if(SHASH("program") != NULL)
-		gconf_client_set_string(gcfg, GCONF_BASE"/program",
-			SHASH("program"), NULL);
+		g_settings_set_string(gcfg, "program", SHASH("program"));
 	if(SHASH("ppath") != NULL)
-		gconf_client_set_string(gcfg, GCONF_BASE"/ppath",
-			SHASH("ppath"), NULL);
-	gconf_client_set_bool(gcfg, GCONF_BASE"/runprog",
-		iSHASH("runprog"), NULL);
-	gconf_client_set_bool(gcfg, GCONF_BASE"/bitmapupd",
-		iSHASH("bitmapupd"), NULL);
-	gconf_client_set_bool(gcfg, GCONF_BASE"/motionevt",
-		iSHASH("motionevt"), NULL);
-	gconf_client_set_bool(gcfg, GCONF_BASE"/hidewmdecoration",
-		iSHASH("hidewmdecoration"), NULL);
-	gconf_client_set_bool(gcfg, GCONF_BASE"/noencryption",
-		iSHASH("noencryption"), NULL);
-	gconf_client_set_bool(gcfg, GCONF_BASE"/wmkeybindings",
-		iSHASH("wmkeybindings"), NULL);
-	gconf_client_set_bool(gcfg, GCONF_BASE"/attconsole",
-		iSHASH("attconsole"), NULL);
+		g_settings_set_string(gcfg, "ppath", SHASH("ppath"));
+	g_settings_set_boolean(gcfg, "runprog", iSHASH("runprog"));
+	g_settings_set_boolean(gcfg, "bitmapupd", iSHASH("bitmapupd"));
+	g_settings_set_boolean(gcfg, "motionevt", iSHASH("motionevt"));
+	g_settings_set_boolean(gcfg, "hidewmdecoration",
+		iSHASH("hidewmdecoration"));
+	g_settings_set_boolean(gcfg, "noencryption", iSHASH("noencryption"));
+	g_settings_set_boolean(gcfg, "wmkeybindings", iSHASH("wmkeybindings"));
+	g_settings_set_boolean(gcfg, "attconsole", iSHASH("attconsole"));
 	if(SHASH("clientname") != NULL)
-		gconf_client_set_string(gcfg, GCONF_BASE"/clientname",
-			SHASH("clientname"), NULL);
-	gconf_client_set_bool(gcfg, GCONF_BASE"/usessh",
-		iSHASH("usessh"), NULL);
+		g_settings_set_string(gcfg, "clientname", SHASH("clientname"));
+	g_settings_set_boolean(gcfg, "usessh", iSHASH("usessh"));
 	if(SHASH("sshuser") != NULL)
-		gconf_client_set_string(gcfg, GCONF_BASE"/sshuser",
-			SHASH("sshuser"), NULL);
+		g_settings_set_string(gcfg, "sshuser", SHASH("sshuser"));
 	if(SHASH("sshhost") != NULL)
-		gconf_client_set_string(gcfg, GCONF_BASE"/sshhost",
-			SHASH("sshhost"), NULL);
-	gconf_client_set_bool(gcfg, GCONF_BASE"/showopts",
-		iSHASH("showopts"), NULL);
+		g_settings_set_string(gcfg, "sshhost", SHASH("sshhost"));
+	g_settings_set_boolean(gcfg, "showopts", iSHASH("showopts"));
+
+	g_settings_apply(gcfg);
 
 	return(0);
 }
--- /dev/null
+++ grdesktop-0.23+d040330/src/org.nongnu.grdesktop.gschema.xml
@@ -0,0 +1,105 @@
+<schemalist gettext-domain="grdesktop">
+  <schema id="org.nongnu.grdesktop" path="/org/nongnu/grdesktop/">
+    <key name="bitmapupd" type="b">
+      <default>false</default>
+      <summary>Force bitmap updates</summary>
+      <description>Force rdesktop to replaint bitmap updates.</description>
+    </key>
+    <key name="clientname" type="s">
+      <default>''</default>
+      <summary>Fake clientname</summary>
+      <description>Fake the local clientname. Used, if the terminal
+      server runs in user-mode.</description>
+    </key>
+    <key name="colorsize" type="i">
+      <default>0</default>
+      <summary>Colorsize for remote server.</summary>
+      <description>Define the available colors on the remote
+      server. This value is based on the selection box in
+      grdesktop.</description>
+    </key>
+    <key name="username" type="s">
+      <default>''</default>
+      <summary>Username to use.</summary>
+      <description>Windows user for login.</description>
+    </key>
+    <key name="password" type="s">
+      <default>''</default>
+      <summary>User password.</summary>
+    </key>
+    <key name="savepw" type="b">
+      <default>false</default>
+      <summary>Whether to save the password.</summary>
+    </key>
+    <key name="domain" type="s">
+      <default>''</default>
+      <summary>Domainname to use.</summary>
+      <description>Define the Windows-Domain on which rdesktop should
+      default login.</description>
+    </key>
+    <key name="geometry" type="s">
+      <default>'640x480'</default>
+      <summary>Windowssize of rdesktop</summary>
+      <description>Rdesktop use this windowsize for connection to the
+      remote host.</description>
+    </key>
+    <key name="hidewmdecoration" type="b">
+      <default>false</default>
+      <summary>Hide the window manager decoration</summary>
+      <description>Don't display the decoration (borders, icons, ...)
+      from the current window manager.</description>
+    </key>
+    <key name="hostnames" type="as">
+      <default>[]</default>
+      <summary>Last used hostnames</summary>
+      <description>Store the last ten hostnames for hostnames
+      combobox.</description>
+    </key>
+    <key name="showopts" type="b">
+      <default>false</default>
+      <summary>Show options in the connect window</summary>
+      <description>If set to "false", grdesktop's window will be
+      compact.</description>
+    </key>
+    <key name="rdp-protocol" type="i">
+      <default>0</default>
+      <summary>RDP protocol</summary>
+    </key>
+    <key name="keymap" type="s">
+      <default>'en-us'</default>
+    </key>
+    <key name="sound" type="i">
+      <default>0</default>
+    </key>
+    <key name="program" type="s">
+      <default>''</default>
+    </key>
+    <key name="ppath" type="s">
+      <default>''</default>
+    </key>
+    <key name="runprog" type="b">
+      <default>false</default>
+    </key>
+    <key name="motionevt" type="b">
+      <default>false</default>
+    </key>
+    <key name="noencryption" type="b">
+      <default>false</default>
+    </key>
+    <key name="wmkeybindings" type="b">
+      <default>false</default>
+    </key>
+    <key name="attconsole" type="b">
+      <default>false</default>
+    </key>
+    <key name="usessh" type="b">
+      <default>false</default>
+    </key>
+    <key name="sshuser" type="s">
+      <default>''</default>
+    </key>
+    <key name="sshhost" type="s">
+      <default>''</default>
+    </key>
+  </schema>
+</schemalist>
