tags 868424 + patch
thanks

Attached is a patch which fixes this this bug.
--- gnome-breakout-0.5.3.orig/debian/control
+++ gnome-breakout-0.5.3/debian/control
@@ -4,7 +4,7 @@ Priority: optional
 Maintainer: Debian Games Team <pkg-games-de...@lists.alioth.debian.org>
 Uploaders: Barry deFreese <bdefre...@debian.org>, 
            Vincent Legout <vleg...@debian.org>
-Build-Depends: debhelper (>= 9), libgnomeui-dev, libglib2.0-dev, 
autotools-dev, dh-autoreconf
+Build-Depends: debhelper (>= 9), libgoocanvas-2.0-dev, 
libgnome-games-support-1-dev, autotools-dev, dh-autoreconf
 Standards-Version: 3.9.4
 Vcs-Svn: svn://svn.debian.org/svn/pkg-games/packages/trunk/gnome-breakout/
 Vcs-Browser: 
http://svn.debian.org/wsvn/pkg-games/packages/trunk/gnome-breakout/
--- gnome-breakout-0.5.3.orig/debian/copyright
+++ gnome-breakout-0.5.3/debian/copyright
@@ -14,3 +14,9 @@ You are free to distribute this software
 the GNU General Public License.
 On Debian systems, the complete text if the GNU General Public
 License can be found in /usr/share/common-licenses/GPL
