Description: Port to GTK+ 3.
 Migrate from libpopt to GOption.
 Migrate frome GnomeCanvas to GooCanvas.
 Migrate from old-style ~/.gnome2 configuration files to GSettings.
Bug-Debian: https://bugs.debian.org/868382
Author: Yavor Doganov <yavor@gnu.org>
Forwarded: no
Last-Update: 2018-09-26
---

--- gbatnav-1.0.4cvs20051004.orig/configure.in
+++ gbatnav-1.0.4cvs20051004/configure.in
@@ -12,13 +12,14 @@
 AC_HEADER_STDC
 AC_ARG_PROGRAM
 
-PKG_CHECK_MODULES(GNOME,[libgnomeui-2.0])
+PKG_CHECK_MODULES(GNOME,[goocanvas-2.0])
 AC_SUBST(GNOME_CFLAGS)
 AC_SUBST(GNOME_LIBS)
 
 ALL_LINGUAS="es de pl ja ru fr sv"
 AM_GNU_GETTEXT
 
+GLIB_GSETTINGS
 
 dnl DATADIRNAME is generated by AM_GNU_GETTEXT; 
 dnl note this has to match the path installed by po/Makefile
--- gbatnav-1.0.4cvs20051004.orig/gbnserver/g_interface.h
+++ gbatnav-1.0.4cvs20051004/gbnserver/g_interface.h
@@ -4,7 +4,6 @@
 #define __BN_G_INTERFACE_H__
 
 #include <stdarg.h>
-#include <gnome.h>
 #include "protocol.h"
 
 void init_screen();
--- gbatnav-1.0.4cvs20051004.orig/gbnserver/gbnserver.c
+++ gbatnav-1.0.4cvs20051004/gbnserver/gbnserver.c
@@ -30,7 +30,9 @@
 
 /* Includes de la interface */
 #include <config.h>
-#include <gnome.h>
+#include <glib/gi18n.h>
+#include <glib/gstdio.h>
+#include <gtk/gtk.h>
 
 #include "protocol.h"			/* definicion del protocolo */
 #include "server.h"
@@ -58,21 +60,54 @@
 extern struct { char *nombre; } st_nombres[];
 
 /* This describes all the arguments we understand.  */
-static struct poptOption options[] =
+static GOptionEntry options[] =
 {
-	{ "port", 'p', POPT_ARG_INT, &usuario.port, 0,  N_("PORT"), N_("Port number. Default is 1995")},
+	{ "port", 'p', G_OPTION_FLAG_NONE, G_OPTION_ARG_INT, &usuario.port, N_("Port number. Default is 1995"), N_("PORT")},
 #ifdef WITH_GGZ
-	{ "ggz", 0, POPT_ARG_NONE, &usuario.with_ggz, 0,  NULL, N_("Enables GGZ mode")},
+	{ "ggz", 0, G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &usuario.with_ggz, N_("Enables GGZ mode"), NULL},
 #endif /* WITH_GGZ */
-	{ NULL, '\0',  0, NULL  }
+	{ NULL }
 };
 
-void init_args( void )
+
+/* Migrate old settings from ~/.gnome2/gbnserver.  */
+static void migrate_old_settings( GSettings *settings )
 {
-	usuario.port = gnome_config_get_int_with_default("/gbnserver/data/port=1995",NULL);
+	GKeyFile *kf;
+	gchar *file;
+
+	kf = g_key_file_new();
+	file = g_build_filename(g_get_home_dir(), ".gnome2",
+	                        "gbnserver", NULL);
+	if(g_key_file_load_from_file(kf, file, G_KEY_FILE_NONE, NULL)) {
+	        gchar **groups;
+	        gsize len;
+
+	        /* File exists but if the user never changed the
+	           settings it will contain only the Placement section
+	           (automatically created internal Bonobo stuff).  */
+	        groups = g_key_file_get_groups(kf, &len);
+	        if(len > 1) {
+	                gint i;
+
+	                i = g_key_file_get_integer(kf, "data", "port", NULL);
+	                g_settings_set_uint(settings, "port", i);
+	                fprintf(stdout,
+	                        _("Sucessfully migrated old settings.\n"));
+	         } else
+	                fprintf(stdout,
+	                        _("Found empty old config file; deleted.\n"));
+
+	        g_strfreev(groups);
+	        g_unlink(file);
+	}
+	g_free(file);
+	g_key_file_free(kf);
+}
 
-	gnome_config_set_int("/gbnserver/data/port",usuario.port);
-	gnome_config_sync();
+void init_args( GSettings *settings )
+{
+	usuario.port = g_settings_get_uint(settings, "port");
 }
 /***************************************************************************
 		funciones relacionadas con las tablas 
@@ -116,7 +151,7 @@
 void borrar_jugador( int num_jug )
 {
 	if( ! usuario.with_ggz )
-		gdk_input_remove( usuario.tag[num_jug] );
+		g_source_remove( usuario.tag[num_jug] );
 #ifdef WITH_GGZ
 	else
 		batnavggz_del_fd(usuario.nro_fd[num_jug]);
@@ -325,31 +360,36 @@
 	return BATNAV_STATUS_SUCCESS;
 }
 
-void ex_loop( gpointer data, gint que_sock, GdkInputCondition GDK_INPUT_READ)
+gboolean ex_loop( GIOChannel *src, GIOCondition cond, gpointer data )
 {
-	int i,j,k,client_len;
+	guint i;
+	int j,que_sock,client_len;
         char str[150];
         struct sockaddr client;
+        GIOChannel *channel;
 
 	client_len = sizeof(client);
-	k = que_sock;
+	que_sock = g_io_channel_unix_get_fd(src);
 	
 	if( que_sock==usuario.sock ) { /* AF_INET */
 		if( (que_sock=accept(usuario.sock, (struct sockaddr *) &client,&client_len)) < 0 ) {
 			perror("accept error");
-			return;
+			return FALSE;
 		} 
 	}
 
 	if( (j=accept_new_player(que_sock)) < 0)
-		return;
+		return FALSE;
 
-	i = gdk_input_add( que_sock, GDK_INPUT_READ, play_batnav, NULL );
-	if(i<0) {
+	channel = g_io_channel_unix_new( que_sock );
+	i = g_io_add_watch( channel, G_IO_IN, play_batnav, NULL );
+	g_io_channel_unref( channel );
+	if(i == 0) {
 		usuario.nro_fd[j]=-1;
 		usuario.nro_tot[j]=DISCON;
 		close(que_sock);
-		return;
+		g_io_channel_shutdown(channel, FALSE, NULL);
+		return FALSE;
 	}
 
 	usuario.tag[j]=i;
@@ -358,7 +398,7 @@
 
 	say_in_clist( j, C_HOSTNAME, str);
 	say_in_clist( j, C_STATUS, _(st_nombres[CONNEC].nombre) );
-	return;
+	return TRUE;
 }
 
 /**
@@ -366,11 +406,15 @@
  */
 void main_loop()
 {
+        GIOChannel *channel;
+
         usuario.sock = net_listen(usuario.server_name,usuario.port);
 	
 	init_screen();
 
-	gdk_input_add( usuario.sock, GDK_INPUT_READ, ex_loop, NULL );
+	channel=g_io_channel_unix_new( usuario.sock );
+	g_io_add_watch( channel, G_IO_IN, ex_loop, NULL );
+	g_io_channel_unref( channel );
 
 	gtk_main();
 }
@@ -381,25 +425,33 @@
 int main(int argc, char *argv[]) 
 {
 	int i ;
-	poptContext ctx=NULL;
+	GSettings *settings;
+	GOptionContext *ctx=NULL;
+	GError *error=NULL;
 	
 	dont_run_as_root();
 
 	bindtextdomain (PACKAGE, GNOMELOCALEDIR);
 	textdomain (PACKAGE);
 
-	init_args();
-
-	ctx = poptGetContext(NULL,argc,argv,options,0);
-	if(ctx) {
-		while( poptGetNextOpt(ctx) != -1);
-		poptFreeContext(ctx);
-	}
+	settings=g_settings_new("net.sf.batnav.gbnserver");
+	migrate_old_settings(settings);
+	init_args(settings);
+
+	ctx=g_option_context_new(_("- Batalla Naval Server"));
+	g_option_context_add_main_entries(ctx, options, PACKAGE);
+	g_option_context_add_group(ctx, gtk_get_option_group (TRUE));
 
 	if( ! usuario.with_ggz)
-		gnome_init_with_popt_table("gbnserver", BNVERSION, argc, argv, options,0, NULL);
+	        if( ! g_option_context_parse(ctx, &argc, &argv, &error) ) {
+	                fprintf(stderr, _("Option parsing failed: %s\n"),
+	                        error->message);
+	                g_error_free(error);
+	                exit(EXIT_FAILURE);
+	        }
 
 	gethostname(usuario.server_name,50);
+	gtk_init(&argc, &argv);
    
 	printf( "\n"
 		BNVERSION"\n" 
--- gbatnav-1.0.4cvs20051004.orig/gbnserver/play.c
+++ gbatnav-1.0.4cvs20051004/gbnserver/play.c
@@ -4,7 +4,9 @@
 	Funcion que se encarga de poner las reglas al juego y todo eso
 ************************************************************************/
 #include <config.h>
-#include <gnome.h>
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <stdio.h>
 #include <unistd.h>
 #include <errno.h>
 #include "protocol.h"	
@@ -520,10 +522,11 @@
 }
 
 
-void
-play_batnav( gpointer data, int fd, GdkInputCondition GDK_INPUT_READ)
+gboolean
+play_batnav( GIOChannel *src, GIOCondition cond, gpointer data )
 {
 	int i,j;
+	gint fd;
 	PARSER p;
 	char str[PROT_MAX_LEN];
 	DELIM igualador={ '=', ':', '=' };
@@ -534,16 +537,17 @@
 
 	str[0]=0;
 
+	fd=g_io_channel_unix_get_fd( src );
 	j=net_readline( fd, str, PROT_MAX_LEN );
 
 	if( j<1 ) {
 		token_exit(fd);
-		return;
+		return FALSE;
 	}
 	
 	j=quejugador( fd );
 	if(j<0 || j>=MAXPLAYER)
-		return;
+		return FALSE;
 
 	strncpy(p.sig,str,sizeof(p.sig));
 	
@@ -552,5 +556,5 @@
 		if(p.status) 
 			lookup_funcion( fd,&p );
 	} while(i);
-	return ;
+	return TRUE;
 }
--- gbatnav-1.0.4cvs20051004.orig/gbnserver/play.h
+++ gbatnav-1.0.4cvs20051004/gbnserver/play.h
@@ -3,7 +3,7 @@
 # define __BN_PLAY_H__
 #include <gdk/gdk.h>
 
-void play_batnav( gpointer , gint , GdkInputCondition );
+gboolean play_batnav( GIOChannel *src , GIOCondition cond , gpointer data );
 gint quejugador( gint );
 void token_exit( gint );
 void token_start( gint );
--- gbatnav-1.0.4cvs20051004.orig/gbnserver/server.h
+++ gbatnav-1.0.4cvs20051004/gbnserver/server.h
@@ -2,7 +2,6 @@
 #ifndef __BN_SERVER_H__
 #define __BN_SERVER_H__
 
-#include <gnome.h>
 #include "protocol.h"
 
 
--- gbatnav-1.0.4cvs20051004.orig/gbnserver/version.h
+++ gbatnav-1.0.4cvs20051004/gbnserver/version.h
@@ -2,7 +2,6 @@
 #ifndef __VERSION_H__
 #define __VERSION_H__
 
-#include <gnome.h>
 #include <config.h>
 
 #ifdef INET6
--- gbatnav-1.0.4cvs20051004.orig/gbnserver/Makefile.am
+++ gbatnav-1.0.4cvs20051004/gbnserver/Makefile.am
@@ -40,7 +40,11 @@
 	$(INTLLIBS) \
 	@GNOME_LIBS@
 
-EXTRA_DIST = README AUTHORS index.html gbnserver.desktop gbatnav-topic.dat gnome-gbatnavd.png index.html
+EXTRA_DIST = README AUTHORS index.html gbnserver.desktop gbatnav-topic.dat gnome-gbatnavd.png index.html $(gsettings_SCHEMAS)
+
+gsettings_SCHEMAS = net.sf.batnav.gbnserver.gschema.xml
+
+@GSETTINGS_RULES@
 
 appicon_DATA = gnome-gbatnavd.png
 
--- gbatnav-1.0.4cvs20051004.orig/gbnserver/check_board.c
+++ gbatnav-1.0.4cvs20051004/gbnserver/check_board.c
@@ -14,7 +14,7 @@
 /* exported: algoritmo() */
 
 #include <stdlib.h>
-#include <gnome.h>
+#include <glib.h>
 #include <config.h>
 #include "check_board.h"
 #include "protocol.h"
--- gbatnav-1.0.4cvs20051004.orig/gbnserver/g_interface.c
+++ gbatnav-1.0.4cvs20051004/gbnserver/g_interface.c
@@ -4,7 +4,8 @@
  *                             gnome interface				      *
  *****************************************************************************/
 #include <config.h>
-#include <gnome.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
 #include <stdarg.h>
 
 #include "server.h"
@@ -19,14 +20,31 @@
 static GtkWidget *vscrollbar[MAXPLAYER];
 
 static GtkWidget *clist=NULL;
+static GtkListStore *store=NULL;
 
+enum {
+  NUMBER,
+  NAME,
+  HOSTNAME,
+  VERSION_COL,
+  STATUS,
+  TOKEN,
+  N_COLUMNS
+};
 
 void say_in_clist( gint x, gint y, const gchar *str)
 {
+	GtkTreePath *path;
+	GtkTreeIter iter;
+	gchar *tmp;
+
 	if (clist==NULL) return;
-	gtk_clist_freeze (GTK_CLIST(clist));
-	gtk_clist_set_text( GTK_CLIST(clist),x, y,str);
-	gtk_clist_thaw (GTK_CLIST(clist));
+	tmp = g_strdup_printf ("%d", x);
+	path = gtk_tree_path_new_from_string (tmp);
+	gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path);
+	gtk_tree_path_free (path);
+	g_free (tmp);
+	gtk_list_store_set (store, &iter, y, str, -1);
 }
 	
 static void on_exit_activate(GtkWidget *widget, gpointer data)
@@ -37,7 +55,7 @@
 
 static void g_launch_robot(void)
 {
-	gnome_execute_shell(NULL,"gbnrobot");
+	g_spawn_command_line_async("gbnrobot",NULL);
 }
 
 void g_start_game(void)
@@ -46,7 +64,7 @@
 	token_start( -1 );
 }
 
-static void about(GtkWidget *widget, gpointer data)
+static void about(GtkMenuItem *item, GtkWidget *parent)
 {
    GtkWidget *about;
    GdkPixbuf *gnome_gbatnav=NULL;
@@ -56,43 +74,18 @@
    };
    
    gnome_gbatnav = gdk_pixbuf_new_from_file("/usr/share/pixmaps/" "gnome-gbatnav.png",NULL);
-   about = gnome_about_new (_("Batalla Naval server"), VERSION,
-			    "(C) 1998-2001 Ricardo C. Quesada",
-			    _("A multiplayer, multirobot, networked battleship game"),
-			    (const char**) authors,
-			    NULL, NULL,
-			    gnome_gbatnav);
-   gtk_widget_show (about);
-   if (gnome_gbatnav !=NULL) {
-     g_object_unref(gnome_gbatnav);
-     gnome_gbatnav=NULL;
-   }
-}
-
-GnomeUIInfo gamemenu[] = 
-{
-	{ GNOME_APP_UI_ITEM, N_("_Launch a robot in server"), NULL, g_launch_robot, NULL, NULL, 
-		GNOME_APP_PIXMAP_DATA, robot_xpm, 0, 0, NULL }, 
-	{ GNOME_APP_UI_ITEM, N_("_Start the game"), NULL, g_start_game, NULL, NULL, 
-		GNOME_APP_PIXMAP_DATA, NULL , 0, 0, NULL }, 
-	GNOMEUIINFO_MENU_EXIT_ITEM(on_exit_activate,NULL),
-	GNOMEUIINFO_END
-};
-
-GnomeUIInfo helpmenu[] = 
-{
-	GNOMEUIINFO_HELP("gbatnav"),
-	GNOMEUIINFO_MENU_ABOUT_ITEM(about,NULL),
-	GNOMEUIINFO_END
-};
-
-GnomeUIInfo mainmenu[] = 
-{
-	GNOMEUIINFO_MENU_GAME_TREE(gamemenu),
-	GNOMEUIINFO_MENU_HELP_TREE(helpmenu),
-	GNOMEUIINFO_END
-};
 
