Finally after hours of investigation, found a solution(work-around). although it is a little nasty but it works!
Ext.override(Ext.LoadMask, {
msg: "Loading...",
timer: null,
initComponent: function () {
this.callParent(arguments);
this.timer = null;
this.isInShowProcess = false;
this.delay = 600; //in milliseconds
},
listeners: {
beforeshow: function (animateTarget, callback, scope) {
loadMask = this;
result = this.isInShowProcess != false;
if (!this.timer)
this.timer =
setTimeout(function () {
loadMask.isInShowProcess = true;
clearTimeout(loadMask.timer);
loadMask.timer = null;
loadMask.show(animateTarget, callback, scope);
loadMask.isInShowProcess = false;
}, this.delay);
return result;
},
beforehide: function (loadMask, eOpts) {
return loadMask.hideMask(loadMask, eOpts);
},
beforedestroy: function (loadMask, eOpts) {
return loadMask.hideMask(loadMask, eOpts);
}
},
hideMask: function (loadMask, eOpts) {
if (loadMask.timer) {//not shown yet
clearTimeout(loadMask.timer);
loadMask.timer = null;
}
return true;
}
});