#2 New gettings port from Yavor

Open
hector wants to merge 2 commits from hector/gsettings-port into Projects/master
17 changed files with 1990 additions and 672 deletions
  1. 6 9
      Makefile.am
  2. 3 9
      configure.ac
  3. 74 0
      es.hgarcia.mssh.gschema.xml
  4. 1567 0
      gsettings-port.patch
  5. 15 0
      mssh.convert
  6. 0 158
      mssh.schemas
  7. 0 5
      po/POTFILES
  8. 1 0
      po/POTFILES.in
  9. BIN
      po/es.gmo
  10. 0 127
      po/mssh.pot
  11. 56 81
      src/mssh-gconf.c
  12. 40 41
      src/mssh-gconf.h
  13. 61 120
      src/mssh-pref.c
  14. 1 1
      src/mssh-pref.h
  15. 86 121
      src/mssh-window.c
  16. 1 0
      src/mssh-window.h
  17. 79 0
      src/mssh.c

+ 6 - 9
Makefile.am

@@ -1,16 +1,13 @@
 SUBDIRS = src po
 
-EXTRA_DIST = config.rpath mkinstalldirs m4/Makefile.in mssh.schemas mssh_clusters.conf
+EXTRA_DIST = config.rpath mkinstalldirs m4/Makefile.in mssh_clusters.conf
 
-SCHEMAS_FILE = mssh.schemas
+data_convertdir = $(datadir)/GConf/gsettings
+dist_data_convert_DATA = mssh.convert
 
-schemadir = $(GCONF_SCHEMA_FILE_DIR)
-schema_DATA = $(SCHEMAS_FILE)
-
-if GCONF_SCHEMAS_INSTALL
-install-data-local:
-	GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(top_builddir)/$(schema_DATA)
-endif
+gsettings_SCHEMAS = es.hgarcia.mssh.gschema.xml
+EXTRA_DIST += $(gsettings_SCHEMAS)
+@GSETTINGS_RULES@
 
 man1_MANS = mssh.1
 

+ 3 - 9
configure.ac

@@ -6,7 +6,7 @@ GETTEXT_PACKAGE=mssh
 AC_SUBST(GETTEXT_PACKAGE)
 AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
                     [The prefix for our gettext translation domains.])
-IT_PROG_INTLTOOL(0.26)
+IT_PROG_INTLTOOL([0.50.1])
 
 #AM_GNU_GETTEXT([external])
 
@@ -16,17 +16,11 @@ IT_PROG_INTLTOOL(0.26)
 
 AC_PROG_CC
 
-PKG_CHECK_MODULES(MSSH, [gtk+-3.0 vte-2.91 gconf-2.0])
+PKG_CHECK_MODULES(MSSH, [gtk+-3.0 vte-2.91])
 AC_SUBST(MSSH_CFLAGS)
 AC_SUBST(MSSH_LIBS)
 