+   gtk_show_about_dialog (GTK_WINDOW (parent),
+                          "program_name", _("Batalla Naval server"),
+                          "version", VERSION,
+                          "copyright", "(C) 1998-2001 Ricardo C. Quesada",
+                          "comments",
+                          _("A multiplayer, multirobot, networked "
+                            "battleship game"),
+                          "authors", authors,
+                          "logo", gnome_gbatnav, NULL);
+   g_object_unref(gnome_gbatnav);
+}
 
 /*****************************************************************************
  *                                    INIT SCREEN                            *
@@ -101,59 +94,166 @@
 {
 	GtkWidget *window;
 	GtkWidget *clist_box;
+	GtkWidget *menubar;
+	GtkWidget *menu;
+	GtkWidget *item;
 	char clist_text[CLIST_COLUMNS][50];
 	char *clist_texts[CLIST_COLUMNS];
 	GtkWidget *boton;
-	static char *titles[] =
-	{
-		N_("Number"), N_("Name"), N_("hostname"), N_("Client version"), N_("Status"), N_("Last Token")
-	};
+	GtkWidget *box;
+	GtkWidget *hbox;
+	GtkWidget *icon;
+	GtkWidget *label;
+	GtkAccelGroup *accel_group;
+	GtkCellRenderer *renderer;
+	GtkTreeViewColumn *column;
+	GtkTreeIter iter;
+	GdkPixbuf *robot;
 	gint i ;
 
-#ifdef ENABLE_NLS
-# define ELEMENTS(x) (sizeof(x) / sizeof(x[0])) 
-	{
-		int i;
-		for (i = 0; i < ELEMENTS(mainmenu); i++)
-			mainmenu[i].label = gettext(mainmenu[i].label);
-		for (i = 0; i < ELEMENTS(gamemenu); i++)
-			gamemenu[i].label = gettext(gamemenu[i].label);
-		for (i = 0; i < ELEMENTS(helpmenu); i++)
-			helpmenu[i].label = gettext(helpmenu[i].label);
-	}
-#endif /* ENABLE_NLS */
-   
-	window = gnome_app_new ("gbnserver", _("Gnome Batalla Naval server") );
-	gnome_app_create_menus(GNOME_APP(window), mainmenu);
-	gtk_menu_item_right_justify(GTK_MENU_ITEM(mainmenu[1].widget));
+	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+	gtk_window_set_title (GTK_WINDOW (window),
+	                      _("Gnome Batalla Naval server"));
+	accel_group = gtk_accel_group_new ();
+	gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
+
+	menubar = gtk_menu_bar_new ();
+	box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+	gtk_container_add (GTK_CONTAINER (window), box);
+	gtk_box_pack_start (GTK_BOX (box), menubar, FALSE, FALSE, 0);
+
+	menu = gtk_menu_new ();
+	gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
+	item = gtk_menu_item_new_with_mnemonic (_("_Game"));
+	gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
+	gtk_menu_shell_append (GTK_MENU_SHELL (menubar), item);
+
+	/* Emulate GtkImageMenuItem.  This was the author's intention
+	   but it doesn't work in the original code.  */
+	hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
+	robot = gdk_pixbuf_new_from_xpm_data (robot_xpm);
+	icon = gtk_image_new_from_pixbuf (robot);
+	g_object_unref (robot);
+	label = gtk_label_new_with_mnemonic (_("_Launch a robot in server"));
+	item = gtk_menu_item_new ();
+	gtk_container_add (GTK_CONTAINER (hbox), icon);
+	gtk_container_add (GTK_CONTAINER (hbox), label);
+	gtk_container_add (GTK_CONTAINER (item), hbox);
+	g_signal_connect (item, "activate", G_CALLBACK (g_launch_robot), NULL);
+	gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+
+	item = gtk_menu_item_new_with_mnemonic (_("_Start the game"));
+	g_signal_connect (item, "activate", G_CALLBACK (g_start_game), NULL);
+	gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+
+	item = gtk_menu_item_new_with_mnemonic (_("_Quit"));
+	gtk_widget_add_accelerator (item, "activate", accel_group, GDK_KEY_Q,
+	                            GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
+	g_signal_connect (item, "activate",
+	                  G_CALLBACK (on_exit_activate), NULL);
+	gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+
+	menu = gtk_menu_new ();
+	gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
+	item = gtk_menu_item_new_with_mnemonic (_("_Help"));
+	gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
+	gtk_menu_shell_append (GTK_MENU_SHELL (menubar), item);
+
+	item = gtk_menu_item_new_with_mnemonic (_("_Contents"));
+	gtk_widget_add_accelerator (item, "activate", accel_group, GDK_KEY_F1,
+	                            0, GTK_ACCEL_VISIBLE);
+	gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+
+	item = gtk_menu_item_new_with_mnemonic (_("_About"));
+	g_signal_connect (item, "activate", G_CALLBACK (about), window);
+	gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+
 	gtk_widget_realize (window);
    
-	gtk_signal_connect ( GTK_OBJECT( window), "destroy",
-		GTK_SIGNAL_FUNC( on_exit_activate ),
-		GTK_OBJECT(window) );
-	gtk_signal_connect ( GTK_OBJECT( window), "delete_event",
-		GTK_SIGNAL_FUNC( on_exit_activate ),
-		GTK_OBJECT(window) );
+	g_signal_connect ( G_OBJECT( window), "destroy",
+		G_CALLBACK( on_exit_activate ),
+		G_OBJECT(window) );
+	g_signal_connect ( G_OBJECT( window), "delete_event",
+		G_CALLBACK( on_exit_activate ),
+		G_OBJECT(window) );
 
 	
-	clist_box = gtk_vbox_new (FALSE, 0);
-	gnome_app_set_contents(GNOME_APP(window), clist_box);
+	clist_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+	gtk_box_pack_start (GTK_BOX (box), clist_box, FALSE, FALSE, 0);
 	
 
-	clist = gtk_clist_new_with_titles (CLIST_COLUMNS, titles);
+	store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING,
+	                            G_TYPE_STRING, G_TYPE_STRING,
+	                            G_TYPE_STRING, G_TYPE_STRING);
+	clist = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
 	gtk_widget_show (clist);
 	
-
-	gtk_clist_set_row_height (GTK_CLIST (clist), 18);
-	gtk_widget_set_usize (clist, -1, 300);
-
+	gtk_widget_set_size_request (clist, -1, 300);
 	
 	gtk_box_pack_start( GTK_BOX( clist_box ), clist, TRUE, TRUE, 0);
-	gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
+
+	renderer = gtk_cell_renderer_text_new ();
+	g_object_set (renderer, "xalign", 0.5, NULL);
+	column = gtk_tree_view_column_new_with_attributes (_("Number"),
+	                                                   renderer,
+	                                                   "text", NUMBER,
+	                                                   NULL);
+	gtk_tree_view_column_set_alignment (column, 0.5);
+	gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+	gtk_tree_view_append_column (GTK_TREE_VIEW (clist), column);
+
+	renderer = gtk_cell_renderer_text_new ();
+	g_object_set (renderer, "xalign", 0.5, NULL);
+	column = gtk_tree_view_column_new_with_attributes (_("Name"),
+	                                                   renderer,
+	                                                   "text", NAME,
+	                                                   NULL);
+	gtk_tree_view_column_set_alignment (column, 0.5);
+	gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+	gtk_tree_view_append_column (GTK_TREE_VIEW (clist), column);
+
+	renderer = gtk_cell_renderer_text_new ();
+	g_object_set (renderer, "xalign", 0.5, NULL);
+	column = gtk_tree_view_column_new_with_attributes (_("hostname"),
+	                                                   renderer,
+	                                                   "text", HOSTNAME,
+	                                                   NULL);
+	gtk_tree_view_column_set_alignment (column, 0.5);
+	gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+	gtk_tree_view_append_column (GTK_TREE_VIEW (clist), column);
+
+	renderer = gtk_cell_renderer_text_new ();
+	g_object_set (renderer, "xalign", 0.5, NULL);
+	column = gtk_tree_view_column_new_with_attributes (_("Client version"),
+	                                                   renderer,
+	                                                   "text", VERSION_COL,
+	                                                   NULL);
+	gtk_tree_view_column_set_alignment (column, 0.5);
+	gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+	gtk_tree_view_append_column (GTK_TREE_VIEW (clist), column);
+
+	renderer = gtk_cell_renderer_text_new ();
+	g_object_set (renderer, "xalign", 0.5, NULL);
+	column = gtk_tree_view_column_new_with_attributes (_("Status"),
+	                                                   renderer,
+	                                                   "text", STATUS,
+	                                                   NULL);
+	gtk_tree_view_column_set_alignment (column, 0.5);
+	gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+	gtk_tree_view_append_column (GTK_TREE_VIEW (clist), column);
+
+	renderer = gtk_cell_renderer_text_new ();
+	g_object_set (renderer, "xalign", 0.5, NULL);
+	column = gtk_tree_view_column_new_with_attributes (_("Last Token"),
+	                                                   renderer,
+	                                                   "text", TOKEN,
+	                                                   NULL);
+	gtk_tree_view_column_set_alignment (column, 0.5);
+	gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+	gtk_tree_view_append_column (GTK_TREE_VIEW (clist), column);
+
       
 	for (i = 0; i < CLIST_COLUMNS; i++) {
-		gtk_clist_set_column_justification (GTK_CLIST (clist), i, GTK_JUSTIFY_CENTER);
-		gtk_clist_set_column_auto_resize (GTK_CLIST (clist), i, TRUE);
 
 		clist_texts[i] = clist_text[i];
 		switch(i) {
@@ -167,12 +267,22 @@
 
 	for (i = 0; i < MAXPLAYER; i++) {
 		sprintf(clist_texts[0],"%d",i);
-		gtk_clist_append (GTK_CLIST (clist), clist_texts);
+	        gtk_list_store_append (store, &iter);
+	        gtk_list_store_set (store, &iter,
+	                            NUMBER, clist_texts[0],
+	                            NAME, clist_texts[1],
+	                            HOSTNAME, clist_texts[2],
+	                            VERSION_COL, clist_texts[3],
+	                            STATUS, clist_texts[4],
+	                            TOKEN, clist_texts[5], -1);
+
 	}
 
+/* This button does nothing.  */
+#if 0
 	/*boton = gnome_stock_button(GNOME_STOCK_BUTTON_OK);*/
-	boton = GTK_WIDGET(gtk_button_new_from_stock(GTK_STOCK_OK));
+	boton = GTK_WIDGET(gtk_button_new_with_mnemonic(_("_OK")));
 	gtk_box_pack_start( GTK_BOX( clist_box), boton, TRUE, TRUE, 0);
-
+#endif
 	gtk_widget_show_all (window);
 }
--- gbatnav-1.0.4cvs20051004.orig/po/POTFILES.in
+++ gbatnav-1.0.4cvs20051004/po/POTFILES.in
@@ -4,6 +4,7 @@
 common/parser.c
 gbnrobot/robot_proceso.c
 gbnrobot/robot_random_board.c
+gbnrobot/net.sf.batnav.gbnrobot.gschema.xml
 gbnclient/g_connect.c
 gbnclient/g_interface.c
 gbnclient/gbnclient.c
@@ -12,7 +13,9 @@
 gbnclient/random_board.c
 gbnclient/sendmsg.c
 gbnclient/support.c
+gbnclient/net.sf.batnav.gbnclient.gschema.xml
 gbnserver/check_board.c
 gbnserver/g_interface.c
 gbnserver/gbnserver.c
 gbnserver/play.c
+gbnserver/net.sf.batnav.gbnserver.gschema.xml
--- /dev/null
+++ gbatnav-1.0.4cvs20051004/gbnserver/net.sf.batnav.gbnserver.gschema.xml
@@ -0,0 +1,8 @@
+<schemalist gettext-domain="gbatnav">
+  <schema id="net.sf.batnav.gbnserver" path="/net/sf/batnav/gbnserver/">
+    <key name="port" type="u">
+      <default>1995</default>
+      <summary>The server port.</summary>
+    </key>
+  </schema>
+</schemalist>
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/robot.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/robot.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * robot_xpm[] = {
+static const char * robot_xpm[] = {
 "21 19 9 1",
 " 	c None",
 ".	c #F91616",
--- gbatnav-1.0.4cvs20051004.orig/gbnrobot/robot_ai.c
+++ gbatnav-1.0.4cvs20051004/gbnrobot/robot_ai.c
@@ -1,6 +1,6 @@
 /*	$Id: robot_ai.c,v 1.2 2001/04/04 15:37:28 riq Exp $	*/
 
-#include <gnome.h>
+#include <glib.h>
 #include "robot_cliente.h"
 #include "protocol.h"
 #include "robot_ai.h"
--- gbatnav-1.0.4cvs20051004.orig/gbnrobot/robot_cliente.h
+++ gbatnav-1.0.4cvs20051004/gbnrobot/robot_cliente.h
@@ -7,7 +7,7 @@
 #ifndef __BN_ROBOT_CLIENTE__
 #define __BN_ROBOT_CLIENTE__
 
-#include <gnome.h>
+#include <gtk/gtk.h>
 #include "protocol.h"
 
 #define ROBOTVER "Robot Client v0.2.3" 
@@ -51,6 +51,5 @@
 gchar* pix;
 
 GtkWidget *pbar;
-GtkAdjustment *adj;
 
 #endif
--- gbatnav-1.0.4cvs20051004.orig/gbnrobot/robot_proceso.c
+++ gbatnav-1.0.4cvs20051004/gbnrobot/robot_proceso.c
@@ -18,7 +18,8 @@
 #include <signal.h>
 
 #include <config.h>
-#include <gnome.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
 
 #include "robot_cliente.h"
 #include "robot_random_board.h"
@@ -33,19 +34,19 @@
 /* This describes all the arguments we understand.  */
 
 static char *server_name=NULL;
-static const struct poptOption options[] =
+static const GOptionEntry options[] =
 {
-	{ "server", 's', POPT_ARG_STRING, &server_name, 0,
+	{ "server", 's', G_OPTION_FLAG_NONE, G_OPTION_ARG_STRING, &server_name,
 		N_("Server name. Default is localhost"),"SERVER"},
-	{ "port", 'p', POPT_ARG_INT, &cliente.port, 0,
+	{ "port", 'p', G_OPTION_FLAG_NONE, G_OPTION_ARG_INT, &cliente.port,
 		N_("Port number. Default is 1995"),"PORT"},
 #ifdef WITH_GGZ
-	{ "ggz", 0, POPT_ARG_NONE, &cliente.with_ggz, 0,
+	{ "ggz", 0, G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &cliente.with_ggz,
 		N_("Enable GGZ mode"),NULL },
 #endif /* WITH_GGZ */
-	{ "nogui", 0, POPT_ARG_NONE, &cliente.with_nogui, 0,
+	{ "nogui", 0, G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &cliente.with_nogui,
 		N_("Disable the GUI"),NULL },
-	{ NULL, '\0',  0, NULL }
+	{ NULL }
 };
 
 /* nombre y skill del robot */
@@ -193,8 +194,11 @@
 	if( bnwrite(cliente.sock,BN_SEND"=%s",buf) < 0)
 		return BATNAV_STATUS_ERROR;
 
-	if(!cliente.with_nogui)
-		gtk_progress_set_value (GTK_PROGRESS (pbar), 20);
+	if(!cliente.with_nogui) {
+	        gtk_progress_bar_set_text (GTK_PROGRESS_BAR (pbar),
+	                                   "[20/20] 100%");
+	        gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (pbar), 1.0);
+	}
 
 	return BATNAV_STATUS_SUCCESS;
 }
@@ -206,7 +210,6 @@
 static void robot_fire(char *str)
 {
 	gfloat new_val;
-	GtkAdjustment *adj;
 	int i,j,x,y,z;
 	PARSER p;
 	DELIM igualador={ '=','=','=' };
@@ -234,13 +237,17 @@
 	}
 	if(z==HUNDIDO) {
 		if(!cliente.with_nogui) {
-			adj = GTK_PROGRESS (pbar)->adjustment;
+	                gchar *s;
 
-			new_val = adj->value - 1;
-			if (new_val > adj->upper)
-				new_val = adj->lower;
-
-			gtk_progress_set_value (GTK_PROGRESS (pbar), new_val);
+	                new_val = gtk_progress_bar_get_fraction
+	                        (GTK_PROGRESS_BAR (pbar)) - 0.05;
+	                s = g_strdup_printf ("[%d/20] %d%%",
+	                                     (int) (new_val * 20),
+	                                     (int) (new_val * 100));
+	                gtk_progress_bar_set_text (GTK_PROGRESS_BAR (pbar), s);
+	                gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (pbar),
+	                                               new_val);
+	                g_free (s);
 		}
 	}
 }
@@ -287,8 +294,12 @@
 }
 static void robot_board_ok( void )
 {
-	if(!cliente.with_nogui)
+	if(!cliente.with_nogui) {
 		gtk_label_set_text(GTK_LABEL(status_label), _("Ready"));
+	        gtk_progress_bar_set_text (GTK_PROGRESS_BAR (pbar),
+	                                   "[20/20] 100%");
+	        gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (pbar), 1.0);
+	}
 }
 static void robot_start( char *str)
 {
@@ -477,8 +488,9 @@
 	return FALSE;
 }
 
-static int robot_proceso( gpointer data, int sock, GdkInputCondition GDK_INPUT_READ )
+static gboolean robot_proceso( GIOChannel *src, GIOCondition cond, gpointer data )
 {
+	gint sock;
 	int i,j;
 	PARSER p;
 	DELIM igualador={ '=', ':', '=' };
@@ -490,11 +502,15 @@
 	p.separador = &separador;
 	str[0]=0;
 
+	if( !src )
+	        sock=GPOINTER_TO_INT( data );
+	else
+	        sock=g_io_channel_unix_get_fd( src );
 /*	printf("ROBOT: Entrando a robot_proceso %i\n",sock); */
 	j=net_readline( sock, str,PROT_MAX_LEN );
 	if( j<1 ) {
 		robot_killmyself();
-		return -1;
+		return FALSE;
 	}
 	
 	strncpy(p.sig,str,sizeof(p.sig));
@@ -508,11 +524,13 @@
 		}
 	} while(i);
 /*	printf("Saliendo de robot_proceso %i\n",sock); */
-	return 0;
+	return TRUE;
 }
 
 static int robot_init( void )
 {
+	GIOChannel *channel;
+
 #ifdef WITH_GGZ
 	if( cliente.with_ggz ) {
 		cliente.with_nogui = 1;
@@ -526,8 +544,12 @@
 		return -1;
 	}
 
-	if(!cliente.with_nogui)
-		cliente.tag = gdk_input_add( cliente.sock, GDK_INPUT_READ, (GdkInputFunction) robot_proceso, (gpointer) NULL );
+	if(!cliente.with_nogui) {
+	        channel = g_io_channel_unix_new( cliente.sock );
+	        cliente.tag = g_io_add_watch( channel, G_IO_IN, robot_proceso,
+                                              NULL );
+	        g_io_channel_unref( channel );
+	}
     
 	return 0;
 }
@@ -542,10 +564,8 @@
 {
 	char *filename = NULL;
 
-	filename = gnome_pixmap_file (name);
-	if( filename == NULL ) {
-		filename = g_strconcat( PIXMAPDIR,name,NULL );
-	}
+	filename = g_strconcat( PIXMAPDIR,name,NULL );
+
 	return filename;
 }
 
@@ -557,36 +577,35 @@
 
 static void init_X( )
 {
-	window = gnome_app_new ("gbnrobot", _("Gnome Batalla Naval robot") );
-	gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, TRUE);
+	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+	gtk_window_set_title (GTK_WINDOW (window),
+	                      _("Gnome Batalla Naval robot") );
+	gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
 
 	gtk_widget_realize (window);
-	gtk_signal_connect ( GTK_OBJECT( window), "destroy",
-		GTK_SIGNAL_FUNC( on_exit_activate ),
-		GTK_OBJECT(window) );
-	gtk_signal_connect ( GTK_OBJECT( window), "delete_event",
-		GTK_SIGNAL_FUNC( on_exit_activate ),
-		GTK_OBJECT(window) );
+	g_signal_connect ( G_OBJECT( window), "destroy",
+		G_CALLBACK( on_exit_activate ),
+		G_OBJECT(window) );
+	g_signal_connect ( G_OBJECT( window), "delete_event",
+		G_CALLBACK( on_exit_activate ),
+		G_OBJECT(window) );
 
-	box = gtk_vbox_new( FALSE, 0);
-	gnome_app_set_contents(GNOME_APP(window), box );
+	box = gtk_box_new( GTK_ORIENTATION_VERTICAL, 0);
+	gtk_container_add(GTK_CONTAINER(window), box);
    
-	gtk_container_border_width ( GTK_CONTAINER(box), 0);
+	gtk_container_set_border_width ( GTK_CONTAINER(box), 0);
   
   	pix = load_pixmap_file("gbnrobot.png");
 	if( pix ) {
-		imagen = gnome_pixmap_new_from_file( pix );
+		imagen = gtk_image_new_from_file( pix );
 		gtk_widget_show( imagen );
 		g_free( pix );
 		gtk_box_pack_start( GTK_BOX(box),imagen,TRUE,TRUE,0);
 	}
 
-	adj = (GtkAdjustment *) gtk_adjustment_new (20, 1, 20, 0, 0, 0);
-
-	pbar = gtk_progress_bar_new_with_adjustment (adj);
+	pbar = gtk_progress_bar_new ();
 	
