aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2006-05-20 12:01:55 +0000
committerSimon Tatham <anakin@pobox.com>2006-05-20 12:01:55 +0000
commit077aa510c78f3273bd0d4ca4f1ca14780822ebf9 (patch)
tree9d3ccdb29ff85bbb93c0662a974b3a9152719a1b
parentfd90d1a7c8224e673361d8b23aadfa01829de77c (diff)
downloadpuzzles-077aa510c78f3273bd0d4ca4f1ca14780822ebf9.zip
puzzles-077aa510c78f3273bd0d4ca4f1ca14780822ebf9.tar.gz
puzzles-077aa510c78f3273bd0d4ca4f1ca14780822ebf9.tar.bz2
puzzles-077aa510c78f3273bd0d4ca4f1ca14780822ebf9.tar.xz
Ben Hutchings's patch to add display of key accelerators in the Game
menu. [originally from svn r6711]
-rw-r--r--gtk.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/gtk.c b/gtk.c
index 07f2535..c801b80 100644
--- a/gtk.c
+++ b/gtk.c
@@ -96,6 +96,7 @@ struct font {
*/
struct frontend {
GtkWidget *window;
+ GtkAccelGroup *accelgroup;
GtkWidget *area;
GtkWidget *statusbar;
guint statusctx;
@@ -1404,11 +1405,29 @@ static GtkWidget *add_menu_item_with_key(frontend *fe, GtkContainer *cont,
char *text, int key)
{
GtkWidget *menuitem = gtk_menu_item_new_with_label(text);
+ int keyqual;
gtk_container_add(cont, menuitem);
gtk_object_set_data(GTK_OBJECT(menuitem), "user-data",
GINT_TO_POINTER(key));
gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
GTK_SIGNAL_FUNC(menu_key_event), fe);
+ switch (key & ~0x1F) {
+ case 0x00:
+ key += 0x60;
+ keyqual = GDK_CONTROL_MASK;
+ break;
+ case 0x40:
+ key += 0x20;
+ keyqual = GDK_SHIFT_MASK;
+ break;
+ default:
+ keyqual = 0;
+ break;
+ }
+ gtk_widget_add_accelerator(menuitem,
+ "activate", fe->accelgroup,
+ key, keyqual,
+ GTK_ACCEL_VISIBLE);
gtk_widget_show(menuitem);
return menuitem;
}
@@ -1483,6 +1502,9 @@ static frontend *new_window(char *arg, char **error)
gtk_container_add(GTK_CONTAINER(fe->window), GTK_WIDGET(vbox));
gtk_widget_show(GTK_WIDGET(vbox));
+ fe->accelgroup = gtk_accel_group_new();
+ gtk_window_add_accel_group(GTK_WINDOW(fe->window), fe->accelgroup);
+
menubar = gtk_menu_bar_new();
gtk_box_pack_start(vbox, menubar, FALSE, FALSE, 0);
gtk_widget_show(menubar);
@@ -1567,7 +1589,7 @@ static frontend *new_window(char *arg, char **error)
gtk_widget_show(menuitem);
add_menu_separator(GTK_CONTAINER(menu));
add_menu_item_with_key(fe, GTK_CONTAINER(menu), "Undo", 'u');
- add_menu_item_with_key(fe, GTK_CONTAINER(menu), "Redo", '\x12');
+ add_menu_item_with_key(fe, GTK_CONTAINER(menu), "Redo", 'r');
if (thegame.can_format_as_text) {
add_menu_separator(GTK_CONTAINER(menu));
menuitem = gtk_menu_item_new_with_label("Copy");