-AC_PATH_PROG(GCONFTOOL, gconftool-2, no)
-
-if test x"$GCONFTOOL" = xno; then
-  AC_MSG_ERROR([gconftool-2 executable not found in your path - should be installed with GConf])
-fi
-
-AM_GCONF_SOURCE_2
+GLIB_GSETTINGS
 
 AC_OUTPUT( po/Makefile.in
     Makefile

+ 74 - 0
es.hgarcia.mssh.gschema.xml

@@ -0,0 +1,74 @@
+<schemalist gettext-domain="mssh">
+  <schema id="es.hgarcia.mssh" path="/es/hgarcia/mssh/">
+    <key name="font" type="s">
+      <default>'Monospace 10'</default>
+      <summary>Terminal font</summary>
+      <description>Font to use for all MSSH terminals</description>
+    </key>
+    <key name="fg-colour" type="s">
+      <default>'#ffffffffffff'</default>
+      <summary>Terminal foreground colour</summary>
+      <description>Foreground colour to use for all MSSH terminals</description>
+    </key>
+    <key name="bg-colour" type="s">
+      <default>'#000000000000'</default>
+      <summary>Terminal background colour</summary>
+      <description>Background colour to use for all MSSH terminals</description>
+    </key>
+    <key name="recolor-focused" type="b">
+      <default>true</default>
+      <summary>Recolor focused window</summary>
+      <description>Use different Back- and Foreground color for focused window</description>
+    </key>
+    <key name="fg-colour-focus" type="s">
+      <default>'#ffffffffffff'</default>
+      <summary>Terminal foreground colour for the focused window</summary>
+      <description>Foreground colour to use for the currently focused MSSH terminal</description>
+    </key>
+    <key name="bg-colour-focus" type="s">
+      <default>'#000000000000'</default>
+      <summary>Terminal background colour for the focused window</summary>
+      <description>Background colour to use for the currently focused MSSH terminal</description>
+    </key>
+    <key name="columns" type="i">
+      <default>2</default>
+      <summary>Terminal columns</summary>
+      <description>Number of columns of tiled terminals</description>
+    </key>
+    <key name="timeout" type="i">
+      <default>2</default>
+      <summary>Terminal close timeout</summary>
+      <description>Timeout after which to close ended sessions</description>
+    </key>
+    <key name="close-ended" type="b">
+      <default>true</default>
+      <summary>Close ended sessions</summary>
+      <description>Close ended ssh sessions</description>
+    </key>
+    <key name="quit-all-ended" type="b">
+      <default>false</default>
+      <summary>Quit after all sessions ended</summary>
+      <description>Quit MSSH when all ssh sessions have ended</description>
+    </key>
+    <key name="dir-focus" type="b">
+      <default>true</default>
+      <summary>Use directional focus</summary>
+      <description>Uses directional focus rather than linear focus</description>
+    </key>
+    <key name="use-pattern-expansion" type="b">
+      <default>true</default>
+      <summary>Allow expansion of curly braces when adding new sessions</summary>
+      <description>Use curly bracket expansion when adding new sessions</description>
+    </key>
+    <key name="modifier" type="i">
+      <default>8</default>
+      <summary>Shortcut modifier</summary>
+      <description>Modifier used in focus shortcuts</description>
+    </key>
+    <key name="backscroll-buffer-size" type="i">
+      <default>5000</default>
+      <summary>Backscroll buffer size</summary>
+      <description>Number of lines to keep for every window as a backscroll buffer. Set to -1 to make it infinite</description>
+    </key>
+  </schema>
+</schemalist>

+ 1567 - 0
gsettings-port.patch

@@ -0,0 +1,1567 @@
+Description: Port to GSettings.
+Debian-Bug: https://bugs.debian.org/886055
+Author: Yavor Doganov <[email protected]>
+Forwarded: no
+Last-Update: 2018-10-23
+---
+
+--- debian-mssh.orig/Makefile.am
++++ debian-mssh/Makefile.am
+@@ -2,15 +2,12 @@
+ 
+ EXTRA_DIST = config.rpath mkinstalldirs m4/Makefile.in mssh.schemas mssh_clusters.conf
+ 
+-SCHEMAS_FILE = mssh.schemas
++data_convertdir = $(datadir)/GConf/gsettings
++dist_data_convert_DATA = mssh.convert
+ 
+-schemadir = $(GCONF_SCHEMA_FILE_DIR)
+-schema_DATA = $(SCHEMAS_FILE)
+-
+-if GCONF_SCHEMAS_INSTALL
+-install-data-local:
+-	GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(top_builddir)/$(schema_DATA)
+-endif
++gsettings_SCHEMAS = es.hgarcia.mssh.gschema.xml
++EXTRA_DIST += $(gsettings_SCHEMAS)
++@GSETTINGS_RULES@
+ 
+ man1_MANS = mssh.1
+ 
+--- debian-mssh.orig/configure.ac
++++ debian-mssh/configure.ac
+@@ -6,7 +6,7 @@
+ AC_SUBST(GETTEXT_PACKAGE)
+ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
+                     [The prefix for our gettext translation domains.])
+-IT_PROG_INTLTOOL(0.26)
++IT_PROG_INTLTOOL([0.50.1])
+ 
+ #AM_GNU_GETTEXT([external])
+ 
+@@ -16,17 +16,11 @@
+ 
+ AC_PROG_CC
+ 
+-PKG_CHECK_MODULES(MSSH, [gtk+-3.0 vte-2.91 gconf-2.0])
++PKG_CHECK_MODULES(MSSH, [gtk+-3.0 vte-2.91])
+ AC_SUBST(MSSH_CFLAGS)
+ AC_SUBST(MSSH_LIBS)
+ 
+-AC_PATH_PROG(GCONFTOOL, gconftool-2, no)
+-
+-if test x"$GCONFTOOL" = xno; then
+-  AC_MSG_ERROR([gconftool-2 executable not found in your path - should be installed with GConf])
+-fi
+-
+-AM_GCONF_SOURCE_2
++GLIB_GSETTINGS
+ 
+ AC_OUTPUT( po/Makefile.in
+     Makefile
+--- /dev/null
++++ debian-mssh/es.hgarcia.mssh.gschema.xml
+@@ -0,0 +1,74 @@
++<schemalist gettext-domain="mssh">
++  <schema id="es.hgarcia.mssh" path="/es/hgarcia/mssh/">
++    <key name="font" type="s">
++      <default>'Monospace 10'</default>
++      <summary>Terminal font</summary>
++      <description>Font to use for all MSSH terminals</description>
++    </key>
++    <key name="fg-colour" type="s">
++      <default>'#ffffffffffff'</default>
++      <summary>Terminal foreground colour</summary>
++      <description>Foreground colour to use for all MSSH terminals</description>
++    </key>
++    <key name="bg-colour" type="s">
++      <default>'#000000000000'</default>
++      <summary>Terminal background colour</summary>
++      <description>Background colour to use for all MSSH terminals</description>
++    </key>
++    <key name="recolor-focused" type="b">
++      <default>true</default>
++      <summary>Recolor focused window</summary>
++      <description>Use different Back- and Foreground color for focused window</description>
++    </key>
++    <key name="fg-colour-focus" type="s">
++      <default>'#ffffffffffff'</default>
++      <summary>Terminal foreground colour for the focused window</summary>
++      <description>Foreground colour to use for the currently focused MSSH terminal</description>
++    </key>
++    <key name="bg-colour-focus" type="s">
++      <default>'#000000000000'</default>
++      <summary>Terminal background colour for the focused window</summary>
++      <description>Background colour to use for the currently focused MSSH terminal</description>
++    </key>
++    <key name="columns" type="i">
++      <default>2</default>
++      <summary>Terminal columns</summary>
++      <description>Number of columns of tiled terminals</description>
++    </key>
++    <key name="timeout" type="i">
++      <default>2</default>
++      <summary>Terminal close timeout</summary>
++      <description>Timeout after which to close ended sessions</description>
++    </key>
++    <key name="close-ended" type="b">
++      <default>true</default>
++      <summary>Close ended sessions</summary>
++      <description>Close ended ssh sessions</description>
++    </key>
++    <key name="quit-all-ended" type="b">
++      <default>false</default>
++      <summary>Quit after all sessions ended</summary>
++      <description>Quit MSSH when all ssh sessions have ended</description>
++    </key>
++    <key name="dir-focus" type="b">
++      <default>true</default>
++      <summary>Use directional focus</summary>
++      <description>Uses directional focus rather than linear focus</description>
++    </key>
++    <key name="use-pattern-expansion" type="b">
++      <default>true</default>
++      <summary>Allow expansion of curly braces when adding new sessions</summary>
++      <description>Use curly bracket expansion when adding new sessions</description>
++    </key>
++    <key name="modifier" type="i">
++      <default>8</default>
++      <summary>Shortcut modifier</summary>
++      <description>Modifier used in focus shortcuts</description>
++    </key>
++    <key name="backscroll-buffer-size" type="i">
++      <default>5000</default>
++      <summary>Backscroll buffer size</summary>
++      <description>Number of lines to keep for every window as a backscroll buffer. Set to -1 to make it infinite</description>
++    </key>
++  </schema>
++</schemalist>
+--- /dev/null
++++ debian-mssh/mssh.convert
+@@ -0,0 +1,15 @@
++[es.hgarcia.mssh]
++font = /apps/mssh/font
++fg-colour = /apps/mssh/fg_colour
++bg-colour = /apps/mssh/bg_colour
++recolor-focused = /apps/mssh/recolor_focused
++fg-colour-focus = /apps/mssh/fg_colour_focus
++bg-colour-focus = /apps/mssh/bg_colour_focus
++columns = /apps/mssh/columns
++timeout = /apps/mssh/timeout
++close-ended = /apps/mssh/close_ended
++quit-all-ended = /apps/mssh/quit_all_ended
++dir-focus = /apps/mssh/dir_focus
++use-pattern-expansion = /apps/mssh/use_pattern_expansion
++modifier = /apps/mssh/modifier
++backscroll-buffer-size = /apps/mssh/backscroll_buffer_size
+--- debian-mssh.orig/mssh.schemas
++++ /dev/null
+@@ -1,158 +0,0 @@
+-<gconfschemafile>
+-    <schemalist>
+-        <schema>
+-            <key>/schemas/apps/mssh/font</key>
+-            <applyto>/apps/mssh/font</applyto>
+-            <owner>mssh</owner>
+-            <type>string</type>
+-            <default>Monospace 10</default>
+-            <locale name="C">
+-                <short>Terminal font</short>
+-                <long>Font to use for all MSSH terminals</long>
+-            </locale>
+-        </schema>
+-        <schema>
+-            <key>/schemas/apps/mssh/fg_colour</key>
+-            <applyto>/apps/mssh/fg_colour</applyto>
+-            <owner>mssh</owner>
+-            <type>string</type>
+-            <default>#ffffffffffff</default>
+-            <locale name="C">
+-                <short>Terminal foreground colour</short>
+-                <long>Foreground colour to use for all MSSH terminals</long>
+-            </locale>
+-        </schema>
+-        <schema>
+-            <key>/schemas/apps/mssh/bg_colour</key>
+-            <applyto>/apps/mssh/bg_colour</applyto>
+-            <owner>mssh</owner>
+-            <type>string</type>
+-            <default>#000000000000</default>
+-            <locale name="C">
+-                <short>Terminal background colour</short>
+-                <long>Background colour to use for all MSSH terminals</long>
+-            </locale>
+-        </schema>
+-        <schema>
+-            <key>/schemas/apps/mssh/recolor_focused</key>
+-            <applyto>/apps/mssh/recolor_focused</applyto>
+-            <owner>mssh</owner>
+-            <type>bool</type>
+-            <default>true</default>
+-            <locale name="C">
+-                <short>Recolor focused window</short>
+-                <long>Use different Back- and Foreground color for focused window</long>
+-            </locale>
+-        </schema>
+-        <schema>
+-            <key>/schemas/apps/mssh/fg_colour_focus</key>
+-            <applyto>/apps/mssh/fg_colour_focus</applyto>
+-            <owner>mssh</owner>
+-            <type>string</type>
+-            <default>#ffffffffffff</default>
+-            <locale name="C">
+-                <short>Terminal foreground colour for the focused window</short>
+-                <long>Foreground colour to use for the currently focused MSSH terminal</long>
+-            </locale>
+-        </schema>
+-        <schema>
+-            <key>/schemas/apps/mssh/bg_colour_focus</key>
+-            <applyto>/apps/mssh/bg_colour_focus</applyto>
+-            <owner>mssh</owner>
+-            <type>string</type>
+-            <default>#000000000000</default>
+-            <locale name="C">
+-                <short>Terminal background colour for the focused window</short>
+-                <long>Background colour to use for the currently focused MSSH terminal</long>
+-            </locale>
+-        </schema>
+-        <schema>
+-            <key>/schemas/apps/mssh/coloums</key>
+-            <applyto>/apps/mssh/columns</applyto>
+-            <owner>mssh</owner>
+-            <type>int</type>
+-            <default>2</default>
+-            <locale name="C">
+-                <short>Terminal columns</short>
+-                <long>Number of columns of tiled terminals</long>
+-            </locale>
+-        </schema>
+-        <schema>
+-            <key>/schemas/apps/mssh/timeout</key>
+-            <applyto>/apps/mssh/timeout</applyto>
+-            <owner>mssh</owner>
+-            <type>int</type>
+-            <default>2</default>
+-            <locale name="C">
+-                <short>Terminal close timeout</short>
+-                <long>Timeout after which to close ended sessions</long>
+-            </locale>
+-        </schema>
+-        <schema>
+-            <key>/schemas/apps/mssh/close_ended</key>
+-            <applyto>/apps/mssh/close_ended</applyto>
+-            <owner>mssh</owner>
+-            <type>bool</type>
+-            <default>true</default>
+-            <locale name="C">
+-                <short>Close ended sessions</short>
+-                <long>Close ended ssh sessions</long>
+-            </locale>
+-        </schema>
+-        <schema>
+-            <key>/schemas/apps/mssh/quit_all_ended</key>
+-            <applyto>/apps/mssh/quit_all_ended</applyto>
+-            <owner>mssh</owner>
+-            <type>bool</type>
+-            <default>false</default>
+-            <locale name="C">
+-                <short>Quit after all sessions ended</short>
+-                <long>Quit MSSH when all ssh sessions have ended</long>
+-            </locale>
+-        </schema>
+-        <schema>
+-            <key>/schemas/apps/mssh/dir_focus</key>
+-            <applyto>/apps/mssh/dir_focus</applyto>
+-            <owner>mssh</owner>
+-            <type>bool</type>
+-            <default>true</default>
+-            <locale name="C">
+-                <short>Use directional focus</short>
+-                <long>Uses directional focus rather than linear focus</long>
+-            </locale>
+-        </schema>
+-        <schema>
+-            <key>/schemas/apps/mssh/use_pattern_expansion</key>
+-            <applyto>/apps/mssh/use_pattern_expansion</applyto>
+-            <owner>mssh</owner>
+-            <type>bool</type>
+-            <default>true</default>
+-            <locale name="C">
+-                <short>Allow expansion of curly braces when adding new sessions</short>
+-                <long>Use curly bracket expansion when adding new sessions</long>
+-            </locale>
+-        </schema>              
+-        <schema>
+-            <key>/schemas/apps/mssh/modifier</key>
+-            <applyto>/apps/mssh/modifier</applyto>
+-            <owner>mssh</owner>
+-            <type>int</type>
+-            <default>8</default>
+-            <locale name="C">
+-                <short>Shortcut modifier</short>
+-                <long>Modifier used in focus shortcuts</long>
+-            </locale>
+-        </schema>
+-        <schema>
+-            <key>/schemas/apps/mssh/backscroll_buffer_size</key>
+-            <applyto>/apps/mssh/backscroll_buffer_size</applyto>
+-            <owner>mssh</owner>
+-            <type>int</type>
+-            <default>5000</default>
+-            <locale name="C">
+-                <short>Backscroll buffer size</short>
+-                <long>Number of lines to keep for every window as a backscroll buffer. Set to -1 to make it infinite</long>
+-            </locale>
+-        </schema>        
+-    </schemalist>
+-</gconfschemafile>
+--- debian-mssh.orig/src/mssh-window.c
++++ debian-mssh/src/mssh-window.c
+@@ -2,7 +2,6 @@
+ #include <stdlib.h>
+ #include <stdio.h>
+ 
+-#include <gconf/gconf-client.h>
+ #include <gdk/gdkkeysyms.h>
+ #include <gtk/gtk.h>
+ 
+@@ -94,7 +93,7 @@
+ static void mssh_window_pref(GtkWidget *widget, gpointer data)
+ {
+     MSSHWindow *window = MSSH_WINDOW(data);
+-    GtkWidget *pref = mssh_pref_new();
++    GtkWidget *pref = mssh_pref_new(window->settings);
+ 
+     gtk_window_set_transient_for(GTK_WINDOW(pref), GTK_WINDOW(window));
+     gtk_window_set_modal(GTK_WINDOW(pref), TRUE);
+@@ -139,22 +138,16 @@
+ static gboolean mssh_window_entry_focused(GtkWidget *widget,
+     GtkDirectionType dir, gpointer data)
+ {
+-    GConfClient *client;
+-    GConfEntry *entry;
+     MSSHWindow *window = MSSH_WINDOW(data);
+ 
+     gtk_window_set_title(GTK_WINDOW(window), PACKAGE_NAME" - All");
+     window->last_focus = NULL;
+ 
+     /* clear the coloring for the focused window */
+-    client = gconf_client_get_default();
+-
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR, NULL,
+-        TRUE, NULL);
+-    mssh_gconf_notify_fg_colour(client, 0, entry, window);
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR, NULL,
+-        TRUE, NULL);
+-    mssh_gconf_notify_bg_colour(client, 0, entry, window);
++    mssh_gconf_notify_fg_colour(window->settings, MSSH_GCONF_KEY_FG_COLOUR,
++                                window);
++    mssh_gconf_notify_bg_colour(window->settings, MSSH_GCONF_KEY_BG_COLOUR,
++                                window);
+     return FALSE;
+ }
+ 
+@@ -163,8 +156,6 @@
+ {
+     MSSHWindow *window = MSSH_WINDOW(data);
+     GtkWidget *focus;
+-    GConfClient *client;
+-    GConfEntry *entry;
+ 
+     int i, idx = -1, len = window->terminals->len;
+     int wcols = window->columns_override ? window->columns_override :
+@@ -183,16 +174,12 @@
+         }
+     }
+ 
+-    client = gconf_client_get_default();
+-
+     /* recolor the windows */
+     if (window->recolor_focused) {
+-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR, NULL,
+-            TRUE, NULL);
+-        mssh_gconf_notify_fg_colour(client, 0, entry, window);
+-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR, NULL,
+-            TRUE, NULL);
+-        mssh_gconf_notify_bg_colour(client, 0, entry, window);
++        mssh_gconf_notify_fg_colour(window->settings,
++                                    MSSH_GCONF_KEY_FG_COLOUR, window);
++        mssh_gconf_notify_bg_colour(window->settings,
++                                    MSSH_GCONF_KEY_BG_COLOUR, window);
+     }
+     if(focus == window->global_entry && keyval == GDK_KEY_Down &&
+         window->dir_focus)
+@@ -326,8 +313,6 @@
+     char *title;
+     size_t len;
+ 
+-    GConfClient *client;
+-    GConfEntry *entry;
+     MSSHWindow *window = MSSH_WINDOW(data);
+ 
+     len = strlen(PACKAGE_NAME" - ") + strlen(terminal->hostname) + 1;
+@@ -338,31 +323,26 @@
+     gtk_window_set_title(GTK_WINDOW(window), title);
+ 
+     free(title);
+-    client = gconf_client_get_default();
+ 
+     /* recolor all windows */
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR, NULL,
+-        TRUE, NULL);
+-    mssh_gconf_notify_fg_colour(client, 0, entry, window);
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR, NULL,
+-        TRUE, NULL);
+-    mssh_gconf_notify_bg_colour(client, 0, entry, window);
++    mssh_gconf_notify_fg_colour(window->settings, MSSH_GCONF_KEY_FG_COLOUR,
++                                window);
++    mssh_gconf_notify_bg_colour(window->settings, MSSH_GCONF_KEY_BG_COLOUR,
++                                window);
+ 
+     /* recolor the focused window - if needed */
+     if (window->recolor_focused && window->is_maximized == 0) {
+-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR_FOCUS, NULL,
+-            TRUE, NULL);
+-        mssh_gconf_notify_fg_colour_focus(client, 0, entry, window);
+-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR_FOCUS, NULL,
+-            TRUE, NULL);
+-        mssh_gconf_notify_bg_colour_focus(client, 0, entry, window);
++        mssh_gconf_notify_fg_colour_focus(window->settings,
++                                          MSSH_GCONF_KEY_FG_COLOUR_FOCUS,
++                                          window);
++        mssh_gconf_notify_bg_colour_focus(window->settings,
++                                          MSSH_GCONF_KEY_BG_COLOUR_FOCUS,
++                                          window);
+     }
+ }
+ 
+ void mssh_window_relayout(MSSHWindow *window)
+ {
+-    GConfClient *client;
+-    GConfEntry *entry;
+     GtkWidget *focus;
+     int i, len = window->terminals->len;
+     int wcols = window->columns_override ? window->columns_override :
+@@ -428,19 +408,13 @@
+         }
+     }
+ 
+-    client = gconf_client_get_default();
+-
+     gtk_widget_show_all(GTK_WIDGET(window));
+ 
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FONT, NULL,
+-        TRUE, NULL);
+-    mssh_gconf_notify_font(client, 0, entry, window);
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR, NULL,
+-        TRUE, NULL);
+-    mssh_gconf_notify_fg_colour(client, 0, entry, window);
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR, NULL,
+-        TRUE, NULL);
+-    mssh_gconf_notify_bg_colour(client, 0, entry, window);
++    mssh_gconf_notify_font(window->settings, MSSH_GCONF_KEY_FONT, window);
++    mssh_gconf_notify_fg_colour(window->settings, MSSH_GCONF_KEY_FG_COLOUR,
++                                window);
++    mssh_gconf_notify_bg_colour(window->settings, MSSH_GCONF_KEY_BG_COLOUR,
++                                window);
+ 
+     gtk_window_set_focus(GTK_WINDOW(window), GTK_WIDGET(focus));
+ }
+@@ -467,8 +441,6 @@
+ 
+ static void mssh_window_init(MSSHWindow* window)
+ {
+-    GConfClient *client;
+-
+     GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+     GtkWidget *entry = gtk_entry_new();
+ 
+@@ -553,46 +525,54 @@
+     gtk_window_set_default_size(GTK_WINDOW(window), 1024, 768);
+     gtk_window_set_title(GTK_WINDOW(window), PACKAGE_NAME);
+ 
+-    client = gconf_client_get_default();
++    window->settings = g_settings_new("es.hgarcia.mssh");
+ 
+-    gconf_client_add_dir(client, MSSH_GCONF_PATH,
+-        GCONF_CLIENT_PRELOAD_RECURSIVE, NULL);
+-
+-    gconf_client_notify_add(client, MSSH_GCONF_KEY_FONT,
+-        mssh_gconf_notify_font, window, NULL, NULL);
+-    gconf_client_notify_add(client, MSSH_GCONF_KEY_FG_COLOUR,
+-        mssh_gconf_notify_fg_colour, window, NULL, NULL);
+-    gconf_client_notify_add(client, MSSH_GCONF_KEY_BG_COLOUR,
+-        mssh_gconf_notify_bg_colour, window, NULL, NULL);
+-    gconf_client_notify_add(client, MSSH_GCONF_KEY_FG_COLOUR_FOCUS,
+-        mssh_gconf_notify_fg_colour_focus, window, NULL, NULL);
+-    gconf_client_notify_add(client, MSSH_GCONF_KEY_BG_COLOUR_FOCUS,
+-        mssh_gconf_notify_bg_colour_focus, window, NULL, NULL);
+-    gconf_client_notify_add(client, MSSH_GCONF_KEY_COLUMNS,
+-        mssh_gconf_notify_columns, window, NULL, NULL);
+-    gconf_client_notify_add(client, MSSH_GCONF_KEY_TIMEOUT,
+-        mssh_gconf_notify_timeout, window, NULL, NULL);
+-    gconf_client_notify_add(client, MSSH_GCONF_KEY_CLOSE_ENDED,
+-        mssh_gconf_notify_close_ended, window, NULL, NULL);
+-    gconf_client_notify_add(client, MSSH_GCONF_KEY_RECOLOR_FOCUSED,
+-        mssh_gconf_notify_recolor_focused, window, NULL, NULL);
+-    gconf_client_notify_add(client, MSSH_GCONF_KEY_QUIT_ALL_ENDED,
+-        mssh_gconf_notify_quit_all_ended, window, NULL, NULL);
+-    gconf_client_notify_add(client, MSSH_GCONF_KEY_DIR_FOCUS,
+-        mssh_gconf_notify_dir_focus, window, NULL, NULL);
+-    gconf_client_notify_add(client, MSSH_GCONF_KEY_MODIFIER,
+-        mssh_gconf_notify_modifier, window, NULL, NULL);
+-    gconf_client_notify_add(client, MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE,
+-        mssh_gconf_backscroll_buffer_size, window, NULL, NULL);
+-
+-    gconf_client_notify(client, MSSH_GCONF_KEY_COLUMNS);
+-    gconf_client_notify(client, MSSH_GCONF_KEY_TIMEOUT);
+-    gconf_client_notify(client, MSSH_GCONF_KEY_CLOSE_ENDED);
+-    gconf_client_notify(client, MSSH_GCONF_KEY_RECOLOR_FOCUSED);
+-    gconf_client_notify(client, MSSH_GCONF_KEY_QUIT_ALL_ENDED);
+-    gconf_client_notify(client, MSSH_GCONF_KEY_DIR_FOCUS);
+-    gconf_client_notify(client, MSSH_GCONF_KEY_MODIFIER);
+-    gconf_client_notify(client, MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE);
++    g_signal_connect(window->settings, "changed::"MSSH_GCONF_KEY_FONT,
++                     G_CALLBACK(mssh_gconf_notify_font), window);
++    g_signal_connect(window->settings, "changed::"MSSH_GCONF_KEY_FG_COLOUR,
++                     G_CALLBACK(mssh_gconf_notify_fg_colour), window);
++    g_signal_connect(window->settings, "changed::"MSSH_GCONF_KEY_BG_COLOUR,
++                     G_CALLBACK(mssh_gconf_notify_bg_colour), window);
++    g_signal_connect(window->settings,
++                     "changed::"MSSH_GCONF_KEY_FG_COLOUR_FOCUS,
++                     G_CALLBACK(mssh_gconf_notify_fg_colour_focus), window);
++    g_signal_connect(window->settings,
++                     "changed::"MSSH_GCONF_KEY_BG_COLOUR_FOCUS,
++                     G_CALLBACK(mssh_gconf_notify_bg_colour_focus), window);
++    g_signal_connect(window->settings, "changed::"MSSH_GCONF_KEY_COLUMNS,
++                     G_CALLBACK(mssh_gconf_notify_columns), window);
++    g_signal_connect(window->settings, "changed::"MSSH_GCONF_KEY_TIMEOUT,
++                     G_CALLBACK(mssh_gconf_notify_timeout), window);
++    g_signal_connect(window->settings, "changed::"MSSH_GCONF_KEY_CLOSE_ENDED,
++                     G_CALLBACK(mssh_gconf_notify_close_ended), window);
++    g_signal_connect(window->settings,
++                     "changed::"MSSH_GCONF_KEY_RECOLOR_FOCUSED,
++                     G_CALLBACK(mssh_gconf_notify_recolor_focused), window);
++    g_signal_connect(window->settings, "changed::"MSSH_GCONF_KEY_QUIT_ALL_ENDED,
++                     G_CALLBACK(mssh_gconf_notify_quit_all_ended), window);
++    g_signal_connect(window->settings, "changed::"MSSH_GCONF_KEY_DIR_FOCUS,
++                     G_CALLBACK(mssh_gconf_notify_dir_focus), window);
++    g_signal_connect(window->settings, "changed::"MSSH_GCONF_KEY_MODIFIER,
++                     G_CALLBACK(mssh_gconf_notify_modifier), window);
++    g_signal_connect(window->settings,
++                     "changed::"MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE,
++                     G_CALLBACK(mssh_gconf_backscroll_buffer_size), window);
++
++    mssh_gconf_notify_columns(window->settings, MSSH_GCONF_KEY_COLUMNS, window);
++    mssh_gconf_notify_timeout(window->settings, MSSH_GCONF_KEY_TIMEOUT, window);
++    mssh_gconf_notify_close_ended(window->settings, MSSH_GCONF_KEY_CLOSE_ENDED,
++                                  window);
++    mssh_gconf_notify_recolor_focused(window->settings,
++                                      MSSH_GCONF_KEY_RECOLOR_FOCUSED, window);
++    mssh_gconf_notify_quit_all_ended(window->settings,
++                                     MSSH_GCONF_KEY_QUIT_ALL_ENDED, window);
++    mssh_gconf_notify_dir_focus(window->settings, MSSH_GCONF_KEY_DIR_FOCUS,
++                                window);
++    mssh_gconf_notify_modifier(window->settings, MSSH_GCONF_KEY_MODIFIER,
++                               window);
++    mssh_gconf_backscroll_buffer_size(window->settings,
++                                      MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE,
++                                      window);
+ 
+     gtk_accel_group_connect(accel, GDK_KEY_Up, window->modifier,
+         GTK_ACCEL_VISIBLE, g_cclosure_new(
+@@ -667,8 +647,6 @@
+ void mssh_window_relayout_for_one(MSSHWindow *window, GtkWidget *t)
+ {
+ 
+-    GConfClient *client;
+-    GConfEntry *entry;
+     int len = window->terminals->len;
+     int wcols = window->columns_override ? window->columns_override :
+         window->columns;
+@@ -692,14 +670,10 @@
+     /* remove the coloring */
+     if (window->recolor_focused) {
+ 
+-        client = gconf_client_get_default();
+-
+-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR, NULL,
+-            TRUE, NULL);
+-        mssh_gconf_notify_fg_colour(client, 0, entry, window);
+-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR, NULL,
+-            TRUE, NULL);
+-        mssh_gconf_notify_bg_colour(client, 0, entry, window);
++        mssh_gconf_notify_fg_colour(window->settings, MSSH_GCONF_KEY_FG_COLOUR,
++                                    window);
++        mssh_gconf_notify_bg_colour(window->settings, MSSH_GCONF_KEY_BG_COLOUR,
++                                    window);
+     }
+ 
+     g_object_unref(terminal);
+@@ -731,8 +705,6 @@
+     int i;
+     int idx = -1;
+     int len = window->terminals->len;
+-    GConfClient *client;
+-    GConfEntry *entry;
+ 
+     /* get the currently focused window */
+     GtkWidget *focus = gtk_window_get_focus(GTK_WINDOW(window));
+@@ -752,14 +724,10 @@
+ 
+     /* recolor the window with the normal color */
+     if (window->recolor_focused) {
+-        client = gconf_client_get_default();
+-
+-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR, NULL,
+-            TRUE, NULL);
+-        mssh_gconf_notify_fg_colour(client, 0, entry, window);
+-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR, NULL,
+-            TRUE, NULL);
+-        mssh_gconf_notify_bg_colour(client, 0, entry, window);
++        mssh_gconf_notify_fg_colour(window->settings, MSSH_GCONF_KEY_FG_COLOUR,
++                                    window);
++        mssh_gconf_notify_bg_colour(window->settings, MSSH_GCONF_KEY_BG_COLOUR,
++                                    window);
+     }
+     if (idx == -1) {
+         /* there's no window focused, do nothing */
+@@ -774,8 +742,6 @@
+ static void mssh_window_restore_layout(GtkWidget *widget, gpointer data)
+ {
+ 
+-    GConfClient *client;
+-    GConfEntry *entry;
+     /* get the window */
+     MSSHWindow *window = MSSH_WINDOW(data);
+ 
+@@ -789,14 +755,13 @@
+     }
+ 
+     /* recolor the focused window - if needed */
+-    client = gconf_client_get_default();
+     if (window->recolor_focused && window->is_maximized == 0) {
+-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR_FOCUS, NULL,
+-            TRUE, NULL);
+-        mssh_gconf_notify_fg_colour_focus(client, 0, entry, window);
+-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR_FOCUS, NULL,
+-            TRUE, NULL);
+-        mssh_gconf_notify_bg_colour_focus(client, 0, entry, window);
++        mssh_gconf_notify_fg_colour_focus(window->settings,
++                                          MSSH_GCONF_KEY_FG_COLOUR_FOCUS,
++                                          window);
++        mssh_gconf_notify_bg_colour_focus(window->settings,
++                                          MSSH_GCONF_KEY_BG_COLOUR_FOCUS,
++                                          window);
+ 	}
+ }
+ 
+--- debian-mssh.orig/src/mssh-window.h
++++ debian-mssh/src/mssh-window.h
+@@ -41,6 +41,7 @@
+     int is_maximized;
+     gboolean recolor_focused;
+     GData **commands;
++    GSettings *settings;
+ } MSSHWindow;
+ 
+ typedef struct
+--- debian-mssh.orig/src/mssh-gconf.h
++++ debian-mssh/src/mssh-gconf.h
+@@ -1,48 +1,47 @@
+ #ifndef __MSSH_GCONF__
+ #define __MSSH_GCONF__
+ 
+-#include <gconf/gconf-client.h>
++#include <gio/gio.h>
+ 
+-#define MSSH_GCONF_PATH                 		"/apps/mssh"
+-#define MSSH_GCONF_KEY_FONT             		MSSH_GCONF_PATH"/font"
+-#define MSSH_GCONF_KEY_FG_COLOUR        		MSSH_GCONF_PATH"/fg_colour"
+-#define MSSH_GCONF_KEY_BG_COLOUR        		MSSH_GCONF_PATH"/bg_colour"
+-#define MSSH_GCONF_KEY_FG_COLOUR_FOCUS          MSSH_GCONF_PATH"/fg_colour_focus"
+-#define MSSH_GCONF_KEY_BG_COLOUR_FOCUS          MSSH_GCONF_PATH"/bg_colour_focus"
+-#define MSSH_GCONF_KEY_COLUMNS          		MSSH_GCONF_PATH"/columns"
+-#define MSSH_GCONF_KEY_TIMEOUT          		MSSH_GCONF_PATH"/timeout"
+-#define MSSH_GCONF_KEY_CLOSE_ENDED      		MSSH_GCONF_PATH"/close_ended"
+-#define MSSH_GCONF_KEY_RECOLOR_FOCUSED          MSSH_GCONF_PATH"/recolor_focused"
+-#define MSSH_GCONF_KEY_QUIT_ALL_ENDED   		MSSH_GCONF_PATH"/quit_all_ended"
+-#define MSSH_GCONF_KEY_MODIFIER         		MSSH_GCONF_PATH"/modifier"
+-#define MSSH_GCONF_KEY_DIR_FOCUS        		MSSH_GCONF_PATH"/dir_focus"
+-#define MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE 	MSSH_GCONF_PATH"/backscroll_buffer_size"
++#define MSSH_GCONF_KEY_FONT             		"font"
++#define MSSH_GCONF_KEY_FG_COLOUR        		"fg-colour"
++#define MSSH_GCONF_KEY_BG_COLOUR        		"bg-colour"
++#define MSSH_GCONF_KEY_FG_COLOUR_FOCUS          "fg-colour-focus"
++#define MSSH_GCONF_KEY_BG_COLOUR_FOCUS          "bg-colour-focus"
++#define MSSH_GCONF_KEY_COLUMNS          		"columns"
++#define MSSH_GCONF_KEY_TIMEOUT          		"timeout"
++#define MSSH_GCONF_KEY_CLOSE_ENDED      		"close-ended"
++#define MSSH_GCONF_KEY_RECOLOR_FOCUSED          "recolor-focused"
++#define MSSH_GCONF_KEY_QUIT_ALL_ENDED   		"quit-all-ended"
++#define MSSH_GCONF_KEY_MODIFIER         		"modifier"
++#define MSSH_GCONF_KEY_DIR_FOCUS        		"dir-focus"
++#define MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE 	"backscroll-buffer-size"
+ 
+-void mssh_gconf_notify_font(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data);
+-void mssh_gconf_notify_fg_colour(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data);
+-void mssh_gconf_notify_bg_colour(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data);
+-void mssh_gconf_notify_fg_colour_focus(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data);
+-void mssh_gconf_notify_bg_colour_focus(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data);
+-void mssh_gconf_notify_columns(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data);
+-void mssh_gconf_notify_timeout(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data);
+-void mssh_gconf_notify_close_ended(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data);
+-void mssh_gconf_notify_quit_all_ended(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data);
+-void mssh_gconf_notify_modifier(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data);
+-void mssh_gconf_notify_dir_focus(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data);
+-void mssh_gconf_backscroll_buffer_size(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data);
+-void mssh_gconf_notify_recolor_focused(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data);
++void mssh_gconf_notify_font(GSettings *settings, const gchar *key,
++                            gpointer data);
++void mssh_gconf_notify_fg_colour(GSettings *settings, const gchar *key,
++                                 gpointer data);
++void mssh_gconf_notify_bg_colour(GSettings *settings, const gchar *key,
++                                 gpointer data);
++void mssh_gconf_notify_fg_colour_focus(GSettings *settings, const gchar *key,
++                                       gpointer data);
++void mssh_gconf_notify_bg_colour_focus(GSettings *settings, const gchar *key,
++                                       gpointer data);
++void mssh_gconf_notify_columns(GSettings *settings, const gchar *key,
++                               gpointer data);
++void mssh_gconf_notify_timeout(GSettings *settings, const gchar *key,
++                               gpointer data);
++void mssh_gconf_notify_close_ended(GSettings *settings, const gchar *key,
++                                   gpointer data);
++void mssh_gconf_notify_quit_all_ended(GSettings *settings, const gchar *key,
++                                      gpointer data);
++void mssh_gconf_notify_modifier(GSettings *settings, const gchar *key,
++                                gpointer data);
++void mssh_gconf_notify_dir_focus(GSettings *settings, const gchar *key,
++                                 gpointer data);
++void mssh_gconf_backscroll_buffer_size(GSettings *settings, const gchar *key,
++                                       gpointer data);
++void mssh_gconf_notify_recolor_focused(GSettings *settings, const gchar *key,
++                                       gpointer data);
+ 
+ #endif
+--- debian-mssh.orig/src/mssh-pref.c
++++ debian-mssh/src/mssh-pref.c
+@@ -1,5 +1,3 @@
+-#include <gconf/gconf-client.h>
+-
+ #define GETTEXT_PACKAGE "mssh"
+ #include <glib/gi18n-lib.h>
+ 
+@@ -7,13 +5,17 @@
+ 
+ #include "mssh-pref.h"
+ 
++GSettings *settings;
++
+ static void mssh_pref_init(MSSHPref* pref);
+ static void mssh_pref_class_init(MSSHPrefClass *klass);
+ 
+ G_DEFINE_TYPE(MSSHPref, mssh_pref, GTK_TYPE_WINDOW)
+ 
+-GtkWidget* mssh_pref_new(void)
++GtkWidget* mssh_pref_new(GSettings *window_settings)
+ {
++    settings = window_settings;
++
+     return g_object_new(MSSH_TYPE_PREF, NULL);
+ }
+ 
+@@ -26,169 +28,125 @@
+ 
+ static void mssh_pref_font_select(GtkWidget *widget, gpointer data)
+ {
+-    GConfClient *client;
+     const gchar *font;
+ 
+-    client = gconf_client_get_default();
+-
+     font = gtk_font_chooser_get_font (GTK_FONT_CHOOSER(widget));
+ 
+-    gconf_client_set_string(client, MSSH_GCONF_KEY_FONT, font, NULL);
++    g_settings_set_string(settings, MSSH_GCONF_KEY_FONT, font);
+ }
+ 
+ static void mssh_pref_fg_colour_select(GtkWidget *widget, gpointer data)
+ {
+-    GConfClient *client;
+     GdkRGBA colour;
+     const gchar *colour_s;
+ 
+-    client = gconf_client_get_default();
+-
+     gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(widget), &colour);
+     colour_s = gdk_rgba_to_string(&colour);
+ 
+-    gconf_client_set_string(client, MSSH_GCONF_KEY_FG_COLOUR, colour_s,
+-        NULL);
++    g_settings_set_string(settings, MSSH_GCONF_KEY_FG_COLOUR, colour_s);
+ }
+ 
+ static void mssh_pref_bg_colour_select(GtkWidget *widget, gpointer data)
+ {
+-    GConfClient *client;
+     GdkRGBA colour;
+     const gchar *colour_s;
+ 
+-    client = gconf_client_get_default();
+-
+     gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(widget), &colour);
+     colour_s = gdk_rgba_to_string(&colour);
+ 
+-    gconf_client_set_string(client, MSSH_GCONF_KEY_BG_COLOUR, colour_s,
+-        NULL);
++    g_settings_set_string(settings, MSSH_GCONF_KEY_BG_COLOUR, colour_s);
+ }
+ 
+ static void mssh_pref_fg_colour_select_focus(GtkWidget *widget, gpointer data)
+ {
+-    GConfClient *client;
+     GdkRGBA colour;
+     const gchar *colour_s;
+ 
+-    client = gconf_client_get_default();
+-
+     gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(widget), &colour);
+     colour_s = gdk_rgba_to_string(&colour);
+ 
+ 
+-    gconf_client_set_string(client, MSSH_GCONF_KEY_FG_COLOUR_FOCUS, colour_s,
+-        NULL);
++    g_settings_set_string(settings, MSSH_GCONF_KEY_FG_COLOUR_FOCUS, colour_s);
+ }
+ 
+ static void mssh_pref_bg_colour_select_focus(GtkWidget *widget, gpointer data)
+ {
+-    GConfClient *client;
+     GdkRGBA colour;
+     const gchar *colour_s;
+ 
+-    client = gconf_client_get_default();
+-
+     gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(widget), &colour);
+     colour_s = gdk_rgba_to_string(&colour);
+ 
+-    gconf_client_set_string(client, MSSH_GCONF_KEY_BG_COLOUR_FOCUS, colour_s,
+-        NULL);
++    g_settings_set_string(settings, MSSH_GCONF_KEY_BG_COLOUR_FOCUS, colour_s);
+ }
+ static void mssh_pref_columns_select(GtkWidget *widget, gpointer data)
+ {
+-    GConfClient *client;
+     int columns;
+ 
+-    client = gconf_client_get_default();
+-
+     columns = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
+ 
+-    gconf_client_set_int(client, MSSH_GCONF_KEY_COLUMNS, columns, NULL);
++    g_settings_set_int(settings, MSSH_GCONF_KEY_COLUMNS, columns);
+ }
+ 
+ static void mssh_pref_backscroll_buffer_size_select(GtkWidget *widget, gpointer data)
+ {
+-    GConfClient *client;
+     gint backscroll_buffer_size;
+ 
+-    client = gconf_client_get_default();
+-
+     backscroll_buffer_size = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
+ 
+-    gconf_client_set_int(client, MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE, backscroll_buffer_size, NULL);
++    g_settings_set_int(settings, MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE, backscroll_buffer_size);
+ }
+ static void mssh_pref_timeout_select(GtkWidget *widget, gpointer data)
+ {
+-    GConfClient *client;
+     int timeout;
+ 
+-    client = gconf_client_get_default();
+-
+     timeout = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
+ 
+-    gconf_client_set_int(client, MSSH_GCONF_KEY_TIMEOUT, timeout, NULL);
++    g_settings_set_int(settings, MSSH_GCONF_KEY_TIMEOUT, timeout);
+ }
+ 
+ static void mssh_pref_close_check(GtkWidget *widget, gpointer data)
+ {
+-    GConfClient *client;
+     gboolean close;
+ 
+-    client = gconf_client_get_default();
+-
+     close = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+ 
+-    gconf_client_set_bool(client, MSSH_GCONF_KEY_CLOSE_ENDED, close, NULL);
++    g_settings_set_boolean(settings, MSSH_GCONF_KEY_CLOSE_ENDED, close);
+ }
+ 
+ static void mssh_pref_recolor_focused_check(GtkWidget *widget, gpointer data)
+ {
+-    GConfClient *client;
+     gboolean recolor_focused;
+ 
+-    client = gconf_client_get_default();
+-
+     recolor_focused = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+ 
+-    gconf_client_set_bool(client, MSSH_GCONF_KEY_RECOLOR_FOCUSED, recolor_focused, NULL);
++    g_settings_set_boolean(settings, MSSH_GCONF_KEY_RECOLOR_FOCUSED, recolor_focused);
+ }
+ static void mssh_pref_exit_check(GtkWidget *widget, gpointer data)
+ {
+-    GConfClient *client;
+     gboolean close;
+ 
+-    client = gconf_client_get_default();
+-
+     close = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+ 
+-    gconf_client_set_bool(client, MSSH_GCONF_KEY_QUIT_ALL_ENDED, close,
+-        NULL);
++    g_settings_set_boolean(settings, MSSH_GCONF_KEY_QUIT_ALL_ENDED, close);
+ }
+ 
+ static void mssh_pref_dir_focus_check(GtkWidget *widget, gpointer data)
+ {
+-    GConfClient *client;
+     gboolean focus;
+ 
+-    client = gconf_client_get_default();
+-
+     focus = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+ 
+-    gconf_client_set_bool(client, MSSH_GCONF_KEY_DIR_FOCUS, focus, NULL);
++    g_settings_set_boolean(settings, MSSH_GCONF_KEY_DIR_FOCUS, focus);
+ }
+ 
+ static void mssh_pref_modifier_check(GtkWidget *widget, gpointer data)
+ {
+-    GConfClient *client;
+     gboolean ctrl, alt, shift, super;
+     gint val;
+ 
+     MSSHPref * pref = MSSH_PREF(data);
+ 
+-    client = gconf_client_get_default();
+-
+     ctrl = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pref->ctrl));
+     shift = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pref->shift));
+     alt = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pref->alt));
+@@ -196,14 +154,12 @@
+ 
+     val = (shift << 0) | (ctrl << 2) | (alt << 3) | (super << 26);
+ 
+-    gconf_client_set_int(client, MSSH_GCONF_KEY_MODIFIER, val, NULL);
++    g_settings_set_int(settings, MSSH_GCONF_KEY_MODIFIER, val);
+ }
+ 
+ static void mssh_pref_init(MSSHPref* pref)
+ {
+-    GConfClient *client;
+-    GConfEntry *entry;
+-    GConfValue *value;
++    GVariant *value;
+     GdkRGBA colour;
+     const gchar *colour_s;
+ 
+@@ -378,99 +334,84 @@
+     g_signal_connect(G_OBJECT(mod_super_check), "toggled",
+         G_CALLBACK(mssh_pref_modifier_check), pref);
+ 
+-    client = gconf_client_get_default();
+-
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FONT, NULL,
+-        TRUE, NULL);
+-    value = gconf_entry_get_value(entry);
++    value = g_settings_get_value(settings, MSSH_GCONF_KEY_FONT);
+     gtk_font_chooser_set_font(GTK_FONT_CHOOSER(font_select),
+-        gconf_value_get_string(value));
++        g_variant_get_string(value, NULL));
++    g_variant_unref(value);
+ 
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR, NULL,
+-        TRUE, NULL);
+-    value = gconf_entry_get_value(entry);
+-    colour_s = gconf_value_get_string(value);
++    value = g_settings_get_value(settings, MSSH_GCONF_KEY_FG_COLOUR);
++    colour_s = g_variant_get_string(value, NULL);
+     gdk_rgba_parse(&colour, colour_s);
+     gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(fg_colour_select), 
+         &colour);
++    g_variant_unref(value);
+ 
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR, NULL,
+-        TRUE, NULL);
+-    value = gconf_entry_get_value(entry);
+-    colour_s = gconf_value_get_string(value);
++    value = g_settings_get_value(settings, MSSH_GCONF_KEY_BG_COLOUR);
++    colour_s = g_variant_get_string(value, NULL);
+     gdk_rgba_parse(&colour, colour_s);
+     gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(bg_colour_select),
+         &colour);
++    g_variant_unref(value);
+ 
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR_FOCUS, NULL,
+-        TRUE, NULL);
+-    value = gconf_entry_get_value(entry);
+-    colour_s = gconf_value_get_string(value);
++    value = g_settings_get_value(settings, MSSH_GCONF_KEY_FG_COLOUR_FOCUS);
++    colour_s = g_variant_get_string(value, NULL);
+     gdk_rgba_parse(&colour, colour_s);
+     gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(fg_colour_select_focus),
+         &colour);
++    g_variant_unref(value);
+ 
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR_FOCUS, NULL,
+-        TRUE, NULL);
+-    value = gconf_entry_get_value(entry);
+-    colour_s = gconf_value_get_string(value);
++    value = g_settings_get_value(settings, MSSH_GCONF_KEY_BG_COLOUR_FOCUS);
++    colour_s = g_variant_get_string(value, NULL);
+     gdk_rgba_parse(&colour, colour_s);
+     gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(bg_colour_select_focus),
+         &colour);
++    g_variant_unref(value);
+ 
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_COLUMNS, NULL,
+-        TRUE, NULL);
+-    value = gconf_entry_get_value(entry);
++    value = g_settings_get_value(settings, MSSH_GCONF_KEY_COLUMNS);
+     gtk_spin_button_set_value(GTK_SPIN_BUTTON(columns_select),
+-        gconf_value_get_int(value));
++        g_variant_get_int32(value));
++    g_variant_unref(value);
+ 
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE, NULL,
+-        TRUE, NULL);
+-    value = gconf_entry_get_value(entry);
++    value = g_settings_get_value(settings, MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE);
+     gtk_spin_button_set_value(GTK_SPIN_BUTTON(backscroll_buffer_size_select),
+-        gconf_value_get_int(value));
++        g_variant_get_int32(value));
++    g_variant_unref(value);
+ 
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_TIMEOUT, NULL,
+-        TRUE, NULL);
+-    value = gconf_entry_get_value(entry);
++    value = g_settings_get_value(settings, MSSH_GCONF_KEY_TIMEOUT);
+     gtk_spin_button_set_value(GTK_SPIN_BUTTON(timeout_select),
+-        gconf_value_get_int(value));
++        g_variant_get_int32(value));
++    g_variant_unref(value);
+ 
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_CLOSE_ENDED,
+-        NULL, TRUE, NULL);
+-    value = gconf_entry_get_value(entry);
++    value = g_settings_get_value(settings, MSSH_GCONF_KEY_CLOSE_ENDED);
+     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(close_check),
+-        gconf_value_get_bool(value));
++        g_variant_get_boolean(value));
++    g_variant_unref(value);
+ 
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_RECOLOR_FOCUSED,
+-        NULL, TRUE, NULL);
+-    value = gconf_entry_get_value(entry);
++    value = g_settings_get_value(settings, MSSH_GCONF_KEY_RECOLOR_FOCUSED);
+     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(recolor_focused_check),
+-        gconf_value_get_bool(value));
++        g_variant_get_boolean(value));
++    g_variant_unref(value);
+ 
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_QUIT_ALL_ENDED,
+-            NULL, TRUE, NULL);
+-    value = gconf_entry_get_value(entry);
++    value = g_settings_get_value(settings, MSSH_GCONF_KEY_QUIT_ALL_ENDED);
+     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(exit_check),
+-        gconf_value_get_bool(value));
++        g_variant_get_boolean(value));
++    g_variant_unref(value);
+ 
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_DIR_FOCUS,
+-            NULL, TRUE, NULL);
+-    value = gconf_entry_get_value(entry);
++    value = g_settings_get_value(settings, MSSH_GCONF_KEY_DIR_FOCUS);
+     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dir_focus_check),
+-        gconf_value_get_bool(value));
++        g_variant_get_boolean(value));
++    g_variant_unref(value);
+ 
+-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_MODIFIER,
+-            NULL, TRUE, NULL);
+-    value = gconf_entry_get_value(entry);
++    value = g_settings_get_value(settings, MSSH_GCONF_KEY_MODIFIER);
+     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mod_ctrl_check),
+-        (gconf_value_get_int(value) & GDK_CONTROL_MASK) ? 1 : 0);
++        (g_variant_get_int32(value) & GDK_CONTROL_MASK) ? 1 : 0);
+     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mod_shift_check),
+-        (gconf_value_get_int(value) & GDK_SHIFT_MASK) ? 1 : 0);
++        (g_variant_get_int32(value) & GDK_SHIFT_MASK) ? 1 : 0);
+     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mod_alt_check),
+-        (gconf_value_get_int(value) & GDK_MOD1_MASK) ? 1 : 0);
++        (g_variant_get_int32(value) & GDK_MOD1_MASK) ? 1 : 0);
+     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mod_super_check),
+-        (gconf_value_get_int(value) & GDK_SUPER_MASK) ? 1 : 0);
++        (g_variant_get_int32(value) & GDK_SUPER_MASK) ? 1 : 0);
++    g_variant_unref(value);
+ }
+ 
+ static void mssh_pref_class_init(MSSHPrefClass *klass)
+--- debian-mssh.orig/src/mssh-pref.h
++++ debian-mssh/src/mssh-pref.h
+@@ -31,7 +31,7 @@
+ 
+ GType mssh_pref_get_type(void) G_GNUC_CONST;
+ 
+-GtkWidget* mssh_pref_new(void);
++GtkWidget* mssh_pref_new(GSettings *settings);
+ 
+ G_END_DECLS
+ 
+--- debian-mssh.orig/src/mssh-gconf.c
++++ debian-mssh/src/mssh-gconf.c
+@@ -5,39 +5,38 @@
+ #include "mssh-window.h"
+ #include "mssh-terminal.h"
+ 
+-void mssh_gconf_notify_font(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data)
++void mssh_gconf_notify_font(GSettings *settings, const gchar *key,
++    gpointer data)
+ {
+     PangoFontDescription *font_desc;
+-    GConfValue *value;
++    gchar *value;
+     int i;
+ 
+     MSSHWindow *window = MSSH_WINDOW(data);
+ 
+-    value = gconf_entry_get_value(entry);
++    value = g_settings_get_string(settings, key);
+ 
+-    font_desc = pango_font_description_from_string(gconf_value_get_string(value));
++    font_desc = pango_font_description_from_string(value);
+     for(i = 0; i < window->terminals->len; i++)
+     {
+         vte_terminal_set_font(VTE_TERMINAL(g_array_index(
+             window->terminals, MSSHTerminal*, i)), font_desc);
+     }
+ 
++    g_free(value);
+     pango_font_description_free(font_desc);
+ }
+ 
+-void mssh_gconf_notify_fg_colour(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data)
++void mssh_gconf_notify_fg_colour(GSettings *settings, const gchar *key,
++    gpointer data)
+ {
+-    GConfValue *value;
+-    const gchar *colour_s;
++    gchar *colour_s;
+     GdkRGBA colour;
+     int i;
+ 
+     MSSHWindow *window = MSSH_WINDOW(data);
+ 
+-    value = gconf_entry_get_value(entry);
+-    colour_s = gconf_value_get_string(value);
++    colour_s = g_settings_get_string(settings, key);
+     gdk_rgba_parse(&colour, colour_s);
+ 
+     for(i = 0; i < window->terminals->len; i++)
+@@ -45,20 +44,20 @@
+         vte_terminal_set_color_foreground(VTE_TERMINAL(g_array_index(
+             window->terminals, MSSHTerminal*, i)), &colour);
+     }
++
++    g_free (colour_s);
+ }
+ 
+-void mssh_gconf_notify_bg_colour(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data)
++void mssh_gconf_notify_bg_colour(GSettings *settings, const gchar *key,
++    gpointer data)
+ {
+-    GConfValue *value;
+-    const gchar *colour_s;
++    gchar *colour_s;
+     GdkRGBA colour;
+     int i;
+ 
+     MSSHWindow *window = MSSH_WINDOW(data);
+ 
+-    value = gconf_entry_get_value(entry);
+-    colour_s = gconf_value_get_string(value);
++    colour_s = g_settings_get_string(settings, key);
+     gdk_rgba_parse(&colour, colour_s);
+ 
+     for(i = 0; i < window->terminals->len; i++)
+@@ -66,13 +65,14 @@
+         vte_terminal_set_color_background(VTE_TERMINAL(g_array_index(
+             window->terminals, MSSHTerminal*, i)), &colour);
+     }
++
++    g_free(colour_s);
+ }
+ 
+-void mssh_gconf_notify_fg_colour_focus(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data)
++void mssh_gconf_notify_fg_colour_focus(GSettings *settings, const gchar *key,
++    gpointer data)
+ {
+-    GConfValue *value;
+-    const gchar *colour_s;
++    gchar *colour_s;
+     GdkRGBA colour;
+     int i;
+     int idx = -1;
+@@ -80,8 +80,7 @@
+ 
+     MSSHWindow *window = MSSH_WINDOW(data);
+ 
+-    value = gconf_entry_get_value(entry);
+-    colour_s = gconf_value_get_string(value);
++    colour_s = g_settings_get_string(settings, key);
+     gdk_rgba_parse(&colour, colour_s);
+ 
+     /* get the currently focused window */
+@@ -103,13 +102,14 @@
+         vte_terminal_set_color_foreground(VTE_TERMINAL(g_array_index(
+             window->terminals, MSSHTerminal*, idx)), &colour);
+     }
++
++    g_free(colour_s);
+ }
+ 
+-void mssh_gconf_notify_bg_colour_focus(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data)
++void mssh_gconf_notify_bg_colour_focus(GSettings *settings, const gchar *key,
++    gpointer data)
+ {
+-    GConfValue *value;
+-    const gchar *colour_s;
++    gchar *colour_s;
+     GdkRGBA colour;
+     int i;
+     int idx = -1;
+@@ -117,8 +117,7 @@
+ 
+     MSSHWindow *window = MSSH_WINDOW(data);
+ 
+-    value = gconf_entry_get_value(entry);
+-    colour_s = gconf_value_get_string(value);
++    colour_s = g_settings_get_string(settings, key);
+     gdk_rgba_parse(&colour, colour_s);
+ 
+     /* get the currently focused window */
+@@ -141,62 +140,55 @@
+             window->terminals, MSSHTerminal*, idx)), &colour);
+     }
+ 
++    g_free(colour_s);
+ }
+-void mssh_gconf_notify_columns(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data)
++void mssh_gconf_notify_columns(GSettings *settings, const gchar *key,
++    gpointer data)
+ {
+-    GConfValue *value;
+     int columns;
+ 
+     MSSHWindow *window = MSSH_WINDOW(data);
+ 
+-    value = gconf_entry_get_value(entry);
+-    columns = gconf_value_get_int(value);
++    columns = g_settings_get_int(settings, key);
+ 
+     if(columns <= 0)
+     {
+         columns = 1;
+-        gconf_client_set_int(client, MSSH_GCONF_KEY_COLUMNS, columns,
+-            NULL);
++        g_settings_set_int(settings, MSSH_GCONF_KEY_COLUMNS, columns);
+     }
+ 
+     window->columns = columns;
+     mssh_window_relayout(window);
+ }
+ 
+-void mssh_gconf_notify_timeout(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data)
++void mssh_gconf_notify_timeout(GSettings *settings, const gchar *key,
++    gpointer data)
+ {
+-    GConfValue *value;
+     int timeout;
+ 
+     MSSHWindow *window = MSSH_WINDOW(data);
+ 
+-    value = gconf_entry_get_value(entry);
+-    timeout = gconf_value_get_int(value);
++    timeout = g_settings_get_int(settings, key);
+ 
+     if(timeout < 0)
+     {
+         timeout = 0;
+-        gconf_client_set_int(client, MSSH_GCONF_KEY_TIMEOUT, timeout,
+-            NULL);
++        g_settings_set_int(settings, MSSH_GCONF_KEY_TIMEOUT, timeout);
+     }
+ 
+     window->timeout = timeout;
+     mssh_window_relayout(window);
+ }
+ 
+-void mssh_gconf_notify_close_ended(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data)
++void mssh_gconf_notify_close_ended(GSettings *settings, const gchar *key,
++    gpointer data)
+ {
+-    GConfValue *value;
+     gboolean close_ended;
+     int i;
+ 
+     MSSHWindow *window = MSSH_WINDOW(data);
+ 
+-    value = gconf_entry_get_value(entry);
+-    close_ended = gconf_value_get_bool(value);
++    close_ended = g_settings_get_boolean(settings, key);
+ 
+     window->close_ended_sessions = close_ended;
+ 
+@@ -215,54 +207,40 @@
+     }
+ }
+ 
+-void mssh_gconf_notify_recolor_focused(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data)
++void mssh_gconf_notify_recolor_focused(GSettings *settings, const gchar *key,
++    gpointer data)
+ {
+-    GConfValue *value;
+     gboolean recolor_focused;
+ 
+     MSSHWindow *window = MSSH_WINDOW(data);
+ 
+-    value = gconf_entry_get_value(entry);
+-    recolor_focused = gconf_value_get_bool(value);
++    recolor_focused = g_settings_get_boolean(settings, key);
+ 
+     window->recolor_focused = recolor_focused;
+ 
+ }
+ 
+-void mssh_gconf_notify_quit_all_ended(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data)
++void mssh_gconf_notify_quit_all_ended(GSettings *settings, const gchar *key,
++    gpointer data)
+ {
+-    GConfValue *value;
+-
+     MSSHWindow *window = MSSH_WINDOW(data);
+ 
+-    value = gconf_entry_get_value(entry);
+-
+-    window->exit_on_all_closed = gconf_value_get_bool(value);
++    window->exit_on_all_closed = g_settings_get_boolean(settings, key);
+ }
+ 
+-void mssh_gconf_notify_dir_focus(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data)
++void mssh_gconf_notify_dir_focus(GSettings *settings, const gchar *key,
++    gpointer data)
+ {
+-    GConfValue *value;
+-
+     MSSHWindow *window = MSSH_WINDOW(data);
+ 
+-    value = gconf_entry_get_value(entry);
+-
+-    window->dir_focus = gconf_value_get_bool(value);
++    window->dir_focus = g_settings_get_boolean(settings, key);
+ }
+ 
+-void mssh_gconf_notify_modifier(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data)
++void mssh_gconf_notify_modifier(GSettings *settings, const gchar *key,
++    gpointer data)
+ {
+-    GConfValue *value;
+-
+     MSSHWindow *window = MSSH_WINDOW(data);
+ 
+-    value = gconf_entry_get_value(entry);
+-
+     if(window->accel)
+     {
+         gtk_accel_group_disconnect_key(window->accel, GDK_KEY_Up,
+@@ -275,7 +253,7 @@
+             window->modifier);
+     }
+ 
+-    window->modifier = gconf_value_get_int(value);
++    window->modifier = g_settings_get_int(settings, key);
+ 
+     if(window->accel)
+     {
+@@ -295,10 +273,9 @@
+ }
+ 
+ 
+-void mssh_gconf_backscroll_buffer_size(GConfClient *client, guint cnxn_id,
+-    GConfEntry *entry, gpointer data)
++void mssh_gconf_backscroll_buffer_size(GSettings *settings, const gchar *key,
++    gpointer data)
+ {
+-    GConfValue *value;
+     gint backscroll_buffer_size;
+ 
+     MSSHWindow *window = MSSH_WINDOW(data);
+@@ -306,15 +283,13 @@
+     int i;
+     int len = window->terminals->len;
+ 
+-    value = gconf_entry_get_value(entry);
+-    backscroll_buffer_size = gconf_value_get_int(value);
++    backscroll_buffer_size = g_settings_get_int(settings, key);
+ 
+ 
+     if (backscroll_buffer_size < -1)
+     {
+         backscroll_buffer_size = 5000;
+-        gconf_client_set_int(client, MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE, backscroll_buffer_size,
+-            NULL);
++        g_settings_set_int(settings, MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE, backscroll_buffer_size);
+     }
+ 
+     window->backscroll_buffer_size = backscroll_buffer_size;
+--- debian-mssh.orig/src/mssh.c
++++ debian-mssh/src/mssh.c
+@@ -227,6 +227,69 @@
+     return commands;
+ }
+ 
++/* Migrate existing GConf settings.  */
++static gchar *migrate_gconf_settings(const gchar *name)
++{
++    gboolean needed = TRUE;
++    GError *error = NULL;
++    GKeyFile *kf;
++    gchar **list;
++    gchar *msg = NULL;
++    gsize i, n;
++
++    kf = g_key_file_new();
++
++    if (!g_key_file_load_from_data_dirs(kf, "gsettings-data-convert",
++                                        NULL, G_KEY_FILE_NONE, NULL))
++    {
++        g_key_file_free(kf);
++        return NULL;
++    }
++
++    list = g_key_file_get_string_list(kf, "State", "converted", &n, NULL);
++
++    if (list)
++    {
++        for (i = 0; i < n; i++)
++            if (!g_strcmp0(list[i], name))
++            {
++                needed = FALSE;
++                break;
++            }
++
++        g_strfreev(list);
++    }
++
++  g_key_file_free(kf);
++
++  if (needed)
++  {
++      g_spawn_command_line_sync("gsettings-data-convert",
++                                NULL, NULL, NULL, &error);
++      if (error)
++      {
++          msg = g_strdup_printf(_("Could not migrate old GConf settings: %s\n"
++                                  "Please make sure that GConf is installed "
++                                  "and the gsettings-data-convert tool is in "
++                                  "your PATH.\nAlternatively, ignore this "
++                                  "message and convert your old settings "
++                                  "manually."), error->message);
++          g_error_free(error);
++      }
++      else
++      {
++          msg = g_strdup(_("Old GConf settings were migrated successfully."));
++
++          /* Allow some time for the GSettings backend to record the
++             changes, otherwise the default values from the new schema
++             might be set.  */
++          sleep(1);
++      }
++  }
++
++  return msg;
++}
++
+ int main(int argc, char* argv[], char* env[])
+ {
+     GtkWidget* window;
+@@ -236,6 +299,7 @@
+     GData **aliases = NULL;
+     GData **commands = NULL;
+     GArray *hosts = NULL;
++    gchar *gconf_migration_msg = NULL;
+ 
+     static struct option long_options[] =
+     {
+@@ -356,8 +420,23 @@
+     bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
+     textdomain(GETTEXT_PACKAGE);
+ 
++    gconf_migration_msg = migrate_gconf_settings("mssh.convert");
++
+     window = GTK_WIDGET(mssh_window_new());
+ 
++    if (gconf_migration_msg)
++    {
++        GtkWidget *dlg;
++
++        dlg = gtk_message_dialog_new(GTK_WINDOW(window),
++                                     GTK_DIALOG_DESTROY_WITH_PARENT,
++                                     GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
++                                     "%s", gconf_migration_msg);
++        g_free(gconf_migration_msg);
++        gtk_dialog_run(GTK_DIALOG(dlg));
++        gtk_widget_destroy(dlg);
++    }
++
+     g_signal_connect(G_OBJECT(window), "destroy",
+         G_CALLBACK(on_mssh_destroy), NULL);
+ 
+--- debian-mssh.orig/po/POTFILES.in
++++ debian-mssh/po/POTFILES.in
+@@ -3,3 +3,4 @@
+ ./src/mssh-pref.c
+ ./src/mssh-terminal.c
+ ./src/mssh-window.c
++[type: gettext/gsettings]es.hgarcia.mssh.gschema.xml

+ 15 - 0
mssh.convert

@@ -0,0 +1,15 @@
+[es.hgarcia.mssh]
+font = /apps/mssh/font
+fg-colour = /apps/mssh/fg_colour
+bg-colour = /apps/mssh/bg_colour
+recolor-focused = /apps/mssh/recolor_focused
+fg-colour-focus = /apps/mssh/fg_colour_focus
+bg-colour-focus = /apps/mssh/bg_colour_focus
+columns = /apps/mssh/columns
+timeout = /apps/mssh/timeout
+close-ended = /apps/mssh/close_ended
+quit-all-ended = /apps/mssh/quit_all_ended
+dir-focus = /apps/mssh/dir_focus
+use-pattern-expansion = /apps/mssh/use_pattern_expansion
+modifier = /apps/mssh/modifier
+backscroll-buffer-size = /apps/mssh/backscroll_buffer_size

+ 0 - 158
mssh.schemas

@@ -1,158 +0,0 @@
-<gconfschemafile>
-    <schemalist>
-        <schema>
-            <key>/schemas/apps/mssh/font</key>
-            <applyto>/apps/mssh/font</applyto>
-            <owner>mssh</owner>
-            <type>string</type>
-            <default>Monospace 10</default>
-            <locale name="C">
-                <short>Terminal font</short>
-                <long>Font to use for all MSSH terminals</long>
-            </locale>
-        </schema>
-        <schema>
-            <key>/schemas/apps/mssh/fg_colour</key>
-            <applyto>/apps/mssh/fg_colour</applyto>
-            <owner>mssh</owner>
-            <type>string</type>
-            <default>#ffffffffffff</default>
-            <locale name="C">
-                <short>Terminal foreground colour</short>
-                <long>Foreground colour to use for all MSSH terminals</long>
-            </locale>
-        </schema>
-        <schema>
-            <key>/schemas/apps/mssh/bg_colour</key>
-            <applyto>/apps/mssh/bg_colour</applyto>
-            <owner>mssh</owner>
-            <type>string</type>
-            <default>#000000000000</default>
-            <locale name="C">
-                <short>Terminal background colour</short>
-                <long>Background colour to use for all MSSH terminals</long>
-            </locale>
-        </schema>
-        <schema>
-            <key>/schemas/apps/mssh/recolor_focused</key>
-            <applyto>/apps/mssh/recolor_focused</applyto>
-            <owner>mssh</owner>
-            <type>bool</type>
-            <default>true</default>
-            <locale name="C">
-                <short>Recolor focused window</short>
-                <long>Use different Back- and Foreground color for focused window</long>
-            </locale>
-        </schema>
-        <schema>
-            <key>/schemas/apps/mssh/fg_colour_focus</key>
-            <applyto>/apps/mssh/fg_colour_focus</applyto>
-            <owner>mssh</owner>
-            <type>string</type>
-            <default>#ffffffffffff</default>
-            <locale name="C">
-                <short>Terminal foreground colour for the focused window</short>
-                <long>Foreground colour to use for the currently focused MSSH terminal</long>
-            </locale>
-        </schema>
-        <schema>
-            <key>/schemas/apps/mssh/bg_colour_focus</key>
-            <applyto>/apps/mssh/bg_colour_focus</applyto>
-            <owner>mssh</owner>
-            <type>string</type>
-            <default>#000000000000</default>
-            <locale name="C">
-                <short>Terminal background colour for the focused window</short>
-                <long>Background colour to use for the currently focused MSSH terminal</long>
-            </locale>
-        </schema>
-        <schema>
-            <key>/schemas/apps/mssh/coloums</key>
-            <applyto>/apps/mssh/columns</applyto>
-            <owner>mssh</owner>
-            <type>int</type>
-            <default>2</default>
-            <locale name="C">
-                <short>Terminal columns</short>
-                <long>Number of columns of tiled terminals</long>
-            </locale>
-        </schema>
-        <schema>
-            <key>/schemas/apps/mssh/timeout</key>
-            <applyto>/apps/mssh/timeout</applyto>
-            <owner>mssh</owner>
-            <type>int</type>
-            <default>2</default>
-            <locale name="C">
-                <short>Terminal close timeout</short>
-                <long>Timeout after which to close ended sessions</long>
-            </locale>
-        </schema>
-        <schema>
-            <key>/schemas/apps/mssh/close_ended</key>
-            <applyto>/apps/mssh/close_ended</applyto>
-            <owner>mssh</owner>
-            <type>bool</type>
-            <default>true</default>
-            <locale name="C">
-                <short>Close ended sessions</short>
-                <long>Close ended ssh sessions</long>
-            </locale>
-        </schema>
-        <schema>
-            <key>/schemas/apps/mssh/quit_all_ended</key>
-            <applyto>/apps/mssh/quit_all_ended</applyto>
-            <owner>mssh</owner>
-            <type>bool</type>
-            <default>false</default>
-            <locale name="C">
-                <short>Quit after all sessions ended</short>
-                <long>Quit MSSH when all ssh sessions have ended</long>
-            </locale>
-        </schema>
-        <schema>
-            <key>/schemas/apps/mssh/dir_focus</key>
-            <applyto>/apps/mssh/dir_focus</applyto>
-            <owner>mssh</owner>
-            <type>bool</type>
-            <default>true</default>
-            <locale name="C">
-                <short>Use directional focus</short>
-                <long>Uses directional focus rather than linear focus</long>
-            </locale>
-        </schema>
-        <schema>
-            <key>/schemas/apps/mssh/use_pattern_expansion</key>
-            <applyto>/apps/mssh/use_pattern_expansion</applyto>
-            <owner>mssh</owner>
-            <type>bool</type>
-            <default>true</default>
-            <locale name="C">
-                <short>Allow expansion of curly braces when adding new sessions</short>
-                <long>Use curly bracket expansion when adding new sessions</long>
-            </locale>
-        </schema>              
-        <schema>
-            <key>/schemas/apps/mssh/modifier</key>
-            <applyto>/apps/mssh/modifier</applyto>
-            <owner>mssh</owner>
-            <type>int</type>
-            <default>8</default>
-            <locale name="C">
-                <short>Shortcut modifier</short>
-                <long>Modifier used in focus shortcuts</long>
-            </locale>
-        </schema>
-        <schema>
-            <key>/schemas/apps/mssh/backscroll_buffer_size</key>
-            <applyto>/apps/mssh/backscroll_buffer_size</applyto>
-            <owner>mssh</owner>
-            <type>int</type>
-            <default>5000</default>
-            <locale name="C">
-                <short>Backscroll buffer size</short>
-                <long>Number of lines to keep for every window as a backscroll buffer. Set to -1 to make it infinite</long>
-            </locale>
-        </schema>        
-    </schemalist>
-</gconfschemafile>

+ 0 - 5
po/POTFILES

@@ -1,5 +0,0 @@
-	.././src/mssh.c \
-	.././src/mssh-gconf.c \
-	.././src/mssh-pref.c \
-	.././src/mssh-terminal.c \
-	.././src/mssh-window.c

+ 1 - 0
po/POTFILES.in

@@ -3,3 +3,4 @@
 ./src/mssh-pref.c
 ./src/mssh-terminal.c
 ./src/mssh-window.c
+[type: gettext/gsettings]es.hgarcia.mssh.gschema.xml

BIN
po/es.gmo


+ 0 - 127
po/mssh.pot

@@ -1,127 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR Free Software Foundation, Inc.
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: mssh 2.0\n"
-"Report-Msgid-Bugs-To: [email protected]\n"
-"POT-Creation-Date: 2014-03-20 17:39+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <[email protected]>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: src/mssh-pref.c:215
-msgid "Font:"
-msgstr ""
-
-#: src/mssh-pref.c:219
-msgid "Background:"
-msgstr ""
-
-#: src/mssh-pref.c:221
-msgid "Foreground:"
-msgstr ""
-
-#: src/mssh-pref.c:225
-msgid "Use different color for focused window"
-msgstr ""
-
-#: src/mssh-pref.c:228
-msgid "Background for focused window:"
-msgstr ""
-
-#: src/mssh-pref.c:230
-msgid "Foreground for focused window:"
-msgstr ""
-
-#: src/mssh-pref.c:233
-msgid "Quit after all sessions have ended"
-msgstr ""
-
-#: src/mssh-pref.c:235
-msgid "Close ended sessions"
-msgstr ""
-
-#: src/mssh-pref.c:239
-msgid "Closed ended sessions after"
-msgstr ""
-
-#: src/mssh-pref.c:243
-msgid "seconds"
-msgstr ""
-
-#: src/mssh-pref.c:246
-msgid "Columns:"
-msgstr ""
-
-#: src/mssh-pref.c:252
-msgid "Scrollback Lines:"
-msgstr ""
-
-#: src/mssh-pref.c:257
-msgid "Modifier:"
-msgstr ""
-
-#: src/mssh-pref.c:267
-msgid "Use directional focus"
-msgstr ""
-
-#: src/mssh-pref.c:345
-msgid "Preferences"
-msgstr ""
-
-#: src/mssh-window.c:271
-#, c-format
-msgid "mssh: Fatal Error: Can't find terminal to remove!\n"
-msgstr ""
-
-#: src/mssh-window.c:476
-msgid "File"
-msgstr ""
-
-#: src/mssh-window.c:477 src/mssh-window.c:489
-msgid "Edit"
-msgstr ""
-
-#: src/mssh-window.c:478
-msgid "Servers"
-msgstr ""
-
-#: src/mssh-window.c:479
-msgid "Commands"
-msgstr ""
-
-#: src/mssh-window.c:482
-msgid "Quit"
-msgstr ""
-
-#: src/mssh-window.c:484
-msgid "Send hostname"
-msgstr ""
-
-#: src/mssh-window.c:486
-msgid "Add session"
-msgstr ""
-
-#: src/mssh-window.c:819
-msgid "Add new session with hostname: "
-msgstr ""
-
-#: src/mssh-window.c:829
-msgid "Add"
-msgstr ""
-
-#: src/mssh-window.c:830
-msgid "Cancel"
-msgstr ""
-
-#: src/mssh-window.c:838
-msgid "Add new session"
-msgstr ""

+ 56 - 81
src/mssh-gconf.c

@@ -5,39 +5,38 @@
 #include "mssh-window.h"
 #include "mssh-terminal.h"
 
-void mssh_gconf_notify_font(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data)
+void mssh_gconf_notify_font(GSettings *settings, const gchar *key,
+    gpointer data)
 {
     PangoFontDescription *font_desc;
-    GConfValue *value;
+    gchar *value;
     int i;
 
     MSSHWindow *window = MSSH_WINDOW(data);
 
-    value = gconf_entry_get_value(entry);
+    value = g_settings_get_string(settings, key);
 
-    font_desc = pango_font_description_from_string(gconf_value_get_string(value));
+    font_desc = pango_font_description_from_string(value);
     for(i = 0; i < window->terminals->len; i++)
     {
         vte_terminal_set_font(VTE_TERMINAL(g_array_index(
             window->terminals, MSSHTerminal*, i)), font_desc);
     }
 
+    g_free(value);
     pango_font_description_free(font_desc);
 }
 
-void mssh_gconf_notify_fg_colour(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data)
+void mssh_gconf_notify_fg_colour(GSettings *settings, const gchar *key,
+    gpointer data)
 {
-    GConfValue *value;
-    const gchar *colour_s;
+    gchar *colour_s;
     GdkRGBA colour;
     int i;
 
     MSSHWindow *window = MSSH_WINDOW(data);
 
-    value = gconf_entry_get_value(entry);
-    colour_s = gconf_value_get_string(value);
+    colour_s = g_settings_get_string(settings, key);
     gdk_rgba_parse(&colour, colour_s);
 
     for(i = 0; i < window->terminals->len; i++)
@@ -45,20 +44,20 @@ void mssh_gconf_notify_fg_colour(GConfClient *client, guint cnxn_id,
         vte_terminal_set_color_foreground(VTE_TERMINAL(g_array_index(
             window->terminals, MSSHTerminal*, i)), &colour);
     }
+
+    g_free (colour_s);
 }
 
-void mssh_gconf_notify_bg_colour(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data)
+void mssh_gconf_notify_bg_colour(GSettings *settings, const gchar *key,
+    gpointer data)
 {
-    GConfValue *value;
-    const gchar *colour_s;
+    gchar *colour_s;
     GdkRGBA colour;
     int i;
 
     MSSHWindow *window = MSSH_WINDOW(data);
 
-    value = gconf_entry_get_value(entry);
-    colour_s = gconf_value_get_string(value);
+    colour_s = g_settings_get_string(settings, key);
     gdk_rgba_parse(&colour, colour_s);
 
     for(i = 0; i < window->terminals->len; i++)
@@ -66,13 +65,14 @@ void mssh_gconf_notify_bg_colour(GConfClient *client, guint cnxn_id,
         vte_terminal_set_color_background(VTE_TERMINAL(g_array_index(
             window->terminals, MSSHTerminal*, i)), &colour);
     }
+
+    g_free(colour_s);
 }
 
-void mssh_gconf_notify_fg_colour_focus(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data)
+void mssh_gconf_notify_fg_colour_focus(GSettings *settings, const gchar *key,
+    gpointer data)
 {
-    GConfValue *value;
-    const gchar *colour_s;
+    gchar *colour_s;
     GdkRGBA colour;
     int i;
     int idx = -1;
@@ -80,8 +80,7 @@ void mssh_gconf_notify_fg_colour_focus(GConfClient *client, guint cnxn_id,
 
     MSSHWindow *window = MSSH_WINDOW(data);
 
-    value = gconf_entry_get_value(entry);
-    colour_s = gconf_value_get_string(value);
+    colour_s = g_settings_get_string(settings, key);
     gdk_rgba_parse(&colour, colour_s);
 
     /* get the currently focused window */
@@ -103,13 +102,14 @@ void mssh_gconf_notify_fg_colour_focus(GConfClient *client, guint cnxn_id,
         vte_terminal_set_color_foreground(VTE_TERMINAL(g_array_index(
             window->terminals, MSSHTerminal*, idx)), &colour);
     }
+
+    g_free(colour_s);
 }
 
-void mssh_gconf_notify_bg_colour_focus(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data)
+void mssh_gconf_notify_bg_colour_focus(GSettings *settings, const gchar *key,
+    gpointer data)
 {
-    GConfValue *value;
-    const gchar *colour_s;
+    gchar *colour_s;
     GdkRGBA colour;
     int i;
     int idx = -1;
@@ -117,8 +117,7 @@ void mssh_gconf_notify_bg_colour_focus(GConfClient *client, guint cnxn_id,
 
     MSSHWindow *window = MSSH_WINDOW(data);
 
-    value = gconf_entry_get_value(entry);
-    colour_s = gconf_value_get_string(value);
+    colour_s = g_settings_get_string(settings, key);
     gdk_rgba_parse(&colour, colour_s);
 
     /* get the currently focused window */
@@ -141,62 +140,55 @@ void mssh_gconf_notify_bg_colour_focus(GConfClient *client, guint cnxn_id,
             window->terminals, MSSHTerminal*, idx)), &colour);
     }
 
+    g_free(colour_s);
 }
-void mssh_gconf_notify_columns(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data)
+void mssh_gconf_notify_columns(GSettings *settings, const gchar *key,
+    gpointer data)
 {
-    GConfValue *value;
     int columns;
 
     MSSHWindow *window = MSSH_WINDOW(data);
 
-    value = gconf_entry_get_value(entry);
-    columns = gconf_value_get_int(value);
+    columns = g_settings_get_int(settings, key);
 
     if(columns <= 0)
     {
         columns = 1;
-        gconf_client_set_int(client, MSSH_GCONF_KEY_COLUMNS, columns,
-            NULL);
+        g_settings_set_int(settings, MSSH_GCONF_KEY_COLUMNS, columns);
     }
 
     window->columns = columns;
     mssh_window_relayout(window);
 }
 
-void mssh_gconf_notify_timeout(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data)
+void mssh_gconf_notify_timeout(GSettings *settings, const gchar *key,
+    gpointer data)
 {
-    GConfValue *value;
     int timeout;
 
     MSSHWindow *window = MSSH_WINDOW(data);
 
-    value = gconf_entry_get_value(entry);
-    timeout = gconf_value_get_int(value);
+    timeout = g_settings_get_int(settings, key);
 
     if(timeout < 0)
     {
         timeout = 0;
-        gconf_client_set_int(client, MSSH_GCONF_KEY_TIMEOUT, timeout,
-            NULL);
+        g_settings_set_int(settings, MSSH_GCONF_KEY_TIMEOUT, timeout);
     }
 
     window->timeout = timeout;
     mssh_window_relayout(window);
 }
 
-void mssh_gconf_notify_close_ended(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data)
+void mssh_gconf_notify_close_ended(GSettings *settings, const gchar *key,
+    gpointer data)
 {
-    GConfValue *value;
     gboolean close_ended;
     int i;
 
     MSSHWindow *window = MSSH_WINDOW(data);
 
-    value = gconf_entry_get_value(entry);
-    close_ended = gconf_value_get_bool(value);
+    close_ended = g_settings_get_boolean(settings, key);
 
     window->close_ended_sessions = close_ended;
 
@@ -215,54 +207,40 @@ void mssh_gconf_notify_close_ended(GConfClient *client, guint cnxn_id,
     }
 }
 
-void mssh_gconf_notify_recolor_focused(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data)
+void mssh_gconf_notify_recolor_focused(GSettings *settings, const gchar *key,
+    gpointer data)
 {
-    GConfValue *value;
     gboolean recolor_focused;
 
     MSSHWindow *window = MSSH_WINDOW(data);
 
-    value = gconf_entry_get_value(entry);
-    recolor_focused = gconf_value_get_bool(value);
+    recolor_focused = g_settings_get_boolean(settings, key);
 
     window->recolor_focused = recolor_focused;
 
 }
 
-void mssh_gconf_notify_quit_all_ended(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data)
+void mssh_gconf_notify_quit_all_ended(GSettings *settings, const gchar *key,
+    gpointer data)
 {
-    GConfValue *value;
-
     MSSHWindow *window = MSSH_WINDOW(data);
 
-    value = gconf_entry_get_value(entry);
-
-    window->exit_on_all_closed = gconf_value_get_bool(value);
+    window->exit_on_all_closed = g_settings_get_boolean(settings, key);
 }
 
-void mssh_gconf_notify_dir_focus(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data)
+void mssh_gconf_notify_dir_focus(GSettings *settings, const gchar *key,
+    gpointer data)
 {
-    GConfValue *value;
-
     MSSHWindow *window = MSSH_WINDOW(data);
 
-    value = gconf_entry_get_value(entry);
-
-    window->dir_focus = gconf_value_get_bool(value);
+    window->dir_focus = g_settings_get_boolean(settings, key);
 }
 
-void mssh_gconf_notify_modifier(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data)
+void mssh_gconf_notify_modifier(GSettings *settings, const gchar *key,
+    gpointer data)
 {
-    GConfValue *value;
-
     MSSHWindow *window = MSSH_WINDOW(data);
 
-    value = gconf_entry_get_value(entry);
-
     if(window->accel)
     {
         gtk_accel_group_disconnect_key(window->accel, GDK_KEY_Up,
@@ -275,7 +253,7 @@ void mssh_gconf_notify_modifier(GConfClient *client, guint cnxn_id,
             window->modifier);
     }
 
-    window->modifier = gconf_value_get_int(value);
+    window->modifier = g_settings_get_int(settings, key);
 
     if(window->accel)
     {
@@ -295,10 +273,9 @@ void mssh_gconf_notify_modifier(GConfClient *client, guint cnxn_id,
 }
 
 
-void mssh_gconf_backscroll_buffer_size(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data)
+void mssh_gconf_backscroll_buffer_size(GSettings *settings, const gchar *key,
+    gpointer data)
 {
-    GConfValue *value;
     gint backscroll_buffer_size;
 
     MSSHWindow *window = MSSH_WINDOW(data);
@@ -306,15 +283,13 @@ void mssh_gconf_backscroll_buffer_size(GConfClient *client, guint cnxn_id,
     int i;
     int len = window->terminals->len;
 
-    value = gconf_entry_get_value(entry);
-    backscroll_buffer_size = gconf_value_get_int(value);
+    backscroll_buffer_size = g_settings_get_int(settings, key);
 
 
     if (backscroll_buffer_size < -1)
     {
         backscroll_buffer_size = 5000;
-        gconf_client_set_int(client, MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE, backscroll_buffer_size,
-            NULL);
+        g_settings_set_int(settings, MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE, backscroll_buffer_size);
     }
 
     window->backscroll_buffer_size = backscroll_buffer_size;

+ 40 - 41
src/mssh-gconf.h

@@ -1,48 +1,47 @@
 #ifndef __MSSH_GCONF__
 #define __MSSH_GCONF__
 
-#include <gconf/gconf-client.h>
+#include <gio/gio.h>
 
-#define MSSH_GCONF_PATH                 		"/apps/mssh"
-#define MSSH_GCONF_KEY_FONT             		MSSH_GCONF_PATH"/font"
-#define MSSH_GCONF_KEY_FG_COLOUR        		MSSH_GCONF_PATH"/fg_colour"
-#define MSSH_GCONF_KEY_BG_COLOUR        		MSSH_GCONF_PATH"/bg_colour"
-#define MSSH_GCONF_KEY_FG_COLOUR_FOCUS          MSSH_GCONF_PATH"/fg_colour_focus"
-#define MSSH_GCONF_KEY_BG_COLOUR_FOCUS          MSSH_GCONF_PATH"/bg_colour_focus"
-#define MSSH_GCONF_KEY_COLUMNS          		MSSH_GCONF_PATH"/columns"
-#define MSSH_GCONF_KEY_TIMEOUT          		MSSH_GCONF_PATH"/timeout"
-#define MSSH_GCONF_KEY_CLOSE_ENDED      		MSSH_GCONF_PATH"/close_ended"
-#define MSSH_GCONF_KEY_RECOLOR_FOCUSED          MSSH_GCONF_PATH"/recolor_focused"
-#define MSSH_GCONF_KEY_QUIT_ALL_ENDED   		MSSH_GCONF_PATH"/quit_all_ended"
-#define MSSH_GCONF_KEY_MODIFIER         		MSSH_GCONF_PATH"/modifier"
-#define MSSH_GCONF_KEY_DIR_FOCUS        		MSSH_GCONF_PATH"/dir_focus"
-#define MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE 	MSSH_GCONF_PATH"/backscroll_buffer_size"
+#define MSSH_GCONF_KEY_FONT             		"font"
+#define MSSH_GCONF_KEY_FG_COLOUR        		"fg-colour"
+#define MSSH_GCONF_KEY_BG_COLOUR        		"bg-colour"
+#define MSSH_GCONF_KEY_FG_COLOUR_FOCUS          "fg-colour-focus"
+#define MSSH_GCONF_KEY_BG_COLOUR_FOCUS          "bg-colour-focus"
+#define MSSH_GCONF_KEY_COLUMNS          		"columns"
+#define MSSH_GCONF_KEY_TIMEOUT          		"timeout"
+#define MSSH_GCONF_KEY_CLOSE_ENDED      		"close-ended"
+#define MSSH_GCONF_KEY_RECOLOR_FOCUSED          "recolor-focused"
+#define MSSH_GCONF_KEY_QUIT_ALL_ENDED   		"quit-all-ended"
+#define MSSH_GCONF_KEY_MODIFIER         		"modifier"
+#define MSSH_GCONF_KEY_DIR_FOCUS        		"dir-focus"
+#define MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE 	"backscroll-buffer-size"
 
-void mssh_gconf_notify_font(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data);
-void mssh_gconf_notify_fg_colour(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data);
-void mssh_gconf_notify_bg_colour(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data);
-void mssh_gconf_notify_fg_colour_focus(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data);
-void mssh_gconf_notify_bg_colour_focus(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data);
-void mssh_gconf_notify_columns(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data);
-void mssh_gconf_notify_timeout(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data);
-void mssh_gconf_notify_close_ended(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data);
-void mssh_gconf_notify_quit_all_ended(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data);
-void mssh_gconf_notify_modifier(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data);
-void mssh_gconf_notify_dir_focus(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data);
-void mssh_gconf_backscroll_buffer_size(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data);
-void mssh_gconf_notify_recolor_focused(GConfClient *client, guint cnxn_id,
-    GConfEntry *entry, gpointer data);
+void mssh_gconf_notify_font(GSettings *settings, const gchar *key,
+                            gpointer data);
+void mssh_gconf_notify_fg_colour(GSettings *settings, const gchar *key,
+                                 gpointer data);
+void mssh_gconf_notify_bg_colour(GSettings *settings, const gchar *key,
+                                 gpointer data);
+void mssh_gconf_notify_fg_colour_focus(GSettings *settings, const gchar *key,
+                                       gpointer data);
+void mssh_gconf_notify_bg_colour_focus(GSettings *settings, const gchar *key,
+                                       gpointer data);
+void mssh_gconf_notify_columns(GSettings *settings, const gchar *key,
+                               gpointer data);
+void mssh_gconf_notify_timeout(GSettings *settings, const gchar *key,
+                               gpointer data);
+void mssh_gconf_notify_close_ended(GSettings *settings, const gchar *key,
+                                   gpointer data);
+void mssh_gconf_notify_quit_all_ended(GSettings *settings, const gchar *key,
+                                      gpointer data);
+void mssh_gconf_notify_modifier(GSettings *settings, const gchar *key,
+                                gpointer data);
+void mssh_gconf_notify_dir_focus(GSettings *settings, const gchar *key,
+                                 gpointer data);
+void mssh_gconf_backscroll_buffer_size(GSettings *settings, const gchar *key,
+                                       gpointer data);
+void mssh_gconf_notify_recolor_focused(GSettings *settings, const gchar *key,
+                                       gpointer data);
 
 #endif

+ 61 - 120
src/mssh-pref.c

@@ -1,5 +1,3 @@
-#include <gconf/gconf-client.h>
-
 #define GETTEXT_PACKAGE "mssh"
 #include <glib/gi18n-lib.h>
 
@@ -7,13 +5,17 @@
 
 #include "mssh-pref.h"
 
+GSettings *settings;
+
 static void mssh_pref_init(MSSHPref* pref);
 static void mssh_pref_class_init(MSSHPrefClass *klass);
 
 G_DEFINE_TYPE(MSSHPref, mssh_pref, GTK_TYPE_WINDOW)
 
-GtkWidget* mssh_pref_new(void)
+GtkWidget* mssh_pref_new(GSettings *window_settings)
 {
+    settings = window_settings;
+
     return g_object_new(MSSH_TYPE_PREF, NULL);
 }
 
@@ -26,169 +28,125 @@ static void mssh_pref_close(GtkWidget *widget, gpointer data)
 
 static void mssh_pref_font_select(GtkWidget *widget, gpointer data)
 {
-    GConfClient *client;
     const gchar *font;
 
-    client = gconf_client_get_default();
-
     font = gtk_font_chooser_get_font (GTK_FONT_CHOOSER(widget));
 
-    gconf_client_set_string(client, MSSH_GCONF_KEY_FONT, font, NULL);
+    g_settings_set_string(settings, MSSH_GCONF_KEY_FONT, font);
 }
 
 static void mssh_pref_fg_colour_select(GtkWidget *widget, gpointer data)
 {
-    GConfClient *client;
     GdkRGBA colour;
     const gchar *colour_s;
 
-    client = gconf_client_get_default();
-
     gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(widget), &colour);
     colour_s = gdk_rgba_to_string(&colour);
 
-    gconf_client_set_string(client, MSSH_GCONF_KEY_FG_COLOUR, colour_s,
-        NULL);
+    g_settings_set_string(settings, MSSH_GCONF_KEY_FG_COLOUR, colour_s);
 }
 
 static void mssh_pref_bg_colour_select(GtkWidget *widget, gpointer data)
 {
-    GConfClient *client;
     GdkRGBA colour;
     const gchar *colour_s;
 
-    client = gconf_client_get_default();
-
     gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(widget), &colour);
     colour_s = gdk_rgba_to_string(&colour);
 
-    gconf_client_set_string(client, MSSH_GCONF_KEY_BG_COLOUR, colour_s,
-        NULL);
+    g_settings_set_string(settings, MSSH_GCONF_KEY_BG_COLOUR, colour_s);
 }
 
 static void mssh_pref_fg_colour_select_focus(GtkWidget *widget, gpointer data)
 {
-    GConfClient *client;
     GdkRGBA colour;
     const gchar *colour_s;
 
-    client = gconf_client_get_default();
-
     gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(widget), &colour);
     colour_s = gdk_rgba_to_string(&colour);
 
 
-    gconf_client_set_string(client, MSSH_GCONF_KEY_FG_COLOUR_FOCUS, colour_s,
-        NULL);
+    g_settings_set_string(settings, MSSH_GCONF_KEY_FG_COLOUR_FOCUS, colour_s);
 }
 
 static void mssh_pref_bg_colour_select_focus(GtkWidget *widget, gpointer data)
 {
-    GConfClient *client;
     GdkRGBA colour;
     const gchar *colour_s;
 
-    client = gconf_client_get_default();
-
     gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(widget), &colour);
     colour_s = gdk_rgba_to_string(&colour);
 
-    gconf_client_set_string(client, MSSH_GCONF_KEY_BG_COLOUR_FOCUS, colour_s,
-        NULL);
+    g_settings_set_string(settings, MSSH_GCONF_KEY_BG_COLOUR_FOCUS, colour_s);
 }
 static void mssh_pref_columns_select(GtkWidget *widget, gpointer data)
 {
-    GConfClient *client;
     int columns;
 
-    client = gconf_client_get_default();
-
     columns = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
 
-    gconf_client_set_int(client, MSSH_GCONF_KEY_COLUMNS, columns, NULL);
+    g_settings_set_int(settings, MSSH_GCONF_KEY_COLUMNS, columns);
 }
 
 static void mssh_pref_backscroll_buffer_size_select(GtkWidget *widget, gpointer data)
 {
-    GConfClient *client;
     gint backscroll_buffer_size;
 
-    client = gconf_client_get_default();
-
     backscroll_buffer_size = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
 
-    gconf_client_set_int(client, MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE, backscroll_buffer_size, NULL);
+    g_settings_set_int(settings, MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE, backscroll_buffer_size);
 }
 static void mssh_pref_timeout_select(GtkWidget *widget, gpointer data)
 {
-    GConfClient *client;
     int timeout;
 
-    client = gconf_client_get_default();
-
     timeout = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
 
-    gconf_client_set_int(client, MSSH_GCONF_KEY_TIMEOUT, timeout, NULL);
+    g_settings_set_int(settings, MSSH_GCONF_KEY_TIMEOUT, timeout);
 }
 
 static void mssh_pref_close_check(GtkWidget *widget, gpointer data)
 {
-    GConfClient *client;
     gboolean close;
 
-    client = gconf_client_get_default();
-
     close = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
-    gconf_client_set_bool(client, MSSH_GCONF_KEY_CLOSE_ENDED, close, NULL);
+    g_settings_set_boolean(settings, MSSH_GCONF_KEY_CLOSE_ENDED, close);
 }
 
 static void mssh_pref_recolor_focused_check(GtkWidget *widget, gpointer data)
 {
-    GConfClient *client;
     gboolean recolor_focused;
 
-    client = gconf_client_get_default();
-
     recolor_focused = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
-    gconf_client_set_bool(client, MSSH_GCONF_KEY_RECOLOR_FOCUSED, recolor_focused, NULL);
+    g_settings_set_boolean(settings, MSSH_GCONF_KEY_RECOLOR_FOCUSED, recolor_focused);
 }
 static void mssh_pref_exit_check(GtkWidget *widget, gpointer data)
 {
-    GConfClient *client;
     gboolean close;
 
-    client = gconf_client_get_default();
-
     close = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
-    gconf_client_set_bool(client, MSSH_GCONF_KEY_QUIT_ALL_ENDED, close,
-        NULL);
+    g_settings_set_boolean(settings, MSSH_GCONF_KEY_QUIT_ALL_ENDED, close);
 }
 
 static void mssh_pref_dir_focus_check(GtkWidget *widget, gpointer data)
 {
-    GConfClient *client;
     gboolean focus;
 
-    client = gconf_client_get_default();
-
     focus = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
-    gconf_client_set_bool(client, MSSH_GCONF_KEY_DIR_FOCUS, focus, NULL);
+    g_settings_set_boolean(settings, MSSH_GCONF_KEY_DIR_FOCUS, focus);
 }
 
 static void mssh_pref_modifier_check(GtkWidget *widget, gpointer data)
 {
-    GConfClient *client;
     gboolean ctrl, alt, shift, super;
     gint val;
 
     MSSHPref * pref = MSSH_PREF(data);
 
-    client = gconf_client_get_default();
-
     ctrl = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pref->ctrl));
     shift = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pref->shift));
     alt = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pref->alt));
