Ext.define('Ext.rtl.grid.ColumnLayout', { override: 'Ext.grid.ColumnLayout', beginLayout: function(ownerContext) { var me = this, owner = me.owner, view = me.grid.view; me.callParent(arguments); if (!owner.isColumn && view.scrollFlags.y && view.getInherited().rtl) { // Chrome has an RTL bug where overflow only caused by the imposition of the vertical scrollbar does NOT // cause extra left/right scrolling. If that bug is present, this extra space is not needed in RTL. // https://code.google.com/p/chromium/issues/detail?id=179332 // TODO: Remove the Ext.supports.rtlVertScrollbarOnRight test and the test for it below when all supported Chrome versions are fixed. // // Chrome has another bug, the xOriginBug: http://code.google.com/p/chromium/issues/detail?id=174656 // This means that the table element has to be positioned right:-15px in RTL mode // This triggers the right padding to be added in calculateParallel below which extends the contentWidth. // We compensate for this here by reducing the width by the same amount. // // This extra space is also not needed if the scrollbar is on the right. In this case, the extra space // comes from padding added to the ColumnLayout in the calculateParallel implementation below. // // So when these conditions are present and the grid is in RTL mode, the scrollbarAdjustment value for this layout is zero. if (view.bufferedRenderer && Ext.supports.xOriginBug) { me.scrollbarAdjustment = -me.scrollbarWidth; } else if (Ext.supports.rtlVertScrollbarOverflowBug || Ext.supports.rtlVertScrollbarOnRight) { me.scrollbarAdjustment = 0; } } }, calculateParallel: function(ownerContext, names, plan) { var me = this, owner = me.owner, view = me.grid.view, // Only adjust the layout padding if this ColumnLayout is for a a top lever HeaderContainer. rtlVertScrollbarOnRight = !owner.isColumn && Ext.supports.rtlVertScrollbarOnRight && owner.ownerCt.view.getInherited().rtl; // https://sencha.jira.com/browse/EXTJSIV-11245 // Safari keeps scrollbar on the right even in RTL mode, so any element // which must stay in horizontal sync (like the HeaderContainer) needs the first item to have some "before" margin. // The layout system caches the margin because it is assumed to be static, so we have to clear this cache. if (rtlVertScrollbarOnRight || (view.bufferedRenderer && Ext.supports.xOriginBug)) { me.padding.right = me.scrollbarWidth; } return me.callParent(arguments); }});