Here is a modified type for CTRL+ALT that works in my testing.
It is similar to the one in comment 17, but avoids blowing up the map with lots of new entries.
With this map, XkbTranslateKeyCode still translates Shift-F10 into F10 at level1, but the Shift modifier is now preserved, so GTK+ uses it when matching accelerators, and thus F10 and Shift-F10 can once again have different bindings.
type "CTRL+ALT" { Alt+Shift+ LevelThree;
map[LevelThree ] = Level3;
map[Shift+ LevelThree] = Level4;
map[Control+ Alt] = Level5;
preserve[ Shift] = Shift;
preserve[ Shift+LevelThre e] = Shift;
level_ name[Level1] = "Base";
level_ name[Level2] = "Shift";
level_ name[Level3] = "Alt Base";
level_ name[Level4] = "Shift Alt";
level_ name[Level5] = "Ctrl+Alt";
modifiers = Control+
map[None] = Level1;
map[Shift] = Level2;
};
Here is a modified type for CTRL+ALT that works in my testing.
It is similar to the one in comment 17, but avoids blowing up the map with lots of new entries.
With this map, XkbTranslateKeyCode still translates Shift-F10 into F10 at level1, but the Shift modifier is now preserved, so GTK+ uses it when matching accelerators, and thus F10 and Shift-F10 can once again have different bindings.