@@ -196,14 +154,12 @@ static void mssh_pref_modifier_check(GtkWidget *widget, gpointer data)
 
     val = (shift << 0) | (ctrl << 2) | (alt << 3) | (super << 26);
 
-    gconf_client_set_int(client, MSSH_GCONF_KEY_MODIFIER, val, NULL);
+    g_settings_set_int(settings, MSSH_GCONF_KEY_MODIFIER, val);
 }
 
 static void mssh_pref_init(MSSHPref* pref)
 {
-    GConfClient *client;
-    GConfEntry *entry;
-    GConfValue *value;
+    GVariant *value;
     GdkRGBA colour;
     const gchar *colour_s;
 
@@ -378,99 +334,84 @@ static void mssh_pref_init(MSSHPref* pref)
     g_signal_connect(G_OBJECT(mod_super_check), "toggled",
         G_CALLBACK(mssh_pref_modifier_check), pref);
 
-    client = gconf_client_get_default();
-
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FONT, NULL,
-        TRUE, NULL);
-    value = gconf_entry_get_value(entry);
+    value = g_settings_get_value(settings, MSSH_GCONF_KEY_FONT);
     gtk_font_chooser_set_font(GTK_FONT_CHOOSER(font_select),
-        gconf_value_get_string(value));
+        g_variant_get_string(value, NULL));
+    g_variant_unref(value);
 
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR, NULL,
-        TRUE, NULL);
-    value = gconf_entry_get_value(entry);
-    colour_s = gconf_value_get_string(value);
+    value = g_settings_get_value(settings, MSSH_GCONF_KEY_FG_COLOUR);
+    colour_s = g_variant_get_string(value, NULL);
     gdk_rgba_parse(&colour, colour_s);
     gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(fg_colour_select), 
         &colour);
