mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 16:05:44 -07:00
Ben Hutchings's patch to add display of key accelerators in the Game
menu. [originally from svn r6711]
This commit is contained in:
24
gtk.c
24
gtk.c
@ -96,6 +96,7 @@ struct font {
|
|||||||
*/
|
*/
|
||||||
struct frontend {
|
struct frontend {
|
||||||
GtkWidget *window;
|
GtkWidget *window;
|
||||||
|
GtkAccelGroup *accelgroup;
|
||||||
GtkWidget *area;
|
GtkWidget *area;
|
||||||
GtkWidget *statusbar;
|
GtkWidget *statusbar;
|
||||||
guint statusctx;
|
guint statusctx;
|
||||||
@ -1404,11 +1405,29 @@ static GtkWidget *add_menu_item_with_key(frontend *fe, GtkContainer *cont,
|
|||||||
char *text, int key)
|
char *text, int key)
|
||||||
{
|
{
|
||||||
GtkWidget *menuitem = gtk_menu_item_new_with_label(text);
|
GtkWidget *menuitem = gtk_menu_item_new_with_label(text);
|
||||||
|
int keyqual;
|
||||||
gtk_container_add(cont, menuitem);
|
gtk_container_add(cont, menuitem);
|
||||||
gtk_object_set_data(GTK_OBJECT(menuitem), "user-data",
|
gtk_object_set_data(GTK_OBJECT(menuitem), "user-data",
|
||||||
GINT_TO_POINTER(key));
|
GINT_TO_POINTER(key));
|
||||||
gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
|
gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
|
||||||
GTK_SIGNAL_FUNC(menu_key_event), fe);
|
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);
|
gtk_widget_show(menuitem);
|
||||||
return 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_container_add(GTK_CONTAINER(fe->window), GTK_WIDGET(vbox));
|
||||||
gtk_widget_show(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();
|
menubar = gtk_menu_bar_new();
|
||||||
gtk_box_pack_start(vbox, menubar, FALSE, FALSE, 0);
|
gtk_box_pack_start(vbox, menubar, FALSE, FALSE, 0);
|
||||||
gtk_widget_show(menubar);
|
gtk_widget_show(menubar);
|
||||||
@ -1567,7 +1589,7 @@ static frontend *new_window(char *arg, char **error)
|
|||||||
gtk_widget_show(menuitem);
|
gtk_widget_show(menuitem);
|
||||||
add_menu_separator(GTK_CONTAINER(menu));
|
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), "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) {
|
if (thegame.can_format_as_text) {
|
||||||
add_menu_separator(GTK_CONTAINER(menu));
|
add_menu_separator(GTK_CONTAINER(menu));
|
||||||
menuitem = gtk_menu_item_new_with_label("Copy");
|
menuitem = gtk_menu_item_new_with_label("Copy");
|
||||||
|
Reference in New Issue
Block a user