-	gtk_progress_set_format_string (GTK_PROGRESS (pbar), "[%v/%u] %p%%");
-	gtk_progress_set_show_text (GTK_PROGRESS (pbar), TRUE );
+	gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (pbar), TRUE );
 
 	gtk_box_pack_start (GTK_BOX (box), pbar, FALSE, FALSE, 5);
 	
@@ -621,7 +640,7 @@
 			return;
 		}
 		if( FD_ISSET(cliente.sock,&read_fd))
-			robot_proceso(NULL,cliente.sock,0);
+	                robot_proceso(NULL,0,GINT_TO_POINTER(cliente.sock));
 	}
 }
 
@@ -631,7 +650,8 @@
 int main (int argc, char *argv[])
 {
 	int i;
-	poptContext ctx=NULL;
+	GOptionContext *ctx=NULL;
+	GError *error=NULL;
 
 	dont_run_as_root();
 
@@ -642,14 +662,18 @@
 	strncpy(cliente.server,"127.0.0.1",sizeof(cliente.server)-1);
 	cliente.with_nogui=0;
 
-	ctx = poptGetContext(NULL,argc,argv,options,0);
-	if(ctx) {
-		while( poptGetNextOpt(ctx) != -1);
-		poptFreeContext(ctx);
-	}
+	ctx=g_option_context_new(_("- Batalla Naval Robot"));
+	g_option_context_add_main_entries(ctx, options, PACKAGE);
+	g_option_context_add_group(ctx, gtk_get_option_group (TRUE));
 
 	if( !cliente.with_nogui ) {
-		gnome_init_with_popt_table("gbnrobot", ROBOTVER, argc, argv, options, 0, NULL);
+	        if( !g_option_context_parse(ctx, &argc, &argv, &error) ) {
+	                fprintf(stderr, _("Option parsing failed: %s\n"),
+	                        error->message);
+	                g_error_free(error);
+	                exit(EXIT_FAILURE);
+	        }
+	        gtk_init(&argc, &argv);
 		init_X();
 	}
 
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/cliente.h
+++ gbatnav-1.0.4cvs20051004/gbnclient/cliente.h
@@ -56,6 +56,8 @@
 	int view_grid;			/* show/hide the map grid */
 } usuario;
 
+GSettings *settings;
+
 /* Variables - GTK */
 /* contenedores */
 GtkWidget *window;
@@ -86,33 +88,32 @@
 
 
 /* Pixmaps */
-GdkPixmap *barco1 ;
-GdkPixmap *barco1_t ;
-GdkPixmap *barco1_h ;
-GdkPixmap *barco2h ;
-GdkPixmap *barco2h_t ;
-GdkPixmap *barco2h_h ;
-GdkPixmap *barco2v ;
-GdkPixmap *barco2v_t ;
-GdkPixmap *barco2v_h ;
-GdkPixmap *barco3h ;
-GdkPixmap *barco3h_t ;
-GdkPixmap *barco3h_h ;
-GdkPixmap *barco3v ;
-GdkPixmap *barco3v_t ;
-GdkPixmap *barco3v_h ;
-GdkPixmap *barco4h ;
-GdkPixmap *barco4h_t ;
-GdkPixmap *barco4h_h ;
-GdkPixmap *barco4v ;
-GdkPixmap *barco4v_t ;
-GdkPixmap *barco4v_h ;
-
-GdkPixmap *fondo ;
-GdkPixmap *agua ;
-GdkPixmap *about_pix ;
-GdkPixmap *icono ;
-GdkBitmap *mask ;
+GdkPixbuf *barco1 ;
+GdkPixbuf *barco1_t ;
+GdkPixbuf *barco1_h ;
+GdkPixbuf *barco2h ;
+GdkPixbuf *barco2h_t ;
+GdkPixbuf *barco2h_h ;
+GdkPixbuf *barco2v ;
+GdkPixbuf *barco2v_t ;
+GdkPixbuf *barco2v_h ;
+GdkPixbuf *barco3h ;
+GdkPixbuf *barco3h_t ;
+GdkPixbuf *barco3h_h ;
+GdkPixbuf *barco3v ;
+GdkPixbuf *barco3v_t ;
+GdkPixbuf *barco3v_h ;
+GdkPixbuf *barco4h ;
+GdkPixbuf *barco4h_t ;
+GdkPixbuf *barco4h_h ;
+GdkPixbuf *barco4v ;
+GdkPixbuf *barco4v_t ;
+GdkPixbuf *barco4v_h ;
+
+GdkPixbuf *fondo ;
+GdkPixbuf *agua ;
+GdkPixbuf *about_pix ;
+GdkPixbuf *icono ;
 
 GtkWidget *hbox_status;
 GtkWidget *statusbar_left;
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/gbnclient.c
+++ gbatnav-1.0.4cvs20051004/gbnclient/gbnclient.c
@@ -24,7 +24,9 @@
 #include <string.h>
 
 #include <config.h>
-#include <gnome.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+#include <glib/gstdio.h>
 
 #include "protocol.h"
 #include "cliente.h"
@@ -42,35 +44,97 @@
 
 static char *server_tmp;
 static char *nombre_tmp;
-static struct poptOption options[] =
+static GOptionEntry options[] =
 {
-	{ "port", 'p', POPT_ARG_INT, &usuario.port, 0, N_("Port number. Default is 1995"),NULL},
-	{ "server", 's', POPT_ARG_STRING, &server_tmp, 0, N_("Server name. Default is localhost"),"SERVER" },
-	{ "player", 'n', POPT_ARG_STRING, &nombre_tmp, 0, N_("Player name. Default is your login name"),"PLAYERNAME"},
+	{ "port", 'p', G_OPTION_FLAG_NONE, G_OPTION_ARG_INT, &usuario.port, N_("Port number. Default is 1995"),NULL},
+	{ "server", 's', G_OPTION_FLAG_NONE, G_OPTION_ARG_STRING, &server_tmp, N_("Server name. Default is localhost"),"SERVER" },
+	{ "player", 'n', G_OPTION_FLAG_NONE, G_OPTION_ARG_STRING, &nombre_tmp, N_("Player name. Default is your login name"),"PLAYERNAME"},
 #ifdef WITH_GGZ
-	{ "ggz", 0, POPT_ARG_NONE, &usuario.with_ggz, 0, N_("Enable GGZ mode"),NULL },
+	{ "ggz", 0, G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &usuario.with_ggz, N_("Enable GGZ mode"),NULL },
 #endif /* WITH_GGZ */
-	{ NULL, '\0',  0, NULL }
+	{ NULL }
 };
 
+/* Migrate old settings from ~/.gnome2/gbnclient.  */
+static gchar* migrate_old_settings( void )
+{
+        GKeyFile *kf;
+        gchar *file;
+        gchar *msg = NULL;
+
+        kf = g_key_file_new();
+        file = g_build_filename(g_get_home_dir(), ".gnome2",
+                                "gbnclient", NULL);
+        if(g_key_file_load_from_file(kf, file, G_KEY_FILE_NONE, NULL)) {
+                gchar **groups;
+                gsize len;
+
+                /* File exists but if the user never changed the
+                   settings it will contain only the Placement section
+                   (automatically created internal Bonobo stuff).  */
+                groups = g_key_file_get_groups(kf, &len);
+                if(len > 1) {
+                        gchar *s;
+                        gint i;
+
+                        /* Apply all changes at once.  */
+                        g_settings_delay(settings);
+                        i = g_key_file_get_integer(kf, "data", "port", NULL);
+                        g_settings_set_uint(settings, "port", i);
+                        s = g_key_file_get_string(kf, "data", "servername",
+                                                  NULL);
+                        g_settings_set_string(settings, "servername", s);
+                        g_free(s);
+                        s = g_key_file_get_string(kf, "data", "playername",
+                                                  NULL);
+                        g_settings_set_string(settings, "playername", s);
+                        g_free(s);
+                        i = g_key_file_get_integer(kf, "data", "random", NULL);
+                        g_settings_set_uint(settings, "random", i);
+                        g_settings_apply(settings);
+                        msg = g_strdup("Sucessfully migrated old settings.");
+                } else
+                        msg = g_strdup("Found empty old config file; deleted.");
+
+                g_strfreev(groups);
+                g_unlink(file);
+        }
+        g_free(file);
+        g_key_file_free(kf);
+
+        return msg;
+}
 
 /* Funcion que carga las variables */
 /* Function that loads the variables */
-static void init_args()
+static gchar* init_args()
 {
 	gchar temporal[1024];
-	snprintf(temporal,sizeof(temporal)-1,"/gbnclient/data/playername=%s",getenv("LOGNAME"));
-	strncpy(usuario.nombre,gnome_config_get_string_with_default(temporal,NULL),MAXNAMELEN);
+	gchar *s, *msg = NULL;
+	settings = g_settings_new("net.sf.batnav.gbnclient");
+	msg = migrate_old_settings();
+	snprintf(temporal,sizeof(temporal)-1,"%s",getenv("LOGNAME"));
+	s = g_settings_get_string(settings, "playername");
+	if(strlen(s))
+	        strncpy(usuario.nombre,s,MAXNAMELEN);
+	else
+	        strncpy(usuario.nombre,temporal,MAXNAMELEN);
 
-	strncpy( usuario.server,gnome_config_get_string_with_default("/gbnclient/data/servername=localhost",NULL),MAXSERVERNAME);
+	g_free(s);
+	s = g_settings_get_string(settings, "servername");
+	strncpy( usuario.server,s,MAXSERVERNAME);
+	g_free(s);
 	
-	usuario.port = gnome_config_get_int_with_default("/gbnclient/data/port=1995",NULL);
-	usuario.random = gnome_config_get_int_with_default("/gbnclient/data/random=1995",NULL);
+	usuario.port = g_settings_get_uint(settings, "port");
+	usuario.random = g_settings_get_uint(settings, "random");
 	
-	gnome_config_set_int   ("/gbnclient/data/port",  usuario.port);
-	gnome_config_set_string("/gbnclient/data/servername",usuario.server);
-	gnome_config_set_string("/gbnclient/data/playername",usuario.nombre);
-	gnome_config_sync();
+	g_settings_delay(settings);
+	g_settings_set_uint(settings, "port", usuario.port);
+	g_settings_set_string(settings, "servername", usuario.server);
+	g_settings_set_string(settings, "playername", usuario.nombre);
+	g_settings_apply(settings);
+
+	return msg;
 }
 
 /* Funcion que saca a un usuario */
@@ -151,17 +215,23 @@
  ****************************************************************************/
 
 /* Left map (My Board)*/
-int expose_event( GtkWidget *widget, GdkEventExpose *event )
+int expose_event( GtkWidget *widget, cairo_t *cr )
 {
 	gint i,j;
    
+	if (usuario.play==PLAY || usuario.play==TURN) {
+		char buf[100];
+		iwtable( buf );
+	        fillboard( cr, inteliclient( (char*)buf ), 0 );
+	        return FALSE;
+	}
+
 	for(i=0;i<10;i++) {
 		for(j=0;j<10;j++)
-			pmicell( i,j, usuario.mitabla[i][j] );
+	                pmicell( cr, i,j, usuario.mitabla[i][j] );
 	}
-   
 
-	draw_grid_left();
+	draw_grid_left(cr);
 	return FALSE;
 }
 
@@ -170,6 +240,10 @@
 /* Signal PRESS_BUTTON on left map (My Board) */
 int button_press_event (GtkWidget *widget, GdkEventButton *event)
 {
+	cairo_t *cr;
+	cairo_region_t *region;
+	GdkWindow *win;
+	GdkDrawingContext *ctxt;
 	gint x,y;
    
 	x=event->x / ANCHO; /* Wide */
@@ -184,60 +258,60 @@
 		textfill(0,_("You can't modify your board while playing"));
 		return TRUE;
 	}
+	win = gtk_widget_get_window(widget);
+	region = gdk_window_get_clip_region(win);
+	ctxt = gdk_window_begin_draw_frame(win, region);
+	cr = gdk_drawing_context_get_cairo_context(ctxt);
 	if ( event->button == 1 ) { /* Boton izquierdo */
 		/* Left button */
-		gdk_draw_pixmap( widget->window,
-			widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
-			barco1,
-			0,0,
-			x*ANCHO+1,y*LARGO+1,
-			ANCHO-1,LARGO-1);
+	        gdk_cairo_set_source_pixbuf(cr, barco1, x*ANCHO+1, y*LARGO+1);
+	        cairo_rectangle(cr, x*ANCHO+1, y*LARGO+1, ANCHO-1, LARGO-1);
+	        cairo_fill(cr);
 		/* set boat at user.mytable[x][y] */
 		usuario.mitabla[x][y]=BARCO;
 	} else if ( event->button == 3 ) { /* Boton derecho */
 		/* Right button */
-		gdk_draw_pixmap( widget->window,
-			widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
-			fondo,
-			x*ANCHO+1,y*LARGO+1,
-			x*ANCHO+1,y*LARGO+1,
-			ANCHO-1,LARGO-1);				  
+	        gdk_cairo_set_source_pixbuf(cr, fondo, x*ANCHO+1, y*LARGO+1);
+	        cairo_rectangle(cr, x*ANCHO+1, y*LARGO+1, ANCHO-1, LARGO-1);
+	        cairo_fill(cr);
 		/* clear boat at user.mytable[x][y] */
 		usuario.mitabla[x][y]=NOBARCO;
 	}		
+	gdk_window_end_draw_frame(win, ctxt);
+	gtk_widget_queue_draw_region(widget, region);
+	cairo_region_destroy(region);
 	return TRUE;
 }
 
 /* (Left? Right?) About */
-int expose_event_about (GtkWidget *widget, GdkEventExpose *event)
+int expose_event_about (GtkWidget *widget, cairo_t *cr)
 {
-	gdk_draw_pixmap( widget->window,
-		widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
-		about_pix,
-		0,0,
-		0,0,
-		200,200
-	);
+	gdk_cairo_set_source_pixbuf(cr, about_pix, 0, 0);
+	cairo_rectangle(cr, 0, 0, 200, 200);
+	cairo_fill(cr);
 	return FALSE;
 }
 
 /* Right, page switch */
-int page_switch( GtkWidget *widget, GtkNotebookPage *page, gint page_num )
+void page_switch( GtkWidget *widget, GtkWidget *page, gint page_num )
 {
 	if( usuario.play>=PLAY ) {
 		usuario.usrfrom = usuario.pages[ page_num ];
 		bnwrite(usuario.sock,BN_READ"=%i",usuario.usrfrom);
 	}
-	return TRUE;
 }
 
 /* Right panel */
-int expose_event_right( GtkWidget *widget, GdkEventExpose *event )
+int expose_event_right( GtkWidget *widget, cairo_t *cr )
 {
 	/* Fill the right (enemy) board */
-	fillboard( inteliclient(usuario.tempclit),1);
-
-	draw_grid_right();
+	if(usuario.play==PLAY || usuario.play==TURN) {
+	        char *buf = NULL;
+	        buf = g_object_get_data(G_OBJECT(widget), "buffer");
+	        if (buf)
+	                fillboard( cr, inteliclient(buf), 1 );
+	}
+	fillboard( cr, inteliclient(usuario.tempclit),1);
 	
 	return FALSE;
 }
@@ -328,42 +402,44 @@
 		usuario.tempclit[i]=table[i];
 }
 
-void showboard( GdkPixmap *pixmap )
-{
-	int i;
-   
-	i = gtk_notebook_current_page( GTK_NOTEBOOK( notebook_right ) );
-	i = usuario.pages[ i ]; 
-   
-	gdk_draw_pixmap( drawing_right[i]->window,
-		drawing_right[i]->style->fg_gc[GTK_WIDGET_STATE(drawing_right[i])],
-		pixmap,
-		0,0,
-		0,0,
-		200,200
-	);
-}
-
-
 /* funcion que rellena los tableros
  * function that fills up boards
  * IN: char * - relleno / stuffed
  * IN: int - 0 - left board
  *         - 1 - right board
  */
-void fillboard( char *filltable, int a )
+void fillboard( cairo_t *cr, char *filltable, int a )
 {
+	cairo_region_t *region = NULL;
+	GtkWidget *widget;
+	GdkWindow *win;
+	GdkDrawingContext *ctxt;
 	gint i,j;
 	gint k;
+
+	if(!cr) {
+	        if(a==1) {
+	                i = gtk_notebook_get_current_page(GTK_NOTEBOOK
+	                                                  (notebook_right));
+	                i = usuario.pages[i];
+	                widget = drawing_right[i];
+	        } else
+	                widget = drawing_left;
+
+	        win = gtk_widget_get_window(widget);
+	        region = gdk_window_get_clip_region(win);
+	        ctxt = gdk_window_begin_draw_frame(win, region);
+	        cr = gdk_drawing_context_get_cairo_context(ctxt);
+	}
    
 	i=0;j=0;
    
 	for(k=0;k<100;k++) {
 		if(a==0) /* izquierda / left*/
-			pmicell( i,j, filltable[k]);
+	                pmicell( cr, i,j, filltable[k]);
 		else 	/* a==1 (derecha / right) */
 		{
-			ptucell( i,j, filltable[k]);
+	                ptucell( cr, i,j, filltable[k]);
 		}
 	
 		i++;
@@ -374,9 +450,14 @@
 	}
 
 	if( a==0 )
-		draw_grid_left();
+	        draw_grid_left(cr);
 	else
-		draw_grid_right();
+	        draw_grid_right(cr);
+
+	if(region) {
+	        gdk_window_end_draw_frame(win, ctxt);
+	        cairo_region_destroy(region);
+	}
 }
 
 /* If the cell is in bounds, apply color to the cell
@@ -462,7 +543,7 @@
 		temptable[100]=0;/* FIXME: Lo necesito? / I need it? */
 		bnwrite(usuario.sock,BN_SEND"=%s",temptable);
 		/* Fill the left (player) board */
-		fillboard(temptable,0);
+		fillboard(NULL,temptable,0);
 		return( TRUE );
  	} else
 		return -1;
@@ -490,6 +571,7 @@
 
 int send_connect()
 {
+	GIOChannel *channel;
 
 	if( usuario.with_ggz ) {
 #ifdef WITH_GGZ
@@ -507,7 +589,9 @@
 
 		return -1;
 	}
-	usuario.tag = gdk_input_add( usuario.sock, GDK_INPUT_READ, (GdkInputFunction) proceso, (gpointer) NULL );
+	channel = g_io_channel_unix_new( usuario.sock );
+	usuario.tag = g_io_add_watch( channel, G_IO_IN, proceso, NULL );
+	g_io_channel_unref( channel );
     
 	usuario.play=CONNEC;
 
@@ -533,7 +617,7 @@
 		usuario.pages[i]=i;
 	}
 	usuario.play=DISCON;
-	gdk_input_remove( usuario.tag );
+	g_source_remove( usuario.tag );
 
 #if WITH_GGZ
 	if( usuario.with_ggz )
@@ -547,7 +631,7 @@
 	
 	/* gtk v1.2 no me actualiza este evento. forzarlo */
 	/* it does not update east event to me to force it */
-	expose_event( drawing_left, NULL );
+	gtk_widget_queue_draw( drawing_left );
 
 	update_sensi();
 	return 0;
