You are correct. After I added both shift and non-shift accelerators for same key, the shift version stopped working.
Here is pure GTK example demonstrating the problem (hacked from some tutorial I found online):
/* build with: gcc file.c $(pkg-config gtk+-2.0 --cflags --libs) */
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
int main( int argc, char *argv[])
{
GtkWidget *window, *vbox, *menubar, *filemenu, *file, *nop, *quit;
GtkAccelGroup *accel_group = NULL;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 250, 200);
gtk_window_set_title(GTK_WINDOW(window), "menu");
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);
menubar = gtk_menu_bar_new();
filemenu = gtk_menu_new();
accel_group = gtk_accel_group_new();
gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
file = gtk_menu_item_new_with_mnemonic("_File");
nop = gtk_image_menu_item_new_from_stock(GTK_STOCK_NEW, NULL);
quit = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, NULL);
gtk_widget_add_accelerator(nop, "activate", accel_group,
GDK_F3, 0, GTK_ACCEL_VISIBLE);
gtk_widget_add_accelerator(quit, "activate", accel_group,
GDK_F3, GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(file), filemenu);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), nop);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), quit);
gtk_menu_shell_append(GTK_MENU_SHELL(menubar), file);
gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 3);
g_signal_connect_swapped(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(G_OBJECT(quit), "activate",
G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
Shift-F3 should quit the application, but it doesn't because of existing F3 accelerator. If you change it to Shift-F4, or remove the F3 accelerator, it works.