b4n requested changes on this pull request.
This looks great, and actually fixes some things on Linux as well, as e.g. default keybindings like <kbd><Primary>1</kbd> for custom commands didn't work before on the French layouts where `1` is <kbd><Shift>&</kbd> (so one had to use <kbd><Primary><Shift>1</kbd>). Nice! I'm not very confident, but it might also help fixing some problems we had with Russian layouts on Windows? I'm afraid I remember something a lot more complicated had to be done, though.
However, we need an upgrade path for current keybindings from *keybindings.conf*, because right now it breaks any user-defined keybinding that is affected by the change – e.g. in my case <kbd><Primary><Shift>1</kbd> (which would now be <kbd><Primary>1</kbd>), <kbd><Primary><Shift>greater</kbd> (<kbd><Primary>greater</kbd>), etc.
{
- guint state, keyval; + GdkModifierType consumed; + GdkKeymap *keymap = gdk_keymap_get_default();
ideally would use `gdk_keymap_get_for_display()`, probably on `gdk_window_get_display(ev->window)`