@@ -580,53 +664,15 @@
 	usuario.hide=FALSE;
 }
 
-/* A little helper function.  */
-static char *
-nstr (int n)
-{
-	char buf[20];
-	sprintf (buf, "%d", n);
-	return strdup (buf);
-}
-
-static int
-save_state (GnomeClient        *client,
-	    gint                phase,
-	    GnomeRestartStyle   save_style,
-	    gint                shutdown,
-	    GnomeInteractStyle  interact_style,
-	    gint                fast,
-	    gpointer            client_data)
-{
-	char *argv[20];
-	int i = 0, j;
-	gint xpos, ypos;
-
-	gdk_window_get_origin (window->window, &xpos, &ypos);
-
-	argv[i++] = (char *) client_data;
-	argv[i++] = "-x";
-	argv[i++] = nstr (xpos);
-	argv[i++] = "-y";
-	argv[i++] = nstr (ypos);
-
-	gnome_client_set_restart_command (client, i, argv);
-	/* i.e. clone_command = restart_command - '--sm-client-id' */
-	gnome_client_set_clone_command (client, 0, NULL);
-
-	for (j = 2; j < i; j += 2)
-		free (argv[j]);
-
-	return TRUE;
-}
-
 /****************************************************************************
  *                           MAIN * MAIN * MAIN
  ****************************************************************************/
 
 int main (int argc, char *argv[])
 {
-	GnomeClient *client;
+	GOptionContext *ctx;
+	GError *error = NULL;
+	gchar *msg = NULL;
 	int r;
 
 	dont_run_as_root();
@@ -636,9 +682,20 @@
   
 	usuario.with_ggz=0;
 
-	init_args();
+	msg = init_args();
 	
-	gnome_init_with_popt_table("gbnclient", BNVERSION, argc, argv, options, 0, NULL);
+	ctx=g_option_context_new(_("- Batalla Naval Client"));
+	g_option_context_add_main_entries(ctx, options, PACKAGE);
+	g_option_context_add_group(ctx, gtk_get_option_group (TRUE));
+
+	if( ! g_option_context_parse(ctx, &argc, &argv, &error) ) {
+	        fprintf(stderr, _("Option parsing failed: %s\n"),
+	                error->message);
+	        g_error_free(error);
+	        exit(EXIT_FAILURE);
+	}
+
+	gtk_init(&argc, &argv);
 
 	if(server_tmp) {
 		strncpy(usuario.server,server_tmp,sizeof(usuario.server)-1);
@@ -649,14 +706,14 @@
 		usuario.nombre[sizeof(usuario.nombre)-1]=0;
 	}
 	
-	client = gnome_master_client ();
-	
-	gtk_signal_connect (GTK_OBJECT (client), "save_yourself",
-   		GTK_SIGNAL_FUNC (save_state), argv[0]);
-
 	init_datos();
 	init_X();
 
+	if( msg ) {
+	        textfill(0, msg);
+	        g_free(msg);
+	}
+
 	update_sensi();
 	if( usuario.with_ggz ) {
 		if( send_connect() < 0 ) {
@@ -675,49 +732,40 @@
 	return 0;
 }
 
-void draw_grid_right()
+void draw_grid_right(cairo_t *cr)
 {
 	int i;
-	GtkWidget *widget;
-	i = gtk_notebook_current_page( GTK_NOTEBOOK( notebook_right ) );
-	i = usuario.pages[ i ]; 
-	widget = drawing_right[ i ];
 
-	if( ! widget )
-		return;
-
-	/* draw the grid */
 	if( usuario.view_grid ) {
+	        cairo_set_source_rgb(cr, 0, 0, 0);
+	        cairo_set_line_cap(cr, CAIRO_LINE_CAP_SQUARE);
+	        cairo_set_line_width(cr, 1.0);
 		for(i=0;i<10;i++) {
-			gdk_draw_line (widget->window,
-				widget->style->black_gc,
-				0,LARGO*i,
-				ANCHO*10,LARGO*i);
-			gdk_draw_line (widget->window,
-				widget->style->black_gc,
-				ANCHO*i,0,
-				ANCHO*i,LARGO*10);
+	                cairo_move_to(cr, 0, LARGO*i + 0.5);
+	                cairo_line_to(cr, ANCHO*10, LARGO*i + 0.5);
+	                cairo_move_to(cr, ANCHO*i, 0.5);
+	                cairo_line_to(cr, ANCHO*i, LARGO*10 + 0.5);
 		}
+	        cairo_stroke(cr);
 	}
 }
 
 	/* draw the grid */
-void draw_grid_left()
+void draw_grid_left(cairo_t *cr)
 {
 	int i;
-	GtkWidget *widget = drawing_left;
 
 	if( usuario.view_grid ) {
+	        cairo_set_source_rgb(cr, 0, 0, 0);
+	        cairo_set_line_cap(cr, CAIRO_LINE_CAP_SQUARE);
+	        cairo_set_line_width(cr, 1.0);
 		for(i=0;i<10;i++) {
-			gdk_draw_line (widget->window,
-				widget->style->black_gc,
-				0,LARGO*i,
-				ANCHO*10,LARGO*i);
-			gdk_draw_line (widget->window,
-				widget->style->black_gc,
-				ANCHO*i,0,
-				ANCHO*i,LARGO*10);
+	                cairo_move_to(cr, 0, LARGO*i + 0.5);
+	                cairo_line_to(cr, ANCHO*10, LARGO*i + 0.5);
+	                cairo_move_to(cr, ANCHO*i, 0.5);
+	                cairo_line_to(cr, ANCHO*i, LARGO*10 + 0.5);
 		}
+	        cairo_stroke(cr);
 	}
 }
    
--- gbatnav-1.0.4cvs20051004.orig/gbnrobot/robot_random_board.c
+++ gbatnav-1.0.4cvs20051004/gbnrobot/robot_random_board.c
@@ -6,7 +6,7 @@
 
 #include <stdlib.h>
 #include <config.h>
-#include <gnome.h>
+#include <glib.h>
 
 #include "robot_cliente.h"
 #include "robot_random_board.h"
@@ -14,13 +14,15 @@
 
 void generar( void )
 {
+	GSettings *settings;
 	gint x,y,d,t,i,j;
 
-	cliente.random = gnome_config_get_int_with_default("/gbnrobot/data/random=1995",NULL);
+	settings = g_settings_new("net.sf.batnav.gbnrobot");
+	cliente.random = g_settings_get_uint(settings, "random");
 	srandom( cliente.random );
 	cliente.random = random();		
-	gnome_config_set_int("/gbnrobot/data/random",  cliente.random);
-	gnome_config_sync();
+	g_settings_set_uint(settings, "random", cliente.random);
+	g_object_unref(settings);
 
 	for(i=0;i<10;i++) { /* clean tabla */
 		for(j=0;j<10;j++)
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/proceso.h
+++ gbatnav-1.0.4cvs20051004/gbnclient/proceso.h
@@ -8,10 +8,10 @@
 #ifndef __BN_PROCESO__
 #define __BN_PROCESO__
 
-#include <gnome.h>
+#include <glib.h>
 
 void aux_disconnect();
 gint aux_connect();
-gint proceso( gpointer data, gint sock, GdkInputCondition GDK_INPUT_READ );
+gboolean proceso( GIOChannel *src, GIOCondition cond, gpointer data );
 
 # endif /*__BN_PROCESO__*/
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/gbnclient.h
+++ gbatnav-1.0.4cvs20051004/gbnclient/gbnclient.h
@@ -19,15 +19,15 @@
 
 gint buscar_usr( gint usr );
 
-gint expose_event( GtkWidget *widget, GdkEventExpose *event );
+gint expose_event( GtkWidget *widget, cairo_t *cr );
 
 gint button_press_event (GtkWidget *widget, GdkEventButton *event);
 
-gint expose_event_about (GtkWidget *widget, GdkEventExpose *event);
+gint expose_event_about (GtkWidget *widget, cairo_t *cr);
 
-gint page_switch( GtkWidget *widget, GtkNotebookPage *page, gint page_num );
+void page_switch( GtkWidget *widget, GtkWidget *page, gint page_num );
 
-gint expose_event_right( GtkWidget *widget, GdkEventExpose *event );
+gint expose_event_right( GtkWidget *widget, cairo_t *cr );
 
 gint button_press_event_right( GtkWidget *widget, GdkEventButton *event );
 
@@ -37,9 +37,7 @@
 
 void putintemp( char *table );
 
-void showboard( GdkPixmap *pixmap );
-
-void fillboard( char *filltable, int a );
+void fillboard( cairo_t *cr, char *filltable, int a );
 
 char* inteliclient( char *table);
 
@@ -55,9 +53,9 @@
 int init_cliente( void );
 
 
-void draw_grid_left();
+void draw_grid_left( cairo_t *cr );
 
-void draw_grid_right();
+void draw_grid_right( cairo_t *cr );
 
 void bn_help( void );
    
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/version.h
+++ gbatnav-1.0.4cvs20051004/gbnclient/version.h
@@ -3,7 +3,6 @@
 #ifndef __BATNAV_VERSION_H
 #define __BATNAV_VERSION_H
 
-#include <gnome.h>
 #include <config.h>
 
 #define BNVERSION	"Batalla Naval Client v"VERSION
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/g_interface.c
+++ gbatnav-1.0.4cvs20051004/gbnclient/g_interface.c
@@ -6,7 +6,8 @@
 #include <string.h>
 
 #include <config.h>
-#include <gnome.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
 
 #include "protocol.h"
 #include "gbnclient.h"
@@ -66,7 +67,7 @@
 
 	snprintf(buf,sizeof(buf)-1,BINDIR"/gbnrobot --port %d --server %s",usuario.port,usuario.server);
 	buf[sizeof(buf)-1]=0;
-	gnome_execute_shell(NULL,buf);
+	g_spawn_command_line_async(buf,NULL);
 }
 void on_random_activate (GtkMenuItem *menuitem, gpointer user_data)
 {
@@ -90,272 +91,284 @@
 	gtk_main_quit();
 }
 
-
-static void g_cerrar(GtkWidget *widget, int button,gpointer data)
-{
-	gnome_dialog_close(GNOME_DIALOG(widget));
-}
-
 gboolean g_box_lost()
 {
-	static GtkWidget *box = NULL;
+	GtkWidget *box;
 
-	if (box == NULL ) {
-		box = gnome_message_box_new (_("Game Over: You lost!"),
-			GNOME_MESSAGE_BOX_INFO,
-			GNOME_STOCK_BUTTON_OK,
-			NULL);
-		if( box==NULL) return FALSE;
-
-		generic_window_set_parent( box, GTK_WINDOW(window) );
-		
-		gtk_signal_connect (GTK_OBJECT (box), "clicked",
-			GTK_SIGNAL_FUNC (g_cerrar), NULL);
+	box = gtk_message_dialog_new ( GTK_WINDOW(window),
+	                               GTK_DIALOG_DESTROY_WITH_PARENT,
+	                               GTK_MESSAGE_INFO,
+	                               GTK_BUTTONS_OK,
+	                               "%s", _("Game Over: You lost!") );
 
-		gtk_window_set_modal( GTK_WINDOW(box),TRUE);
-		gnome_dialog_close_hides(GNOME_DIALOG(box), TRUE);
-	}
-	gtk_widget_show( box );
+	gtk_dialog_run( GTK_DIALOG(box) );
+	gtk_widget_destroy( box );
 	return TRUE;
 }
 
 gboolean g_box_win()
 {
-	static GtkWidget *box = NULL;
-
-	if (box == NULL ) {
-		box = gnome_message_box_new (_("Game Over: You are the Winner!"),
-			GNOME_MESSAGE_BOX_INFO,
-			GNOME_STOCK_BUTTON_OK,
-			NULL);
-
-		if( box==NULL) return FALSE;
-
-		generic_window_set_parent( box, GTK_WINDOW(window) );
+	GtkWidget *box;
 
-		gtk_signal_connect (GTK_OBJECT (box), "clicked",
-			GTK_SIGNAL_FUNC (g_cerrar), NULL);
+	box = gtk_message_dialog_new ( GTK_WINDOW(window),
+	                               GTK_DIALOG_DESTROY_WITH_PARENT,
+	                               GTK_MESSAGE_INFO,
+	                               GTK_BUTTONS_OK,
+	                               "%s",
+	                               _("Game Over: You are the Winner!") );
 
-		gtk_window_set_modal( GTK_WINDOW(box),TRUE);
-		gnome_dialog_close_hides(GNOME_DIALOG(box), TRUE);
-	}
-	gtk_widget_show( box );
+	gtk_dialog_run( GTK_DIALOG(box) );
+	gtk_widget_destroy( box );
 	return TRUE;
 }
 
 void about( GtkWidget *widget, gpointer data )
 {
-	GtkWidget *href, *hbox;
-	static GtkWidget *about = NULL;
-	static GdkPixbuf *gnome_gbatnav=NULL;
+	GdkPixbuf *gnome_gbatnav=NULL;
 	static const char *authors[] = {
 		"Ricardo C. Quesada (riq@core-sdi.com)",
 		NULL
 	};
 
-	if (!about) {
-		gnome_gbatnav = gdk_pixbuf_new_from_file("/usr/share/pixmaps/" "gnome-gbatnav.png",NULL);
-		about = gnome_about_new (_("Batalla Naval client"),
-				VERSION,
-				_("(C) 1998-2001 Ricardo C. Quesada"),
+	gnome_gbatnav = gdk_pixbuf_new_from_file("/usr/share/pixmaps/" "gnome-gbatnav.png",NULL);
+	gtk_show_about_dialog (GTK_WINDOW(window),
+	                       "program-name", _("Batalla Naval client"),
+	                       "version", VERSION,
+	                       "copyright",
+	                       _("(C) 1998-2001 Ricardo C. Quesada"),
+	                       "comments",
 				_("A multiplayer networked battleship game."),
-				(const char**) authors,
-				NULL, NULL,
-				gnome_gbatnav);
-
-		gtk_signal_connect (GTK_OBJECT (about), "destroy",
-				    GTK_SIGNAL_FUNC (gtk_widget_destroyed),
-				    &about);
-
-
-		hbox = gtk_hbox_new (TRUE, 0);
-		href = gnome_href_new ("http://batnav.sourceforge.net", _("Batalla Naval Home Page"));
-		gtk_box_pack_start (GTK_BOX (hbox), href, FALSE, FALSE, 0);
-		gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (about)->vbox),
-			    hbox, TRUE, FALSE, 0);
-		gtk_widget_show_all (hbox);
-	}
-
-	gtk_widget_show_now (about);
-	raise_and_focus (about);
+	                       "authors", authors,
+	                       "website", "http://batnav.sourceforge.net",
+	                       "website-label", _("Batalla Naval Home Page"),
+	                       "logo", gnome_gbatnav,
+	                       NULL);
+	g_object_unref(gnome_gbatnav);
 }
 
-
-enum {
-	WID_G_CONNEC,
-	WID_G_DISCON,
-	WID_G_XXX0,
-	WID_G_ROBOT,
-};
-
-GnomeUIInfo gamemenu[] = 
-{
-	{ GNOME_APP_UI_ITEM, N_("_Connect"), NULL, on_connect_activate, NULL, NULL,
-		GNOME_APP_PIXMAP_DATA, NULL, 0, 0, NULL },
-	{ GNOME_APP_UI_ITEM, N_("_Disconnect"), NULL, on_disconnect_activate, NULL, NULL,
-		GNOME_APP_PIXMAP_DATA, NULL, 0, 0, NULL },
-	GNOMEUIINFO_SEPARATOR, 
-	{ GNOME_APP_UI_ITEM, N_("_Launch a robot"), NULL, on_launchrobot_activate, NULL, NULL, 
-		GNOME_APP_PIXMAP_DATA, robot_xpm, 0, 0, NULL }, 
-	GNOMEUIINFO_SEPARATOR, 
-	GNOMEUIINFO_MENU_EXIT_ITEM(on_exit_activate,NULL),
-	GNOMEUIINFO_END
-};
-
-enum {
-	WID_A_RANDOM,
-	WID_A_SEND,
-	WID_A_START,
-	WID_A_STATUS,
-};
-
-GnomeUIInfo actionsmenu[] =
-{
-	{ GNOME_APP_UI_ITEM, N_("_Generate random board"), NULL, on_random_activate, NULL, NULL,
-		GNOME_APP_PIXMAP_DATA, NULL, 0, 0, NULL },
-
-	{ GNOME_APP_UI_ITEM, N_("_Send ships"), NULL, on_sendships_activate, NULL, NULL,
-		GNOME_APP_PIXMAP_DATA, NULL, 0, 0, NULL },
-
-	{ GNOME_APP_UI_ITEM, N_("_Start"), NULL, on_start_activate, NULL, NULL,
-		GNOME_APP_PIXMAP_DATA, NULL, 0, 0, NULL },
-
-	{ GNOME_APP_UI_ITEM, N_("Status"), NULL, on_status_activate, NULL, NULL,
-		GNOME_APP_PIXMAP_DATA, NULL, 0, 0, NULL },
-
-	GNOMEUIINFO_END
-};
-
-GnomeUIInfo viewmenu[] = {
-	{ GNOME_APP_UI_TOGGLEITEM, N_("View lot of messages"), N_("View lot of messages"),
-	conf_view_messages, NULL, NULL,
-	GNOME_APP_PIXMAP_NONE, NULL,
-	0, 0, NULL },
-
-	{ GNOME_APP_UI_TOGGLEITEM, N_("Hide grid"), N_("Hide the map grid"),
-	conf_view_grid, NULL, NULL,
-	GNOME_APP_PIXMAP_NONE, NULL,
-	0, 0, NULL },
-
-	GNOMEUIINFO_END
-};
-
-GnomeUIInfo helpmenu[] = 
-{
-	GNOMEUIINFO_HELP("gbatnav"),
-	GNOMEUIINFO_MENU_ABOUT_ITEM(about,NULL),
-	GNOMEUIINFO_END
-};
-
-GnomeUIInfo mainmenu[] = 
-{
-        GNOMEUIINFO_MENU_GAME_TREE(gamemenu),
-	{ GNOME_APP_UI_SUBTREE_STOCK, N_("_Actions"), NULL, actionsmenu, NULL, NULL, \
-		(GnomeUIPixmapType) 0, NULL, 0,	(GdkModifierType) 0, NULL },
-	GNOMEUIINFO_MENU_VIEW_TREE(viewmenu),
-        GNOMEUIINFO_MENU_HELP_TREE(helpmenu),
-	GNOMEUIINFO_END
-};
-
-enum {
-	WID_CONNEC,
-	WID_XXX0,
-	WID_RANDOM,
-	WID_SEND,
-	WID_XXX1,
-	WID_ROBOT,
-	WID_XXX2,
-	WID_START,
-};
-
-
-GnomeUIInfo main_toolbarinfo[] =
-{
-	{GNOME_APP_UI_ITEM, N_("Connect"), N_("Connect to server"),
-	on_connect_activate, NULL, NULL,
-	GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_PIXMAP_NEW, 0, 0, NULL},
-
-	GNOMEUIINFO_SEPARATOR,
-	
-	{GNOME_APP_UI_ITEM, N_("Random"), N_("Generate a random board"),
-	on_random_activate, NULL, NULL,
-	GNOME_APP_PIXMAP_DATA, random_xpm, 0, 0, NULL},
-
-	{GNOME_APP_UI_ITEM, N_("Send ships"), N_("Send ships to server"),
-	on_sendships_activate, NULL, NULL,
-	GNOME_APP_PIXMAP_DATA, ships_xpm, 0, 0, NULL},
-
-
-	GNOMEUIINFO_SEPARATOR,
-
-	{GNOME_APP_UI_ITEM, N_("Robot"), N_("Launch a robot"),
-	on_launchrobot_activate, NULL, NULL,
-	GNOME_APP_PIXMAP_DATA, robot_xpm, 0, 0, NULL},
-  
-	GNOMEUIINFO_SEPARATOR,
-
-	{GNOME_APP_UI_ITEM, N_("Start"), N_("Start the game"),
-	on_start_activate, NULL, NULL,
-	GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_PIXMAP_TIMER, 0, 0, NULL},
-	
-	{GNOME_APP_UI_ENDOFINFO}
-};
-
 /*****************************************************************************
  *                                   INIT X                                  *
  *****************************************************************************/
 void init_X( )
 {
-	GtkTooltips *tooltips;
 	GtkWidget *inputline;
 	GtkWidget *vbox_buttons;
+	GtkWidget *box;
+	GtkWidget *menubar;
+	GtkWidget *menu;
+	GtkWidget *item;
+	GtkWidget *toolbar;
+	GtkWidget *mbox;
+	GtkWidget *label;
+	GtkWidget *icon;
+	GtkWidget *image;
+	GtkToolItem *button;
+	GtkToolbarStyle style;
+	GdkPixbuf *pixbuf;
+	GtkAccelGroup *accel_group;
 	GtkScrolledWindow *scrolledWindow=NULL;
         GtkTextIter text_iter;
 
-#ifdef ENABLE_NLS
-# define ELEMENTS(x) (sizeof(x) / sizeof(x[0])) 
-	{
-		int i;
-		for (i = 0; i < ELEMENTS(mainmenu); i++)
-			mainmenu[i].label = gettext(mainmenu[i].label);
-		for (i = 0; i < ELEMENTS(gamemenu); i++)
-			gamemenu[i].label = gettext(gamemenu[i].label);
-		for (i = 0; i < ELEMENTS(helpmenu); i++)
-			helpmenu[i].label = gettext(helpmenu[i].label);
-	}
-#endif /* ENABLE_NLS */
-   
-	window = gnome_app_new ("gbnclient", _("Gnome Batalla Naval client") );
-	gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, TRUE);
-
-	gnome_app_create_menus(GNOME_APP(window), mainmenu);
-	gnome_app_create_toolbar(GNOME_APP(window), main_toolbarinfo);
+	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+	gtk_window_set_title(GTK_WINDOW(window),
+	                     _("Gnome Batalla Naval client"));
+	gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
+	accel_group = gtk_accel_group_new();
+	gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
+
+	menubar = gtk_menu_bar_new();
+	box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+	gtk_container_add(GTK_CONTAINER(window), box);
+	gtk_box_pack_start(GTK_BOX(box), menubar, FALSE, FALSE, 0);
+
+	menu = gtk_menu_new();
+	gtk_menu_set_accel_group(GTK_MENU(menu), accel_group);
+	item = gtk_menu_item_new_with_mnemonic(_("_Game"));
+	gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), menu);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menubar), item);
+
+	item = gtk_menu_item_new_with_mnemonic(_("_Connect"));
+	g_object_set_data(G_OBJECT(window), "connec", item);
+	g_signal_connect(item, "activate",
+	                 G_CALLBACK(on_connect_activate), NULL);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+
+	item = gtk_menu_item_new_with_mnemonic(_("_Disconnect"));
+	g_object_set_data(G_OBJECT(window), "discon", item);
+	g_signal_connect(item, "activate",
+	                 G_CALLBACK(on_disconnect_activate), NULL);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+
+	item = gtk_separator_menu_item_new();
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+
+	/* Emulate GtkImageMenuItem.  */
+	mbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
+	pixbuf = gdk_pixbuf_new_from_xpm_data(robot_xpm);
+	icon = gtk_image_new_from_pixbuf(pixbuf);
+	g_object_unref(pixbuf);
+	label = gtk_label_new_with_mnemonic(_("_Launch a robot"));
+	item = gtk_menu_item_new();
+	gtk_container_add(GTK_CONTAINER(mbox), icon);
+	gtk_container_add(GTK_CONTAINER(mbox), label);
+	gtk_container_add(GTK_CONTAINER(item), mbox);
+	g_object_set_data(G_OBJECT(window), "robot", item);
+	g_signal_connect(item, "activate",
+	                 G_CALLBACK(on_launchrobot_activate), NULL);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+
+	item = gtk_separator_menu_item_new();
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+
+	item = gtk_menu_item_new_with_mnemonic(_("_Quit"));
+	gtk_widget_add_accelerator(item, "activate", accel_group, GDK_KEY_Q,
+	                           GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
+	g_signal_connect(item, "activate", G_CALLBACK(on_exit_activate), NULL);
+	gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+
+	menu = gtk_menu_new();
+	item = gtk_menu_item_new_with_mnemonic(_("_Actions"));
+	gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), menu);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menubar), item);
+
+	item = gtk_menu_item_new_with_mnemonic(_("_Generate random board"));
+	g_object_set_data(G_OBJECT(window), "random", item);
+	g_signal_connect(item, "activate",
+	                 G_CALLBACK(on_random_activate), NULL);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+
+	item = gtk_menu_item_new_with_mnemonic(_("_Send ships"));
+	g_object_set_data(G_OBJECT(window), "send", item);
+	g_signal_connect(item, "activate",
+	                 G_CALLBACK(on_sendships_activate), NULL);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+
+	item = gtk_menu_item_new_with_mnemonic(_("_Start"));
+	g_object_set_data(G_OBJECT(window), "start", item);
+	g_signal_connect(item, "activate",
+	                 G_CALLBACK(on_start_activate), NULL);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+
+	item = gtk_menu_item_new_with_label(_("Status"));
+	g_object_set_data(G_OBJECT(window), "status", item);
+	g_signal_connect(item, "activate",
+	                 G_CALLBACK(on_status_activate), NULL);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+
+	menu = gtk_menu_new();
+	item = gtk_menu_item_new_with_mnemonic(_("_View"));
+	gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), menu);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menubar), item);
+
+	item = gtk_check_menu_item_new_with_label(_("View lot of messages"));
+	g_signal_connect(item, "toggled",
+	                 G_CALLBACK(conf_view_messages), NULL);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+
+	item = gtk_check_menu_item_new_with_label(_("Hide grid"));
+	gtk_widget_set_tooltip_text(item, _("Hide the map grid"));
+	g_signal_connect(item, "toggled", G_CALLBACK(conf_view_grid), NULL);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+
+	menu = gtk_menu_new();
+	gtk_menu_set_accel_group(GTK_MENU(menu), accel_group);
+	item = gtk_menu_item_new_with_mnemonic(_("_Help"));
+	gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), menu);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menubar), item);
+
+	item = gtk_menu_item_new_with_mnemonic(_("_Contents"));
+	gtk_widget_add_accelerator(item, "activate", accel_group, GDK_KEY_F1,
+	                           0, GTK_ACCEL_VISIBLE);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+
+	item = gtk_menu_item_new_with_mnemonic(_("_About"));
+	g_signal_connect(item, "activate", G_CALLBACK(about), window);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+
+	toolbar = gtk_toolbar_new();
+	g_object_get(gtk_settings_get_default(), "gtk-toolbar-style",
+	             &style, NULL);
+	gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), style);
+	gtk_box_pack_start(GTK_BOX(box), toolbar, FALSE, FALSE, 0);
+
+	image = gtk_image_new_from_icon_name("document-new",
+	                                     GTK_ICON_SIZE_LARGE_TOOLBAR);
+	button = gtk_tool_button_new(image, _("Connect"));
+	gtk_tool_item_set_tooltip_text(button, _("Connect to server"));
+	g_object_set_data(G_OBJECT(window), "t_connec", button);
+	g_signal_connect(button, "clicked",
+	                 G_CALLBACK(on_connect_activate), NULL);
+	gtk_toolbar_insert(GTK_TOOLBAR(toolbar), button, -1);
+
+	button = gtk_separator_tool_item_new();
+	gtk_toolbar_insert(GTK_TOOLBAR(toolbar), button, -1);
+
+	pixbuf = gdk_pixbuf_new_from_xpm_data(random_xpm);
+	image = gtk_image_new_from_pixbuf(pixbuf);
+	g_object_unref(pixbuf);
+	button = gtk_tool_button_new(image, _("Random"));
+	gtk_tool_item_set_tooltip_text(button, _("Generate a random board"));
+	g_object_set_data(G_OBJECT(window), "t_random", button);
+	g_signal_connect(button, "clicked",
+	                 G_CALLBACK(on_random_activate), NULL);
+	gtk_toolbar_insert(GTK_TOOLBAR(toolbar), button, -1);
+
+	pixbuf = gdk_pixbuf_new_from_xpm_data(ships_xpm);
+	image = gtk_image_new_from_pixbuf(pixbuf);
+	g_object_unref(pixbuf);
+	button = gtk_tool_button_new(image, _("Send ships"));
+	gtk_tool_item_set_tooltip_text(button, _("Send ships to server"));
+	g_object_set_data(G_OBJECT(window), "t_send", button);
+	g_signal_connect(button, "clicked",
+	                 G_CALLBACK(on_sendships_activate), NULL);
+	gtk_toolbar_insert(GTK_TOOLBAR(toolbar), button, -1);
+
+	button = gtk_separator_tool_item_new();
+	gtk_toolbar_insert(GTK_TOOLBAR(toolbar), button, -1);
+
+	pixbuf = gdk_pixbuf_new_from_xpm_data(robot_xpm);
+	image = gtk_image_new_from_pixbuf(pixbuf);
+	g_object_unref(pixbuf);
+	button = gtk_tool_button_new(image, _("Robot"));
+	gtk_tool_item_set_tooltip_text(button, _("Launch a robot"));
+	g_object_set_data(G_OBJECT(window), "t_robot", button);
+	g_signal_connect(button, "clicked",
+	                 G_CALLBACK(on_launchrobot_activate), NULL);
+	gtk_toolbar_insert(GTK_TOOLBAR(toolbar), button, -1);
+
+	button = gtk_separator_tool_item_new();
+	gtk_toolbar_insert(GTK_TOOLBAR(toolbar), button, -1);
+
+	image = gtk_image_new_from_icon_name("appointment-new",
+	                                     GTK_ICON_SIZE_LARGE_TOOLBAR);
+	button = gtk_tool_button_new(image, _("Start"));
+	gtk_tool_item_set_tooltip_text(button, _("Start the game"));
+	g_object_set_data(G_OBJECT(window), "t_start", button);
+	g_signal_connect(button, "clicked",
+	                 G_CALLBACK(on_start_activate), NULL);
+	gtk_toolbar_insert(GTK_TOOLBAR(toolbar), button, -1);
 
 /*	gtk_menu_item_right_justify(GTK_MENU_ITEM(mainmenu[3].widget)); */
 	gtk_widget_realize (window);
    