+    g_variant_unref(value);
 
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR, NULL,
-        TRUE, NULL);
-    value = gconf_entry_get_value(entry);
-    colour_s = gconf_value_get_string(value);
+    value = g_settings_get_value(settings, MSSH_GCONF_KEY_BG_COLOUR);
+    colour_s = g_variant_get_string(value, NULL);
     gdk_rgba_parse(&colour, colour_s);
     gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(bg_colour_select),
         &colour);
+    g_variant_unref(value);
 
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR_FOCUS, NULL,
-        TRUE, NULL);
-    value = gconf_entry_get_value(entry);
-    colour_s = gconf_value_get_string(value);
+    value = g_settings_get_value(settings, MSSH_GCONF_KEY_FG_COLOUR_FOCUS);
+    colour_s = g_variant_get_string(value, NULL);
     gdk_rgba_parse(&colour, colour_s);
     gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(fg_colour_select_focus),
         &colour);
+    g_variant_unref(value);
 
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR_FOCUS, NULL,
-        TRUE, NULL);
-    value = gconf_entry_get_value(entry);
-    colour_s = gconf_value_get_string(value);
+    value = g_settings_get_value(settings, MSSH_GCONF_KEY_BG_COLOUR_FOCUS);
+    colour_s = g_variant_get_string(value, NULL);
     gdk_rgba_parse(&colour, colour_s);
     gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(bg_colour_select_focus),
         &colour);
