Ext.define('Ext.rtl.grid.ColumnLayout', { override: 'Ext.grid.ColumnLayout', determineScrollbarWidth: function (ownerContext) { var me = this, view = me.owner.grid.view; me.callParent([ ownerContext ]); if (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. // // Safari keeps the scrollbar on the right in RTL mode so the extra width comes // from padding added to the header container. // // 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 also has 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.scrollbarWidth = - Math.abs(me.scrollbarWidth); } else if (Ext.supports.rtlVertScrollbarOverflowBug || Ext.supports.rtlVertScrollbarOnRight) { me.scrollbarWidth = 0; } } }, calculateParallel: function(ownerContext, names, plan) { var me = this, owner = me.owner; if (owner.isRootHeader) { // 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 ((Ext.supports.rtlVertScrollbarOnRight && owner.ownerCt.view.getInherited().rtl) || (owner.grid.view.bufferedRenderer && Ext.supports.xOriginBug)) { me.padding.right = me.scrollbarWidth; } } return me.callParent(arguments); }});