+
+As the program links dynamically with libgnome-games-support, the
+package is distributed under the terms of the GNU General Public
+License, version 3 or later.
+On Debian systems, the complete text if the GNU General Public
+License, version 3 can be found in /usr/share/common-licenses/GPL-3.
--- gnome-breakout-0.5.3.orig/debian/patches/09_goocanvas_port.patch
+++ gnome-breakout-0.5.3/debian/patches/09_goocanvas_port.patch
@@ -0,0 +1,2017 @@
+Description: Port to GooCanvas / GTK+ 3.
+ Migrate from old-style ~/.gnome2 configuration file to GSettings.
+ Use libgnome-games-support as replacement of libgnome's gnome-scores.
+Bug-Debian: https://bugs.debian.org/868424
+Author: Yavor Doganov <ya...@gnu.org>
+Forwarded: no
+Last-Update: 2018-09-11
+---
+
+--- gnome-breakout-0.5.3.orig/configure.in
++++ gnome-breakout-0.5.3/configure.in
+@@ -4,7 +4,7 @@
+ AC_CONFIG_SRCDIR(src/gnome-breakout.c)
+ AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+ 
+-PKG_CHECK_MODULES(GNOMEUI, libgnomeui-2.0)
++PKG_CHECK_MODULES(GNOMEUI, goocanvas-2.0 libgnome-games-support-1)
+ AC_SUBST(GNOMEUI_CFLAGS)
+ AC_SUBST(GNOMEUI_LIBS)
+ 
+@@ -17,6 +17,10 @@
+ AC_ISC_POSIX
+ AC_HEADER_STDC
+ 
++GLIB_GSETTINGS
++# Avoid installation of schema in /usr/share/games.
++AC_SUBST(gsettingsschemadir, [${prefix}/share/glib-2.0/schemas])
++
+ GETTEXT_PACKAGE=gnome-breakout
+ ALL_LINGUAS="ru tr de sv"
+ AM_GLIB_GNU_GETTEXT
+--- gnome-breakout-0.5.3.orig/src/breakout.h
++++ gnome-breakout-0.5.3/src/breakout.h
+@@ -7,9 +7,7 @@
+  * "COPYING" for more details.
+  */
+ 
+-#include <gdk/gdk.h>
+-#include <gnome.h>
+-#include <libgnomecanvas/libgnomecanvas.h>
++#include <goocanvas.h>
+ 
+ /*
+  * Dimensions.
+@@ -56,7 +54,7 @@
+       gint frame_no;
+       gint num_frames;
+       GdkPixbuf **pixmaps;
+-      GnomeCanvasItem *canvas_item;
++      GooCanvasItem *canvas_item;
+       AnimType type;
+ } Animation;
+ 
+@@ -139,6 +137,9 @@
+ #define ADD_SCORE(game, _score) game->score += _score * 
game->flags->score_modifier
+ 
+ typedef struct {
++      GSettings *settings;
++      gboolean migrated;
++
+       /* User set values */
+       Difficulty difficulty;
+       Difficulty next_game_difficulty;
+@@ -155,7 +156,7 @@
+       gboolean pause_on_pointer;
+       gboolean pause_on_pref;
+       gint bounce_entropy;
+-      GList *level_files;
++      gchar **level_files;
+ 
+       /* Computed values */
+       gdouble score_modifier;
+--- gnome-breakout-0.5.3.orig/src/gui.h
++++ gnome-breakout-0.5.3/src/gui.h
+@@ -7,6 +7,8 @@
+  * "COPYING" for more details.
+  */
+ 
++#include <libgnome-games-support.h>
++
+ void gui_init(Game *game, int argc, char **argv);
+ void add_to_canvas(Entity *entity);
+ void remove_from_canvas(Entity *entity);
+@@ -23,10 +25,12 @@
+ /* This holds pointers to objects in the currently running GNOME app. It 
should
+  * only be used in gui.c and gui-callbacks.c */
+ typedef struct {
+-      GnomeApp *app;
+-      GnomeCanvas *canvas;
+-      GnomeCanvasItem *title_image;
+-      GnomeCanvasItem *background;
++      GtkWindow *app;
++      GamesScoresCategory *category;
++      GamesScoresContext *scores;
++      GooCanvas *canvas;
++      GooCanvasItem *title_image;
++      GooCanvasItem *background;
+       GtkWidget *vbox;
+       GtkWidget *label_hbox1;
+       GtkWidget *label_hbox2;
+--- gnome-breakout-0.5.3.orig/src/flags.c
++++ gnome-breakout-0.5.3/src/flags.c
+@@ -8,6 +8,8 @@
+  * "COPYING" for more details.
+  */
+ 
++#include <glib/gi18n.h>
++#include <glib/gstdio.h>
+ #include "breakout.h"
+ #include "flags.h"
+ #include "util.h"
+@@ -23,10 +25,10 @@
+ #define DEFAULT_PAUSE_ON_POINTER "true"
+ #define DEFAULT_PAUSE_ON_PREF "true"
+ #define DEFAULT_HIDE_POINTER "true"
+-#define DEFAULT_LEFT_KEY GDK_Left
+-#define DEFAULT_RIGHT_KEY GDK_Right
+-#define DEFAULT_FIRE1_KEY GDK_z
+-#define DEFAULT_FIRE2_KEY GDK_x
++#define DEFAULT_LEFT_KEY GDK_KEY_Left
++#define DEFAULT_RIGHT_KEY GDK_KEY_Right
++#define DEFAULT_FIRE1_KEY GDK_KEY_z
++#define DEFAULT_FIRE2_KEY GDK_KEY_x
+ #define DEFAULT_BOUNCE_ENTROPY 0
+ #define DEFAULT_LEVEL_FILES (LEVELDIR "/alcaron.gbl;" LEVELDIR 
"/mdutour.gbl;" LEVELDIR "/mmack.gbl")
+ 
+@@ -50,6 +52,99 @@
+ GList *unpack_string_list(gchar *s);
+ gchar *pack_string_list(GList *s);
+ 
++/* Migrate old settings from ~/.gnome2/gnome-breakout.  */
++static gboolean migrate_old_settings(GSettings *settings) {
++        GKeyFile *kf;
++        gchar *file;
++        gboolean migrated = FALSE;
++
++        kf = g_key_file_new();
++        file = g_build_filename(g_get_home_dir(), ".gnome2",
++                                "gnome-breakout", 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 **levels;
++                        gboolean b;
++                        gint i;
++
++                        /* Apply all changes at once.  */
++                        g_settings_delay(settings);
++                        b = g_key_file_get_boolean(kf, "control",
++                                                   "mouse_control", NULL);
++                        g_settings_set_boolean(settings, "mouse-control", b);
++                        b = g_key_file_get_boolean(kf, "control",
++                                                   "keyboard_control", NULL);
++                        g_settings_set_boolean(settings, "keyboard-control", 
b);
++                        b = g_key_file_get_boolean(kf, "game",
++                                                   "pause_on_focus", NULL);
++                        g_settings_set_boolean(settings, "pause-on-focus", b);
++                        b = g_key_file_get_boolean(kf, "game",
++                                                   "pause_on_pointer", NULL);
++                        g_settings_set_boolean(settings, "pause-on-pointer", 
b);
++                        b = g_key_file_get_boolean(kf, "game",
++                                                   "pause_on_pref", NULL);
++                        g_settings_set_boolean(settings, "pause-on-pref", b);
++                        b = g_key_file_get_boolean(kf, "game",
++                                                   "hide_pointer", NULL);
++                        g_settings_set_boolean(settings, "hide-pointer", b);
++
++                        i = g_key_file_get_integer(kf, "game",
++                                                   "bounce_entropy", NULL);
++                        g_settings_set_uint(settings, "bounce-entropy", i);
++
++                        i = g_key_file_get_integer(kf, "control",
++                                                   "bat_speed", NULL);
++                        g_settings_set_int(settings, "bat-speed", i);
++
++                        i = g_key_file_get_integer(kf, "game",
++                                                   "difficulty", NULL);
++                        g_settings_set_enum(settings, "difficulty", i);
++
++                        i = g_key_file_get_integer(kf, "keys",
++                                                   "left_key", NULL);
++                        g_settings_set_string(settings, "left-key",
++                                              gdk_keyval_name(i));
++
++                        i = g_key_file_get_integer(kf, "keys",
++                                                   "right_key", NULL);
++                        g_settings_set_string(settings, "right-key",
++                                              gdk_keyval_name(i));
++
++                        i = g_key_file_get_integer(kf, "keys",
++                                                   "fire1_key", NULL);
++                        g_settings_set_string(settings, "fire1-key",
++                                              gdk_keyval_name(i));
++
++                        i = g_key_file_get_integer(kf, "keys",
++                                                   "fire2_key", NULL);
++                        g_settings_set_string(settings, "fire2-key",
++                                              gdk_keyval_name(i));
++
++                        levels = g_key_file_get_string_list(kf, "game",
++                                                            "level_files",
++                                                            NULL, NULL);
++                        g_settings_set_strv(settings, "level-files",
++                                            (const gchar **) levels);
++                        g_strfreev(levels);
++                        g_settings_apply(settings);
++                        migrated = TRUE;
++                }
++                g_strfreev(groups);
++                g_unlink(file);
++        }
++        g_free(file);
++        g_key_file_free(kf);
++
++        return migrated;
++}
++
+ /* Loads the flags, and computes certain difficulty values */
+ Flags *load_flags(void) {
+       Flags *flags;
+@@ -57,55 +152,62 @@
+ 
+       flags = g_malloc(sizeof(Flags));
+ 
+-      gnome_config_push_prefix("/" PACKAGE "/");
++      flags->settings = g_settings_new("au.com.senet.gnome-breakout");
++      if(migrate_old_settings(flags->settings))
++              flags->migrated = TRUE;
++      else
++              flags->migrated = FALSE;
++
++      flags->mouse_control = g_settings_get_boolean(flags->settings,
++                                                    "mouse-control");
++      flags->keyboard_control = g_settings_get_boolean(flags->settings,
++                                                       "keyboard-control");
++      flags->pause_on_focus = g_settings_get_boolean(flags->settings,
++                                                     "pause-on-focus");
++      flags->pause_on_pointer = g_settings_get_boolean(flags->settings,
++                                                       "pause-on-pointer");
++      flags->pause_on_pref = g_settings_get_boolean(flags->settings,
++                                                    "pause-on-pref");
++      flags->hide_pointer = g_settings_get_boolean(flags->settings,
++                                                   "hide-pointer");
+ 
+-      flags->mouse_control = gnome_config_get_bool(
+-                      "control/mouse_control=" DEFAULT_MOUSE_CONTROL);
+-      flags->keyboard_control = gnome_config_get_bool(
+-                      "control/keyboard_control=" DEFAULT_KEYBOARD_CONTROL);
+-      flags->pause_on_focus = gnome_config_get_bool(
+-                      "game/pause_on_focus=" DEFAULT_PAUSE_ON_FOCUS);
+-      flags->pause_on_pointer = gnome_config_get_bool(
+-                      "game/pause_on_pointer=" DEFAULT_PAUSE_ON_POINTER);
+-      flags->pause_on_pref = gnome_config_get_bool(
+-                      "game/pause_on_pref=" DEFAULT_PAUSE_ON_PREF);
+-      flags->hide_pointer = gnome_config_get_bool(
+-                      "game/hide_pointer=" DEFAULT_HIDE_POINTER);
++      flags->bounce_entropy = g_settings_get_uint(flags->settings,
++                                                  "bounce-entropy");
+ 
+-      tmp = g_strdup_printf("game/bounce_entropy=%d", DEFAULT_BOUNCE_ENTROPY);
+-      flags->bounce_entropy = gnome_config_get_int(tmp);
+-      g_free(tmp);
++      flags->bat_speed = g_settings_get_int(flags->settings, "bat-speed");
+ 
+-      tmp = g_strdup_printf("control/bat_speed=%d", DEFAULT_BAT_SPEED);
+-      flags->bat_speed = gnome_config_get_int(tmp);
+-      g_free(tmp);
+-
+-      tmp = g_strdup_printf("game/difficulty=%d", DEFAULT_DIFFICULTY);
+-      flags->next_game_difficulty = gnome_config_get_int(tmp);
++      flags->next_game_difficulty = g_settings_get_enum(flags->settings,
++                                                        "difficulty");
+       flags->difficulty = flags->next_game_difficulty;
+-      g_free(tmp);
+ 
+-      tmp = g_strdup_printf("keys/left_key=%d", DEFAULT_LEFT_KEY);
+-      flags->left_key = gnome_config_get_int(tmp);
++      tmp = g_settings_get_string(flags->settings, "left-key");
++      flags->left_key = gdk_keyval_from_name(tmp);
+       g_free(tmp);
+ 
+-      tmp = g_strdup_printf("keys/right_key=%d", DEFAULT_RIGHT_KEY);
+-      flags->right_key = gnome_config_get_int(tmp);
++      tmp = g_settings_get_string(flags->settings, "right-key");
++      flags->right_key = gdk_keyval_from_name(tmp);
+       g_free(tmp);
+ 
+-      tmp = g_strdup_printf("keys/fire1_key=%d", DEFAULT_FIRE1_KEY);
+-      flags->fire1_key = gnome_config_get_int(tmp);
++      tmp = g_settings_get_string(flags->settings, "fire1-key");
++      flags->fire1_key = gdk_keyval_from_name(tmp);
+       g_free(tmp);
+ 
+-      tmp = g_strdup_printf("keys/fire2_key=%d", DEFAULT_FIRE2_KEY);
+-      flags->fire2_key = gnome_config_get_int(tmp);
++      tmp = g_settings_get_string(flags->settings, "fire2-key");
++      flags->fire2_key = gdk_keyval_from_name(tmp);
+       g_free(tmp);
+ 
+-      tmp = g_strdup_printf("game/level_files=%s", DEFAULT_LEVEL_FILES);
+-      flags->level_files = unpack_string_list(gnome_config_get_string(tmp));
+-      g_free(tmp);
++      flags->level_files = g_settings_get_strv(flags->settings,
++                                               "level-files");
++      if(g_strv_length(flags->level_files) == 0) {
++              flags->level_files = g_renew(gchar *, flags->level_files, 4);
++              flags->level_files[0] = g_strdup(LEVELDIR "/alcaron.gbl");
++              flags->level_files[1] = g_strdup(LEVELDIR "/mdutour.gbl");
++              flags->level_files[2] = g_strdup(LEVELDIR "/mmack.gbl");
++              flags->level_files[3] = NULL;
++              g_settings_set_strv(flags->settings, "level-files",
++                                  (const gchar **) flags->level_files);
++      }
+ 
+-      gnome_config_pop_prefix();
+       compute_flags(flags);
+ 
+       return flags;
+@@ -116,14 +218,6 @@
+ void compute_flags(Flags *flags) {
+       gboolean resetcontrol = FALSE;
+ 
+-       /* Difficulty sanity checks */
+-      if(flags->next_game_difficulty != DIFFICULTY_EASY
+-                      && flags->next_game_difficulty != DIFFICULTY_MEDIUM
+-                      && flags->next_game_difficulty != DIFFICULTY_HARD) {
+-              gb_warning(_("Difficulty in config files is an incorrect value, 
resetting to defaults"));
+-              flags->next_game_difficulty = DEFAULT_DIFFICULTY;
+-      }
+-
+       /* Difficulty computation */
+       switch(flags->difficulty) {
+               case DIFFICULTY_EASY :
+@@ -160,149 +254,115 @@
+       }
+ 
+       if(resetcontrol) {
+-              if(!strcmp(DEFAULT_KEYBOARD_CONTROL, "true"))
+-                      flags->keyboard_control = TRUE;
+-              else
++              if(!strcmp(DEFAULT_KEYBOARD_CONTROL, "true")) {
++                      flags->keyboard_control = TRUE;
++                      g_settings_set_boolean(flags->settings,
++                                             "keyboard-control", TRUE);
++              } else {
+                       flags->keyboard_control = FALSE;
+-              if(!strcmp(DEFAULT_MOUSE_CONTROL, "true"))
++                      g_settings_set_boolean(flags->settings,
++                                             "mouse-control", FALSE);
++              }
++              if(!strcmp(DEFAULT_MOUSE_CONTROL, "true")) {
+                       flags->mouse_control = TRUE;
+-              else
++                      g_settings_set_boolean(flags->settings,
++                                             "mouse-control", TRUE);
++              } else {
+                       flags->keyboard_control = FALSE;
++                      g_settings_set_boolean(flags->settings,
++                                             "mouse-control", FALSE);
++              }
+               /* Check to see if we've messed the defaults */
+               g_assert(flags->keyboard_control || flags->mouse_control);
+               g_assert(!(flags->keyboard_control && flags->mouse_control));
+       }
+-
+-      /* Bat speed sanity checks */
+-      if(flags->bat_speed < MIN_BATSPEED)  {
+-              gb_warning(_("Bat speed is lower than allowed range, setting to 
lowest"));
+-              flags->bat_speed = MIN_BATSPEED;
+-      }
+-      if(flags->bat_speed > MAX_BATSPEED) {
+-              gb_warning(_("Bat speed is higher than allowed range, setting 
to highest"));
+-              flags->bat_speed = MAX_BATSPEED;
+-      }
+-
+-      /* Bounce entropy sanity checks */
+-      if(flags->bounce_entropy < MIN_BOUNCE_ENTROPY)  {
+-              gb_warning(_("Bounce entropy is lower than allowed range, 
setting to lowest"));
+-              flags->bounce_entropy = MIN_BOUNCE_ENTROPY;
+-      }
+-      if(flags->bounce_entropy > MAX_BOUNCE_ENTROPY) {
+-              gb_warning(_("Bounce entropy is higher than allowed range, 
setting to highest"));
+-              flags->bounce_entropy = MAX_BOUNCE_ENTROPY;
+-      }
+ }
+ 
+ /* Saves the flags */
+ void save_flags(Flags *flags) {
+-      gchar *tmp;
+-
+-      gnome_config_push_prefix("/" PACKAGE "/");
+-
+-      gnome_config_set_int("game/difficulty", flags->next_game_difficulty);
+-      gnome_config_set_bool("game/pause_on_focus", flags->pause_on_focus);
+-      gnome_config_set_bool("game/pause_on_pointer", flags->pause_on_pointer);
+-      gnome_config_set_bool("game/pause_on_pref", flags->pause_on_pref);
+-      gnome_config_set_bool("game/hide_pointer", flags->hide_pointer);
+-      gnome_config_set_int("game/bounce_entropy", flags->bounce_entropy);
+-      gnome_config_set_bool("control/mouse_control", flags->mouse_control);
+-      gnome_config_set_bool("control/keyboard_control",
+-                      flags->keyboard_control);
+-      gnome_config_set_int("control/bat_speed", flags->bat_speed);
+-      gnome_config_set_int("keys/left_key", flags->left_key);
+-      gnome_config_set_int("keys/right_key", flags->right_key);
+-      gnome_config_set_int("keys/fire1_key", flags->fire1_key);
+-      gnome_config_set_int("keys/fire2_key", flags->fire2_key);
+-      tmp = pack_string_list(flags->level_files);
+-      gnome_config_set_string("game/level_files", tmp);
+-      g_free(tmp);    
+-
+-      gnome_config_pop_prefix();
+-      gnome_config_sync();
+-}
+-
+-/* Takes a string, splitting it by the ; character, returning a list of the
+- * split values */
+-GList *unpack_string_list(gchar *s) {
+-      GList *ret = NULL;
+-      gchar *s_p, *s_new;
+-
+-      if(*s) {
+-              while((s_p = (gchar *) strsep(&s, ";"))) {
+-                      if(*s_p) {
+-                              s_new = g_strdup(s_p);
+-                              ret = g_list_prepend(ret, s_new);
+-                      }
+-              }
+-      }
+-
+-      return ret;
+-}
+-
+-/* Takes a list of strings and generates a big string, seperating each entry
+- * with a ; */
+-gchar *pack_string_list(GList *l) {
+-      GList *l_p;
+-      gchar *ret;
+-
+-      ret = g_malloc(1024 * sizeof(gchar));
+-      *ret = '\0';
+-      for(l_p = l; l_p; l_p = g_list_next(l_p)) {
+-              strncat(ret, (char *) l_p->data, 1024);
+-              strncat(ret, ";", 1024);
+-      }
+-
+-      return ret;
++      g_settings_delay(flags->settings);
++      g_settings_set_enum(flags->settings, "difficulty",
++                          flags->next_game_difficulty);
++      g_settings_set_boolean(flags->settings, "pause-on-focus",
++                             flags->pause_on_focus);
++      g_settings_set_boolean(flags->settings, "pause-on-pointer",
++                             flags->pause_on_pointer);
++      g_settings_set_boolean(flags->settings, "pause-on-pref",
++                             flags->pause_on_pref);
++      g_settings_set_boolean(flags->settings, "hide-pointer",
++                             flags->hide_pointer);
++      g_settings_set_uint(flags->settings, "bounce-entropy",
++                          flags->bounce_entropy);
++      g_settings_set_boolean(flags->settings, "mouse-control",
++                             flags->mouse_control);
++      g_settings_set_boolean(flags->settings, "keyboard-control",
++                             flags->keyboard_control);
++      g_settings_set_int(flags->settings, "bat-speed", flags->bat_speed);
++      g_settings_set_string(flags->settings, "left-key",
++                            gdk_keyval_name(flags->left_key));
++      g_settings_set_string(flags->settings, "right-key",
++                            gdk_keyval_name(flags->right_key));
++      g_settings_set_string(flags->settings, "fire1-key",
++                            gdk_keyval_name(flags->fire1_key));
++      g_settings_set_string(flags->settings, "fire1-key",
++                            gdk_keyval_name(flags->fire1_key));
++      g_settings_set_strv(flags->settings, "level-files",
++                          (const gchar **) flags->level_files);
++      g_settings_apply(flags->settings);
+ }
+ 
+ /* Allocs and copies a Flags structure. */
+ Flags *copy_flags(Flags *flags) {
+       Flags *newflags;
+-      GList *curr;
+ 
+       newflags = g_malloc(sizeof(Flags));
+       
+       /* Most values can simply be memcpy'ed.... */
+       memcpy(newflags, flags, sizeof(Flags));
+ 
+-      /* ... except for the LevelFiles list */
+-      newflags->level_files = NULL;
+-      for(curr = flags->level_files; curr; curr = g_list_next(curr)) {
+-              newflags->level_files = g_list_prepend(newflags->level_files, 
g_strdup((gchar *) curr->data));
+-      }
+-
+       return newflags;
+ }
+ 
+ /* Destroys and frees a Flags structure */
+ void destroy_flags(Flags *flags) {
+-      GList *curr;
+-
+-      for(curr = flags->level_files; curr; curr = g_list_next(curr)) {
+-              g_free(curr->data);
+-              curr->data = NULL;
+-      }
+-
+-      g_list_free(flags->level_files);
+       g_free(flags);
+ }
+ 
+ /* Adds a levelfile to the Flags structure */
+ void add_flags_levelfile(Flags *flags, gchar *filename) {
++      gchar **new;
++      guint i, len;
++
+       g_assert(flags && filename);
+-      flags->level_files = g_list_prepend(flags->level_files, 
g_strdup(filename));
++      len = g_strv_length(flags->level_files);
++      new = g_new0(gchar *, len + 2);
++      for(i = 0; i < len; i++)
++              new[i] = g_strdup(flags->level_files[i]);
++
++      new[i++] = g_strdup(filename);
++      new[i] = NULL;
++      g_strfreev(flags->level_files);
++      flags->level_files = g_strdupv(new);
++      g_strfreev(new);
+ }
+ 
+ /* Removes a levelfile from the Flags structure. Assumes that it's there in 
the
+  * first place */
+ void remove_flags_levelfile(Flags *flags, gchar *filename) {
+-      GList *curr;
++      gchar **new;
++      guint i, j, len;
+       g_assert(flags && filename);
+ 
+-      for(curr = flags->level_files; curr && strcmp((gchar *) curr->data, 
filename); curr = g_list_next(curr));
+-
+-      g_assert(curr && curr->data);
+-      g_free(curr->data);
+-      flags->level_files = g_list_remove(flags->level_files, curr->data);
++      len = g_strv_length(flags->level_files);
++      new = g_new0(gchar *, len);
++      for(i = 0, j = 0; j < len; i++, j++) {
++              if(!g_strcmp0(flags->level_files[i], filename)) {
++                      j--;
++                      continue;
++              }
++              new[j] = g_strdup(flags->level_files[i]);
++      }
++      g_strfreev(flags->level_files);
++      flags->level_files = g_strdupv(new);
++      g_strfreev(new);
+ }
+--- gnome-breakout-0.5.3.orig/Makefile.am
++++ gnome-breakout-0.5.3/Makefile.am
+@@ -4,6 +4,7 @@
+ EXTRA_DIST = \
+         gnome-breakout.desktop \
+       gnome-breakout.png \
++      $(gsettings_SCHEMAS) \
+       TODO \
+       BUGS
+ 
+@@ -13,6 +14,10 @@
+ Gamesdir = $(datadir)/gnome/apps/Games
+ Games_DATA = gnome-breakout.desktop
+ 
++gsettings_SCHEMAS = au.com.senet.gnome-breakout.gschema.xml
++
++@GSETTINGS_RULES@
++
+ install-data-local:
+       -$(mkinstalldirs) $(DESTDIR)$(scoredir)
+       -touch $(DESTDIR)$(scoredir)/gnome-breakout.scores
+--- /dev/null
++++ gnome-breakout-0.5.3/au.com.senet.gnome-breakout.gschema.xml
+@@ -0,0 +1,55 @@
++<schemalist gettext-domain="gnome-breakout">
++
++  <enum id="au.com.senet.gnome-breakout.Difficulty">
++    <value nick="easy" value="1"/>
++    <value nick="medium" value="0"/>
++    <value nick="hard" value="2"/>
++  </enum>
++
++  <schema id="au.com.senet.gnome-breakout" 
path="/au/com/senet/gnome-breakout/">
++    <key name="difficulty" enum="au.com.senet.gnome-breakout.Difficulty">
++      <default>'medium'</default>
++    </key>
++    <key name="pause-on-focus" type="b">
++      <default>false</default>
++    </key>
++    <key name="pause-on-pointer" type="b">
++      <default>true</default>
++    </key>
++    <key name="pause-on-pref" type="b">
++      <default>true</default>
++    </key>
++    <key name="hide-pointer" type="b">
++      <default>true</default>
++    </key>
++    <key name="bounce-entropy" type="u">
++      <range min="0" max="40"/>
++      <default>0</default>
++    </key>
++    <key name="level-files" type="as">
++      <default>[]</default>
++    </key>
++    <key name="mouse-control" type="b">
++      <default>true</default>
++    </key>
++    <key name="keyboard-control" type="b">
++      <default>false</default>
++    </key>
++    <key name="bat-speed" type="i">
++      <range min="5" max="25"/>
++      <default>15</default>
++    </key>
++    <key name="left-key" type="s">
++      <default>'Left'</default>
++    </key>
++    <key name="right-key" type="s">
++      <default>'Right'</default>
++    </key>
++    <key name="fire1-key" type="s">
++      <default>'z'</default>
++    </key>
++    <key name="fire2-key" type="s">
++      <default>'x'</default>
++    </key>
++  </schema>
++</schemalist>
+--- gnome-breakout-0.5.3.orig/src/gnome-breakout.c
++++ gnome-breakout-0.5.3/src/gnome-breakout.c
+@@ -1,5 +1,6 @@
+ #include <unistd.h>
+ #include <time.h>
++#include <glib/gi18n.h>
+ #include "breakout.h"
+ #include "flags.h"
+ #include "anim.h"
+@@ -13,26 +14,21 @@
+  * files, and starts the gui */
+ int main(int argc, char **argv) {
+       Game game;
+-      gboolean show_score_warning = FALSE;
+ 
+-      show_score_warning = (gnome_score_init(PACKAGE) == -1);
+       memset(&game, 0, sizeof(Game));
+ 
+       srand((unsigned int) clock());
+ 
+       bindtextdomain(PACKAGE, GNOMELOCALEDIR);
+       textdomain(PACKAGE);
+-      gnome_program_init(PACKAGE, VERSION, LIBGNOMEUI_MODULE, argc, argv,
+-                      GNOME_PARAM_NONE);
+-      gui_init(&game, argc, argv);
++      gtk_init(&argc, &argv);
++
+       game.flags = load_flags();
++      gui_init(&game, argc, argv);
+       init_leveldata(&game);
+ 
+       init_animations();
+ 
+-      if(show_score_warning)
+-              gb_warning("Failed to initialise gnome_score. Is " PACKAGE " 
installed setgid to the games group?");
+-
+       gtk_main();
+ 
+       return 0;
+@@ -41,14 +37,11 @@
+ /* Loads the levelfiles into memory that are specified in game->flags, 
deleting 
+  * the ones that won't load */
+ static void init_leveldata(Game *game) {
+-        GList *curr, *next;
++        gint i;
+ 
+-        curr = game->flags->level_files;
+-        while(curr) {
+-              next = g_list_next(curr);
+-                if(!leveldata_add((gchar *) curr->data)) {
+-                      remove_flags_levelfile(game->flags, curr->data);
+-                }
+-                curr = next;
++        for(i = 0; i < g_strv_length(game->flags->level_files); i++) {
++                if(!leveldata_add(game->flags->level_files[i]))
++                        remove_flags_levelfile(game->flags,
++                                               game->flags->level_files[i]);
+         }
+ }
+--- gnome-breakout-0.5.3.orig/src/gui.c
++++ gnome-breakout-0.5.3/src/gui.c
+@@ -8,6 +8,7 @@
+  * "COPYING" for more details.
+  */
+ 
++#include <glib/gi18n.h>
+ #include "breakout.h"
+ #include "gui.h"
+ #include "gui-callbacks.h"
+@@ -23,53 +24,104 @@
+ static void init_menus(void);
+ static void init_statusbar(void);
+ 
++static GamesScoresCategory* get_category(const gchar* key, gpointer data) {
++        return gui->category;
++}
++
++static void show_migration_message(void) {
++        GtkWidget *dlg;
++
++        dlg = gtk_message_dialog_new(gui->app,
++                                     GTK_DIALOG_DESTROY_WITH_PARENT,
++                                     GTK_MESSAGE_INFO,
++                                     GTK_BUTTONS_CLOSE,
++                                     "%s",
++                                     "Successfully migrated old settings.\n"
++                                     "Old scores were lost.");
++        gtk_dialog_run(GTK_DIALOG(dlg));
++        gtk_widget_destroy(dlg);
++}
++
+ /* Initialise the interface. */
+ void gui_init(Game *game, int argc, char **argv) {
++      GdkPixbuf *icon;
++      gchar **dirs;
++      gchar *file;
++      gint i;
+ 
+       /* Initialise the basic app */
+       gui = g_malloc(sizeof(GuiInfo));
+       gui->game = game;
+-      gui->app = (GnomeApp *) gnome_app_new(PACKAGE,
+-                      _("GNOME Breakout"));
+-      gtk_window_set_policy(GTK_WINDOW (gui->app), FALSE, FALSE, TRUE);
+-      g_signal_connect(GTK_OBJECT (gui->app), "delete_event",
+-              GTK_SIGNAL_FUNC (cb_sig_exit_game), gui);
++      gui->app = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
++      gtk_window_set_title(gui->app, _("GNOME Breakout"));
++      gtk_window_set_resizable(gui->app, FALSE);
++
++      dirs = (gchar **) g_get_system_data_dirs();
++      for(i = 0; i < g_strv_length(dirs); i++) {
++              file = g_build_filename (dirs[i], G_DIR_SEPARATOR_S,
++                                       "pixmaps", G_DIR_SEPARATOR_S,
++                                       "gnome-breakout.png", NULL);
++              if (g_file_test(file, G_FILE_TEST_EXISTS))
++                      break;
++
++              g_free(file);
++      }
++
++      icon = gdk_pixbuf_new_from_file(file, NULL);
++      g_free(file);
++      gtk_window_set_icon(gui->app, icon);
++      g_object_unref(icon);
++
++      g_signal_connect(G_OBJECT (gui->app), "delete_event",
++              G_CALLBACK (cb_sig_exit_game), gui);
+ 
+       /* Bind the keypresses */
+-      g_signal_connect(GTK_OBJECT (gui->app), "key_press_event",
+-              GTK_SIGNAL_FUNC (cb_keydown), gui);
+-      g_signal_connect(GTK_OBJECT (gui->app), "key_release_event",
+-              GTK_SIGNAL_FUNC (cb_keyup), gui);
++      g_signal_connect(G_OBJECT (gui->app), "key_press_event",
++              G_CALLBACK (cb_keydown), gui);
++      g_signal_connect(G_OBJECT (gui->app), "key_release_event",
++              G_CALLBACK (cb_keyup), gui);
+ 
+       /* Pause on focus loss for keyboard control */
+-      g_signal_connect(GTK_OBJECT(gui->app), "focus_in_event",
+-                      GTK_SIGNAL_FUNC(cb_main_focus_change), gui);
+-      g_signal_connect(GTK_OBJECT(gui->app), "focus_out_event",
+-                      GTK_SIGNAL_FUNC(cb_main_focus_change), gui);
++      g_signal_connect(G_OBJECT(gui->app), "focus_in_event",
++                      G_CALLBACK(cb_main_focus_change), gui);
++      g_signal_connect(G_OBJECT(gui->app), "focus_out_event",
++                      G_CALLBACK(cb_main_focus_change), gui);
++
++      gui->category = games_scores_category_new("gnome-breakout",
++                                                "Highest Scores");
++      gui->scores = games_scores_context_new(
++              "gnome-breakout",
++              "Highest Scores",
++              gui->app,
++              get_category, NULL,
++              GAMES_SCORES_STYLE_POINTS_GREATER_IS_BETTER);
+ 
+       /* Main vbox */
+-      gui->vbox = gtk_vbox_new(FALSE, 0);
++      gui->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
++
++      /* Initialise the menus */
++      init_menus();
+ 
+       /* Initialise the top statusbar */
+       init_labels();
+ 
+       /* Initialise the canvas */
+-      gnome_app_set_contents(GNOME_APP (gui->app), gui->vbox);
++      gtk_container_add(GTK_CONTAINER (gui->app), gui->vbox);
+       init_canvas();
+ 
+       /* Initialise the statusbar */
+-      gui->appbar = gnome_appbar_new(FALSE, TRUE, GNOME_PREFERENCES_NEVER);
+-      gnome_app_set_statusbar(gui->app, gui->appbar);
++      gui->appbar = gtk_statusbar_new();
+       init_statusbar();
+ 
+-      /* Initialise the menus */
+-      init_menus();
+-
+       gtk_widget_show_all(GTK_WIDGET (gui->app));
++
++      if(gui->game->flags->migrated)
++              show_migration_message();
+ }
+       
+ static void init_canvas(void) {
+       GdkPixbuf *image;
++        GooCanvasItem *root;
+         GError *error = NULL;
+ 
+       /* Push the imlib colormap and visual, and make the canvas */
+@@ -77,20 +129,22 @@
+       gtk_widget_push_visual(gdk_imlib_get_visual());
+       gtk_widget_push_colormap(gdk_imlib_get_colormap());
+         */
+-      gui->canvas = (GnomeCanvas *) gnome_canvas_new();
++      gui->canvas = (GooCanvas *) goo_canvas_new();
++      root = goo_canvas_get_root_item(gui->canvas);
+ 
+       /* Set the canvas attributes */
+-      gnome_canvas_set_pixels_per_unit(gui->canvas, 1);
+-      gtk_widget_set_usize(GTK_WIDGET(gui->canvas), GAME_WIDTH, GAME_HEIGHT);
+-      gnome_canvas_set_scroll_region(gui->canvas, 0, 0, GAME_WIDTH,
++      gtk_widget_set_size_request(GTK_WIDGET(gui->canvas),
++                                  GAME_WIDTH, GAME_HEIGHT);
++      goo_canvas_set_bounds(gui->canvas, 0, 0, GAME_WIDTH,
+                       GAME_HEIGHT);
+ 
+       /* Make the canvas background black */
+-      gui->background = gnome_canvas_item_new(gnome_canvas_root(gui->canvas),
+-                      GNOME_TYPE_CANVAS_RECT, "x1", 0.0, "x2",
+-                      (double) GAME_WIDTH, "y1", 0.0, "y2",
+-                      (double) GAME_HEIGHT, "fill_color", "black", NULL);
+-      gnome_canvas_item_hide(gui->background);
++      gui->background = goo_canvas_rect_new(root,
++                      0.0, 0.0,
++                      (double) GAME_WIDTH,
++                      (double) GAME_HEIGHT, "fill-color", "black", NULL);
++      g_object_set(gui->background, "visibility",
++                   GOO_CANVAS_ITEM_INVISIBLE, NULL);
+ 
+       /* Add the title image */
+       image = gdk_pixbuf_new_from_file(PIXMAPDIR "/title.png", &error);
+@@ -99,26 +153,23 @@
+                             error->message);
+ 
+         //gdk_imlib_render(image, image->rgb_width, image->rgb_height);
+-      gui->title_image = gnome_canvas_item_new(
+-                      gnome_canvas_root(gui->canvas),
+-                      GNOME_TYPE_CANVAS_PIXBUF, "pixbuf", image, 
+-                      "x", 0.0, "y", 0.0,
+-                      "width", (double) GAME_WIDTH, 
++      gui->title_image = goo_canvas_image_new(
++                      root,
++                      image,
++                      0.0, 0.0,
++                      "width", (double) GAME_WIDTH,
+                       "height", (double) GAME_HEIGHT,
+-                      "anchor", GTK_ANCHOR_NORTH_WEST,
+                       NULL);
+ 
+-      gnome_canvas_update_now(gui->canvas);
+-
+       /* Hide pointer and automatic pause */
+-      g_signal_connect(GTK_OBJECT (gui->canvas), "enter-notify-event",
+-                      GTK_SIGNAL_FUNC (cb_canvas_pointer), gui);
+-      g_signal_connect(GTK_OBJECT (gui->canvas), "leave-notify-event",
+-                      GTK_SIGNAL_FUNC (cb_canvas_pointer), gui);
++      g_signal_connect(G_OBJECT (gui->canvas), "enter-notify-event",
++                      G_CALLBACK (cb_canvas_pointer), gui);
++      g_signal_connect(G_OBJECT (gui->canvas), "leave-notify-event",
++                      G_CALLBACK (cb_canvas_pointer), gui);
+ 
+       /* Bind the mouse fire events */
+-      g_signal_connect(GTK_OBJECT(gui->canvas), "button_press_event",
+-                      GTK_SIGNAL_FUNC(cb_canvas_button_press), gui);
++      g_signal_connect(G_OBJECT(gui->canvas), "button_press_event",
++                      G_CALLBACK(cb_canvas_button_press), gui);
+ 
+       gtk_box_pack_start(GTK_BOX(gui->vbox), GTK_WIDGET(gui->canvas),
+                       FALSE, FALSE, 0);
+@@ -132,7 +183,7 @@
+       gui->lives_label = gtk_label_new(_("Lives: 0"));
+       gtk_label_set_justify(GTK_LABEL(gui->lives_label), GTK_JUSTIFY_LEFT);
+ 
+-      vseparator1 = gtk_vseparator_new();
++      vseparator1 = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
+ 
+       gtk_widget_set_sensitive(gui->score_label, FALSE);
+       gtk_widget_set_sensitive(gui->lives_label, FALSE);
+@@ -142,19 +193,18 @@
+       gtk_box_pack_end(GTK_BOX(gui->appbar), vseparator1, FALSE, FALSE, 0);
+       gtk_box_pack_end(GTK_BOX(gui->appbar), gui->lives_label,
+                       FALSE, FALSE, 5);
++      gtk_container_add(GTK_CONTAINER(gui->vbox), gui->appbar);
+ }
+ 
+ /* Adds an entity to the gnome canvas */
+ void add_to_canvas(Entity *entity) {
+-      entity->animation.canvas_item = gnome_canvas_item_new(
+-                      gnome_canvas_root(GNOME_CANVAS(gui->canvas)),
+-                      GNOME_TYPE_CANVAS_PIXBUF,
+-                      "pixbuf", 
entity->animation.pixmaps[entity->animation.frame_no],
+-                      "x", (double) entity->geometry.x1,
+-                      "y", (double) entity->geometry.y1,
++      entity->animation.canvas_item = goo_canvas_image_new(
++                      goo_canvas_get_root_item(gui->canvas),
++                      entity->animation.pixmaps[entity->animation.frame_no],
++                      (double) entity->geometry.x1,
++                      (double) entity->geometry.y1,
+                       "width", (double) entity->geometry.x2 - 
entity->geometry.x1,
+                       "height", (double) entity->geometry.y2 - 
entity->geometry.y1,
+-                      "anchor", GTK_ANCHOR_NORTH_WEST,
+                       NULL);
+ }
+ 
+@@ -162,8 +212,8 @@
+  * actually has a canvas_item */
+ void remove_from_canvas(Entity *entity) {
+       if(entity->animation.canvas_item) {
+-              gtk_object_destroy(GTK_OBJECT(entity->animation.canvas_item));
+-              entity->animation.canvas_item = NULL;
++              if(GOO_IS_CANVAS_ITEM(entity->animation.canvas_item))
++                      goo_canvas_item_remove(entity->animation.canvas_item);
+       }
+ }
+ 
+@@ -220,46 +270,94 @@
+               g_free(lives);
+       }
+ 
+-      gnome_canvas_update_now(gui->canvas);
+       return;
+ }
+ 
+ /* Assumes that we already have an appbar */
+ static void init_menus() {
+-      GnomeUIInfo game_menu[] = {
+-              GNOMEUIINFO_MENU_NEW_GAME_ITEM(cb_new_game, gui),
+-              GNOMEUIINFO_MENU_PAUSE_GAME_ITEM(cb_pause_game, gui),
+-              GNOMEUIINFO_MENU_END_GAME_ITEM(cb_end_game, gui),
+-              GNOMEUIINFO_SEPARATOR,
+-              GNOMEUIINFO_MENU_PREFERENCES_ITEM(cb_preferences, gui),
+-              /* FIXME: Remove this when appropriate */
+-              GNOMEUIINFO_ITEM_DATA(_("_Kill ball"), 
+-                              _("Kill the current ball if it gets stuck"),
+-                              cb_kill_ball, gui, NULL),
+-              GNOMEUIINFO_MENU_SCORES_ITEM(cb_scores, gui),
+-              GNOMEUIINFO_SEPARATOR,
+-              GNOMEUIINFO_MENU_EXIT_ITEM(cb_exit_game, gui),
+-              GNOMEUIINFO_END
+-      };
+-
+-      GnomeUIInfo help_menu[] = {
+-              GNOMEUIINFO_ITEM_DATA("_Help", "Help on this application",
+-                              cb_help, gui, NULL),
+-              GNOMEUIINFO_MENU_ABOUT_ITEM(cb_show_about_box, gui),
+-              GNOMEUIINFO_END
+-      };
+-
+-      GnomeUIInfo menubar[] = {
+-              GNOMEUIINFO_MENU_GAME_TREE(game_menu),
+-              GNOMEUIINFO_MENU_HELP_TREE(help_menu),
+-              GNOMEUIINFO_END
+-      };
+-
+-      gnome_app_create_menus(gui->app, menubar);
+-      gnome_app_install_menu_hints(gui->app, menubar);
+-      gui->menu_new_game = game_menu[0].widget;
+-      gui->menu_pause = game_menu[1].widget;
+-      gui->menu_end_game = game_menu[2].widget;
++      GtkAccelGroup *accel_group;
++      GtkWidget *menubar, *menu, *item;
++
++      menubar = gtk_menu_bar_new();
++      accel_group = gtk_accel_group_new();
++      gtk_window_add_accel_group(gui->app, accel_group);
++
++      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);
++
++      gui->menu_new_game = gtk_menu_item_new_with_mnemonic(_("_New Game"));
++      gtk_widget_set_tooltip_text(gui->menu_new_game, _("Start a new game"));
++      gtk_widget_add_accelerator(gui->menu_new_game, "activate", accel_group,
++                                 GDK_KEY_N, GDK_CONTROL_MASK,
++                                 GTK_ACCEL_VISIBLE);
++      g_signal_connect(gui->menu_new_game, "activate",
++                       G_CALLBACK(cb_new_game), gui);
++      gtk_menu_shell_append(GTK_MENU_SHELL(menu), gui->menu_new_game);
++
++      gui->menu_pause = gtk_menu_item_new_with_mnemonic(_("_Pause Game"));
++      gtk_widget_set_tooltip_text(gui->menu_pause, _("Pause the game"));
++      gtk_widget_add_accelerator(gui->menu_pause, "activate", accel_group,
++                                 GDK_KEY_Pause, 0, GTK_ACCEL_VISIBLE);
++      g_signal_connect(gui->menu_pause, "activate",
++                       G_CALLBACK(cb_pause_game), gui);
++      gtk_menu_shell_append(GTK_MENU_SHELL(menu), gui->menu_pause);
++
++      gui->menu_end_game = gtk_menu_item_new_with_mnemonic(_("_End Game"));
++      gtk_widget_set_tooltip_text(gui->menu_end_game,
++                                  _("End the current game"));
++      g_signal_connect(gui->menu_end_game, "activate",
++                       G_CALLBACK(cb_end_game), gui);
++      gtk_menu_shell_append(GTK_MENU_SHELL(menu), gui->menu_end_game);
++
++      item = gtk_separator_menu_item_new();
++      gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
++
++      item = gtk_menu_item_new_with_mnemonic(_("Prefere_nces"));
++      gtk_widget_set_tooltip_text(item, _("Configure the application"));
++      g_signal_connect(item, "activate", G_CALLBACK(cb_preferences), gui);
++      gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
++
++      item = gtk_menu_item_new_with_mnemonic(_("_Kill ball"));
++      gtk_widget_set_tooltip_text(item,
++                                  _("Kill the current ball if it gets 
stuck"));
++      g_signal_connect(item, "activate", G_CALLBACK(cb_kill_ball), gui);
++      gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
++
++      item = gtk_menu_item_new_with_mnemonic(_("_Scores..."));
++      gtk_widget_set_tooltip_text(item, _("View the scores"));
++      g_signal_connect(item, "activate", G_CALLBACK(cb_scores), gui);
++      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_set_tooltip_text(item, _("Quit the application"));
++      gtk_widget_add_accelerator(item, "activate", accel_group, GDK_KEY_Q,
++                                 GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
++      g_signal_connect(item, "activate", G_CALLBACK(cb_exit_game), gui);
++      gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
++
++      menu = gtk_menu_new();
++      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(_("_Help"));
++      gtk_widget_set_tooltip_text(item, _("Help on this application"));
++      g_signal_connect(item, "activate", G_CALLBACK(cb_help), gui);
++      gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
++
++      item = gtk_menu_item_new_with_mnemonic(_("_About"));
++      gtk_widget_set_tooltip_text(item, _("About this application"));
++      g_signal_connect(item, "activate", G_CALLBACK(cb_show_about_box), gui);
++      gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
++
++      gtk_container_add(GTK_CONTAINER(gui->vbox), menubar);
++
+       gtk_widget_set_sensitive(gui->menu_pause, FALSE);
+       gtk_widget_set_sensitive(gui->menu_end_game, FALSE);
+ }
+@@ -268,7 +366,7 @@
+  * height of the object hasn't changed */
+ void update_canvas_position(Entity *entity) {
+       if(entity->animation.canvas_item) {
+-              
gnome_canvas_item_set(GNOME_CANVAS_ITEM(entity->animation.canvas_item),
++              g_object_set(G_OBJECT(entity->animation.canvas_item),
+                       "x", (double) entity->geometry.x1,
+                       "y", (double) entity->geometry.y1,
+                       NULL);
+@@ -277,11 +375,20 @@
+ 
+ /* Updates the current pixmap of an item on the canvas */
+ void update_canvas_animation(Entity *entity) {
++      cairo_surface_t *surface;
++      cairo_pattern_t *pattern;
++
+       g_assert(entity->animation.pixmaps[entity->animation.frame_no]);
+       if(entity->animation.canvas_item) {
+-              
gnome_canvas_item_set(GNOME_CANVAS_ITEM(entity->animation.canvas_item),
+-                              "pixbuf", 
entity->animation.pixmaps[entity->animation.frame_no],
++              surface = gdk_cairo_surface_create_from_pixbuf(
++                      entity->animation.pixmaps[entity->animation.frame_no],
++                      0, NULL);
++              pattern = cairo_pattern_create_for_surface(surface);
++              g_object_set(G_OBJECT(entity->animation.canvas_item),
++                           "pattern", pattern,
+                               NULL);
++              cairo_surface_destroy(surface);
++              cairo_pattern_destroy(pattern);
+       }
+ }
+ 
+@@ -289,12 +396,12 @@
+  * This must be called by everything that calls game.c:end_game, and it must
+  * be called before calling game.c:end_game */
+ void gui_end_game(EndGameStatus status) {
+-      int pos;
+       char *title = NULL;
+ 
+-      gnome_canvas_item_hide(gui->background);
+-        gnome_canvas_item_show(gui->title_image);
+-        gnome_canvas_update_now(gui->canvas);
++        g_object_set(gui->background, "visibility",
++                     GOO_CANVAS_ITEM_INVISIBLE, NULL);
++        g_object_set(gui->title_image, "visibility",
++                     GOO_CANVAS_ITEM_VISIBLE, NULL);
+ 
+         gtk_widget_set_sensitive(gui->score_label, FALSE);
+         gtk_widget_set_sensitive(gui->lives_label, FALSE);
+@@ -305,7 +412,9 @@
+       gtk_widget_set_sensitive(gui->menu_pause, FALSE);
+       gtk_widget_set_sensitive(gui->menu_end_game, FALSE);
+ 
+-      pos = gnome_score_log((gfloat) gui->game->score, NULL, TRUE);
++      games_scores_context_add_score(gui->scores, gui->game->score,
++                                     gui->category, NULL,
++                                     cb_add_scores, NULL);
+       switch(status) {
+               case ENDGAME_WIN :
+                       title = _("GNOME Breakout: You win!");
+@@ -320,14 +429,15 @@
+       }
+ 
+       if(title)
+-              gnome_scores_display(title, PACKAGE, NULL, pos);
++              games_scores_context_run_dialog(gui->scores);
+ }
+ 
+ /* Tell the gui that the game has begun, and that we should hide the title */
+ void gui_begin_game(void) {
+-        gnome_canvas_item_hide(gui->title_image);
+-        gnome_canvas_item_show(gui->background);
+-        gnome_canvas_update_now(gui->canvas);
++        g_object_set(gui->title_image, "visibility",
++                     GOO_CANVAS_ITEM_INVISIBLE, NULL);
++        g_object_set(gui->background, "visibility",
++                     GOO_CANVAS_ITEM_VISIBLE, NULL);
+ 
+         gtk_widget_set_sensitive(gui->score_label, TRUE);
+         gtk_widget_set_sensitive(gui->lives_label, TRUE);
+@@ -340,9 +450,14 @@
+ }
+ 
+ gint get_mouse_x_position(void) {
++      GdkWindow *window;
++      GdkSeat *seat;
+       gint x;
+       gint y;
+-      gtk_widget_get_pointer(GTK_WIDGET(gui->app), &x, &y);
++      window = gtk_widget_get_window(GTK_WIDGET(gui->app));
++      seat = gdk_display_get_default_seat(gdk_window_get_display(window));
++      gdk_window_get_device_position(window, gdk_seat_get_pointer(seat),
++                                     &x, &y, NULL);
+       return x;
+ }
+ 
+@@ -398,15 +513,15 @@
+ static void init_labels(void) {
+       GtkWidget *vsep1, *vsep2, *hsep1;
+ 
+-      gui->label_hbox1 = gtk_hbox_new(FALSE, 0);
+-      gui->label_hbox2 = gtk_hbox_new(FALSE, 0);
++      gui->label_hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
++      gui->label_hbox2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+       gui->level_no_label = gtk_label_new(_("No:"));
+       gui->level_name_label = gtk_label_new(_("Name:"));
+       gui->level_author_label = gtk_label_new(_("Author:"));
+       gui->level_levelfile_label = gtk_label_new(_("Levelfile:"));
+-      vsep1 = gtk_vseparator_new();
+-      vsep2 = gtk_vseparator_new();
+-      hsep1 = gtk_hseparator_new();
++      vsep1 = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
++      vsep2 = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
++      hsep1 = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
+ 
+       gtk_label_set_justify(GTK_LABEL(gui->level_no_label), GTK_JUSTIFY_LEFT);
+       gtk_label_set_justify(GTK_LABEL(gui->level_name_label), 
GTK_JUSTIFY_LEFT);
+@@ -419,10 +534,10 @@
+       gtk_widget_set_sensitive(gui->level_author_label, FALSE);
+ 
+       gtk_box_pack_start(GTK_BOX(gui->label_hbox1), gui->level_no_label, 
TRUE, TRUE, 5);
+-      gtk_box_pack_start(GTK_BOX(gui->label_hbox1), vsep1, TRUE, TRUE, 0);
++      gtk_box_pack_start(GTK_BOX(gui->label_hbox1), vsep1, TRUE, FALSE, 0);
+       gtk_box_pack_start(GTK_BOX(gui->label_hbox1), gui->level_name_label, 
TRUE, TRUE, 5);
+       gtk_box_pack_start(GTK_BOX(gui->label_hbox2), gui->level_author_label, 
TRUE, TRUE, 5);
+-      gtk_box_pack_start(GTK_BOX(gui->label_hbox2), vsep2, TRUE, TRUE, 0);
++      gtk_box_pack_start(GTK_BOX(gui->label_hbox2), vsep2, TRUE, FALSE, 0);
+       gtk_box_pack_start(GTK_BOX(gui->label_hbox2), 
gui->level_levelfile_label, TRUE, TRUE, 5);
+       gtk_box_pack_start(GTK_BOX(gui->vbox), gui->label_hbox1, TRUE, TRUE, 0);
+       gtk_box_pack_start(GTK_BOX(gui->vbox), hsep1, TRUE, TRUE, 0);
+--- gnome-breakout-0.5.3.orig/src/gui-callbacks.c
++++ gnome-breakout-0.5.3/src/gui-callbacks.c
+@@ -19,9 +19,7 @@
+ #include "game.h"
+ #include "ball.h"
+ 
+-#include <X11/X.h>
+-#include <X11/Xlib.h>
+-#include <gdk/gdkx.h>
++#include <glib/gi18n.h>
+ 
+ //#define NEXTLEVEL_KEY 1
+ 
+@@ -35,8 +33,8 @@
+               end_game(gui->game, ENDGAME_MENU);
+       }
+ 
+-        gtk_object_destroy(GTK_OBJECT(gui->background));
+-        gtk_object_destroy(GTK_OBJECT(gui->title_image));
++        goo_canvas_item_remove(gui->background);
++        goo_canvas_item_remove(gui->title_image);
+ 
+         gtk_main_quit();
+ }
+@@ -51,13 +49,17 @@
+ 
+ /* Show the about box. I wonder, does the about box dialog free itself? */
+ void cb_show_about_box(GtkWidget *widget, gpointer data) {
+-        static GtkWidget *dlg;
++        GdkPixbuf *logo;
++        gchar **dirs;
++        gchar *file;
++        gint i;
+       GuiInfo *gui;
+ 
+         const gchar *authors[] = {
+-                "Development:",
+               "Michael Pearson <mipear...@internode.on.net>",
+-              "",
++              NULL };
++
++        const gchar *artists[] = {
+               "Additional Levels:",
+               "Marisa Mack <mar...@teleport.com>",
+               "Mathieu Dutour <dut...@clipper.ens.fr>",
+@@ -69,34 +71,35 @@
+               "The classic arcade game Breakout."
+                 );
+ 
+-        const gchar *translator_credits = _("translator credits");
++        const gchar *translator_credits = _("translator_credits");
++
++        gui = (GuiInfo *) data;
++        dirs = (gchar **) g_get_system_data_dirs();
++        for(i = 0; i < g_strv_length(dirs); i++) {
++                file = g_build_filename (dirs[i], G_DIR_SEPARATOR_S,
++                                         "pixmaps", G_DIR_SEPARATOR_S,
++                                         "gnome-breakout.png", NULL);
++                if (g_file_test(file, G_FILE_TEST_EXISTS))
++                        break;
+ 
+-        gchar *use_tc = NULL;
+-        if(strcmp(translator_credits, "translator credits")) {
+-            /* This is a translation, show appropriate credits */
+-            use_tc = (gchar *) translator_credits;
++                g_free(file);
+         }
+ 
+-      if(dlg) {
+-              gdk_window_show(dlg->window);
+-              gdk_window_raise(dlg->window);
+-              gtk_widget_grab_focus(GTK_WIDGET(dlg));
+-      } else {
+-              dlg = gnome_about_new(
+-                        _("GNOME Breakout"), // name
+-                        VERSION,             // version
+-                      _("Copyright (c) 2000-2003 Michael Pearson"), // cp
+-                      _(comment),         // comments
+-                              authors,            // authors
+-                        NULL,               // documenters
+-                        use_tc,             // translator credits
+-                        NULL);              // logo
+-
+-              gui = (GuiInfo *) data;
+-              g_signal_connect(GTK_OBJECT(dlg), "destroy",
+-                              GTK_SIGNAL_FUNC(cb_null), &dlg);
+-              gtk_widget_show(dlg);
+-      }
++        logo = gdk_pixbuf_new_from_file(file, NULL);
++        g_free(file);
++
++        gtk_show_about_dialog(gui->app,
++                              "program name", _("GNOME Breakout"),
++                              "version", VERSION,
++                              "copyright",
++                              _("Copyright (c) 2000-2003 Michael Pearson"),
++                              "comments", comment,
++                              "authors", authors,
++                              "artists", artists,
++                              "translator-credits", translator_credits,
++                              "logo", logo,
++                              NULL);
++        g_object_unref(logo);
+ }
+ 
+ /* Called when the user holds down a key. If it's a key we recognise, pass it
+@@ -203,8 +206,15 @@
+ 
+       gui = (GuiInfo *) data;
+         // FIXME!!
+-      mbox = (GtkWidget *) gnome_ok_dialog_parented(_("Help hasn't been 
implimented yet. So go ahead and write some for me :)"), GTK_WINDOW(gui->app));
+-      gtk_widget_show(mbox);
++      mbox = gtk_message_dialog_new(gui->app,
++                                    GTK_DIALOG_DESTROY_WITH_PARENT,
++                                    GTK_MESSAGE_INFO,
++                                    GTK_BUTTONS_CLOSE,
++                                    "%s", (_("Help hasn't been implimented "
++                                             "yet. So go ahead and write "
++                                             "some for me :)")));
++      gtk_dialog_run(GTK_DIALOG(mbox));
++      gtk_widget_destroy(mbox);
+ }
+ 
+ /* The application has gained or lost focus */
+@@ -252,9 +262,22 @@
+               ball_die(gui->game, (Ball *) gui->game->balls->data);
+ }
+ 
++void cb_add_scores(GObject *obj, GAsyncResult *res, gpointer data) {
++        GamesScoresContext *context = GAMES_SCORES_CONTEXT(obj);
++        GError *error = NULL;
++
++        games_scores_context_add_score_finish(context, res, &error);
++        if(error) {
++                g_warning("Failed to add score: %s", error->message);
++                g_error_free(error);
++        }
++}
++
+ /* Displays the scores */
+ void cb_scores(GtkWidget *widget, gpointer data) {
+-      gnome_scores_display(_("GNOME Breakout: Scores"), PACKAGE, NULL, 0);
++      GuiInfo *gui;
++      gui = (GuiInfo *) data;
++      games_scores_context_run_dialog(gui->scores);
+ }
+ 
+ /* The pointer has either entered or left the canvas */
+@@ -284,59 +307,19 @@
+       return TRUE;
+ }
+ 
+-/* Maybe there are GTK+ functions for the following stuff, but I don't know 
them */
+-gboolean cb_grab_focus(GtkWidget *widget, GdkEvent *event, gpointer data) {
+-      XGrabPointer(GDK_WINDOW_XDISPLAY(GTK_WIDGET(widget)->window),
+-              GDK_WINDOW_XWINDOW(GTK_WIDGET(widget)->window), 1,
+-              PointerMotionMask, GrabModeAsync, GrabModeAsync,
+-              GDK_WINDOW_XWINDOW(GTK_WIDGET(widget)->window),
+-              None, CurrentTime);
+-
+-      return TRUE;
+-}
+-
+-gboolean cb_ungrab_focus(GtkWidget *widget, GdkEvent *event, gpointer data) {
+-      XUngrabPointer(GDK_WINDOW_XDISPLAY(GTK_WIDGET(widget)->window), 
CurrentTime);
+-
+-      return TRUE;
+-}
+-
+ gboolean cb_show_pointer(GtkWidget *widget, GdkEvent *event, gpointer data) {
+-      XUndefineCursor(GDK_WINDOW_XDISPLAY(GTK_WIDGET(widget)->window),
+-              GDK_WINDOW_XWINDOW(GTK_WIDGET(widget)->window));
++      gdk_window_set_cursor(gtk_widget_get_window(widget), NULL);
+ 
+       return TRUE;
+ }
+ 
+ gboolean cb_hide_pointer(GtkWidget *widget, GdkEvent *event, gpointer data) {
+-      static Cursor cursor = 0;
+-      XColor colour;
+-      Pixmap cursorPixmap;
+-
+-      colour.pixel = 
WhitePixel(GDK_WINDOW_XDISPLAY(GTK_WIDGET(widget)->window),
+-              DefaultScreen(GDK_WINDOW_XDISPLAY(GTK_WIDGET(widget)->window)));
+-      XQueryColor(GDK_WINDOW_XDISPLAY(GTK_WIDGET(widget)->window), 
+-              DefaultColormap(GDK_WINDOW_XDISPLAY(GTK_WIDGET(widget)->window),
+-              
DefaultScreen(GDK_WINDOW_XDISPLAY(GTK_WIDGET(widget)->window))), &colour);
+-      if(cursor) {
+-              XFreeCursor(GDK_WINDOW_XDISPLAY(GTK_WIDGET(widget)->window), 
cursor);
+-      }
+-      cursorPixmap = 
XCreatePixmap(GDK_WINDOW_XDISPLAY(GTK_WIDGET(widget)->window),
+-              GDK_WINDOW_XWINDOW(GTK_WIDGET(widget)->window), 1, 1, 1);
+-      cursor = 
XCreatePixmapCursor(GDK_WINDOW_XDISPLAY(GTK_WIDGET(widget)->window),
+-              cursorPixmap, cursorPixmap, &colour, &colour, 0, 0);
+-      if(cursorPixmap) {
+-              XFreePixmap(GDK_WINDOW_XDISPLAY(GTK_WIDGET(widget)->window), 
cursorPixmap);
+-      }
+-      XDefineCursor(GDK_WINDOW_XDISPLAY(GTK_WIDGET(widget)->window),
+-              GDK_WINDOW_XWINDOW(GTK_WIDGET(widget)->window), cursor);
+-
+-      return TRUE;
+-}
++      GdkCursor *cursor;
+ 
+-/* Nulls the variable passed to it */
+-gboolean cb_null(GtkWidget *w, void **data) {
+-      *data = NULL;
++      cursor = gdk_cursor_new_for_display(gdk_display_get_default(),
++                                          GDK_BLANK_CURSOR);
++      gdk_window_set_cursor(gtk_widget_get_window(widget), cursor);
++      g_object_unref(cursor);
+ 
+       return TRUE;
+ }
+--- gnome-breakout-0.5.3.orig/src/gui-callbacks.h
++++ gnome-breakout-0.5.3/src/gui-callbacks.h
+@@ -23,14 +23,12 @@
+ void cb_end_game(GtkWidget *widget, gpointer data);
+ void cb_kill_ball(GtkWidget *widget, gpointer data);
+ void cb_scores(GtkWidget *widget, gpointer data);
++void cb_add_scores(GObject *obj, GAsyncResult *res, gpointer data);
+ void cb_preferences(GtkWidget *widget, gpointer data);
+ void cb_help(GtkWidget *widget, gpointer data);
+ gboolean cb_main_focus_change(GtkWidget *widget, GdkEvent *event, gpointer 
data);
+ gboolean cb_canvas_button_press(GtkWidget *widget, GdkEventButton *event,
+               gpointer data);
+-gboolean cb_grab_focus(GtkWidget *widget, GdkEvent *event, gpointer data);
+-gboolean cb_ungrab_focus(GtkWidget *widget, GdkEvent *event, gpointer data);
+ gboolean cb_hide_pointer(GtkWidget *widget, GdkEvent *event, gpointer data);
+ gboolean cb_show_pointer(GtkWidget *widget, GdkEvent *event, gpointer data);
+ gboolean cb_canvas_pointer(GtkWidget *widget, GdkEvent *event, gpointer data);
+-gboolean cb_null(GtkWidget *widget, void **data);
+--- gnome-breakout-0.5.3.orig/src/gui-preferences.c
++++ gnome-breakout-0.5.3/src/gui-preferences.c
+@@ -8,6 +8,7 @@
+  * "COPYING" for more details.
+  */
+ 
++#include <glib/gi18n.h>
+ #include "breakout.h"
+ #include "gui.h"
+ #include "gui-preferences.h"
+@@ -60,17 +61,18 @@
+               gpointer data);
+ static void cb_level_add(GtkWidget *widget, gpointer data);
+ static void cb_level_remove(GtkWidget *widget, gpointer data);
+-static void cb_filesel_ok(GtkWidget *w, gpointer data);
+-static void cb_filesel_cancel(GtkWidget *w, gpointer data);
++static void cb_filesel_ok(GtkDialog *w, gint id, gpointer data);
+ static void cb_checkbox_toggled(GtkWidget *w, gboolean *flag);
+ 
+ void make_preferences_box(GuiInfo *gui) {
+       GtkNotebook *window_notebook;
++      GdkWindow *window;
+       
+       /* Don't let the user run two preferences boxes at the same time */
+       if(dialog) {
+-              gdk_window_show( dialog->window );
+-              gdk_window_raise( dialog->window);
++              window = gtk_widget_get_window(dialog);
++              gdk_window_show(window);
++              gdk_window_raise(window);
+               gtk_widget_grab_focus(GTK_WIDGET(dialog));
+               return;
+       }
+@@ -146,17 +148,18 @@
+ static void init_preferences_box(GuiInfo *gui, GtkNotebook **window_notebook) 
{
+         dialog = gtk_dialog_new_with_buttons(
+                 _("GNOME Breakout Preferences"), GTK_WINDOW(gui->app),
+-                0, GTK_STOCK_APPLY,
+-              GTK_RESPONSE_APPLY, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
+-                GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
++                0, _("_Apply"), GTK_RESPONSE_APPLY,
++                _("_Close"), GTK_RESPONSE_CLOSE,
++                _("_OK"), GTK_RESPONSE_OK, NULL);
+ 
+-      g_signal_connect(GTK_OBJECT(dialog), "destroy",
++      g_signal_connect(G_OBJECT(dialog), "destroy",
+                       G_CALLBACK(cb_pref_destroy), gui);
+-      g_signal_connect(GTK_OBJECT(dialog), "response",
++      g_signal_connect(G_OBJECT(dialog), "response",
+                       G_CALLBACK(cb_pref_response), gui);
+ 
+       *window_notebook = GTK_NOTEBOOK(gtk_notebook_new());
+-      gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox),
++      gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area
++                                        (GTK_DIALOG(dialog))),
+                       GTK_WIDGET(*window_notebook));
+       
+       
+@@ -171,7 +174,7 @@
+ 
+       GtkWidget *bounce_entropy_label;
+       GtkWidget *bounce_entropy_hbox;
+-      GtkObject *bounce_entropy_adjustment;
++      GtkAdjustment *bounce_entropy_adjustment;
+       GtkWidget *bounce_entropy_sbutton;
+       GtkWidget *hide_pointer_check;
+ 
+@@ -199,13 +202,13 @@
+ 
+       /* Vbox and Tablabel - Constructor */
+       gametablabel = gtk_label_new(_("Game"));
+-      gamehbox = gtk_hbox_new(FALSE, GNOME_PAD);
+-      gamevbox1 = gtk_vbox_new(FALSE, GNOME_PAD);
+-      gamevbox2 = gtk_vbox_new(FALSE, GNOME_PAD);
++      gamehbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
++      gamevbox1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 8);
++      gamevbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 8);
+ 
+       /* Vbox and Tablabel - Packing */
+-      gtk_box_pack_start(GTK_BOX(gamehbox), gamevbox1, TRUE, TRUE, GNOME_PAD);
+-      gtk_box_pack_start(GTK_BOX(gamehbox), gamevbox2, TRUE, TRUE, GNOME_PAD);
++      gtk_box_pack_start(GTK_BOX(gamehbox), gamevbox1, TRUE, TRUE, 8);
++      gtk_box_pack_start(GTK_BOX(gamehbox), gamevbox2, TRUE, TRUE, 8);
+ 
+       /* Vbox and Tablabel - Show */
+       gtk_widget_show(gametablabel);
+@@ -216,13 +219,13 @@
+       /* Level Frame - Constructor */
+       lf.game = gui->game;
+       lf.frame = gtk_frame_new(_("Levels"));
+-      lf.vbox = gtk_vbox_new(FALSE, 0);
++      lf.vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+       lf.level_list_store = gtk_list_store_new(1, G_TYPE_STRING);
+       lf.level_list_view = GTK_TREE_VIEW(gtk_tree_view_new_with_model(
+                       GTK_TREE_MODEL(lf.level_list_store)));
+       //lf.warning_label = gtk_label_new(_("Levels cannot be added or 
removed\nwhile the game is running."));
+-      lf.button_hbox = gtk_hbox_new(TRUE, 0);
+-      lf.level_list_hbox = gtk_hbox_new(TRUE, 0);
++      lf.button_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
++      lf.level_list_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+       lf.add_button = gtk_button_new_with_label(_("Add"));
+       lf.remove_button = gtk_button_new_with_label(_("Remove"));
+       lf.game = gui->game;
+@@ -253,8 +256,8 @@
+       g_signal_connect_object(GTK_OBJECT(lf.add_button), "clicked", 
GTK_SIGNAL_FUNC(cb_level_add), (gpointer) &lf, 0);
+       g_signal_connect_object(GTK_OBJECT(lf.remove_button), "clicked", 
GTK_SIGNAL_FUNC(cb_level_remove), (gpointer) &lf, 0);
+       */
+-      g_signal_connect(GTK_OBJECT(lf.add_button), "clicked", 
GTK_SIGNAL_FUNC(cb_level_add), (gpointer) &lf);
+-      g_signal_connect(GTK_OBJECT(lf.remove_button), "clicked", 
GTK_SIGNAL_FUNC(cb_level_remove), (gpointer) &lf);
++      g_signal_connect(G_OBJECT(lf.add_button), "clicked", 
G_CALLBACK(cb_level_add), (gpointer) &lf);
++      g_signal_connect(G_OBJECT(lf.remove_button), "clicked", 
G_CALLBACK(cb_level_remove), (gpointer) &lf);
+ 
+ 
+       /* Level Frame - Sensitivity */
+@@ -266,15 +269,15 @@
+       gtk_widget_set_sensitive(GTK_WIDGET(lf.remove_button), FALSE);
+ 
+       /* Level Frame - Packing */     
+-      gtk_box_pack_start(GTK_BOX(gamevbox1), lf.frame, TRUE, TRUE, GNOME_PAD);
++      gtk_box_pack_start(GTK_BOX(gamevbox1), lf.frame, TRUE, TRUE, 8);
+       gtk_container_add(GTK_CONTAINER(lf.frame), lf.vbox);
+       //gtk_box_pack_start_defaults(GTK_BOX(lf.vbox), lf.warning_label);
+-      gtk_box_pack_start(GTK_BOX(lf.vbox), lf.level_list_hbox, TRUE, TRUE, 
GNOME_PAD);
+-      gtk_box_pack_start(GTK_BOX(lf.vbox), lf.button_hbox, FALSE, FALSE, 
GNOME_PAD);
++      gtk_box_pack_start(GTK_BOX(lf.vbox), lf.level_list_hbox, TRUE, TRUE, 8);
++      gtk_box_pack_start(GTK_BOX(lf.vbox), lf.button_hbox, FALSE, FALSE, 8);
+       gtk_container_add(GTK_CONTAINER(lf.level_list_scrollpane), 
GTK_WIDGET(lf.level_list_view));
+-      gtk_box_pack_start(GTK_BOX(lf.level_list_hbox), 
lf.level_list_scrollpane, TRUE, TRUE, GNOME_PAD);
+-      gtk_box_pack_start(GTK_BOX(lf.button_hbox), lf.add_button, TRUE, TRUE, 
GNOME_PAD);
+-      gtk_box_pack_start(GTK_BOX(lf.button_hbox), lf.remove_button, TRUE, 
TRUE, GNOME_PAD);
++      gtk_box_pack_start(GTK_BOX(lf.level_list_hbox), 
lf.level_list_scrollpane, TRUE, TRUE, 8);
++      gtk_box_pack_start(GTK_BOX(lf.button_hbox), lf.add_button, TRUE, TRUE, 
8);
++      gtk_box_pack_start(GTK_BOX(lf.button_hbox), lf.remove_button, TRUE, 
TRUE, 8);
+ 
+       /* Level Frame - Show */        
+       gtk_widget_show(lf.frame);
+@@ -293,7 +296,7 @@
+       else
+               difficulty_frame = gtk_frame_new(_("Difficulty (next game)"));
+ 
+-      difficulty_vbox = gtk_vbox_new(FALSE, 0);
++      difficulty_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+       difficulty_easy_radio = gtk_radio_button_new_with_label(NULL,
+                       _("Easy"));
+       difficulty_medium_radio = gtk_radio_button_new_with_label_from_widget(
+@@ -318,22 +321,22 @@
+       }
+ 
+       /* Difficulty frame and radio buttons - Signals */
+-      g_signal_connect(GTK_OBJECT(difficulty_easy_radio), "toggled",
+-                      GTK_SIGNAL_FUNC(cb_diff), (gpointer) DIFFICULTY_EASY);
+-      g_signal_connect(GTK_OBJECT(difficulty_medium_radio), "toggled",
+-                      GTK_SIGNAL_FUNC(cb_diff), (gpointer) DIFFICULTY_MEDIUM);
+-      g_signal_connect(GTK_OBJECT(difficulty_hard_radio), "toggled",
+-                      GTK_SIGNAL_FUNC(cb_diff), (gpointer) DIFFICULTY_HARD);
++      g_signal_connect(G_OBJECT(difficulty_easy_radio), "toggled",
++                      G_CALLBACK(cb_diff), (gpointer) DIFFICULTY_EASY);
++      g_signal_connect(G_OBJECT(difficulty_medium_radio), "toggled",
++                      G_CALLBACK(cb_diff), (gpointer) DIFFICULTY_MEDIUM);
++      g_signal_connect(G_OBJECT(difficulty_hard_radio), "toggled",
++                      G_CALLBACK(cb_diff), (gpointer) DIFFICULTY_HARD);
+ 
+       /* Difficulty frame and radio buttons - Packing */
+-      gtk_box_pack_start_defaults(GTK_BOX(difficulty_vbox),
+-                      difficulty_easy_radio);
+-      gtk_box_pack_start_defaults(GTK_BOX(difficulty_vbox),
+-                      difficulty_medium_radio);
+-      gtk_box_pack_start_defaults(GTK_BOX(difficulty_vbox),
+-                      difficulty_hard_radio);
++      gtk_box_pack_start(GTK_BOX(difficulty_vbox),
++                           difficulty_easy_radio, TRUE, TRUE, 0);
++      gtk_box_pack_start(GTK_BOX(difficulty_vbox),
++                           difficulty_medium_radio, TRUE, TRUE, 0);
++      gtk_box_pack_start(GTK_BOX(difficulty_vbox),
++                           difficulty_hard_radio, TRUE, TRUE, 0);
+       gtk_container_add(GTK_CONTAINER(difficulty_frame), difficulty_vbox);
+-      gtk_box_pack_start(GTK_BOX(gamevbox2), difficulty_frame, TRUE, TRUE, 
GNOME_PAD);
++      gtk_box_pack_start(GTK_BOX(gamevbox2), difficulty_frame, TRUE, TRUE, 8);
+ 
+       /* Difficulty frame and radio buttons - Show */
+       gtk_widget_show(difficulty_frame);
+@@ -344,7 +347,7 @@
+ 
+       /* Automatic Pause Frame - Constructor */
+       pause_frame = gtk_frame_new(_("Automatic Pause"));
+-      pause_vbox = gtk_vbox_new(FALSE, 0);
++      pause_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+       pause_on_focus_check = gtk_check_button_new_with_label(_("When we lose 
keyboard focus"));
+       pause_on_pointer_check = gtk_check_button_new_with_label(_("When the 
mouse pointer leaves the play window"));
+       pause_on_pref_check = gtk_check_button_new_with_label(_("When the 
preferences dialog is active"));
+@@ -355,16 +358,19 @@
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pause_on_pointer_check), 
newflags->pause_on_pointer);
+ 
+       /* Automatic Pause Frame - Signals */
+-      g_signal_connect(GTK_OBJECT(pause_on_focus_check), "toggled", 
GTK_SIGNAL_FUNC(cb_checkbox_toggled), &newflags->pause_on_focus);
+-      g_signal_connect(GTK_OBJECT(pause_on_pointer_check), "toggled", 
GTK_SIGNAL_FUNC(cb_checkbox_toggled), &newflags->pause_on_pointer);
+-      g_signal_connect(GTK_OBJECT(pause_on_pref_check), "toggled", 
GTK_SIGNAL_FUNC(cb_checkbox_toggled), &newflags->pause_on_pref);
++      g_signal_connect(G_OBJECT(pause_on_focus_check), "toggled", 
G_CALLBACK(cb_checkbox_toggled), &newflags->pause_on_focus);
++      g_signal_connect(G_OBJECT(pause_on_pointer_check), "toggled", 
G_CALLBACK(cb_checkbox_toggled), &newflags->pause_on_pointer);
++      g_signal_connect(G_OBJECT(pause_on_pref_check), "toggled", 
G_CALLBACK(cb_checkbox_toggled), &newflags->pause_on_pref);
+ 
+       /* Automatic Pause Frame - Packing */
+-      gtk_box_pack_start_defaults(GTK_BOX(pause_vbox), pause_on_focus_check);
+-      gtk_box_pack_start_defaults(GTK_BOX(pause_vbox), 
pause_on_pointer_check);
+-      gtk_box_pack_start_defaults(GTK_BOX(pause_vbox), pause_on_pref_check);
++      gtk_box_pack_start(GTK_BOX(pause_vbox), pause_on_focus_check,
++                         TRUE, TRUE, 0);
++      gtk_box_pack_start(GTK_BOX(pause_vbox), pause_on_pointer_check,
++                         TRUE, TRUE, 0);
++      gtk_box_pack_start(GTK_BOX(pause_vbox), pause_on_pref_check,
++                         TRUE, TRUE, 0);
+       gtk_container_add(GTK_CONTAINER(pause_frame), pause_vbox);
+-      gtk_box_pack_start(GTK_BOX(gamevbox2), pause_frame, TRUE, FALSE, 
GNOME_PAD);
++      gtk_box_pack_start(GTK_BOX(gamevbox2), pause_frame, TRUE, FALSE, 8);
+ 
+       /* Automatic Pause Frame - Show */
+       gtk_widget_show(pause_frame);
+@@ -380,15 +386,15 @@
+                       GTK_TOGGLE_BUTTON(hide_pointer_check),
+                       newflags->hide_pointer);
+       gtk_box_pack_start(GTK_BOX(gamevbox2), hide_pointer_check,
+-                      TRUE, FALSE, GNOME_PAD);
++                      TRUE, FALSE, 8);
+       gtk_widget_show(hide_pointer_check);
+-      g_signal_connect(GTK_OBJECT(hide_pointer_check), "toggled",
+-                      GTK_SIGNAL_FUNC(cb_checkbox_toggled),
++      g_signal_connect(G_OBJECT(hide_pointer_check), "toggled",
++                      G_CALLBACK(cb_checkbox_toggled),
+                       &newflags->hide_pointer);
+       
+       /* Bounce Entropy - Constructor */
+       bounce_entropy_label = gtk_label_new(_("Bounce Entropy (Experimental): 
"));
+-      bounce_entropy_hbox = gtk_hbox_new(FALSE, GNOME_PAD);
++      bounce_entropy_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
+       bounce_entropy_adjustment = gtk_adjustment_new((gfloat)
+                       newflags->bounce_entropy, (gfloat) MIN_BOUNCE_ENTROPY,
+                       (gfloat) MAX_BOUNCE_ENTROPY, 1.0, 5.0, 1.0);
+@@ -403,17 +409,17 @@
+                       TRUE);
+ 
+       /* Bounce Entropy - Signals */
+-      g_signal_connect(GTK_OBJECT(bounce_entropy_adjustment),
+-                      "value_changed", GTK_SIGNAL_FUNC(cb_bounce_entropy),
++      g_signal_connect(G_OBJECT(bounce_entropy_adjustment),
++                      "value_changed", G_CALLBACK(cb_bounce_entropy),
+                       bounce_entropy_sbutton);
+ 
+       /* Bounce Entropy - Packing */
+-      gtk_box_pack_start_defaults(GTK_BOX(bounce_entropy_hbox),
+-                      bounce_entropy_label);
+-      gtk_box_pack_start_defaults(GTK_BOX(bounce_entropy_hbox),
+-                      bounce_entropy_sbutton);
++      gtk_box_pack_start(GTK_BOX(bounce_entropy_hbox),
++                         bounce_entropy_label, TRUE, TRUE, 0);
++      gtk_box_pack_start(GTK_BOX(bounce_entropy_hbox),
++                           bounce_entropy_sbutton, TRUE, TRUE, 0);
+       gtk_box_pack_start(GTK_BOX(gamevbox2), bounce_entropy_hbox, TRUE,
+-                      FALSE, GNOME_PAD);
++                      FALSE, 8);
+ 
+       /* Bounce Entropy - Show */
+       gtk_widget_show(bounce_entropy_label);
+@@ -433,7 +439,7 @@
+ 
+       GtkWidget *bat_speed_label;
+       GtkWidget *bat_speed_hbox;
+-      GtkObject *bat_speed_adjustment;
++      GtkAdjustment *bat_speed_adjustment;
+       GtkWidget *bat_speed_sbutton;
+ 
+       GtkWidget *method_frame;
+@@ -461,12 +467,12 @@
+       GtkWidget *keyb_fire2_entry;
+ 
+       /* Init the vbox */
+-      controlhbox = gtk_hbox_new(TRUE, GNOME_PAD);
+-      controlvbox1 = gtk_vbox_new(TRUE, GNOME_PAD);
+-      controlvbox2 = gtk_vbox_new(TRUE, GNOME_PAD);
++      controlhbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
++      controlvbox1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 8);
++      controlvbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 8);
+       controltablabel = gtk_label_new(_("Control"));
+-      gtk_box_pack_start(GTK_BOX(controlhbox), controlvbox1, TRUE, TRUE, 
GNOME_PAD);
+-      gtk_box_pack_start(GTK_BOX(controlhbox), controlvbox2, TRUE, TRUE, 
GNOME_PAD);
++      gtk_box_pack_start(GTK_BOX(controlhbox), controlvbox1, TRUE, TRUE, 8);
++      gtk_box_pack_start(GTK_BOX(controlhbox), controlvbox2, TRUE, TRUE, 8);
+       gtk_widget_show(controlhbox);
+       gtk_widget_show(controlvbox1);
+       gtk_widget_show(controlvbox2);
+@@ -474,32 +480,32 @@
+         /* Method Frame and Radio Buttons */
+         method_frame = gtk_frame_new(_("Method"));
+         gtk_frame_set_shadow_type(GTK_FRAME(method_frame), 
GTK_SHADOW_ETCHED_IN);
+-        method_vbox = gtk_vbox_new(FALSE, 0);
++        method_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+         gtk_container_add(GTK_CONTAINER(method_frame), method_vbox);
+         method_keyboard_radio = gtk_radio_button_new_with_label(NULL, 
_("Keyboard"));
+         method_mouse_radio = gtk_radio_button_new_with_label_from_widget(
+                         GTK_RADIO_BUTTON(method_keyboard_radio), _("Mouse"));
+-        gtk_box_pack_start_defaults(GTK_BOX(method_vbox),
+-                        method_keyboard_radio);
+-        gtk_box_pack_start_defaults(GTK_BOX(method_vbox),
+-                        method_mouse_radio);
++        gtk_box_pack_start(GTK_BOX(method_vbox),
++                           method_keyboard_radio, TRUE, TRUE, 0);
++        gtk_box_pack_start(GTK_BOX(method_vbox),
++                           method_mouse_radio, TRUE, TRUE, 0);
+         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(method_mouse_radio),
+                         newflags->mouse_control);
+         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(method_keyboard_radio),
+                         newflags->keyboard_control);
+-        gtk_box_pack_start(GTK_BOX(controlvbox1), method_frame, TRUE, TRUE, 
GNOME_PAD);
++        gtk_box_pack_start(GTK_BOX(controlvbox1), method_frame, TRUE, TRUE, 
8);
+         gtk_widget_show(method_frame);
+         gtk_widget_show(method_vbox);
+         gtk_widget_show(method_keyboard_radio);
+         gtk_widget_show(method_mouse_radio);
+-        g_signal_connect(GTK_OBJECT(method_keyboard_radio), "toggled",
+-                        GTK_SIGNAL_FUNC(cb_ctrl_key), NULL);
+-        g_signal_connect(GTK_OBJECT(method_mouse_radio), "toggled",
+-                        GTK_SIGNAL_FUNC(cb_ctrl_mouse), NULL);
++        g_signal_connect(G_OBJECT(method_keyboard_radio), "toggled",
++                        G_CALLBACK(cb_ctrl_key), NULL);
++        g_signal_connect(G_OBJECT(method_mouse_radio), "toggled",
++                        G_CALLBACK(cb_ctrl_mouse), NULL);
+ 
+         /* Bat speed */
+         bat_speed_label = gtk_label_new(_("Bat speed: "));
+-        bat_speed_hbox = gtk_hbox_new(FALSE, GNOME_PAD);
++        bat_speed_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
+         bat_speed_adjustment = gtk_adjustment_new((gfloat) 
newflags->bat_speed,
+                         (gfloat) MIN_BATSPEED, (gfloat) MAX_BATSPEED,
+                         1.0, 5.0, 1.0);
+@@ -508,91 +514,101 @@
+         gtk_spin_button_set_digits(GTK_SPIN_BUTTON(bat_speed_sbutton), 0);
+         gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(bat_speed_sbutton), FALSE);
+         gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(bat_speed_sbutton), TRUE);
+-        gtk_box_pack_start_defaults(GTK_BOX(bat_speed_hbox), bat_speed_label);
+-        gtk_box_pack_start_defaults(GTK_BOX(bat_speed_hbox), 
bat_speed_sbutton);
+-        gtk_box_pack_start(GTK_BOX(controlvbox1), bat_speed_hbox, TRUE, 
FALSE, GNOME_PAD);
++        gtk_box_pack_start(GTK_BOX(bat_speed_hbox), bat_speed_label,
++                           TRUE, TRUE, 0);
++        gtk_box_pack_start(GTK_BOX(bat_speed_hbox), bat_speed_sbutton,
++                           TRUE, TRUE, 0);
++        gtk_box_pack_start(GTK_BOX(controlvbox1), bat_speed_hbox, TRUE, 
FALSE, 8);
+         gtk_widget_show(bat_speed_label);
+         gtk_widget_show(bat_speed_hbox);
+         gtk_widget_show(bat_speed_sbutton);
+-        g_signal_connect(GTK_OBJECT(bat_speed_adjustment), "value_changed",
+-                        GTK_SIGNAL_FUNC(cb_bat_speed), bat_speed_sbutton);
++        g_signal_connect(G_OBJECT(bat_speed_adjustment), "value_changed",
++                        G_CALLBACK(cb_bat_speed), bat_speed_sbutton);
+ 
+       /* Keybindings Frame */
+       keyb_frame = gtk_frame_new(_("Keybindings"));
+       gtk_frame_set_shadow_type(GTK_FRAME(keyb_frame), GTK_SHADOW_ETCHED_IN);
+-      keyb_vbox =  gtk_vbox_new(TRUE, GNOME_PAD);
++      keyb_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 8);
+       gtk_container_add(GTK_CONTAINER(keyb_frame), keyb_vbox);
+-      gtk_box_pack_start(GTK_BOX(controlvbox2), keyb_frame, TRUE, TRUE, 
GNOME_PAD);
++      gtk_box_pack_start(GTK_BOX(controlvbox2), keyb_frame, TRUE, TRUE, 8);
+       gtk_widget_show(keyb_vbox);
+       gtk_widget_show(keyb_frame);
+ 
+       /* KB: Left */
+-      keyb_left_hbox = gtk_hbox_new(FALSE, GNOME_PAD);
++      keyb_left_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
+       keyb_left_label = gtk_label_new(_("Left:"));
+-      gtk_misc_set_alignment(GTK_MISC(keyb_left_label), 0.0, 0.5);
++      gtk_label_set_yalign(GTK_LABEL(keyb_left_label), 0.5);
+       keyb_left_entry = gtk_entry_new();
+-      gtk_entry_set_editable(GTK_ENTRY(keyb_left_entry), FALSE);
++      gtk_editable_set_editable(GTK_EDITABLE(keyb_left_entry), FALSE);
+       gtk_entry_set_text(GTK_ENTRY(keyb_left_entry),
+                       gdk_keyval_name(newflags->left_key));
+-      gtk_box_pack_start_defaults(GTK_BOX(keyb_left_hbox), keyb_left_label);
+-      gtk_box_pack_start_defaults(GTK_BOX(keyb_left_hbox), keyb_left_entry);
+-      gtk_box_pack_start(GTK_BOX(keyb_vbox), keyb_left_hbox, TRUE, TRUE, 
GNOME_PAD);
++      gtk_box_pack_start(GTK_BOX(keyb_left_hbox), keyb_left_label,
++                         TRUE, TRUE, 0);
++      gtk_box_pack_start(GTK_BOX(keyb_left_hbox), keyb_left_entry,
++                         TRUE, TRUE, 0);
++      gtk_box_pack_start(GTK_BOX(keyb_vbox), keyb_left_hbox, TRUE, TRUE, 8);
+       gtk_widget_show(keyb_left_label);
+       gtk_widget_show(keyb_left_entry);
+       gtk_widget_show(keyb_left_hbox);
+-      g_signal_connect(GTK_OBJECT(keyb_left_entry), "key_press_event",
+-                      GTK_SIGNAL_FUNC(cb_key_left), NULL);
++      g_signal_connect(G_OBJECT(keyb_left_entry), "key_press_event",
++                      G_CALLBACK(cb_key_left), NULL);
+ 
+       /* KB: Right */
+-      keyb_right_hbox = gtk_hbox_new(FALSE, GNOME_PAD);
++      keyb_right_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
+       keyb_right_label = gtk_label_new(_("Right:"));
+-      gtk_misc_set_alignment(GTK_MISC(keyb_right_label), 0.0, 0.5);
++      gtk_label_set_yalign(GTK_LABEL(keyb_right_label), 0.5);
+       keyb_right_entry = gtk_entry_new();
+-      gtk_entry_set_editable(GTK_ENTRY(keyb_right_entry), FALSE);
++      gtk_editable_set_editable(GTK_EDITABLE(keyb_right_entry), FALSE);
+       gtk_entry_set_text(GTK_ENTRY(keyb_right_entry),
+                       gdk_keyval_name(newflags->right_key));
+-      gtk_box_pack_start_defaults(GTK_BOX(keyb_right_hbox), keyb_right_label);
+-      gtk_box_pack_start_defaults(GTK_BOX(keyb_right_hbox), keyb_right_entry);
+-      gtk_box_pack_start(GTK_BOX(keyb_vbox), keyb_right_hbox, TRUE, TRUE, 
GNOME_PAD);
++      gtk_box_pack_start(GTK_BOX(keyb_right_hbox), keyb_right_label,
++                         TRUE, TRUE, 0);
++      gtk_box_pack_start(GTK_BOX(keyb_right_hbox), keyb_right_entry,
++                         TRUE, TRUE, 0);
++      gtk_box_pack_start(GTK_BOX(keyb_vbox), keyb_right_hbox, TRUE, TRUE, 8);
+       gtk_widget_show(keyb_right_label);
+       gtk_widget_show(keyb_right_entry);
+       gtk_widget_show(keyb_right_hbox);
+-      g_signal_connect(GTK_OBJECT(keyb_right_entry), "key_press_event",
+-                      GTK_SIGNAL_FUNC(cb_key_right), NULL);
++      g_signal_connect(G_OBJECT(keyb_right_entry), "key_press_event",
++                      G_CALLBACK(cb_key_right), NULL);
+ 
+       /* KB: Fire1 */
+-      keyb_fire1_hbox = gtk_hbox_new(FALSE, GNOME_PAD);
++      keyb_fire1_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
+       keyb_fire1_label = gtk_label_new(_("Fire One:"));
+-      gtk_misc_set_alignment(GTK_MISC(keyb_fire1_label), 0.0, 0.5);
++      gtk_label_set_yalign(GTK_LABEL(keyb_fire1_label), 0.5);
+       keyb_fire1_entry = gtk_entry_new();
+-      gtk_entry_set_editable(GTK_ENTRY(keyb_fire1_entry), FALSE);
++      gtk_editable_set_editable(GTK_EDITABLE(keyb_fire1_entry), FALSE);
+       gtk_entry_set_text(GTK_ENTRY(keyb_fire1_entry),
+                       gdk_keyval_name(newflags->fire1_key));
+-      gtk_box_pack_start_defaults(GTK_BOX(keyb_fire1_hbox), keyb_fire1_label);
+-      gtk_box_pack_start_defaults(GTK_BOX(keyb_fire1_hbox), keyb_fire1_entry);
+-      gtk_box_pack_start(GTK_BOX(keyb_vbox), keyb_fire1_hbox, TRUE, TRUE, 
GNOME_PAD);
++      gtk_box_pack_start(GTK_BOX(keyb_fire1_hbox), keyb_fire1_label,
++                         TRUE, TRUE, 0);
++      gtk_box_pack_start(GTK_BOX(keyb_fire1_hbox), keyb_fire1_entry,
++                         TRUE, TRUE, 0);
++      gtk_box_pack_start(GTK_BOX(keyb_vbox), keyb_fire1_hbox, TRUE, TRUE, 8);
+       gtk_widget_show(keyb_fire1_label);
+       gtk_widget_show(keyb_fire1_entry);
+       gtk_widget_show(keyb_fire1_hbox);
+-      g_signal_connect(GTK_OBJECT(keyb_fire1_entry), "key_press_event",
+-                      GTK_SIGNAL_FUNC(cb_key_fire1), NULL);
++      g_signal_connect(G_OBJECT(keyb_fire1_entry), "key_press_event",
++                      G_CALLBACK(cb_key_fire1), NULL);
+ 
+       /* KB: Fire2 */
+-      keyb_fire2_hbox = gtk_hbox_new(FALSE, GNOME_PAD);
++      keyb_fire2_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
+       keyb_fire2_label = gtk_label_new(_("Fire Two:"));
+-      gtk_misc_set_alignment(GTK_MISC(keyb_fire2_label), 0.0, 0.5);
++      gtk_label_set_yalign(GTK_LABEL(keyb_fire2_label), 0.5);
+       keyb_fire2_entry = gtk_entry_new();
+-      gtk_entry_set_editable(GTK_ENTRY(keyb_fire2_entry), FALSE);
++      gtk_editable_set_editable(GTK_EDITABLE(keyb_fire2_entry), FALSE);
+       gtk_entry_set_text(GTK_ENTRY(keyb_fire2_entry),
+                       gdk_keyval_name(newflags->fire2_key));
+-      gtk_box_pack_start_defaults(GTK_BOX(keyb_fire2_hbox), keyb_fire2_label);
+-      gtk_box_pack_start_defaults(GTK_BOX(keyb_fire2_hbox), keyb_fire2_entry);
+-      gtk_box_pack_start(GTK_BOX(keyb_vbox), keyb_fire2_hbox, TRUE, TRUE, 
GNOME_PAD);
++      gtk_box_pack_start(GTK_BOX(keyb_fire2_hbox), keyb_fire2_label,
++                         TRUE, TRUE, 0);
++      gtk_box_pack_start(GTK_BOX(keyb_fire2_hbox), keyb_fire2_entry,
++                         TRUE, TRUE, 0);
++      gtk_box_pack_start(GTK_BOX(keyb_vbox), keyb_fire2_hbox, TRUE, TRUE, 8);
+       gtk_widget_show(keyb_fire2_label);
+       gtk_widget_show(keyb_fire2_entry);
+       gtk_widget_show(keyb_fire2_hbox);
+-      g_signal_connect(GTK_OBJECT(keyb_fire2_entry), "key_press_event",
+-                      GTK_SIGNAL_FUNC(cb_key_fire2), NULL);
++      g_signal_connect(G_OBJECT(keyb_fire2_entry), "key_press_event",
++                      G_CALLBACK(cb_key_fire2), NULL);
+ 
+       /* Add it to the dialog */
+       gtk_notebook_append_page(GTK_NOTEBOOK(window_notebook),
+@@ -719,21 +735,26 @@
+ 
+ static void cb_level_add(GtkWidget *widget, gpointer data) {
+       LevelFrame *lf = (LevelFrame *) data;
++      GtkFileFilter *filter;
+ 
+       if(lf->game->state == STATE_STOPPED) {
+-              lf->fsel = gtk_file_selection_new ("Add Levelfile");
+-
+-              /* Connect Signals */
+-              g_signal_connect(GTK_OBJECT(lf->fsel), "destroy", 
(GtkSignalFunc) cb_filesel_cancel, data);
+-              g_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION 
(lf->fsel)->cancel_button), "clicked", (GtkSignalFunc) cb_filesel_cancel, data);
+-              
+-              g_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION 
(lf->fsel)->ok_button), "clicked", (GtkSignalFunc) cb_filesel_ok, data);
+-
+-              /* Set defaults */
+-              gtk_file_selection_set_filename(GTK_FILE_SELECTION(lf->fsel), 
"*.gbl");
+-
++              lf->fsel
++               = gtk_file_chooser_dialog_new("Add Levelfile",
++                                             NULL,
++                                             GTK_FILE_CHOOSER_ACTION_OPEN,
++                                             _("OK"), GTK_RESPONSE_ACCEPT,
++                                             _("_Cancel"),
++                                             GTK_RESPONSE_REJECT, NULL);
++
++              /* Connect Signals */
++              g_signal_connect(lf->fsel, "response",
++                               G_CALLBACK(cb_filesel_ok), data);
++              filter = gtk_file_filter_new();
++              gtk_file_filter_add_pattern(filter, "*.gbl");
++              gtk_file_filter_set_name(filter, "Level Files");
++              gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(lf->fsel), filter);
+               /* Show the selector */
+-              gtk_widget_show(lf->fsel);
++              gtk_dialog_run(GTK_DIALOG(lf->fsel));
+       } else {
+               gui_warning("Cannot add or remove levels while the game is 
running");
+       }
+@@ -742,6 +763,7 @@
+ 
+ static void cb_level_remove(GtkWidget *widget, gpointer data) {
+       LevelFrame *lf = (LevelFrame *) data;
++      GtkTreeSelection *sel;
+       gchar *text;
+       gchar *filename;
+ 
+@@ -755,18 +777,26 @@
+               gtk_list_store_remove(lf->level_list_store, 
&(lf->level_list_iter));
+               g_free(lf->level_list_selection);
+               lf->level_list_selection = NULL;
++              sel = gtk_tree_view_get_selection(lf->level_list_view);
++              gtk_tree_selection_unselect_all(sel);
+       } else {
+               gui_warning("Cannot add or remove levels while the game is 
running");
+       }
+       set_flags_changed(TRUE);
+ }
+ 
+-static void cb_filesel_ok(GtkWidget *w, gpointer data) {
++static void cb_filesel_ok(GtkDialog *w, gint id, gpointer data) {
+       LevelFrame *lf = (LevelFrame *) data;
+       gchar *filename;
+       gchar *title;
+ 
+-      filename = (gchar *) gtk_file_selection_get_filename 
(GTK_FILE_SELECTION (lf->fsel));
++      if(id != GTK_RESPONSE_ACCEPT) {
++              gtk_widget_destroy(lf->fsel);
++              lf->fsel = NULL;
++              return;
++      }
++
++      filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (lf->fsel));
+ 
+       if(lf->game->state == STATE_STOPPED) {
+               if((title = leveldata_add(filename))) {
+@@ -778,14 +808,8 @@
+               gui_warning("Cannot add or remove levels while the game is 
running");
+       }
+ 
++      g_free(filename);
+       gtk_widget_destroy(GTK_WIDGET(lf->fsel));
+       lf->fsel = NULL;
+       set_flags_changed(TRUE);
+ }
+-
+-static void cb_filesel_cancel(GtkWidget *w, gpointer data) {
+-      LevelFrame *lf = (LevelFrame *) data;
+-
+-      gtk_widget_destroy(GTK_WIDGET(lf->fsel));
+-      lf->fsel = NULL;
+-}
+--- gnome-breakout-0.5.3.orig/src/leveldata.c
++++ gnome-breakout-0.5.3/src/leveldata.c
+@@ -14,6 +14,7 @@
+ #include "leveldata.h"
+ #include <errno.h>
+ #include <string.h>
++#include <glib/gi18n.h>
+ 
+ /* Internal Contants */
+ #define DEFAULT_NAME "No Name"
--- gnome-breakout-0.5.3.orig/debian/patches/series
+++ gnome-breakout-0.5.3/debian/patches/series
@@ -6,3 +6,4 @@
 06_fix_pixmaps_makefile.patch
 07_fix_wformat_warnings.patch
 08_link_mathlib.patch
+09_goocanvas_port.patch
--- gnome-breakout-0.5.3.orig/debian/postinst
+++ gnome-breakout-0.5.3/debian/postinst
@@ -1,20 +0,0 @@
-#! /bin/sh
-
-set -e
-
-if [ ! -d /var/games ]; then
-        mkdir -p /var/games
-fi
-
-# 0.5.1-2 installed highscore file the wrong place
-if [ -f /var/lib/games/gnome-breakout.scores ]; then
-        mv /var/lib/games/gnome-breakout.scores 
/var/games/gnome-breakout.scores
-fi
-
-if [ ! -f /var/games/gnome-breakout.scores ]; then
-        touch /var/games/gnome-breakout.scores
-        chown root:games /var/games/gnome-breakout.scores
-        chmod 0664 /var/games/gnome-breakout.scores
-fi
-
-#DEBHELPER#
--- gnome-breakout-0.5.3.orig/debian/postrm
+++ gnome-breakout-0.5.3/debian/postrm
@@ -1,9 +0,0 @@
-#! /bin/sh
-set -e
-
-case "$1" in
-       purge)
-        rm /var/games/gnome-breakout.scores
-esac
-
-#DEBHELPER#
--- gnome-breakout-0.5.3.orig/debian/preinst
+++ gnome-breakout-0.5.3/debian/preinst
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+set -e
+set -u
+
+if [ "$1" = "upgrade" ] || [ "$1" = "install" ]; then
+    if [ -f /var/games/gnome-breakout.scores ]; then
+        rm /var/games/gnome-breakout.scores
+        rmdir --ignore-fail-on-non-empty /var/games
+    fi
+fi
+
+#DEBHELPER#
--- gnome-breakout-0.5.3.orig/debian/rules
+++ gnome-breakout-0.5.3/debian/rules
@@ -1,6 +1,7 @@
 #!/usr/bin/make -f
 
 export DEB_BUILD_MAINT_OPTIONS := hardening=+all
+export DEB_LDFLAGS_MAINT_APPEND := -Wl,--as-needed
 
 %:
        dh $@ --with autoreconf --with autotools-dev
@@ -26,8 +27,3 @@ override_dh_auto_install:
        mv debian/gnome-breakout/usr/share/games/pixmaps/gnome-breakout.png \
                debian/gnome-breakout/usr/share/pixmaps/
        rm -rf debian/gnome-breakout/usr/share/games/pixmaps
-
-override_dh_fixperms:
-       dh_fixperms
-       chgrp games debian/gnome-breakout/usr/games/gnome-breakout
-       chmod 2755 debian/gnome-breakout/usr/games/gnome-breakout

Reply via email to