+    g_variant_unref(value);
 
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_COLUMNS, NULL,
-        TRUE, NULL);
-    value = gconf_entry_get_value(entry);
+    value = g_settings_get_value(settings, MSSH_GCONF_KEY_COLUMNS);
     gtk_spin_button_set_value(GTK_SPIN_BUTTON(columns_select),
-        gconf_value_get_int(value));
+        g_variant_get_int32(value));
+    g_variant_unref(value);
 
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE, NULL,
-        TRUE, NULL);
-    value = gconf_entry_get_value(entry);
+    value = g_settings_get_value(settings, MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE);
     gtk_spin_button_set_value(GTK_SPIN_BUTTON(backscroll_buffer_size_select),
-        gconf_value_get_int(value));
+        g_variant_get_int32(value));
+    g_variant_unref(value);
 
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_TIMEOUT, NULL,
-        TRUE, NULL);
-    value = gconf_entry_get_value(entry);
+    value = g_settings_get_value(settings, MSSH_GCONF_KEY_TIMEOUT);
     gtk_spin_button_set_value(GTK_SPIN_BUTTON(timeout_select),
-        gconf_value_get_int(value));
+        g_variant_get_int32(value));
+    g_variant_unref(value);
 
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_CLOSE_ENDED,
-        NULL, TRUE, NULL);
-    value = gconf_entry_get_value(entry);
+    value = g_settings_get_value(settings, MSSH_GCONF_KEY_CLOSE_ENDED);
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(close_check),
-        gconf_value_get_bool(value));
+        g_variant_get_boolean(value));
+    g_variant_unref(value);
 
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_RECOLOR_FOCUSED,
-        NULL, TRUE, NULL);
-    value = gconf_entry_get_value(entry);
+    value = g_settings_get_value(settings, MSSH_GCONF_KEY_RECOLOR_FOCUSED);
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(recolor_focused_check),
-        gconf_value_get_bool(value));
+        g_variant_get_boolean(value));
+    g_variant_unref(value);
 
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_QUIT_ALL_ENDED,
-            NULL, TRUE, NULL);
-    value = gconf_entry_get_value(entry);
+    value = g_settings_get_value(settings, MSSH_GCONF_KEY_QUIT_ALL_ENDED);
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(exit_check),
-        gconf_value_get_bool(value));
+        g_variant_get_boolean(value));
+    g_variant_unref(value);
 
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_DIR_FOCUS,
-            NULL, TRUE, NULL);
-    value = gconf_entry_get_value(entry);
+    value = g_settings_get_value(settings, MSSH_GCONF_KEY_DIR_FOCUS);
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dir_focus_check),
-        gconf_value_get_bool(value));
+        g_variant_get_boolean(value));
+    g_variant_unref(value);
 
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_MODIFIER,
-            NULL, TRUE, NULL);
-    value = gconf_entry_get_value(entry);
+    value = g_settings_get_value(settings, MSSH_GCONF_KEY_MODIFIER);
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mod_ctrl_check),
-        (gconf_value_get_int(value) & GDK_CONTROL_MASK) ? 1 : 0);
+        (g_variant_get_int32(value) & GDK_CONTROL_MASK) ? 1 : 0);
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mod_shift_check),
-        (gconf_value_get_int(value) & GDK_SHIFT_MASK) ? 1 : 0);
+        (g_variant_get_int32(value) & GDK_SHIFT_MASK) ? 1 : 0);
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mod_alt_check),
-        (gconf_value_get_int(value) & GDK_MOD1_MASK) ? 1 : 0);
+        (g_variant_get_int32(value) & GDK_MOD1_MASK) ? 1 : 0);
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mod_super_check),
-        (gconf_value_get_int(value) & GDK_SUPER_MASK) ? 1 : 0);
+        (g_variant_get_int32(value) & GDK_SUPER_MASK) ? 1 : 0);
+    g_variant_unref(value);
 }
 
 static void mssh_pref_class_init(MSSHPrefClass *klass)

