Issue #3731 #12016 carousel keyboard rebased

As @XhmikosR said, I've rebased this branch #12052 , squashed old 3 commits, and simplified the code as @fat kindly pointed out. But since I got rebase conflicts (the docs is split into separated files), I ended up a new PR .