tGTK+ keyboard accelerator stuff moved out into a subroutine - 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 678b8137c3c8aa62655cff972ea4d9035476f65e
(DIR) parent 7f5b4ff0e6c8289a9369706808cfa5bac857f995
(HTM) Author: Ben Webb <ben@salilab.org>
Date: Fri, 8 Dec 2000 22:21:52 +0000
GTK+ keyboard accelerator stuff moved out into a subroutine
Diffstat:
M src/gtk_client.c | 87 +++++++++++++------------------
1 file changed, 35 insertions(+), 52 deletions(-)
---
(DIR) diff --git a/src/gtk_client.c b/src/gtk_client.c
t@@ -169,6 +169,20 @@ static void LogMessage(const gchar *log_domain,GLogLevelFlags log_level,
message,MB_OK);
}
+#ifndef CYGWIN
+static guint SetAccelerator(GtkWidget *labelparent,gchar *Text,
+ GtkWidget *sendto,gchar *signal,
+ GtkAccelGroup *accel_group) {
+ guint AccelKey;
+ AccelKey=gtk_label_parse_uline(GTK_LABEL(GTK_BIN(labelparent)->child),Text);
+ if (sendto && AccelKey) {
+ gtk_widget_add_accelerator(sendto,signal,accel_group,AccelKey,0,
+ GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
+ }
+ return AccelKey;
+}
+#endif
+
void QuitGame(GtkWidget *widget,gpointer data) {
if (!InGame ||
MessageBox(ClientData.window,_("Quit Game"),_("Abandon current game?"),
t@@ -363,12 +377,12 @@ void HandleClientMessage(char *pt,Player *Play) {
MenuItem=gtk_item_factory_get_widget(ClientData.Menu,
"<main>/Errands/Spy");
text=dpg_strdup_printf(_("_Spy\t(%P)"),Prices.Spy);
- gtk_label_parse_uline(GTK_LABEL(GTK_BIN(MenuItem)->child),text);
+ SetAccelerator(MenuItem,text,NULL,NULL,NULL);
g_free(text);
text=dpg_strdup_printf(_("_Tipoff\t(%P)"),Prices.Tipoff);
MenuItem=gtk_item_factory_get_widget(ClientData.Menu,
"<main>/Errands/Tipoff");
- gtk_label_parse_uline(GTK_LABEL(GTK_BIN(MenuItem)->child),text);
+ SetAccelerator(MenuItem,text,NULL,NULL,NULL);
g_free(text);
if (FirstClient->next) ListPlayers(NULL,NULL);
break;
t@@ -508,11 +522,8 @@ static void FightCallback(GtkWidget *widget,gpointer data) {
static GtkWidget *AddFightButton(gchar *Text,GtkAccelGroup *accel_group,
GtkBox *box,gint Answer) {
GtkWidget *button;
- guint AccelKey;
button=gtk_button_new_with_label("");
- AccelKey=gtk_label_parse_uline(GTK_LABEL(GTK_BIN(button)->child),Text);
- gtk_widget_add_accelerator(button,"clicked",accel_group,AccelKey,0,
- GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
+ SetAccelerator(button,Text,button,"clicked",accel_group);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(FightCallback),
GINT_TO_POINTER(Answer));
t@@ -829,7 +840,6 @@ void Jet() {
GtkAccelGroup *accel_group;
gint boxsize,i,row,col;
gchar *name,AccelChar;
- guint AccelKey;
accel_group=gtk_accel_group_new();
t@@ -867,9 +877,7 @@ void Jet() {
} else {
button=gtk_button_new_with_label("");
name=g_strdup_printf("_%c. %s",AccelChar,Location[i].Name);
- AccelKey=gtk_label_parse_uline(GTK_LABEL(GTK_BIN(button)->child),name);
- gtk_widget_add_accelerator(button,"clicked",accel_group,AccelKey,0,
- GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
+ SetAccelerator(button,name,button,"clicked",accel_group);
g_free(name);
}
gtk_widget_set_sensitive(button,i != ClientData.Play->IsAt);
t@@ -1167,7 +1175,6 @@ static void QuestionCallback(GtkWidget *widget,gpointer data) {
void QuestionDialog(char *Data,Player *From) {
GtkWidget *dialog,*label,*vbox,*hsep,*hbbox,*button;
GtkAccelGroup *accel_group;
- guint AccelKey;
gchar *Responses,**split,*LabelText;
gchar *Words[] = { N_("_Yes"), N_("_No"), N_("_Run"),
N_("_Fight"), N_("_Attack"), N_("_Evade") };
t@@ -1210,10 +1217,7 @@ void QuestionDialog(char *Data,Player *From) {
if (Answer=='_' && strlen(Words[i])>=2) Answer=(gint)Words[i][1];
if (strchr(Responses,Answer)) {
button=gtk_button_new_with_label("");
- AccelKey=gtk_label_parse_uline(GTK_LABEL(GTK_BIN(button)->child),
- _(Words[i]));
- gtk_widget_add_accelerator(button,"clicked",accel_group,AccelKey,0,
- GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
+ SetAccelerator(button,_(Words[i]),button,"clicked",accel_group);
gtk_object_set_data(GTK_OBJECT(button),"dialog",(gpointer)dialog);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(QuestionCallback),
t@@ -1366,12 +1370,9 @@ void SetJetButtonTitle(GtkAccelGroup *accel_group) {
gtk_widget_remove_accelerator(button,accel_group,accel_key,0);
}
- accel_key=gtk_label_parse_uline(GTK_LABEL(GTK_BIN(button)->child),
+ ClientData.JetAccel=SetAccelerator(button,
(ClientData.Play && ClientData.Play->Flags & FIGHTING) ?
- _("_Fight") : _("_Jet!"));
- gtk_widget_add_accelerator(button,"clicked",accel_group,accel_key,0,
- GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
- ClientData.JetAccel=accel_key;
+ _("_Fight") : _("_Jet!"),button,"clicked",accel_group);
}
char GtkLoop(int *argc,char **argv[],char ReturnOnFail) {
t@@ -1693,10 +1694,10 @@ void NewGameDialog() {
GtkWidget *vbox,*vbox2,*hbox,*label,*entry,*notebook,*frame,*button;
GtkWidget *table,*clist,*scrollwin,*dialog,*hbbox;
GtkAccelGroup *accel_group;
- guint AccelKey;
gchar *text;
gchar *server_titles[5];
static struct StartGameStruct widgets;
+ guint AccelKey;
server_titles[0]=_("Server");
server_titles[1]=_("Port");
t@@ -1768,10 +1769,7 @@ void NewGameDialog() {
gtk_box_pack_start(GTK_BOX(vbox2),table,FALSE,FALSE,0);
button=gtk_button_new_with_label("");
- AccelKey=gtk_label_parse_uline(GTK_LABEL(GTK_BIN(button)->child),
- _("_Connect"));
- gtk_widget_add_accelerator(button,"clicked",accel_group,AccelKey,0,
- GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
+ SetAccelerator(button,_("_Connect"),button,"clicked",accel_group);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(ConnectToServer),
(gpointer)&widgets);
t@@ -1787,17 +1785,13 @@ void NewGameDialog() {
vbox2=gtk_vbox_new(FALSE,7);
gtk_container_set_border_width(GTK_CONTAINER(vbox2),4);
widgets.antique=gtk_check_button_new_with_label("");
- AccelKey=gtk_label_parse_uline(GTK_LABEL(GTK_BIN(widgets.antique)->child),
- _("_Antique mode"));
- gtk_widget_add_accelerator(widgets.antique,"clicked",accel_group,AccelKey,0,
- GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
+ SetAccelerator(widgets.antique,_("_Antique mode"),widgets.antique,
+ "clicked",accel_group);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets.antique),WantAntique);
gtk_box_pack_start(GTK_BOX(vbox2),widgets.antique,FALSE,FALSE,0);
button=gtk_button_new_with_label("");
- AccelKey=gtk_label_parse_uline(GTK_LABEL(GTK_BIN(button)->child),
- _("_Start single-player game"));
- gtk_widget_add_accelerator(button,"clicked",accel_group,AccelKey,0,
- GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
+ SetAccelerator(button,_("_Start single-player game"),button,
+ "clicked",accel_group);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(StartSinglePlayer),
(gpointer)&widgets);
t@@ -1821,20 +1815,16 @@ void NewGameDialog() {
hbbox=gtk_hbutton_box_new();
button=gtk_button_new_with_label("");
- AccelKey=gtk_label_parse_uline(GTK_LABEL(GTK_BIN(button)->child),
- _("_Update"));
- gtk_widget_add_accelerator(button,"clicked",accel_group,AccelKey,0,
- GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
+ SetAccelerator(button,_("_Update"),button,
+ "clicked",accel_group);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(UpdateMetaServerList),
(gpointer)&widgets);
gtk_box_pack_start(GTK_BOX(hbbox),button,TRUE,TRUE,0);
button=gtk_button_new_with_label("");
- AccelKey=gtk_label_parse_uline(GTK_LABEL(GTK_BIN(button)->child),
- _("_Connect"));
- gtk_widget_add_accelerator(button,"clicked",accel_group,AccelKey,0,
- GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
+ SetAccelerator(button,_("_Connect"),button,
+ "clicked",accel_group);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(MetaServerConnect),
(gpointer)&widgets);
t@@ -1877,7 +1867,6 @@ gint MessageBox(GtkWidget *parent,const gchar *Title,
GtkAccelGroup *accel_group;
gint i;
static gint retval;
- guint AccelKey;
gchar *ButtonData[MB_MAX] = { N_("OK"), N_("Cancel"),
N_("_Yes"), N_("_No") };
t@@ -1908,11 +1897,8 @@ gint MessageBox(GtkWidget *parent,const gchar *Title,
for (i=0;i<MB_MAX;i++) {
if (Options & (1<<i)) {
button=gtk_button_new_with_label("");
- AccelKey=gtk_label_parse_uline(GTK_LABEL(GTK_BIN(button)->child),
- _(ButtonData[i]));
- if (AccelKey) gtk_widget_add_accelerator(button,"clicked",
- accel_group,AccelKey,0,
- GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
+ SetAccelerator(button,_(ButtonData[i]),button,
+ "clicked",accel_group);
gtk_object_set_data(GTK_OBJECT(button),"retval",&retval);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(MessageBoxCallback),
t@@ -2359,7 +2345,6 @@ void CreateInventory(GtkWidget *hbox,gchar *Objects,GtkAccelGroup *accel_group,
struct InventoryWidgets *widgets,GtkSignalFunc CallBack) {
GtkWidget *scrollwin,*clist,*vbbox,*frame[2],*button[3];
gint i,mini;
- guint accel_key;
GString *text;
gchar *titles[2][2];
gchar *button_text[3];
t@@ -2407,10 +2392,8 @@ void CreateInventory(GtkWidget *hbox,gchar *Objects,GtkAccelGroup *accel_group,
for (i=0;i<3;i++) {
button[i]=gtk_button_new_with_label("");
- accel_key=gtk_label_parse_uline(GTK_LABEL(GTK_BIN(button[i])->child),
- button_text[i]);
- gtk_widget_add_accelerator(button[i],"clicked",accel_group,accel_key,0,
- GTK_ACCEL_VISIBLE | GTK_ACCEL_SIGNAL_VISIBLE);
+ SetAccelerator(button[i],_(button_text[i]),button[i],
+ "clicked",accel_group);
if (CallBack) gtk_signal_connect(GTK_OBJECT(button[i]),"clicked",
GTK_SIGNAL_FUNC(CallBack),
button_type[i]);