+ 1 - 1
src/mssh-pref.h

@@ -31,7 +31,7 @@ typedef struct
 
 GType mssh_pref_get_type(void) G_GNUC_CONST;
 
-GtkWidget* mssh_pref_new(void);
+GtkWidget* mssh_pref_new(GSettings *settings);
 
 G_END_DECLS
 

+ 86 - 121
src/mssh-window.c

@@ -2,7 +2,6 @@
 #include <stdlib.h>
 #include <stdio.h>
 
-#include <gconf/gconf-client.h>
 #include <gdk/gdkkeysyms.h>
 #include <gtk/gtk.h>
 
@@ -94,7 +93,7 @@ static void mssh_window_destroy(GtkWidget *widget, gpointer data)
 static void mssh_window_pref(GtkWidget *widget, gpointer data)
 {
     MSSHWindow *window = MSSH_WINDOW(data);
-    GtkWidget *pref = mssh_pref_new();
+    GtkWidget *pref = mssh_pref_new(window->settings);
 
     gtk_window_set_transient_for(GTK_WINDOW(pref), GTK_WINDOW(window));
     gtk_window_set_modal(GTK_WINDOW(pref), TRUE);
@@ -139,22 +138,16 @@ static gboolean mssh_window_key_press(GtkWidget *widget,
 static gboolean mssh_window_entry_focused(GtkWidget *widget,
     GtkDirectionType dir, gpointer data)
 {
-    GConfClient *client;
-    GConfEntry *entry;
     MSSHWindow *window = MSSH_WINDOW(data);
 
     gtk_window_set_title(GTK_WINDOW(window), PACKAGE_NAME" - All");
     window->last_focus = NULL;
 
     /* clear the coloring for the focused window */
-    client = gconf_client_get_default();
-
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR, NULL,
-        TRUE, NULL);
-    mssh_gconf_notify_fg_colour(client, 0, entry, window);
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR, NULL,
-        TRUE, NULL);
-    mssh_gconf_notify_bg_colour(client, 0, entry, window);
+    mssh_gconf_notify_fg_colour(window->settings, MSSH_GCONF_KEY_FG_COLOUR,
+                                window);
+    mssh_gconf_notify_bg_colour(window->settings, MSSH_GCONF_KEY_BG_COLOUR,
+                                window);
     return FALSE;
 }
 
