tKeyboard shortcuts now work again for "stock" buttons under GTK+1. - vaccinewars - be a doctor and try to vaccinate the world
 (HTM) git clone git://src.adamsgaard.dk/vaccinewars
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit f2389c43adcb2fa396a1c7a246a3f2cd31f781d9
 (DIR) parent d3976c0b72e808e93f1780459629e916449a07f4
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Mon,  8 Apr 2002 13:06:40 +0000
       
       Keyboard shortcuts now work again for "stock" buttons under GTK+1.
       
       
       Diffstat:
         M src/gtkport/gtkport.c               |      29 +++++++++++++++++++++--------
         M src/gtkport/gtkport.h               |      11 +++--------
         M src/gui_client/gtk_client.c         |      57 ++++++++++++++++++++++---------
         M src/gui_client/newgamedia.c         |      18 +++++++++++++-----
         M src/gui_client/optdialog.c          |       7 +++++--
       
       5 files changed, 82 insertions(+), 40 deletions(-)
       ---
 (DIR) diff --git a/src/gtkport/gtkport.c b/src/gtkport/gtkport.c
       t@@ -39,6 +39,15 @@
        #include "gtkport.h"
        #include "nls.h"
        
       +#if CYGWIN || !HAVE_GLIB2
       +const gchar *GTK_STOCK_OK = N_("_OK");
       +const gchar *GTK_STOCK_CLOSE = N_("_Close");
       +const gchar *GTK_STOCK_CANCEL = N_("_Cancel");
       +const gchar *GTK_STOCK_REFRESH = N_("_Refresh");
       +const gchar *GTK_STOCK_YES = N_("_Yes");
       +const gchar *GTK_STOCK_NO = N_("_No");
       +#endif
       +
        #ifdef CYGWIN
        
        #include <windows.h>
       t@@ -5003,9 +5012,9 @@ void gtk_timeout_remove(guint timeout_handler_id)
          }
        }
        
       -GtkWidget *gtk_button_new_from_stock(const gchar *label)
       +GtkWidget *NewStockButton(const gchar *label, GtkAccelGroup *accel_group)
        {
       -  return gtk_button_new_with_label(label);
       +  return gtk_button_new_with_label(_(label));
        }
        
        /* We don't really handle styles, so these are just placeholder functions */
       t@@ -5144,7 +5153,7 @@ gint OldGtkMessageBox(GtkWidget *parent, const gchar *Text,
          gint i;
          static gint retval;
          gboolean imm_return;
       -  gchar *ButtonData[MB_MAX] = {
       +  const gchar *ButtonData[MB_MAX] = {
            GTK_STOCK_OK, GTK_STOCK_CANCEL, GTK_STOCK_YES, GTK_STOCK_NO
          };
        
       t@@ -5178,7 +5187,7 @@ gint OldGtkMessageBox(GtkWidget *parent, const gchar *Text,
          hbbox = gtk_hbutton_box_new();
          for (i = 0; i < MB_MAX; i++) {
            if (Options & (1 << i)) {
       -      button = gtk_button_new_from_stock(ButtonData[i]);
       +      button = NewStockButton(ButtonData[i], accel_group);
              if (!imm_return) {
                gtk_object_set_data(GTK_OBJECT(button), "retval", &retval);
              }
       t@@ -5198,6 +5207,11 @@ gint OldGtkMessageBox(GtkWidget *parent, const gchar *Text,
        
        #ifdef HAVE_GLIB2
        
       +GtkWidget *NewStockButton(const gchar *label, GtkAccelGroup *accel_group)
       +{
       +  return gtk_button_new_from_stock(label);
       +}
       +
        gint GtkMessageBox(GtkWidget *parent, const gchar *Text,
                           const gchar *Title, GtkMessageType type, gint Options)
        {
       t@@ -5231,13 +5245,12 @@ gint GtkMessageBox(GtkWidget *parent, const gchar *Text,
          return OldGtkMessageBox(parent, Text, Title, Options);
        }
        
       -GtkWidget *gtk_button_new_from_stock(const gchar *label)
       +GtkWidget *NewStockButton(const gchar *label, GtkAccelGroup *accel_group)
        {
          GtkWidget *button;
        
       -/*button = gtk_button_new_with_label("");
       -  SetAccelerator(button, label, button, "clicked", accel_group, TRUE);*/
       -  button = gtk_button_new_with_label(label);
       +  button = gtk_button_new_with_label("");
       +  SetAccelerator(button, _(label), button, "clicked", accel_group, FALSE);
          return button;
        }
        
 (DIR) diff --git a/src/gtkport/gtkport.h b/src/gtkport/gtkport.h
       t@@ -807,14 +807,8 @@ struct _GtkUrl {
        #endif /* CYGWIN */
        
        #if CYGWIN || !HAVE_GLIB2
       -#define GTK_STOCK_OK      _("OK")
       -#define GTK_STOCK_CLOSE   _("Close")
       -#define GTK_STOCK_CANCEL  _("Cancel")
       -#define GTK_STOCK_REFRESH _("Refresh")
       -#define GTK_STOCK_YES     _("Yes")
       -#define GTK_STOCK_NO      _("No")
       -
       -GtkWidget *gtk_button_new_from_stock(const gchar *label);
       +extern const gchar *GTK_STOCK_OK, *GTK_STOCK_CLOSE, *GTK_STOCK_CANCEL, 
       +                   *GTK_STOCK_REFRESH, *GTK_STOCK_YES, *GTK_STOCK_NO;
        
        typedef enum
        {
       t@@ -846,5 +840,6 @@ void TextViewAppend(GtkTextView *textview, const gchar *text,
        void TextViewClear(GtkTextView *textview);
        GtkWidget *gtk_url_new(const gchar *text, const gchar *target,
                               const gchar *bin);
       +GtkWidget *NewStockButton(const gchar *label, GtkAccelGroup *accel_group);
        
        #endif /* __GTKPORT_H__ */
 (DIR) diff --git a/src/gui_client/gtk_client.c b/src/gui_client/gtk_client.c
       t@@ -305,7 +305,7 @@ void ListInventory(GtkWidget *widget, gpointer data)
          gtk_box_pack_start(GTK_BOX(vbox), hsep, FALSE, FALSE, 0);
        
          hbbox = my_hbbox_new();
       -  button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
       +  button = NewStockButton(GTK_STOCK_CLOSE, accel_group);
          gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
                                    GTK_SIGNAL_FUNC(gtk_widget_destroy),
                                    (gpointer)window);
       t@@ -555,8 +555,9 @@ void HandleClientMessage(char *pt, Player *Play)
        
        struct HiScoreDiaStruct {
          GtkWidget *dialog, *table, *vbox;
       +  GtkAccelGroup *accel_group;
        };
       -static struct HiScoreDiaStruct HiScoreDialog = { NULL, NULL, NULL };
       +static struct HiScoreDiaStruct HiScoreDialog = { NULL, NULL, NULL, NULL };
        
        /* 
         * Creates an empty dialog to display high scores.
       t@@ -570,6 +571,8 @@ void PrepareHighScoreDialog(void)
            return;
        
          HiScoreDialog.dialog = dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
       +  HiScoreDialog.accel_group = gtk_accel_group_new();
       +  gtk_window_add_accel_group(GTK_WINDOW(dialog), HiScoreDialog.accel_group);
        
          /* Title of the GTK+ high score dialog */
          gtk_window_set_title(GTK_WINDOW(dialog), _("High Scores"));
       t@@ -733,7 +736,7 @@ void CompleteHighScoreDialog(gboolean AtEnd)
            return;
        
          hbbox = my_hbbox_new();
       -  button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
       +  button = NewStockButton(GTK_STOCK_CLOSE, HiScoreDialog.accel_group);
          gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
                                    GTK_SIGNAL_FUNC(gtk_widget_destroy),
                                    (gpointer)dialog);
       t@@ -1673,14 +1676,14 @@ void DealDrugs(GtkWidget *widget, gpointer data)
          gtk_box_pack_start(GTK_BOX(vbox), hsep, FALSE, FALSE, 0);
        
          hbbox = my_hbbox_new();
       -  button = gtk_button_new_from_stock(GTK_STOCK_OK);
       +  button = NewStockButton(GTK_STOCK_OK, accel_group);
          gtk_signal_connect(GTK_OBJECT(button), "clicked",
                             GTK_SIGNAL_FUNC(DealOKCallback), data);
          GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
          defbutton = button;
          gtk_box_pack_start_defaults(GTK_BOX(hbbox), button);
        
       -  button = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
       +  button = NewStockButton(GTK_STOCK_CANCEL, accel_group);
          gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
                                    GTK_SIGNAL_FUNC(gtk_widget_destroy),
                                    (gpointer)dialog);
       t@@ -1845,10 +1848,10 @@ void QuestionDialog(char *Data, Player *From)
          for (i = 0; i < strlen(Responses); i++) {
            switch (Responses[i]) {
            case 'Y':
       -      button = gtk_button_new_from_stock(GTK_STOCK_YES);
       +      button = NewStockButton(GTK_STOCK_YES, accel_group);
              break;
            case 'N':
       -      button = gtk_button_new_from_stock(GTK_STOCK_NO);
       +      button = NewStockButton(GTK_STOCK_NO, accel_group);
              break;
            default:
              for (j = 0, trword = NULL; j < numWords && !trword; j++) {
       t@@ -2264,6 +2267,7 @@ void display_intro(GtkWidget *widget, gpointer data)
          gchar *VersionStr, *docindex;
          const int rows = 6, cols = 3;
          int i, j;
       +  GtkAccelGroup *accel_group;
          gchar *table_data[6][3] = {
            /* Credits labels in GTK+ 'about' dialog */
            {N_("Icons and graphics"), "Ocelot Mantis", NULL},
       t@@ -2277,6 +2281,8 @@ void display_intro(GtkWidget *widget, gpointer data)
          };
        
          dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
       +  accel_group = gtk_accel_group_new();
       +  gtk_window_add_accel_group(GTK_WINDOW(dialog), accel_group);
        
          /* Title of GTK+ 'about' dialog */
          gtk_window_set_title(GTK_WINDOW(dialog), _("About dopewars"));
       t@@ -2344,7 +2350,7 @@ void display_intro(GtkWidget *widget, gpointer data)
          gtk_box_pack_start(GTK_BOX(vbox), hsep, FALSE, FALSE, 0);
        
          hbbox = my_hbbox_new();
       -  OKButton = gtk_button_new_from_stock(GTK_STOCK_OK);
       +  OKButton = NewStockButton(GTK_STOCK_OK, accel_group);
          gtk_signal_connect_object(GTK_OBJECT(OKButton), "clicked",
                                    GTK_SIGNAL_FUNC(gtk_widget_destroy),
                                    (gpointer)dialog);
       t@@ -2427,12 +2433,16 @@ void TransferDialog(gboolean Debt)
        {
          GtkWidget *dialog, *button, *label, *radio, *table, *vbox;
          GtkWidget *hbbox, *hsep, *entry;
       +  GtkAccelGroup *accel_group;
          GSList *group;
          GString *text;
        
          text = g_string_new("");
        
          dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
       +  accel_group = gtk_accel_group_new();
       +  gtk_window_add_accel_group(GTK_WINDOW(dialog), accel_group);
       +
          gtk_signal_connect(GTK_OBJECT(dialog), "destroy",
                             GTK_SIGNAL_FUNC(SendDoneMessage), NULL);
          if (Debt) {
       t@@ -2507,7 +2517,7 @@ void TransferDialog(gboolean Debt)
          gtk_box_pack_start(GTK_BOX(vbox), hsep, FALSE, FALSE, 0);
        
          hbbox = my_hbbox_new();
       -  button = gtk_button_new_from_stock(GTK_STOCK_OK);
       +  button = NewStockButton(GTK_STOCK_OK, accel_group);
          gtk_signal_connect(GTK_OBJECT(button), "clicked",
                             GTK_SIGNAL_FUNC(TransferOK), dialog);
          gtk_box_pack_start_defaults(GTK_BOX(hbbox), button);
       t@@ -2519,7 +2529,7 @@ void TransferDialog(gboolean Debt)
                               GTK_SIGNAL_FUNC(TransferPayAll), dialog);
            gtk_box_pack_start_defaults(GTK_BOX(hbbox), button);
          }
       -  button = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
       +  button = NewStockButton(GTK_STOCK_CANCEL, accel_group);
          gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
                                    GTK_SIGNAL_FUNC(gtk_widget_destroy),
                                    (gpointer)dialog);
       t@@ -2536,10 +2546,13 @@ void TransferDialog(gboolean Debt)
        void ListPlayers(GtkWidget *widget, gpointer data)
        {
          GtkWidget *dialog, *clist, *button, *vbox, *hsep, *hbbox;
       +  GtkAccelGroup *accel_group;
        
          if (IsShowingPlayerList)
            return;
          dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
       +  accel_group = gtk_accel_group_new();
       +  gtk_window_add_accel_group(GTK_WINDOW(dialog), accel_group);
        
          /* Title of player list dialog */
          gtk_window_set_title(GTK_WINDOW(dialog), _("Player List"));
       t@@ -2562,7 +2575,7 @@ void ListPlayers(GtkWidget *widget, gpointer data)
          gtk_box_pack_start(GTK_BOX(vbox), hsep, FALSE, FALSE, 0);
        
          hbbox = my_hbbox_new();
       -  button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
       +  button = NewStockButton(GTK_STOCK_CLOSE, accel_group);
          gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
                                    GTK_SIGNAL_FUNC(gtk_widget_destroy),
                                    (gpointer)dialog);
       t@@ -2633,11 +2646,14 @@ void TalkDialog(gboolean TalkToAll)
        {
          GtkWidget *dialog, *clist, *button, *entry, *label, *vbox, *hsep,
              *checkbutton, *hbbox;
       +  GtkAccelGroup *accel_group;
          static struct TalkStruct TalkData;
        
          if (IsShowingTalkList)
            return;
          dialog = TalkData.dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
       +  accel_group = gtk_accel_group_new();
       +  gtk_window_add_accel_group(GTK_WINDOW(dialog), accel_group);
        
          /* Title of talk dialog */
          gtk_window_set_title(GTK_WINDOW(dialog), _("Talk to player(s)"));
       t@@ -2686,7 +2702,7 @@ void TalkDialog(gboolean TalkToAll)
                             GTK_SIGNAL_FUNC(TalkSend), (gpointer)&TalkData);
          gtk_box_pack_start_defaults(GTK_BOX(hbbox), button);
        
       -  button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
       +  button = NewStockButton(GTK_STOCK_CLOSE, accel_group);
          gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
                                    GTK_SIGNAL_FUNC(gtk_widget_destroy),
                                    (gpointer)dialog);
       t@@ -2767,9 +2783,13 @@ void TipOff(GtkWidget *widget, gpointer data)
        void ErrandDialog(gint ErrandType)
        {
          GtkWidget *dialog, *clist, *button, *vbox, *hbbox, *hsep, *label;
       +  GtkAccelGroup *accel_group;
          gchar *text;
        
          dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
       +  accel_group = gtk_accel_group_new();
       +  gtk_window_add_accel_group(GTK_WINDOW(dialog), accel_group);
       +
          gtk_container_set_border_width(GTK_CONTAINER(dialog), 7);
        
          gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
       t@@ -2826,14 +2846,14 @@ void ErrandDialog(gint ErrandType)
          gtk_box_pack_start(GTK_BOX(vbox), hsep, FALSE, FALSE, 0);
        
          hbbox = my_hbbox_new();
       -  button = gtk_button_new_from_stock(GTK_STOCK_OK);
       +  button = NewStockButton(GTK_STOCK_OK, accel_group);
          gtk_object_set_data(GTK_OBJECT(button), "dialog", dialog);
          gtk_object_set_data(GTK_OBJECT(button), "errandtype",
                              GINT_TO_POINTER(ErrandType));
          gtk_signal_connect(GTK_OBJECT(button), "clicked",
                             GTK_SIGNAL_FUNC(ErrandOK), (gpointer)clist);
          gtk_box_pack_start_defaults(GTK_BOX(hbbox), button);
       -  button = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
       +  button = NewStockButton(GTK_STOCK_CANCEL, accel_group);
          gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
                                    GTK_SIGNAL_FUNC(gtk_widget_destroy),
                                    (gpointer)dialog);
       t@@ -2991,8 +3011,11 @@ static void NewNameOK(GtkWidget *widget, GtkWidget *window)
        void NewNameDialog(void)
        {
          GtkWidget *window, *button, *hsep, *vbox, *label, *entry;
       +  GtkAccelGroup *accel_group;
        
          window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
       +  accel_group = gtk_accel_group_new();
       +  gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
        
          /* Title of dialog for changing a player's name */
          gtk_window_set_title(GTK_WINDOW(window), _("Change Name"));
       t@@ -3021,7 +3044,7 @@ void NewNameDialog(void)
          hsep = gtk_hseparator_new();
          gtk_box_pack_start(GTK_BOX(vbox), hsep, FALSE, FALSE, 0);
        
       -  button = gtk_button_new_from_stock(GTK_STOCK_OK);
       +  button = NewStockButton(GTK_STOCK_OK, accel_group);
          gtk_signal_connect(GTK_OBJECT(button), "clicked",
                             GTK_SIGNAL_FUNC(NewNameOK), window);
          gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
       t@@ -3074,7 +3097,7 @@ void GunShopDialog(void)
          gtk_box_pack_start(GTK_BOX(vbox), hsep, FALSE, FALSE, 0);
        
          hbbox = my_hbbox_new();
       -  button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
       +  button = NewStockButton(GTK_STOCK_CLOSE, accel_group);
          gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
                                    GTK_SIGNAL_FUNC(gtk_widget_destroy),
                                    (gpointer)window);
       t@@ -3131,7 +3154,7 @@ static void CreateSpyReports(void)
        
          gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
        
       -  button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
       +  button = NewStockButton(GTK_STOCK_CLOSE, accel_group);
          gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
                                    GTK_SIGNAL_FUNC(gtk_widget_destroy),
                                    (gpointer)window);
 (DIR) diff --git a/src/gui_client/newgamedia.c b/src/gui_client/newgamedia.c
       t@@ -578,7 +578,7 @@ void NewGameDialog(Player *play)
          hbbox = my_hbbox_new();
        
          /* Button to update metaserver information */
       -  button = gtk_button_new_from_stock(GTK_STOCK_REFRESH);
       +  button = NewStockButton(GTK_STOCK_REFRESH, accel_group);
          gtk_signal_connect(GTK_OBJECT(button), "clicked",
                             GTK_SIGNAL_FUNC(UpdateMetaServerList), NULL);
          gtk_box_pack_start_defaults(GTK_BOX(hbbox), button);
       t@@ -662,8 +662,12 @@ void AuthDialog(HttpConnection *conn, gboolean proxy, gchar *realm,
                        gpointer data)
        {
          GtkWidget *window, *button, *hsep, *vbox, *label, *entry, *table, *hbbox;
       +  GtkAccelGroup *accel_group;
        
          window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
       +  accel_group = gtk_accel_group_new();
       +  gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
       +
          gtk_signal_connect(GTK_OBJECT(window), "destroy",
                             GTK_SIGNAL_FUNC(DestroyAuthDialog), NULL);
          gtk_object_set_data(GTK_OBJECT(window), "proxy", GINT_TO_POINTER(proxy));
       t@@ -723,12 +727,12 @@ void AuthDialog(HttpConnection *conn, gboolean proxy, gchar *realm,
        
          hbbox = my_hbbox_new();
        
       -  button = gtk_button_new_from_stock(GTK_STOCK_OK);
       +  button = NewStockButton(GTK_STOCK_OK, accel_group);
          gtk_signal_connect(GTK_OBJECT(button), "clicked",
                             GTK_SIGNAL_FUNC(OKAuthDialog), (gpointer)window);
          gtk_box_pack_start_defaults(GTK_BOX(hbbox), button);
        
       -  button = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
       +  button = NewStockButton(GTK_STOCK_CANCEL, accel_group);
          gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
                                    GTK_SIGNAL_FUNC(gtk_widget_destroy),
                                    (gpointer)window);
       t@@ -778,8 +782,12 @@ static void RealSocksAuthDialog(NetworkBuffer *netbuf, gboolean meta,
                                        gpointer data)
        {
          GtkWidget *window, *button, *hsep, *vbox, *label, *entry, *table, *hbbox;
       +  GtkAccelGroup *accel_group;
        
          window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
       +  accel_group = gtk_accel_group_new();
       +  gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
       +
          gtk_signal_connect(GTK_OBJECT(window), "destroy",
                             GTK_SIGNAL_FUNC(DestroySocksAuth), NULL);
          gtk_object_set_data(GTK_OBJECT(window), "netbuf", (gpointer)netbuf);
       t@@ -827,12 +835,12 @@ static void RealSocksAuthDialog(NetworkBuffer *netbuf, gboolean meta,
        
          hbbox = my_hbbox_new();
        
       -  button = gtk_button_new_from_stock(GTK_STOCK_OK);
       +  button = NewStockButton(GTK_STOCK_OK, accel_group);
          gtk_signal_connect(GTK_OBJECT(button), "clicked",
                             GTK_SIGNAL_FUNC(OKSocksAuth), (gpointer)window);
          gtk_box_pack_start_defaults(GTK_BOX(hbbox), button);
        
       -  button = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
       +  button = NewStockButton(GTK_STOCK_CANCEL, accel_group);
          gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
                                    GTK_SIGNAL_FUNC(gtk_widget_destroy),
                                    (gpointer)window);
 (DIR) diff --git a/src/gui_client/optdialog.c b/src/gui_client/optdialog.c
       t@@ -683,6 +683,7 @@ void OptDialog(GtkWidget *widget, gpointer data)
        {
          GtkWidget *dialog, *notebook, *table, *label, *check, *entry;
          GtkWidget *hbox, *vbox, *hsep, *button, *hbbox;
       +  GtkAccelGroup *accel_group;
        
          struct ConfigMembers locmembers[] = {
            { "Police presence", "PolicePresence" },
       t@@ -715,6 +716,8 @@ void OptDialog(GtkWidget *widget, gpointer data)
          };
        
          dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
       +  accel_group = gtk_accel_group_new();
       +  gtk_window_add_accel_group(GTK_WINDOW(dialog), accel_group);
        
          gtk_window_set_title(GTK_WINDOW(dialog), _("Options"));
          gtk_container_set_border_width(GTK_CONTAINER(dialog), 7);
       t@@ -865,11 +868,11 @@ void OptDialog(GtkWidget *widget, gpointer data)
        
          hbbox = my_hbbox_new();
        
       -  button = gtk_button_new_from_stock(GTK_STOCK_OK);
       +  button = NewStockButton(GTK_STOCK_OK, accel_group);
          gtk_signal_connect(GTK_OBJECT(button), "clicked",
                             GTK_SIGNAL_FUNC(OKCallback), (gpointer)dialog);
          gtk_box_pack_start_defaults(GTK_BOX(hbbox), button);
       -  button = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
       +  button = NewStockButton(GTK_STOCK_CANCEL, accel_group);
          gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
                                    GTK_SIGNAL_FUNC(gtk_widget_destroy),
                                    (gpointer)dialog);