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);