@@ -163,8 +156,6 @@ gboolean mssh_window_focus(GtkWidget *widget, GObject *acceleratable,
 {
     MSSHWindow *window = MSSH_WINDOW(data);
     GtkWidget *focus;
-    GConfClient *client;
-    GConfEntry *entry;
 
     int i, idx = -1, len = window->terminals->len;
     int wcols = window->columns_override ? window->columns_override :
@@ -183,16 +174,12 @@ gboolean mssh_window_focus(GtkWidget *widget, GObject *acceleratable,
         }
     }
 
-    client = gconf_client_get_default();
-
     /* recolor the windows */
     if (window->recolor_focused) {
-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR, NULL,
-            TRUE, NULL);
-        mssh_gconf_notify_fg_colour(client, 0, entry, window);
-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR, NULL,
-            TRUE, NULL);
-        mssh_gconf_notify_bg_colour(client, 0, entry, window);
+        mssh_gconf_notify_fg_colour(window->settings,
+                                    MSSH_GCONF_KEY_FG_COLOUR, window);
+        mssh_gconf_notify_bg_colour(window->settings,
+                                    MSSH_GCONF_KEY_BG_COLOUR, window);
     }
     if(focus == window->global_entry && keyval == GDK_KEY_Down &&
         window->dir_focus)
@@ -326,8 +313,6 @@ static void mssh_window_session_focused(MSSHTerminal *terminal,
     char *title;
     size_t len;
 
-    GConfClient *client;
-    GConfEntry *entry;
     MSSHWindow *window = MSSH_WINDOW(data);
 
     len = strlen(PACKAGE_NAME" - ") + strlen(terminal->hostname) + 1;
@@ -338,31 +323,26 @@ static void mssh_window_session_focused(MSSHTerminal *terminal,
     gtk_window_set_title(GTK_WINDOW(window), title);
 
     free(title);
-    client = gconf_client_get_default();
 
     /* recolor all windows */
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR, NULL,
-        TRUE, NULL);
-    mssh_gconf_notify_fg_colour(client, 0, entry, window);
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR, NULL,
-        TRUE, NULL);
-    mssh_gconf_notify_bg_colour(client, 0, entry, window);
+    mssh_gconf_notify_fg_colour(window->settings, MSSH_GCONF_KEY_FG_COLOUR,
+                                window);
+    mssh_gconf_notify_bg_colour(window->settings, MSSH_GCONF_KEY_BG_COLOUR,
+                                window);
 
     /* recolor the focused window - if needed */
     if (window->recolor_focused && window->is_maximized == 0) {
-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR_FOCUS, NULL,
-            TRUE, NULL);
-        mssh_gconf_notify_fg_colour_focus(client, 0, entry, window);
-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR_FOCUS, NULL,
-            TRUE, NULL);
-        mssh_gconf_notify_bg_colour_focus(client, 0, entry, window);
+        mssh_gconf_notify_fg_colour_focus(window->settings,
+                                          MSSH_GCONF_KEY_FG_COLOUR_FOCUS,
+                                          window);
+        mssh_gconf_notify_bg_colour_focus(window->settings,
+                                          MSSH_GCONF_KEY_BG_COLOUR_FOCUS,
+                                          window);
     }
 }
 
 void mssh_window_relayout(MSSHWindow *window)
 {
-    GConfClient *client;
-    GConfEntry *entry;
     GtkWidget *focus;
     int i, len = window->terminals->len;
     int wcols = window->columns_override ? window->columns_override :
@@ -428,19 +408,13 @@ void mssh_window_relayout(MSSHWindow *window)
         }
     }
 