-	gtk_signal_connect ( GTK_OBJECT( window), "destroy",
-		GTK_SIGNAL_FUNC( on_exit_activate ),
-		GTK_OBJECT(window) );
-	gtk_signal_connect ( GTK_OBJECT( window), "delete_event",
-		GTK_SIGNAL_FUNC( on_exit_activate ),
-		GTK_OBJECT(window) );
+	g_signal_connect ( G_OBJECT( window), "destroy",
+		G_CALLBACK( on_exit_activate ),
+		G_OBJECT(window) );
+	g_signal_connect ( G_OBJECT( window), "delete_event",
+		G_CALLBACK( on_exit_activate ),
+		G_OBJECT(window) );
   
-	tooltips=gtk_tooltips_new();
-	gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);
-
-
 	/* Box que contiene a box_left, box_button, box_right  */
-	vbox = gtk_vbox_new ( FALSE, 0);
-	gnome_app_set_contents(GNOME_APP(window), vbox );
+	vbox = gtk_box_new ( GTK_ORIENTATION_VERTICAL, 0 );
+	gtk_box_pack_start(GTK_BOX(box), vbox, FALSE, FALSE, 0);
    
-	gtk_container_border_width ( GTK_CONTAINER(vbox), 0);
+	gtk_container_set_border_width ( GTK_CONTAINER(vbox), 0);
 	gtk_widget_show ( vbox ); 
 
 	/* box horizontal */
-	hbox = gtk_hbox_new ( FALSE, 0);
+	hbox = gtk_box_new ( GTK_ORIENTATION_HORIZONTAL, 0);
 	gtk_container_add ( GTK_CONTAINER(vbox), hbox );
-	gtk_container_border_width ( GTK_CONTAINER(hbox), 0);
+	gtk_container_set_border_width ( GTK_CONTAINER(hbox), 0);
 	gtk_widget_show( hbox );
    
 	/******************** LEFT *******************/
@@ -366,22 +379,20 @@
    
 	/* respecto al drawing_left */
 	drawing_left = gtk_drawing_area_new();
-	gtk_drawing_area_size(GTK_DRAWING_AREA(drawing_left),200,200);
+	gtk_widget_set_size_request(drawing_left,200,200);
 	gtk_widget_show( drawing_left );
    
 
 	/* señales de la drawing area */
-	gtk_signal_connect (GTK_OBJECT (drawing_left), "expose_event",
-		(GtkSignalFunc) expose_event, NULL);
-	gtk_signal_connect (GTK_OBJECT (drawing_left), "button_press_event",
-		(GtkSignalFunc) button_press_event, NULL);
-	gtk_widget_set_events (drawing_left, GDK_EXPOSURE_MASK
-		|GDK_BUTTON_PRESS_MASK);
-
+	g_signal_connect (G_OBJECT (drawing_left), "draw",
+		(GCallback) expose_event, NULL);
+	g_signal_connect (G_OBJECT (drawing_left), "button-press-event",
+		(GCallback) button_press_event, NULL);
+	gtk_widget_add_events (drawing_left, GDK_BUTTON_PRESS_MASK);
    
 	/* respecto al drawing_about */
         scrolledWindow = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL,NULL));
-	hbox_text_help = gtk_hbox_new ( FALSE, 0);
+	hbox_text_help = gtk_box_new ( GTK_ORIENTATION_HORIZONTAL, 0);
 	gtk_widget_show( hbox_text_help );
    
 	text_help = GTK_WIDGET(gtk_text_view_new());
@@ -396,26 +407,26 @@
    
 	label_left = gtk_label_new(_("My board"));
 	gtk_notebook_append_page ( GTK_NOTEBOOK(notebook_left),drawing_left,label_left);
-	label_left = gtk_label_new(_("Quick Help"));
+	label_left = gtk_label_new(_("Help"));
 	gtk_notebook_append_page ( GTK_NOTEBOOK(notebook_left),hbox_text_help,label_left);
 
 	bn_help();
       
 	/* center */
 
-	vbox_buttons = gtk_vbox_new ( TRUE, 10);
+	vbox_buttons = gtk_box_new ( GTK_ORIENTATION_VERTICAL, 10);
 	gtk_container_add ( GTK_CONTAINER (hbox), vbox_buttons );
-	gtk_container_border_width( GTK_CONTAINER(vbox_buttons),20);
+	gtk_container_set_border_width( GTK_CONTAINER(vbox_buttons),20);
 	gtk_widget_show( vbox_buttons );
 
 
 	/* right */
 	notebook_right = gtk_notebook_new();
-	gtk_signal_connect ( GTK_OBJECT ( notebook_right ), "switch_page",
-		GTK_SIGNAL_FUNC ( page_switch ), NULL );
+	g_signal_connect ( G_OBJECT ( notebook_right ), "switch-page",
+		G_CALLBACK ( page_switch ), NULL );
 	gtk_notebook_set_tab_pos( GTK_NOTEBOOK(notebook_right),GTK_POS_TOP );
-	gtk_box_pack_start( GTK_BOX(hbox),notebook_right,FALSE,TRUE,0);
- 	gtk_container_border_width( GTK_CONTAINER( notebook_right), 0 );
+	gtk_box_pack_end( GTK_BOX(hbox),notebook_right,FALSE,TRUE,0);
+ 	gtk_container_set_border_width( GTK_CONTAINER( notebook_right), 0 );
 	gtk_notebook_set_scrollable( GTK_NOTEBOOK(notebook_right) , TRUE );
 	gtk_notebook_set_show_tabs( GTK_NOTEBOOK(notebook_right) , TRUE );
 	gtk_notebook_popup_enable( GTK_NOTEBOOK(notebook_right) );
@@ -423,9 +434,9 @@
 	gtk_widget_show (notebook_right);
 
 	drawing_right_about = gtk_drawing_area_new();
-	gtk_drawing_area_size(GTK_DRAWING_AREA(drawing_right_about),200,200);
-	gtk_signal_connect (GTK_OBJECT (drawing_right_about), "expose_event",
-		(GtkSignalFunc) expose_event_about, NULL );
+	gtk_widget_set_size_request(drawing_right_about,200,200);
+	g_signal_connect (G_OBJECT (drawing_right_about), "draw",
+		(GCallback) expose_event_about, NULL );
 	gtk_widget_set_events (drawing_right_about, GDK_EXPOSURE_MASK );
 	gtk_widget_show( drawing_right_about);
 	label_right_about = gtk_label_new("Batalla Naval" );
@@ -434,13 +445,13 @@
    
 
 	/* Ventana de texto de abajo */
-	separator = gtk_hseparator_new ();
+	separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
 	gtk_box_pack_start ( GTK_BOX(vbox), separator, FALSE,TRUE, 0);
 
 	gtk_widget_show(separator);
    
         scrolledWindow = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL,NULL));
-	hbox_text = gtk_hbox_new ( FALSE, 0);
+	hbox_text = gtk_box_new ( GTK_ORIENTATION_HORIZONTAL, 0);
 	gtk_container_add ( GTK_CONTAINER(vbox), hbox_text );
 	gtk_widget_show( hbox_text );
    
@@ -451,7 +462,6 @@
 	gtk_widget_show(GTK_WIDGET(scrolledWindow));
 
 	vscrollbar = gtk_scrolled_window_get_vscrollbar(scrolledWindow);
-	gtk_range_set_update_policy( GTK_RANGE( vscrollbar ), GTK_UPDATE_CONTINUOUS );
 	/*gtk_box_pack_start( GTK_BOX(hbox_text), vscrollbar, FALSE,TRUE,0);
 	gtk_widget_show (vscrollbar);*/
    
@@ -466,14 +476,14 @@
 	inputline = gtk_entry_new();
 	gtk_box_pack_start( GTK_BOX( vbox ), inputline, FALSE, FALSE, 0 );
 	gtk_widget_show(inputline);
