[3.38] Backport more viewport fixes
Backport !1831 (merged) and !1836 (merged). !1832 (merged) is apparently not needed, as it fixed a regression from the graphene port (see !1832 (comment 1088083))
Backport !1831 (merged) and !1836 (merged). !1832 (merged) is apparently not needed, as it fixed a regression from the graphene port (see !1832 (comment 1088083))