-    client = gconf_client_get_default();
-
     gtk_widget_show_all(GTK_WIDGET(window));
 
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FONT, NULL,
-        TRUE, NULL);
-    mssh_gconf_notify_font(client, 0, entry, window);
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR, NULL,
-        TRUE, NULL);
-    mssh_gconf_notify_fg_colour(client, 0, entry, window);
-    entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR, NULL,
-        TRUE, NULL);
-    mssh_gconf_notify_bg_colour(client, 0, entry, window);
+    mssh_gconf_notify_font(window->settings, MSSH_GCONF_KEY_FONT, window);
+    mssh_gconf_notify_fg_colour(window->settings, MSSH_GCONF_KEY_FG_COLOUR,
+                                window);
+    mssh_gconf_notify_bg_colour(window->settings, MSSH_GCONF_KEY_BG_COLOUR,
+                                window);
 
     gtk_window_set_focus(GTK_WINDOW(window), GTK_WIDGET(focus));
 }
@@ -467,8 +441,6 @@ static void mssh_window_add_session(MSSHWindow *window, char *hostname)
 
 static void mssh_window_init(MSSHWindow* window)
 {
-    GConfClient *client;
-
     GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
     GtkWidget *entry = gtk_entry_new();
 
@@ -553,46 +525,54 @@ static void mssh_window_init(MSSHWindow* window)
     gtk_window_set_default_size(GTK_WINDOW(window), 1024, 768);
     gtk_window_set_title(GTK_WINDOW(window), PACKAGE_NAME);
 
-    client = gconf_client_get_default();
-
-    gconf_client_add_dir(client, MSSH_GCONF_PATH,
-        GCONF_CLIENT_PRELOAD_RECURSIVE, NULL);
-
-    gconf_client_notify_add(client, MSSH_GCONF_KEY_FONT,
-        mssh_gconf_notify_font, window, NULL, NULL);
-    gconf_client_notify_add(client, MSSH_GCONF_KEY_FG_COLOUR,
-        mssh_gconf_notify_fg_colour, window, NULL, NULL);
-    gconf_client_notify_add(client, MSSH_GCONF_KEY_BG_COLOUR,
-        mssh_gconf_notify_bg_colour, window, NULL, NULL);
-    gconf_client_notify_add(client, MSSH_GCONF_KEY_FG_COLOUR_FOCUS,
-        mssh_gconf_notify_fg_colour_focus, window, NULL, NULL);
-    gconf_client_notify_add(client, MSSH_GCONF_KEY_BG_COLOUR_FOCUS,
-        mssh_gconf_notify_bg_colour_focus, window, NULL, NULL);
-    gconf_client_notify_add(client, MSSH_GCONF_KEY_COLUMNS,
-        mssh_gconf_notify_columns, window, NULL, NULL);
-    gconf_client_notify_add(client, MSSH_GCONF_KEY_TIMEOUT,
-        mssh_gconf_notify_timeout, window, NULL, NULL);
-    gconf_client_notify_add(client, MSSH_GCONF_KEY_CLOSE_ENDED,
-        mssh_gconf_notify_close_ended, window, NULL, NULL);
-    gconf_client_notify_add(client, MSSH_GCONF_KEY_RECOLOR_FOCUSED,
-        mssh_gconf_notify_recolor_focused, window, NULL, NULL);
-    gconf_client_notify_add(client, MSSH_GCONF_KEY_QUIT_ALL_ENDED,
-        mssh_gconf_notify_quit_all_ended, window, NULL, NULL);
-    gconf_client_notify_add(client, MSSH_GCONF_KEY_DIR_FOCUS,
-        mssh_gconf_notify_dir_focus, window, NULL, NULL);
-    gconf_client_notify_add(client, MSSH_GCONF_KEY_MODIFIER,
-        mssh_gconf_notify_modifier, window, NULL, NULL);
-    gconf_client_notify_add(client, MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE,
-        mssh_gconf_backscroll_buffer_size, window, NULL, NULL);
-
-    gconf_client_notify(client, MSSH_GCONF_KEY_COLUMNS);
-    gconf_client_notify(client, MSSH_GCONF_KEY_TIMEOUT);
-    gconf_client_notify(client, MSSH_GCONF_KEY_CLOSE_ENDED);
-    gconf_client_notify(client, MSSH_GCONF_KEY_RECOLOR_FOCUSED);
-    gconf_client_notify(client, MSSH_GCONF_KEY_QUIT_ALL_ENDED);
-    gconf_client_notify(client, MSSH_GCONF_KEY_DIR_FOCUS);
-    gconf_client_notify(client, MSSH_GCONF_KEY_MODIFIER);
-    gconf_client_notify(client, MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE);
+    window->settings = g_settings_new("es.hgarcia.mssh");
+
+    g_signal_connect(window->settings, "changed::"MSSH_GCONF_KEY_FONT,
+                     G_CALLBACK(mssh_gconf_notify_font), window);
+    g_signal_connect(window->settings, "changed::"MSSH_GCONF_KEY_FG_COLOUR,
+                     G_CALLBACK(mssh_gconf_notify_fg_colour), window);
+    g_signal_connect(window->settings, "changed::"MSSH_GCONF_KEY_BG_COLOUR,
+                     G_CALLBACK(mssh_gconf_notify_bg_colour), window);
+    g_signal_connect(window->settings,
+                     "changed::"MSSH_GCONF_KEY_FG_COLOUR_FOCUS,
+                     G_CALLBACK(mssh_gconf_notify_fg_colour_focus), window);
+    g_signal_connect(window->settings,
+                     "changed::"MSSH_GCONF_KEY_BG_COLOUR_FOCUS,
+                     G_CALLBACK(mssh_gconf_notify_bg_colour_focus), window);
+    g_signal_connect(window->settings, "changed::"MSSH_GCONF_KEY_COLUMNS,
+                     G_CALLBACK(mssh_gconf_notify_columns), window);
+    g_signal_connect(window->settings, "changed::"MSSH_GCONF_KEY_TIMEOUT,
+                     G_CALLBACK(mssh_gconf_notify_timeout), window);
+    g_signal_connect(window->settings, "changed::"MSSH_GCONF_KEY_CLOSE_ENDED,
+                     G_CALLBACK(mssh_gconf_notify_close_ended), window);
+    g_signal_connect(window->settings,
+                     "changed::"MSSH_GCONF_KEY_RECOLOR_FOCUSED,
+                     G_CALLBACK(mssh_gconf_notify_recolor_focused), window);
+    g_signal_connect(window->settings, "changed::"MSSH_GCONF_KEY_QUIT_ALL_ENDED,
+                     G_CALLBACK(mssh_gconf_notify_quit_all_ended), window);
+    g_signal_connect(window->settings, "changed::"MSSH_GCONF_KEY_DIR_FOCUS,
+                     G_CALLBACK(mssh_gconf_notify_dir_focus), window);
+    g_signal_connect(window->settings, "changed::"MSSH_GCONF_KEY_MODIFIER,
+                     G_CALLBACK(mssh_gconf_notify_modifier), window);
+    g_signal_connect(window->settings,
+                     "changed::"MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE,
+                     G_CALLBACK(mssh_gconf_backscroll_buffer_size), window);
+
+    mssh_gconf_notify_columns(window->settings, MSSH_GCONF_KEY_COLUMNS, window);
+    mssh_gconf_notify_timeout(window->settings, MSSH_GCONF_KEY_TIMEOUT, window);
+    mssh_gconf_notify_close_ended(window->settings, MSSH_GCONF_KEY_CLOSE_ENDED,
+                                  window);
+    mssh_gconf_notify_recolor_focused(window->settings,
+                                      MSSH_GCONF_KEY_RECOLOR_FOCUSED, window);
+    mssh_gconf_notify_quit_all_ended(window->settings,
+                                     MSSH_GCONF_KEY_QUIT_ALL_ENDED, window);
+    mssh_gconf_notify_dir_focus(window->settings, MSSH_GCONF_KEY_DIR_FOCUS,
+                                window);
+    mssh_gconf_notify_modifier(window->settings, MSSH_GCONF_KEY_MODIFIER,
+                               window);
+    mssh_gconf_backscroll_buffer_size(window->settings,
+                                      MSSH_GCONF_KEY_BACKSCROLL_BUFFER_SIZE,
+                                      window);
 
     gtk_accel_group_connect(accel, GDK_KEY_Up, window->modifier,
         GTK_ACCEL_VISIBLE, g_cclosure_new(
@@ -667,8 +647,6 @@ static void mssh_window_class_init(MSSHWindowClass *klass)
 void mssh_window_relayout_for_one(MSSHWindow *window, GtkWidget *t)
 {
 
-    GConfClient *client;
-    GConfEntry *entry;
     int len = window->terminals->len;
     int wcols = window->columns_override ? window->columns_override :
         window->columns;
@@ -692,14 +670,10 @@ void mssh_window_relayout_for_one(MSSHWindow *window, GtkWidget *t)
     /* remove the coloring */
     if (window->recolor_focused) {
 
-        client = gconf_client_get_default();
-
-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR, NULL,
-            TRUE, NULL);
-        mssh_gconf_notify_fg_colour(client, 0, entry, window);
-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR, NULL,
-            TRUE, NULL);
-        mssh_gconf_notify_bg_colour(client, 0, entry, window);
+        mssh_gconf_notify_fg_colour(window->settings, MSSH_GCONF_KEY_FG_COLOUR,
+                                    window);
+        mssh_gconf_notify_bg_colour(window->settings, MSSH_GCONF_KEY_BG_COLOUR,
+                                    window);
     }
 
     g_object_unref(terminal);
@@ -731,8 +705,6 @@ static void mssh_window_maximize(GtkWidget *widget, gpointer data)
     int i;
     int idx = -1;
     int len = window->terminals->len;
-    GConfClient *client;
-    GConfEntry *entry;
 
     /* get the currently focused window */
     GtkWidget *focus = gtk_window_get_focus(GTK_WINDOW(window));
@@ -752,14 +724,10 @@ static void mssh_window_maximize(GtkWidget *widget, gpointer data)
 
     /* recolor the window with the normal color */
     if (window->recolor_focused) {
-        client = gconf_client_get_default();
-
-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR, NULL,
-            TRUE, NULL);
-        mssh_gconf_notify_fg_colour(client, 0, entry, window);
-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR, NULL,
-            TRUE, NULL);
-        mssh_gconf_notify_bg_colour(client, 0, entry, window);
+        mssh_gconf_notify_fg_colour(window->settings, MSSH_GCONF_KEY_FG_COLOUR,
+                                    window);
+        mssh_gconf_notify_bg_colour(window->settings, MSSH_GCONF_KEY_BG_COLOUR,
+                                    window);
     }
     if (idx == -1) {
         /* there's no window focused, do nothing */
@@ -774,8 +742,6 @@ static void mssh_window_maximize(GtkWidget *widget, gpointer data)
 static void mssh_window_restore_layout(GtkWidget *widget, gpointer data)
 {
 
-    GConfClient *client;
-    GConfEntry *entry;
     /* get the window */
     MSSHWindow *window = MSSH_WINDOW(data);
 
@@ -789,14 +755,13 @@ static void mssh_window_restore_layout(GtkWidget *widget, gpointer data)
     }
 
     /* recolor the focused window - if needed */
-    client = gconf_client_get_default();
     if (window->recolor_focused && window->is_maximized == 0) {
-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_FG_COLOUR_FOCUS, NULL,
-            TRUE, NULL);
-        mssh_gconf_notify_fg_colour_focus(client, 0, entry, window);
-        entry = gconf_client_get_entry(client, MSSH_GCONF_KEY_BG_COLOUR_FOCUS, NULL,
-            TRUE, NULL);
-        mssh_gconf_notify_bg_colour_focus(client, 0, entry, window);
+        mssh_gconf_notify_fg_colour_focus(window->settings,
+                                          MSSH_GCONF_KEY_FG_COLOUR_FOCUS,
+                                          window);
+        mssh_gconf_notify_bg_colour_focus(window->settings,
+                                          MSSH_GCONF_KEY_BG_COLOUR_FOCUS,
+                                          window);
 	}
 }
 

+ 1 - 0
src/mssh-window.h

@@ -41,6 +41,7 @@ typedef struct
     int is_maximized;
     gboolean recolor_focused;
     GData **commands;
+    GSettings *settings;
 } MSSHWindow;
 
 typedef struct

+ 79 - 0
src/mssh.c

@@ -228,6 +228,69 @@ GData **parse_commands(char *conffile)
     return commands;
 }
 
+/* Migrate existing GConf settings.  */
+static gchar *migrate_gconf_settings(const gchar *name)
+{
+    gboolean needed = TRUE;
+    GError *error = NULL;
+    GKeyFile *kf;
+    gchar **list;
+    gchar *msg = NULL;
+    gsize i, n;
+
+    kf = g_key_file_new();
+
+    if (!g_key_file_load_from_data_dirs(kf, "gsettings-data-convert",
+                                        NULL, G_KEY_FILE_NONE, NULL))
+    {
+        g_key_file_free(kf);
+        return NULL;
+    }
+
+    list = g_key_file_get_string_list(kf, "State", "converted", &n, NULL);
+
+    if (list)
+    {
+        for (i = 0; i < n; i++)
+            if (!g_strcmp0(list[i], name))
+            {
+                needed = FALSE;
+                break;
+            }
+
+        g_strfreev(list);
+    }
+
+  g_key_file_free(kf);
+
+  if (needed)
+  {
+      g_spawn_command_line_sync("gsettings-data-convert",
+                                NULL, NULL, NULL, &error);
+      if (error)
+      {
+          msg = g_strdup_printf(_("Could not migrate old GConf settings: %s\n"
+                                  "Please make sure that GConf is installed "
+                                  "and the gsettings-data-convert tool is in "
+                                  "your PATH.\nAlternatively, ignore this "
+                                  "message and convert your old settings "
+                                  "manually."), error->message);
+          g_error_free(error);
+      }
+      else
+      {
+          msg = g_strdup(_("Old GConf settings were migrated successfully."));
+
+          /* Allow some time for the GSettings backend to record the
+             changes, otherwise the default values from the new schema
+             might be set.  */
+          sleep(1);
+      }
+  }
+
+  return msg;
+}
+
 int main(int argc, char* argv[], char* env[])
 {
     GtkWidget* window;
@@ -237,6 +300,7 @@ int main(int argc, char* argv[], char* env[])
     GData **aliases = NULL;
     GData **commands = NULL;
     GArray *hosts = NULL, *tmp_hosts = NULL;
+    gchar *gconf_migration_msg = NULL;
 
     static struct option long_options[] =
     {
@@ -359,8 +423,23 @@ int main(int argc, char* argv[], char* env[])
     bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
     textdomain(GETTEXT_PACKAGE);
 
+    gconf_migration_msg = migrate_gconf_settings("mssh.convert");
+
     window = GTK_WIDGET(mssh_window_new());
 
+    if (gconf_migration_msg)
+    {
+        GtkWidget *dlg;
+
+        dlg = gtk_message_dialog_new(GTK_WINDOW(window),
+                                     GTK_DIALOG_DESTROY_WITH_PARENT,
+                                     GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
+                                     "%s", gconf_migration_msg);
+        g_free(gconf_migration_msg);
+        gtk_dialog_run(GTK_DIALOG(dlg));
+        gtk_widget_destroy(dlg);
+    }
+
     g_signal_connect(G_OBJECT(window), "destroy",
         G_CALLBACK(on_mssh_destroy), NULL);