-	gtk_signal_connect(GTK_OBJECT(inputline), "activate",
-		GTK_SIGNAL_FUNC(inputline_return), NULL);
+	g_signal_connect(G_OBJECT(inputline), "activate",
+		G_CALLBACK(inputline_return), NULL);
 
 
 	/* StatusBar */
-	hbox_status = gtk_hbox_new ( FALSE, 0);
+	hbox_status = gtk_box_new ( GTK_ORIENTATION_HORIZONTAL, 0);
 	gtk_container_add ( GTK_CONTAINER(vbox), hbox_status );
-	gtk_container_border_width ( GTK_CONTAINER(hbox_status), 0);
+	gtk_container_set_border_width ( GTK_CONTAINER(hbox_status), 0);
 	gtk_widget_show ( hbox_status ); 
    
 	statusbar_right = gtk_statusbar_new();
@@ -489,44 +499,44 @@
 
 	      
 	/* Pixmaps */
-	barco1 =    gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco1_xpm );
-	barco1_t =  gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco1_t_xpm );
-	barco1_h =  gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco1_h_xpm );
-
-	barco2h =   gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco2h_xpm );
-	barco2h_t = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco2h_t_xpm );
-	barco2h_h = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco2h_h_xpm );
-
-	barco2v =   gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco2v_xpm );
-	barco2v_t = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco2v_t_xpm );
-	barco2v_h = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco2v_h_xpm );
-
-	barco3h =   gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco3h_xpm );
-	barco3h_t = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco3h_t_xpm );
-	barco3h_h = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco3h_h_xpm );
-
-	barco3v =   gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco3v_xpm );
-	barco3v_t = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco3v_t_xpm );
-	barco3v_h = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco3v_h_xpm );
-
-	barco4h =   gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco4h_xpm );
-	barco4h_t = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco4h_t_xpm );
-	barco4h_h = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco4h_h_xpm );
-
-	barco4v =   gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco4v_xpm );
-	barco4v_t = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco4v_t_xpm );
-	barco4v_h = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],barco4v_h_xpm );
-
-	fondo =     gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],fondo_xpm );
-	agua =      gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],agua_xpm );
-	about_pix = gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],about_xpm );
-	icono =     gdk_pixmap_create_from_xpm_d( window->window, &mask, &window->style->bg[GTK_STATE_NORMAL],icono_xpm );
+	barco1 =    gdk_pixbuf_new_from_xpm_data( barco1_xpm );
+	barco1_t =  gdk_pixbuf_new_from_xpm_data( barco1_t_xpm );
+	barco1_h =  gdk_pixbuf_new_from_xpm_data( barco1_h_xpm );
+
+	barco2h =   gdk_pixbuf_new_from_xpm_data( barco2h_xpm );
+	barco2h_t = gdk_pixbuf_new_from_xpm_data( barco2h_t_xpm );
+	barco2h_h = gdk_pixbuf_new_from_xpm_data( barco2h_h_xpm );
+
+	barco2v =   gdk_pixbuf_new_from_xpm_data( barco2v_xpm );
+	barco2v_t = gdk_pixbuf_new_from_xpm_data( barco2v_t_xpm );
+	barco2v_h = gdk_pixbuf_new_from_xpm_data( barco2v_h_xpm );
+
+	barco3h =   gdk_pixbuf_new_from_xpm_data( barco3h_xpm );
+	barco3h_t = gdk_pixbuf_new_from_xpm_data( barco3h_t_xpm );
+	barco3h_h = gdk_pixbuf_new_from_xpm_data( barco3h_h_xpm );
+
+	barco3v =   gdk_pixbuf_new_from_xpm_data( barco3v_xpm );
+	barco3v_t = gdk_pixbuf_new_from_xpm_data( barco3v_t_xpm );
+	barco3v_h = gdk_pixbuf_new_from_xpm_data( barco3v_h_xpm );
+
+	barco4h =   gdk_pixbuf_new_from_xpm_data( barco4h_xpm );
+	barco4h_t = gdk_pixbuf_new_from_xpm_data( barco4h_t_xpm );
+	barco4h_h = gdk_pixbuf_new_from_xpm_data( barco4h_h_xpm );
+
+	barco4v =   gdk_pixbuf_new_from_xpm_data( barco4v_xpm );
+	barco4v_t = gdk_pixbuf_new_from_xpm_data( barco4v_t_xpm );
+	barco4v_h = gdk_pixbuf_new_from_xpm_data( barco4v_h_xpm );
+
+	fondo =     gdk_pixbuf_new_from_xpm_data( fondo_xpm );
+	agua =      gdk_pixbuf_new_from_xpm_data( agua_xpm );
+	about_pix = gdk_pixbuf_new_from_xpm_data( about_xpm );
+	icono =     gdk_pixbuf_new_from_xpm_data( icono_xpm );
 
-	gdk_window_set_icon (window->window, NULL, icono , mask );
+	gtk_window_set_icon( GTK_WINDOW(window), icono );
 
    
 	/* Principal */   
-	gtk_widget_show( window);
+	gtk_widget_show_all( window);
 }
 
 /**
@@ -534,66 +544,96 @@
  */
 void update_sensi()
 {
+	GObject *win = G_OBJECT (window);
+	GtkWidget *widget;
 
 	/* connect & disconnect */
 	if( usuario.play == DISCON ) {
-		gtk_widget_set_sensitive (main_toolbarinfo[WID_CONNEC].widget, TRUE);
-		gtk_widget_set_sensitive (gamemenu[WID_G_CONNEC].widget, TRUE);
-		gtk_widget_set_sensitive (gamemenu[WID_G_DISCON].widget, FALSE);
+	        widget = g_object_get_data (win, "t_connec");
+	        gtk_widget_set_sensitive (widget, TRUE);
+	        widget = g_object_get_data (win, "connec");
+		gtk_widget_set_sensitive (widget, TRUE);
+	        widget = g_object_get_data(win, "discon");
+		gtk_widget_set_sensitive (widget, FALSE);
 	} else {
-		gtk_widget_set_sensitive (main_toolbarinfo[WID_CONNEC].widget, FALSE);
-		gtk_widget_set_sensitive (gamemenu[WID_G_CONNEC].widget, FALSE);
-		gtk_widget_set_sensitive (gamemenu[WID_G_DISCON].widget, TRUE);
+	        widget = g_object_get_data (win, "t_connec");
+		gtk_widget_set_sensitive (widget, FALSE);
+	        widget = g_object_get_data (win, "connec");
+		gtk_widget_set_sensitive (widget, FALSE);
+	        widget = g_object_get_data(win, "discon");
+		gtk_widget_set_sensitive (widget, TRUE);
 	}
 
 	/* random y send*/
 	if( usuario.play == CONNEC ) {
-		gtk_widget_set_sensitive (main_toolbarinfo[WID_RANDOM].widget, TRUE);
-		gtk_widget_set_sensitive (main_toolbarinfo[WID_SEND].widget, TRUE);
-		gtk_widget_set_sensitive (actionsmenu[WID_A_RANDOM].widget, TRUE);
-		gtk_widget_set_sensitive (actionsmenu[WID_A_SEND].widget, TRUE);
+	        widget = g_object_get_data (win, "t_random");
+		gtk_widget_set_sensitive (widget, TRUE);
+	        widget = g_object_get_data (win, "t_send");
+		gtk_widget_set_sensitive (widget, TRUE);
+	        widget = g_object_get_data (win, "random");
+		gtk_widget_set_sensitive (widget, TRUE);
+	        widget = g_object_get_data (win, "send");
+		gtk_widget_set_sensitive (widget, TRUE);
 
 	} else {
-		gtk_widget_set_sensitive (main_toolbarinfo[WID_RANDOM].widget, FALSE);
-		gtk_widget_set_sensitive (main_toolbarinfo[WID_SEND].widget, FALSE);
-		gtk_widget_set_sensitive (actionsmenu[WID_A_RANDOM].widget, FALSE);
-		gtk_widget_set_sensitive (actionsmenu[WID_A_SEND].widget, FALSE);
+	        widget = g_object_get_data (win, "t_random");
+		gtk_widget_set_sensitive (widget, FALSE);
+	        widget = g_object_get_data (win, "t_send");
+		gtk_widget_set_sensitive (widget, FALSE);
+	        widget = g_object_get_data (win, "random");
+		gtk_widget_set_sensitive (widget, FALSE);
+	        widget = g_object_get_data (win, "send");
+		gtk_widget_set_sensitive (widget, FALSE);
 	}
 
 	/* robot */
 	if( usuario.play == CONNEC || usuario.play == BOARD ) {
-		gtk_widget_set_sensitive (main_toolbarinfo[WID_ROBOT].widget, TRUE);
-		gtk_widget_set_sensitive (gamemenu[WID_G_ROBOT].widget, TRUE);
+	        widget = g_object_get_data (win, "t_robot");
+		gtk_widget_set_sensitive (widget, TRUE);
+	        widget = g_object_get_data (win, "robot");
+		gtk_widget_set_sensitive (widget, TRUE);
 	} else {
-		gtk_widget_set_sensitive (main_toolbarinfo[WID_ROBOT].widget, FALSE);
-		gtk_widget_set_sensitive (gamemenu[WID_G_ROBOT].widget, FALSE);
+	        widget = g_object_get_data (win, "t_robot");
+		gtk_widget_set_sensitive (widget, FALSE);
+	        widget = g_object_get_data (win, "robot");
+		gtk_widget_set_sensitive (widget, FALSE);
 	}
 	
 	/* start */
 	if( usuario.play == BOARD ) {
-		gtk_widget_set_sensitive (main_toolbarinfo[WID_START].widget, TRUE);
-		gtk_widget_set_sensitive (actionsmenu[WID_A_START].widget, TRUE);
+	        widget = g_object_get_data (win, "t_start");
+		gtk_widget_set_sensitive (widget, TRUE);
+	        widget = g_object_get_data (win, "start");
+		gtk_widget_set_sensitive (widget, TRUE);
 	} else {
-		gtk_widget_set_sensitive (main_toolbarinfo[WID_START].widget, FALSE);
-		gtk_widget_set_sensitive (actionsmenu[WID_A_START].widget, FALSE);
+	        widget = g_object_get_data (win, "t_start");
+		gtk_widget_set_sensitive (widget, FALSE);
+	        widget = g_object_get_data (win, "start");
+		gtk_widget_set_sensitive (widget, FALSE);
 	}
 
 	/* status */
 	if( usuario.play == DISCON ) {
-		gtk_widget_set_sensitive (actionsmenu[WID_A_STATUS].widget, FALSE);
+	        widget = g_object_get_data (win, "status");
+		gtk_widget_set_sensitive (widget, FALSE);
 	} else {
-		gtk_widget_set_sensitive (actionsmenu[WID_A_STATUS].widget, TRUE);
+	        widget = g_object_get_data (win, "status");
+		gtk_widget_set_sensitive (widget, TRUE);
 	}
 
 	/* ggz */
 	if( usuario.with_ggz ) {
 		/* connect */
-		gtk_widget_set_sensitive (main_toolbarinfo[WID_CONNEC].widget, FALSE);
-		gtk_widget_set_sensitive (gamemenu[WID_G_CONNEC].widget, FALSE);
+	        widget = g_object_get_data (win, "t_connec");
+		gtk_widget_set_sensitive (widget, FALSE);
+	        widget = g_object_get_data (win, "connec");
+		gtk_widget_set_sensitive (widget, FALSE);
 
 		/* robot */
-		gtk_widget_set_sensitive (main_toolbarinfo[WID_ROBOT].widget, FALSE);
-		gtk_widget_set_sensitive (gamemenu[WID_G_ROBOT].widget, FALSE);
+	        widget = g_object_get_data (win, "t_robot");
+		gtk_widget_set_sensitive (widget, FALSE);
+	        widget = g_object_get_data (win, "robot");
+		gtk_widget_set_sensitive (widget, FALSE);
 	} 
 
 	return;
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/random.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/random.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * random_xpm[] = {
+static const char * random_xpm[] = {
 "18 18 23 1",
 " 	c None",
 ".	c #000000",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/ships.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/ships.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * ships_xpm[] = {
+static const char * ships_xpm[] = {
 "22 22 31 1",
 " 	c None",
 ".	c #F0FC05",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/about.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/about.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * about_xpm[] = {
+static const char * about_xpm[] = {
 "200 200 15 1",
 " 	c None",
 ".	c #FFFFFF",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/agua.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/agua.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * agua_xpm[] = {
+static const char * agua_xpm[] = {
 "20 20 4 1",
 " 	c None",
 ".	c #0000FF",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco1.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco1.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco1_xpm[] = {
+static const char * barco1_xpm[] = {
 "20 20 34 1",
 " 	c None",
 ".	c #00FFFF",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco1_h.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco1_h.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco1_h_xpm[] = {
+static const char * barco1_h_xpm[] = {
 "20 20 26 1",
 " 	c None",
 ".	c #00FFFF",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco1_t.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco1_t.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco1_t_xpm[] = {
+static const char * barco1_t_xpm[] = {
 "20 20 34 1",
 " 	c None",
 ".	c #FF0000",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco2h.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco2h.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco2h_xpm[] = {
+static const char * barco2h_xpm[] = {
 "40 20 17 1",
 " 	c None",
 ".	c #000000",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco2h_h.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco2h_h.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco2h_h_xpm[] = {
+static const char * barco2h_h_xpm[] = {
 "40 20 7 1",
 " 	c None",
 ".	c #00FFFF",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco2h_t.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco2h_t.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco2h_t_xpm[] = {
+static const char * barco2h_t_xpm[] = {
 "40 20 7 1",
 " 	c None",
 ".	c #FF0000",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco2v.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco2v.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco2v_xpm[] = {
+static const char * barco2v_xpm[] = {
 "20 40 17 1",
 " 	c None",
 ".	c #000000",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco2v_h.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco2v_h.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco2v_h_xpm[] = {
+static const char * barco2v_h_xpm[] = {
 "20 40 7 1",
 " 	c None",
 ".	c #0000FF",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco2v_t.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco2v_t.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco2v_t_xpm[] = {
+static const char * barco2v_t_xpm[] = {
 "20 40 7 1",
 " 	c None",
 ".	c #0000FF",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco3h.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco3h.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco3h_xpm[] = {
+static const char * barco3h_xpm[] = {
 "60 20 8 1",
 " 	c None",
 ".	c #00FFFF",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco3h_h.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco3h_h.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco3h_h_xpm[] = {
+static const char * barco3h_h_xpm[] = {
 "60 20 8 1",
 " 	c None",
 ".	c #000000",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco3h_t.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco3h_t.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco3h_t_xpm[] = {
+static const char * barco3h_t_xpm[] = {
 "60 20 8 1",
 " 	c None",
 ".	c #FF0000",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco3v.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco3v.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco3v_xpm[] = {
+static const char * barco3v_xpm[] = {
 "20 60 8 1",
 " 	c None",
 ".	c #0000FF",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco3v_h.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco3v_h.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco3v_h_xpm[] = {
+static const char * barco3v_h_xpm[] = {
 "20 60 8 1",
 " 	c None",
 ".	c #000000",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco3v_t.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco3v_t.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco3v_t_xpm[] = {
+static const char * barco3v_t_xpm[] = {
 "20 60 8 1",
 " 	c None",
 ".	c #0000FF",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco4h.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco4h.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco4h_xpm[] = {
+static const char * barco4h_xpm[] = {
 "80 20 17 1",
 " 	c None",
 ".	c #000000",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco4h_h.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco4h_h.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco4h_h_xpm[] = {
+static const char * barco4h_h_xpm[] = {
 "80 20 8 1",
 " 	c None",
 ".	c #00FFFF",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco4h_t.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco4h_t.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco4h_t_xpm[] = {
+static const char * barco4h_t_xpm[] = {
 "80 20 8 1",
 " 	c None",
 ".	c #FF0000",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco4v.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco4v.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco4v_xpm[] = {
+static const char * barco4v_xpm[] = {
 "20 80 17 1",
 " 	c None",
 ".	c #000000",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco4v_h.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco4v_h.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco4v_h_xpm[] = {
+static const char * barco4v_h_xpm[] = {
 "20 80 8 1",
 " 	c None",
 ".	c #0000FF",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/barco4v_t.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/barco4v_t.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * barco4v_t_xpm[] = {
+static const char * barco4v_t_xpm[] = {
 "20 80 8 1",
 " 	c None",
 ".	c #0000FF",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/fondo.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/fondo.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char *fondo_xpm[] = {
+static const char *fondo_xpm[] = {
 /* width height num_colors chars_per_pixel */
 "   200   200      196            2",
 /* colors */
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pixmaps/icono.xpm
+++ gbatnav-1.0.4cvs20051004/gbnclient/pixmaps/icono.xpm
@@ -1,5 +1,5 @@
 /* XPM */
-static char * icono_xpm[] = {
+static const char * icono_xpm[] = {
 "48 48 7 1",
 " 	c None",
 ".	c #21BC2C",
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pantalla.c
+++ gbatnav-1.0.4cvs20051004/gbnclient/pantalla.c
@@ -4,7 +4,7 @@
  * Funciones de manejo de pantalla y otras
  */
 
-#include <gnome.h>
+#include <gtk/gtk.h>
 
 #include "protocol.h"
 #include "gbnclient.h"
@@ -80,7 +80,7 @@
 	*pos=a;
 }
 
-void barco_dibu( int x,			/* x */ 
+void barco_dibu( cairo_t *cr, int x,		/* x */
 		int y,			/* y */ 
 		int estado,		/* BARCO, TOCADO, HUNDIDO */ 
 		int lugar,		/* 0=left,  1=der */
@@ -88,7 +88,7 @@
 		)
 {
 	gint size=0,pos=0,hor=0;
-	GdkPixmap *barcos_enteros[2][4];
+	GdkPixbuf *barcos_enteros[2][4];
 	gint verti=0;
 	gint horiz=1;
 
@@ -127,20 +127,20 @@
 				verti=1;
 				horiz=0;
 			}
-			gdk_draw_pixmap( drawing_left->window,
-	     			drawing_left->style->fg_gc[GTK_WIDGET_STATE(drawing_left)],
-				barcos_enteros[hor][size],
-				horiz*pos*ANCHO,verti*pos*LARGO,
-				x*ANCHO+1,y*LARGO+1,
-				ANCHO,LARGO);
+	                gdk_cairo_set_source_pixbuf(cr,
+	                                            barcos_enteros[hor][size],
+	                                            x*ANCHO+1-horiz*pos*ANCHO,
+	                                            y*LARGO+1-verti*pos*LARGO);
+	                cairo_rectangle(cr, x*ANCHO+1, y*LARGO+1,
+	                                ANCHO, LARGO);
+	                cairo_fill(cr);
 		}
 		else { /* Pone solo un barco. No sabe como estan */
- 			gdk_draw_pixmap( drawing_left->window,
-	     			drawing_left->style->fg_gc[GTK_WIDGET_STATE(drawing_left)],
-		     		barcos_enteros[0][0],
-		     		0,0,
-	     			x*ANCHO+1,y*LARGO+1,
-	     			ANCHO,LARGO);
+	                gdk_cairo_set_source_pixbuf(cr,
+	                                            barcos_enteros[0][0],
+	                                            x*ANCHO+1, y*LARGO+1);
+	                cairo_rectangle(cr, x*ANCHO+1, y*LARGO+1, ANCHO, LARGO);
+	                cairo_fill(cr);
 		}
 	} else { /* lado derecho */
 		if( usuario.play >= BOARD ) {
@@ -149,19 +149,18 @@
 				verti=1;
 				horiz=0;
 			}
-     			gdk_draw_pixmap( drawing_right[ii]->window,
-		     		drawing_right[ii]->style->fg_gc[GTK_WIDGET_STATE(drawing_right[ii])],
-				barcos_enteros[hor][size],
-				horiz*pos*ANCHO,verti*pos*LARGO,
-				x*ANCHO+1,y*LARGO+1,
-				ANCHO,LARGO);
+	                gdk_cairo_set_source_pixbuf(cr,
+	                                            barcos_enteros[hor][size],
+	                                            x*ANCHO+1-horiz*pos*ANCHO,
+	                                            y*LARGO+1-verti*pos*LARGO);
+	                cairo_rectangle(cr, x*ANCHO+1, y*LARGO+1, ANCHO, LARGO);
+	                cairo_fill(cr);
 		} else { /* Pone solo un barco. No sabe como estan */
-     			gdk_draw_pixmap( drawing_right[ii]->window,
-		     		drawing_right[ii]->style->fg_gc[GTK_WIDGET_STATE(drawing_right[ii])],
-		     		barcos_enteros[0][0],
-		     		0,0,
-	     			x*ANCHO+1,y*LARGO+1,
-	     			ANCHO,LARGO);
+	                gdk_cairo_set_source_pixbuf(cr,
+	                                            barcos_enteros[0][0],
+	                                            x*ANCHO+1, y*LARGO+1);
+	                cairo_rectangle(cr, x*ANCHO+1, y*LARGO+1, ANCHO, LARGO);
+	                cairo_fill(cr);
 		}
 	}
 
@@ -197,45 +196,43 @@
    		gtk_text_buffer_get_end_iter(gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)),&text_iter);
    		gtk_text_view_get_line_yrange( GTK_TEXT_VIEW(text), &text_iter,&w,&h);
 
-   		if( GTK_RANGE( vscrollbar )->adjustment->upper >= h ) {
-			new_value = GTK_RANGE( vscrollbar )-> adjustment->upper - h;
-			GTK_RANGE(vscrollbar)->adjustment->value = new_value;
-			GTK_RANGE(vscrollbar)->timer = 0; /* FIXME para que sirver ? */
-			gtk_signal_emit_by_name (GTK_OBJECT (GTK_RANGE(vscrollbar)->adjustment), "value_changed");
+	        if( gtk_adjustment_get_upper(gtk_range_get_adjustment
+	                                     (GTK_RANGE( vscrollbar ))) >= h ) {
+	                new_value = gtk_adjustment_get_upper
+	                        (gtk_range_get_adjustment
+	                         (GTK_RANGE( vscrollbar ))) - h;
+	                gtk_adjustment_set_value(gtk_range_get_adjustment
+	                                         (GTK_RANGE(vscrollbar)),
+	                                         new_value);
      		}
 	}
 }
 
 
 /* Pinta mi tabla con algun color o tipo de barco */
-void pmicell(int x,int y,int color)
+void pmicell(cairo_t *cr,int x,int y,int color)
 {
    	if(x<10 && x>=0 && y>=0 && y<10) {
 		switch( color ) {
    		case NOBARCO:
-     			gdk_draw_pixmap( drawing_left->window,
-		     		drawing_left->style->fg_gc[GTK_WIDGET_STATE(drawing_left)],
-		     		fondo,
-		     		x*ANCHO+1,y*LARGO+1,
-		     		x*ANCHO+1,y*LARGO+1,
-		     		ANCHO,LARGO);
+	                gdk_cairo_set_source_pixbuf(cr, fondo, 0, 0);
+	                cairo_rectangle(cr, x*ANCHO+1, y*LARGO+1, ANCHO, LARGO);
+	                cairo_fill(cr);
      			break;
    		case AGUA:
-     			gdk_draw_pixmap( drawing_left->window,
-		     		drawing_left->style->fg_gc[GTK_WIDGET_STATE(drawing_left)],
-		     		agua,
-		     		0,0,
-		     		x*ANCHO+1,y*LARGO+1,
-		     		ANCHO,LARGO);
+	                gdk_cairo_set_source_pixbuf(cr, agua,
+	                                            x*ANCHO+1, y*LARGO+1);
+	                cairo_rectangle(cr, x*ANCHO+1, y*LARGO+1, ANCHO, LARGO);
+	                cairo_fill(cr);
      			break;
    		case BARCO:
-			barco_dibu( x, y, BARCO, 0, 0 );
+	                barco_dibu( cr, x, y, BARCO, 0, 0 );
      			break;
    		case TOCADO:
-			barco_dibu( x, y, TOCADO, 0, 0);
+	                barco_dibu( cr, x, y, TOCADO, 0, 0);
 			break;
    		case HUNDIDO:
-			barco_dibu( x, y, HUNDIDO, 0, 0);
+	                barco_dibu( cr, x, y, HUNDIDO, 0, 0);
      			break;
 	  	}
      	}
@@ -243,44 +240,37 @@
 
 /* Pinta alguna celda del enemigo con algun color o barco */
 void 
-ptucell(int x,int y,int color)
+ptucell(cairo_t *cr, int x,int y,int color)
 {
    	gint i;
    
-	i = gtk_notebook_current_page( GTK_NOTEBOOK( notebook_right ) );
+	i = gtk_notebook_get_current_page( GTK_NOTEBOOK( notebook_right ) );
 	i = usuario.pages[ i ]; 
 
    	if(x<10 && x>=0 && y>=0 && y<10) {
 		switch( color ) {
 		case NOBARCO:
-     			gdk_draw_pixmap( drawing_right[i]->window,
-	     			drawing_right[i]->style->fg_gc[GTK_WIDGET_STATE(drawing_right[i])],
-	     			fondo,
-	     			x*ANCHO+1,y*LARGO+1,
-	     			x*ANCHO+1,y*LARGO+1,
-	     			ANCHO,LARGO);
+	                gdk_cairo_set_source_pixbuf(cr, fondo, 0, 0);
+	                cairo_rectangle(cr, x*ANCHO+1, y*LARGO+1, ANCHO, LARGO);
+	                cairo_fill(cr);
      			break;
    		case AGUA:
-     			gdk_draw_pixmap( drawing_right[i]->window,
-		     		drawing_right[i]->style->fg_gc[GTK_WIDGET_STATE(drawing_right[i])],
-		     		agua,
-		     		0,0,
-		     		x*ANCHO+1,y*LARGO+1,
-		     		ANCHO,LARGO);
+	                gdk_cairo_set_source_pixbuf(cr, agua,
+	                                            x*ANCHO+1, y*LARGO+1);
+	                cairo_rectangle(cr, x*ANCHO+1, y*LARGO+1, ANCHO, LARGO);
+	                cairo_fill(cr);
      			break;
    		case BARCO:
-			barco_dibu( x, y, BARCO, 1, i );
+	                barco_dibu( cr, x, y, BARCO, 1, i );
      			break;
    		case TOCADO:
-     			gdk_draw_pixmap( drawing_right[i]->window,
-		     		drawing_right[i]->style->fg_gc[GTK_WIDGET_STATE(drawing_right[i])],
-		     		barco1_t,
-		     		0,0,
-		     		x*ANCHO+1,y*LARGO+1,
-		     		ANCHO,LARGO);
+	                gdk_cairo_set_source_pixbuf(cr, barco1_t,
+	                                            x*ANCHO+1, y*LARGO+1);
+	                cairo_rectangle(cr, x*ANCHO+1, y*LARGO+1, ANCHO, LARGO);
+	                cairo_fill(cr);
 			break;
    		case HUNDIDO:
-			barco_dibu( x, y, HUNDIDO, 1, i );
+	                barco_dibu( cr, x, y, HUNDIDO, 1, i );
      			break;
 	  	}
      	}
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/proceso.c
+++ gbatnav-1.0.4cvs20051004/gbnclient/proceso.c
@@ -15,7 +15,8 @@
 #include <string.h>
 
 #include <config.h>
-#include <gnome.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
 
 #include "protocol.h"
 #include "parser.h"
@@ -48,12 +49,12 @@
 		textfill(1,"Error: poner_proximo_jugador");
 		return;
 	}
-	gtk_notebook_set_page( GTK_NOTEBOOK( notebook_right ),i );
+	gtk_notebook_set_current_page( GTK_NOTEBOOK( notebook_right ),i );
 	gtk_notebook_next_page( GTK_NOTEBOOK(notebook_right));
-	j = gtk_notebook_current_page( GTK_NOTEBOOK( notebook_right ));
+	j = gtk_notebook_get_current_page( GTK_NOTEBOOK( notebook_right ));
 	if(j==i) {
 		j=0;
-		gtk_notebook_set_page( GTK_NOTEBOOK( notebook_right ),j );
+		gtk_notebook_set_current_page( GTK_NOTEBOOK( notebook_right ),j );
 	}
 	usuario.usrfrom = usuario.pages[ j ];
 }
@@ -98,7 +99,8 @@
 	
 	if( (usuario.play>=BOARD) ){ /* bug fix */
 		if(x==usuario.numjug) { /* esto quiere decir que se colgo el server */
-			j = g_list_length( GTK_NOTEBOOK(notebook_right)->children);
+	                j = g_list_length( gtk_container_get_children
+	                                   (GTK_CONTAINER(notebook_right)) );
 			for (x = 1; x < j; x++)
 				gtk_notebook_remove_page ( GTK_NOTEBOOK( notebook_right), 1);
 			for(j=0;j<MAXPLAYER;j++)
@@ -163,13 +165,14 @@
 
 	usuario.play=CONNEC;			/* Game Over */
 	/* gtk v1.2 no me actualiza este evento. forzarlo */
-	expose_event( drawing_left, NULL );
+	gtk_widget_queue_draw( drawing_left );
 
 	for(i=0;i<MAXPLAYER;i++)
 		usuario.names[i][0]=0;		/* clear all names */
 	textfill(0,_("Game Over"));
 	
-	j = g_list_length( GTK_NOTEBOOK(notebook_right)->children);
+	j = g_list_length( gtk_container_get_children
+	                   (GTK_CONTAINER(notebook_right)) );
 	for (i = 1; i < j; i++)
 		gtk_notebook_remove_page ( GTK_NOTEBOOK( notebook_right), 1);
 
@@ -235,7 +238,10 @@
 	}
 	/* FIXME: Hoy por hoy, no le doy bola al dueño del board */
 	putintemp(buf);
-	fillboard(inteliclient(buf),1);
+	i = gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook_right));
+	i = usuario.pages[i];
+	g_object_set_data(G_OBJECT(drawing_right[i]), "buffer", buf);
+	gtk_widget_queue_draw(drawing_right[i]);
 }
 static void token_fire(char *str)
 {
@@ -274,11 +280,8 @@
 		return;
 
 	usuario.mitabla[x][y]=z;
-	{
-		char buf[100];
-		iwtable( buf );
-		fillboard( inteliclient( (char*)buf ), 0 );
-	}
+	gtk_widget_queue_draw(drawing_left);
+
 	bnwrite(usuario.sock,BN_READ"=%i",usuario.usrfrom);
 }
 static void token_turn(char *str)
@@ -371,13 +374,15 @@
 				label_right[l] = gtk_label_new( usuario.names[l] );
 				label_right2[l] = gtk_label_new( usuario.names[l] );		       
 				drawing_right[l] = gtk_drawing_area_new();
-				gtk_drawing_area_size(GTK_DRAWING_AREA(drawing_right[l]),200,200);
-				gtk_signal_connect (GTK_OBJECT (drawing_right[l]), "expose_event",
-			   		(GtkSignalFunc) expose_event_right, NULL);
-				gtk_signal_connect (GTK_OBJECT (drawing_right[l]), "button_press_event",
-			   		(GtkSignalFunc) button_press_event_right, NULL);
-				gtk_widget_set_events (drawing_right[l], GDK_EXPOSURE_MASK
-			      		|GDK_BUTTON_PRESS_MASK);
+	                        gtk_widget_set_size_request(drawing_right[l],
+	                                                    200, 200);
+				g_signal_connect (drawing_right[l], "draw",
+			   		(GCallback) expose_event_right, NULL);
+				g_signal_connect (drawing_right[l],
+	                                          "button-press-event",
+			   		(GCallback) button_press_event_right, NULL);
+				gtk_widget_add_events (drawing_right[l],
+	                                               GDK_BUTTON_PRESS_MASK);
 	
 				gtk_widget_show( label_right[l] );
 				gtk_widget_show( label_right2[l] );
@@ -406,7 +411,8 @@
 	for(i=0;i<100;i++)	/* tempclit es un 'cache' */
 		usuario.tempclit[i]=NOBARCO;
 
-	j = g_list_length( GTK_NOTEBOOK(notebook_right)->children);
+	j = g_list_length( gtk_container_get_children(GTK_CONTAINER
+	                                              (notebook_right)) );
 	for (i = 0; i < j; i++)
 		gtk_notebook_remove_page ( GTK_NOTEBOOK( notebook_right), 0);
 	
@@ -434,7 +440,7 @@
 	update_sensi();
 
 	/* gtk v1.2 no me actualiza este evento. forzarlo */
-	expose_event( drawing_left, NULL );
+	gtk_widget_queue_draw( drawing_left );
 }
 
 static void token_message( char *str )
@@ -500,9 +506,10 @@
 }
 
 
-int
-proceso( gpointer data, int sock, GdkInputCondition GDK_INPUT_READ )
+gboolean
+proceso( GIOChannel *src, GIOCondition cond, gpointer data )
 {
+	gint sock;
 	int i,j;
 	PARSER p;
 	DELIM igualador={ '=', ':', '=' };
@@ -514,10 +521,11 @@
 	p.separador = &separador;
 	str[0]=0;
 
+	sock=g_io_channel_unix_get_fd( src );
 	j=net_readline( sock, str, PROT_MAX_LEN );
 	if(j<1) {
 		send_disconnect();				
-		return -1;
+		return FALSE;
 	}
 	
 	strncpy(p.sig,str,sizeof(p.sig) );
@@ -529,5 +537,5 @@
 				textfill(1,_("Token '%s' not found"),p.token);
 		}
 	} while(i);
-	return 0;
+	return TRUE;
 }
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/random_board.c
+++ gbatnav-1.0.4cvs20051004/gbnclient/random_board.c
@@ -9,7 +9,8 @@
 
 #include <stdlib.h>
 #include <config.h>
-#include <gnome.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
 
 #include "protocol.h"
 #include "cliente.h"
@@ -31,11 +32,10 @@
 		return ;
 
 	} else {
-		usuario.random = gnome_config_get_int_with_default("/gbnclient/data/random=1995",NULL);
+	        usuario.random = g_settings_get_uint(settings, "random");
 		srandom( usuario.random );
 		usuario.random = random();		
-		gnome_config_set_int   ("/gbnclient/data/random",  usuario.random);
-		gnome_config_sync();
+	        g_settings_set_uint(settings, "random", usuario.random);
 
 		for(i=0;i<10;i++) {
 			/* clean tabla */
@@ -52,11 +52,7 @@
 			buscar_poscicion(x,y,d,t);
 		}
 
-		for(i=0;i<10;i++) {
-			for(j=0;j<10;j++)
-				pmicell(i,j,usuario.mitabla[i][j]);
-		}
-		draw_grid_left();
+	        gtk_widget_queue_draw(drawing_left);
 	}
 }
 
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/configure.c
+++ gbatnav-1.0.4cvs20051004/gbnclient/configure.c
@@ -1,6 +1,6 @@
 /*	$Id: configure.c,v 1.5 2002/04/19 04:12:18 riq Exp $	*/
 
-#include <gnome.h> 
+#include <gtk/gtk.h>
 #include "cliente.h"
 #include "pantalla.h"
 #include "gbnclient.h"
@@ -19,19 +19,17 @@
 
 	/* left */
 	if( drawing_left ) {
-		gtk_widget_draw( drawing_left, NULL );
-		expose_event( drawing_left, NULL );
+	        gtk_widget_queue_draw( drawing_left );
 	}
 
 	/* right */
-	i = gtk_notebook_current_page( GTK_NOTEBOOK( notebook_right ) );
+	i = gtk_notebook_get_current_page( GTK_NOTEBOOK( notebook_right ) );
 	if( i >= 0 && i < MAXPLAYER ) {
 		i = usuario.pages[ i ]; 
 		widget = drawing_right[ i ];
 
 		if( usuario.usrfrom >=0 && usuario.usrfrom < MAXPLAYER && drawing_right[i] ) {
-			gtk_widget_draw( drawing_right[usuario.usrfrom], NULL );
-			expose_event_right( drawing_right[usuario.usrfrom], NULL );
+	                gtk_widget_queue_draw(drawing_right[usuario.usrfrom]);
 		}
 	}
 }
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/sendmsg.c
+++ gbatnav-1.0.4cvs20051004/gbnclient/sendmsg.c
@@ -1,5 +1,6 @@
 /*	$Id: sendmsg.c,v 1.3 2001/04/06 15:15:22 riq Exp $	*/
-#include <gnome.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
 
 #include "cliente.h"
 #include "pantalla.h"
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/support.c
+++ gbatnav-1.0.4cvs20051004/gbnclient/support.c
@@ -30,7 +30,7 @@
 
 #include <stdio.h>
 
-#include <gnome.h>
+#include <goocanvas.h>
 
 #include "support.h"
 #include "protocol.h"
@@ -55,119 +55,6 @@
 #define TEG_DIALOG_Y	200
 #define TEG_DIALOG_Y_NEW 45
 
-void generic_window_set_parent (GtkWidget * dialog, GtkWindow   * parent)
-{
-	gint x, y, w, h, dialog_x, dialog_y;
-
-	g_return_if_fail(dialog != NULL);
-	g_return_if_fail(parent != NULL);
-	g_return_if_fail(GTK_IS_WINDOW(parent));
-
-	gtk_window_set_transient_for (GTK_WINDOW(dialog), parent);
-
-
-
-	if ( ! GTK_WIDGET_VISIBLE(parent)) return; /* Can't get its
-						  size/pos */
-
-	/* Throw out other positioning */
-	gtk_window_set_position(GTK_WINDOW(dialog),GTK_WIN_POS_NONE);
-
-	gdk_window_get_origin (GTK_WIDGET(parent)->window, &x, &y);
-	gdk_window_get_size   (GTK_WIDGET(parent)->window, &w, &h);
-
-	/*
-	 * The problem here is we don't know how big the dialog is.
-	 * So "centered" isn't really true. We'll go with 
-	 * "kind of more or less on top"
-	 */
-
-	dialog_x = x + w/4;
-	dialog_y = y + h/4;
-
-	gtk_widget_set_uposition(GTK_WIDGET(dialog), dialog_x, dialog_y); 
-}
-
-/**
- * @fn void teg_dialog( char* title, char* bigtitle, char* data )
- * Crea un dialogo un poco mas vistoso, onda gnome_about
- * @param title Titulo de la ventana
- * @param bittitle Titulo del dialogo
- * @param data Informacion del dialogo
- */
-void teg_dialog( char* title, char* bigtitle, char* data )
-{
-	GtkWidget* dialog;
-	GtkWidget* canvas;
-	GnomeCanvasItem *item;
-
-	dialog = gnome_dialog_new(title, 
-			GNOME_STOCK_BUTTON_OK,
-			NULL );
-	gnome_dialog_set_parent( GNOME_DIALOG(dialog), GTK_WINDOW(window));
-	gnome_dialog_set_close( GNOME_DIALOG(dialog), TRUE );
-	
-
-	canvas = gnome_canvas_new();
-	gtk_widget_set_usize (canvas, TEG_DIALOG_X, TEG_DIALOG_Y );
-	gnome_canvas_set_scroll_region (GNOME_CANVAS (canvas), 0, 0, TEG_DIALOG_X, TEG_DIALOG_Y );
-
-	item = gnome_canvas_item_new(
-		gnome_canvas_root(GNOME_CANVAS(canvas)),
-		gnome_canvas_rect_get_type (),
-		"x1", 0.0,
-		"y1", 0.0,
-		"x2", (double) TEG_DIALOG_X,
-		"y2", 45.0,
-		"fill_color","black",
-		"outline_color","black",
-		NULL);
-
-	item = gnome_canvas_item_new(
-		gnome_canvas_root(GNOME_CANVAS(canvas)),
-		gnome_canvas_rect_get_type (),
-		"x1", 0.0,
-		"y1", 45.0,
-		"x2", (double) TEG_DIALOG_X,
-		"y2", (double) TEG_DIALOG_Y,
-		"fill_color","light green",
-		"outline_color","light green",
-		NULL);
-
-	item = gnome_canvas_item_new(
-		gnome_canvas_root(GNOME_CANVAS(canvas)),
-		gnome_canvas_text_get_type(),
-		"text",bigtitle,
-		"x", (double) (TEG_DIALOG_X/2),
-		"y", (double) 10,
-		"x_offset", (double) -1,
-		"y_offset", (double) -1,
-		"font", HELVETICA_20_BFONT,
-		"fill_color", "white",
-		"anchor",GTK_ANCHOR_NORTH,
-		NULL);
-
-	item = gnome_canvas_item_new(
-		gnome_canvas_root(GNOME_CANVAS(canvas)),
-		gnome_canvas_text_get_type(),
-		"text",data,
-		"x", (double) 4,
-		"y", (double) 60,
-		"x_offset", (double) -1,
-		"y_offset", (double) -1,
-		"font", HELVETICA_12_FONT,
-		"fill_color", "black",
-		"anchor",GTK_ANCHOR_NW,
-		NULL);
-
-	gtk_box_pack_start_defaults( GTK_BOX(GNOME_DIALOG(dialog)->vbox), GTK_WIDGET(canvas));
-
-	gtk_widget_show (canvas);
-	gtk_widget_show_all(dialog);
-
-	return;
-}
-
 /**
  * @fn GtkWidget* teg_dialog_new( char* title, char* bigtitle )
  * Crea un gnome_dialog_new un poco diferente
@@ -176,63 +63,46 @@
 {
 	GtkWidget* dialog;
 	GtkWidget* canvas;
-	GnomeCanvasItem *item;
+	GooCanvasItem *item;
 
-	dialog = gnome_dialog_new(title, 
-			NULL );
-	gnome_dialog_set_parent( GNOME_DIALOG(dialog), GTK_WINDOW(window));
-
-	canvas = gnome_canvas_new();
-	gtk_widget_set_usize (canvas, TEG_DIALOG_X, TEG_DIALOG_Y_NEW );
-	gnome_canvas_set_scroll_region (GNOME_CANVAS (canvas), 0, 0, TEG_DIALOG_X, TEG_DIALOG_Y_NEW );
-
-	item = gnome_canvas_item_new(
-		gnome_canvas_root(GNOME_CANVAS(canvas)),
-		gnome_canvas_rect_get_type (),
-		"x1", 0.0,
-		"y1", 0.0,
-		"x2", (double) TEG_DIALOG_X,
-		"y2", 45.0,
-		"fill_color","black",
-		"outline_color","black",
-		NULL);
-
-	item = gnome_canvas_item_new(
-		gnome_canvas_root(GNOME_CANVAS(canvas)),
-		gnome_canvas_text_get_type(),
-		"text",bigtitle,
-		"x", (double) (TEG_DIALOG_X/2),
-		"y", (double) 10,
-		"x_offset", (double) -1,
-		"y_offset", (double) -1,
+	dialog = gtk_dialog_new();
+	gtk_window_set_title(GTK_WINDOW(dialog), title);
+	gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(window));
+
+	canvas = goo_canvas_new();
+	g_object_set (canvas, "anchor", GOO_CANVAS_ANCHOR_CENTER, NULL);
+	gtk_widget_set_size_request (canvas, TEG_DIALOG_X, TEG_DIALOG_Y_NEW);
+	goo_canvas_set_bounds (GOO_CANVAS (canvas), 0, 0,
+	                       TEG_DIALOG_X, TEG_DIALOG_Y_NEW);
+
+	item = goo_canvas_get_root_item(GOO_CANVAS(canvas));
+	goo_canvas_rect_new(
+		item,
+		0.0,
+		0.0,
+		(double) TEG_DIALOG_X,
+		45.0,
+		"fill-color", "black",
+		"stroke-color", "black",
+		NULL);
+
+	goo_canvas_text_new(
+		item,
+		bigtitle,
+		(double) (TEG_DIALOG_X/2),
+		(double) 10,
+		-1,
+		GOO_CANVAS_ANCHOR_NORTH,
 		"font", HELVETICA_20_BFONT,
-		"fill_color", "white",
-		"anchor",GTK_ANCHOR_NORTH,
+		"fill-color", "white",
 		NULL);
 
 
-	gtk_box_pack_start_defaults( GTK_BOX(GNOME_DIALOG(dialog)->vbox), GTK_WIDGET(canvas));
+	gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area
+	                           (GTK_DIALOG(dialog))), GTK_WIDGET(canvas),
+	                   FALSE, FALSE, 0);
 
 	gtk_widget_show (canvas);
 
 	return dialog;
 }
-
-/* close a window */
-void destroy_window( GtkWidget * widget, GtkWidget **window )
-{
-	if( *window != NULL) {
-		gtk_widget_destroy(*window);
-	}
-
-	*window=NULL;
-}
-
-
-/* Brings attention to a window by raising it and giving it focus */
-void raise_and_focus (GtkWidget *widget)
-{
-	g_assert (GTK_WIDGET_REALIZED (widget));
-	gdk_window_show (widget->window);
-	gtk_widget_grab_focus (widget);
-}
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/support.h
+++ gbatnav-1.0.4cvs20051004/gbnclient/support.h
@@ -23,11 +23,7 @@
 #ifndef __TEG_GUI_GNOME_SUPPORT_H
 #define __TEG_GUI_GNOME_SUPPORT_H
 
-void generic_window_set_parent (GtkWidget * dialog, GtkWindow   * parent);
 char * load_pixmap_file( char *name );
-void teg_dialog( char* title, char* bigtitle, char* data );
 GtkWidget* teg_dialog_new( char* title, char* bigtitle );
-void raise_and_focus (GtkWidget *widget);
-void destroy_window( GtkWidget * widget, GtkWidget **window );
 
 #endif /* __TEG_GUI_GNOME_SUPPORT_H */
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/g_connect.c
+++ gbatnav-1.0.4cvs20051004/gbnclient/g_connect.c
@@ -28,7 +28,8 @@
 #endif
 
 #include <assert.h>
-#include <gnome.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <fcntl.h>
@@ -116,14 +117,12 @@
 static BATNAV_STATUS conectar_real()
 {
 	if( send_connect() == 0 ) {
-		if( conectar_window )
-			destroy_window( conectar_window, &conectar_window );
 		return BATNAV_STATUS_SUCCESS;
 	}
 	return BATNAV_STATUS_ERROR;
 }
 
-static gint conectar_button_con_cb(GtkWidget *area, GdkEventExpose *event, gpointer user_data)
+static gint conectar_button_con_cb(void)
 {
 	strncpy(usuario.nombre,gtk_entry_get_text(GTK_ENTRY(con_entry_name)),sizeof(usuario.nombre)-1);
 	usuario.nombre[sizeof(usuario.nombre)-1]=0;
@@ -133,14 +132,15 @@
 
 
 	/* if you checked "start local server" we'll copy "localhost" to g_juego.sername */
-	if( GTK_TOGGLE_BUTTON(button_launch)->active ) {
+	if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button_launch)) ) {
 		launch_server( usuario.port );
 	}
 
-	gnome_config_set_int   ("/gbnclient/data/port",  usuario.port);
-	gnome_config_set_string("/gbnclient/data/servername",usuario.server);
-	gnome_config_set_string("/gbnclient/data/playername",usuario.nombre);
-	gnome_config_sync();
+	g_settings_delay(settings);
+	g_settings_set_uint(settings, "port", usuario.port);
+	g_settings_set_string(settings, "servername", usuario.server);
+	g_settings_set_string(settings, "playername", usuario.nombre);
+	g_settings_apply(settings);
 
 	conectar_real();
 
@@ -153,7 +153,7 @@
 static void
 prop_changed (GtkWidget *w, void *n)
 {
-	if( GTK_TOGGLE_BUTTON(button_launch)->active )
+	if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button_launch)) )
 		gtk_entry_set_text( GTK_ENTRY( con_entry_server ), "localhost");
 }
 
@@ -167,84 +167,73 @@
 	GtkWidget *table;
 	GtkWidget *frame;
         GtkAdjustment *adj;
+        gint response;
 
 	if( usuario.with_ggz ) {
 		conectar_real();
 		return;
 	}
 
-	if( conectar_window != NULL ) {
-		gtk_widget_show_all(conectar_window);
-		raise_and_focus(conectar_window);
-		return ;
-	}
-
 	conectar_window = teg_dialog_new(_("Connect to server"),_("Connect to server")); 
-	gnome_dialog_append_buttons(GNOME_DIALOG(conectar_window),
-		GNOME_STOCK_BUTTON_OK,
-		GNOME_STOCK_BUTTON_CANCEL,
+	gtk_dialog_add_buttons(GTK_DIALOG(conectar_window),
+                               _("_OK"), GTK_RESPONSE_ACCEPT,
+                               _("_Cancel"), GTK_RESPONSE_REJECT,
 		NULL );
-	gnome_dialog_set_default(GNOME_DIALOG(conectar_window),0);
-
-	gnome_dialog_button_connect (GNOME_DIALOG(conectar_window),
-		1, GTK_SIGNAL_FUNC(destroy_window),&conectar_window);
-
-	gnome_dialog_button_connect (GNOME_DIALOG(conectar_window),
-		0, GTK_SIGNAL_FUNC(conectar_button_con_cb),conectar_window);
-
-	gtk_signal_connect( GTK_OBJECT(conectar_window),
-			"delete_event", GTK_SIGNAL_FUNC(destroy_window),
-			&conectar_window);
-
-	gtk_signal_connect( GTK_OBJECT(conectar_window),
-			"destroy", GTK_SIGNAL_FUNC(destroy_window),
-			&conectar_window);
+	gtk_dialog_set_default_response(GTK_DIALOG(conectar_window),
+	                                GTK_RESPONSE_ACCEPT);
 
 	/* server options */
-	table = gtk_table_new (3, 2, TRUE);
-	gtk_container_border_width (GTK_CONTAINER (table), GNOME_PAD_SMALL);
-	gtk_table_set_row_spacings (GTK_TABLE (table), GNOME_PAD_SMALL);
-	gtk_table_set_col_spacings (GTK_TABLE (table), GNOME_PAD_SMALL);
+	table = gtk_grid_new ();
+	gtk_container_set_border_width (GTK_CONTAINER (table), 4);
+	gtk_grid_set_row_spacing (GTK_GRID (table), 4);
+	gtk_grid_set_column_spacing (GTK_GRID (table), 4);
 
 	frame = gtk_frame_new (_("Server Options"));
-	gtk_container_border_width (GTK_CONTAINER (frame), 1);
-	gtk_container_add(GTK_CONTAINER(GNOME_DIALOG(conectar_window)->vbox), frame);
+	gtk_container_set_border_width (GTK_CONTAINER (frame), 1);
+	gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area
+	                                (GTK_DIALOG(conectar_window))), frame);
 
 	/* server port */
 	label = gtk_label_new(_("Server port:"));
-	gtk_table_attach_defaults( GTK_TABLE(table), label, 0, 1, 0, 1 );
+	gtk_grid_attach( GTK_GRID(table), label, 0, 0, 1, 1 );
 	adj = (GtkAdjustment *) gtk_adjustment_new( usuario.port, 1.0, 65536.0, 1.0, 5.0, 1.0 );
 	con_spinner_port = gtk_spin_button_new( adj, 0.0, 0);
-	gtk_table_attach_defaults( GTK_TABLE(table), con_spinner_port, 1, 2, 0, 1 );
+	gtk_grid_attach( GTK_GRID(table), con_spinner_port, 1, 0, 1, 1);
 
 	/* server name */
 	label = gtk_label_new(_("Server name:"));
-	gtk_table_attach_defaults( GTK_TABLE(table), label, 0, 1, 1, 2 );
+	gtk_grid_attach( GTK_GRID(table), label, 0, 1, 1, 1);
 	con_entry_server = gtk_entry_new( );
 	gtk_entry_set_text( GTK_ENTRY( con_entry_server ), usuario.server);
-	gtk_table_attach_defaults( GTK_TABLE(table), con_entry_server, 1, 2, 1, 2 );
+	gtk_grid_attach( GTK_GRID(table), con_entry_server, 1, 1, 1, 1);
 	
 
 	/* player name */
 	label = gtk_label_new(_("Name:"));
-	gtk_table_attach_defaults( GTK_TABLE(table), label, 0, 1, 2, 3 );
+	gtk_grid_attach( GTK_GRID(table), label, 0, 2, 1, 1);
 	con_entry_name = gtk_entry_new( );
 	gtk_entry_set_text( GTK_ENTRY( con_entry_name ), usuario.nombre);
-	gtk_table_attach_defaults( GTK_TABLE(table), con_entry_name, 1, 2, 2, 3 );
+	gtk_grid_attach( GTK_GRID(table), con_entry_name, 1, 2, 1, 1);
 
 
 	gtk_container_add(GTK_CONTAINER(frame), table);
 
 	/* launch localhost server */
 	button_launch = gtk_check_button_new_with_label(_("Start server locally"));
-	gtk_container_add(GTK_CONTAINER(GNOME_DIALOG(conectar_window)->vbox), button_launch);
-	gtk_signal_connect (GTK_OBJECT (button_launch), "toggled",
-	    	GTK_SIGNAL_FUNC (prop_changed), NULL);
+	gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area
+	                                (GTK_DIALOG(conectar_window))),
+	                  button_launch);
+	g_signal_connect (G_OBJECT (button_launch), "toggled",
+	    	G_CALLBACK (prop_changed), NULL);
 
 
 	/* fin */
 
 	gtk_widget_show (GTK_WIDGET(table));
 	gtk_widget_show_all(conectar_window);
-	raise_and_focus(conectar_window);
+	response = gtk_dialog_run(GTK_DIALOG(conectar_window));
+	if(response == GTK_RESPONSE_ACCEPT)
+	        conectar_button_con_cb();
+
+	gtk_widget_destroy(conectar_window);
 }
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/Makefile.am
+++ gbatnav-1.0.4cvs20051004/gbnclient/Makefile.am
@@ -51,8 +51,13 @@
 
 EXTRA_DIST = README AUTHORS	\
 	gbnclient.desktop	\
+	$(gsettings_SCHEMAS) 	\
 	gnome-gbatnav.png
 
+gsettings_SCHEMAS = net.sf.batnav.gbnclient.gschema.xml
+
+@GSETTINGS_RULES@
+
 appicon_DATA = gnome-gbatnav.png
 
 Games_DATA = gbnclient.desktop
--- /dev/null
+++ gbatnav-1.0.4cvs20051004/gbnclient/net.sf.batnav.gbnclient.gschema.xml
@@ -0,0 +1,24 @@
+<schemalist gettext-domain="gbatnav">
+  <schema id="net.sf.batnav.gbnclient" path="/net/sf/batnav/gbnclient/">
+    <key name="port" type="u">
+      <default>1995</default>
+      <summary>The server port.</summary>
+    </key>
+    <key name="servername" type="s">
+      <default>'localhost'</default>
+      <summary>The server hostname.</summary>
+    </key>
+    <key name="playername" type="s">
+      <default>''</default>
+      <summary>The player name.</summary>
+      <description>Determined on startup based on the value of the
+      LOGNAME environment variable.</description>
+    </key>
+    <key name="random" type="u">
+      <default>1995</default>
+      <summary>Random number for generating random boards.</summary>
+      <description>This key is updated programmatically every time a
+      new board is generated.</description>
+    </key>
+  </schema>
+</schemalist>
--- gbatnav-1.0.4cvs20051004.orig/gbnclient/pantalla.h
+++ gbatnav-1.0.4cvs20051004/gbnclient/pantalla.h
@@ -24,11 +24,11 @@
 
 /* Draw in my (left) screen */
 void 
-pmicell(int x,int y,int color);
+pmicell(cairo_t *cr,int x,int y,int color);
 
 /* Draw in enemy (right) screen */
 void 
-ptucell(int x,int y,int color);
+ptucell(cairo_t *cr,int x,int y,int color);
 
 void 
 foot_right( char* text );
--- gbatnav-1.0.4cvs20051004.orig/gbnrobot/Makefile.am
+++ gbatnav-1.0.4cvs20051004/gbnrobot/Makefile.am
@@ -33,6 +33,10 @@
 
 appicon_DATA = gbnrobot.png
 
-EXTRA_DIST = README AUTHORS $(appicon_DATA) gbnrobot.png
+EXTRA_DIST = README AUTHORS $(appicon_DATA) gbnrobot.png $(gsettings_SCHEMAS)
+
+gsettings_SCHEMAS = net.sf.batnav.gbnrobot.gschema.xml
+
+@GSETTINGS_RULES@
 
 install-data-local:
--- /dev/null
+++ gbatnav-1.0.4cvs20051004/gbnrobot/net.sf.batnav.gbnrobot.gschema.xml
@@ -0,0 +1,10 @@
+<schemalist gettext-domain="gbatnav">
+  <schema id="net.sf.batnav.gbnrobot" path="/net/sf/batnav/gbnrobot/">
+    <key name="random" type="u">
+      <default>1995</default>
+      <summary>Random number for generating random boards.</summary>
+      <description>This key is updated programmatically every time a
+      new board is generated.</description>
+    </key>
+  </schema>
+</schemalist>
