call gc before focus/blur to remove elements from focus stack that are no longer around

This commit is contained in:
j 2012-01-21 11:30:16 +00:00
parent 05b4d0cf82
commit e51c4aa847
2 changed files with 9 additions and 4 deletions

View file

@ -19,6 +19,7 @@ Ox.Focus = (function() {
(id) -> <u> blur element by id (id) -> <u> blur element by id
@*/ @*/
blur: function(id) { blur: function(id) {
Ox.GarbageCollection();
var index = stack.indexOf(id); var index = stack.indexOf(id);
if (index > -1 && index == stack.length - 1) { if (index > -1 && index == stack.length - 1) {
stack.length == 1 stack.length == 1
@ -40,6 +41,7 @@ Ox.Focus = (function() {
(id) -> <u> focus element by id (id) -> <u> focus element by id
@*/ @*/
focus: function(id) { focus: function(id) {
Ox.GarbageCollection();
var index = stack.indexOf(id); var index = stack.indexOf(id);
if (index == -1 || index < stack.length - 1) { if (index == -1 || index < stack.length - 1) {
index > -1 && stack.splice(index, 1); index > -1 && stack.splice(index, 1);
@ -47,7 +49,7 @@ Ox.Focus = (function() {
if (stack.length > 1) { if (stack.length > 1) {
Ox.UI.elements[stack[stack.length - 2]] Ox.UI.elements[stack[stack.length - 2]]
.removeClass('OxFocus') .removeClass('OxFocus')
.triggerEvent('losefocus') .triggerEvent('losefocus');
} }
Ox.UI.elements[id] Ox.UI.elements[id]
.addClass('OxFocus') .addClass('OxFocus')

View file

@ -3,10 +3,11 @@
Ox.GarbageCollection = (function() { Ox.GarbageCollection = (function() {
var that = function() { var that = function() {
collect(); collect();
}; },
timeout;
setInterval(collect, 60000); collect();
function collect() { function collect() {
var len = Ox.len(Ox.UI.elements); var len = Ox.len(Ox.UI.elements);
@ -19,6 +20,8 @@ Ox.GarbageCollection = (function() {
delete Ox.UI.elements[id]; delete Ox.UI.elements[id];
} }
}); });
timeout && clearTimeout(timeout);
timeout = setTimeout(collect, 60000);
Ox.Log('GC', len, '-->', Ox.len(Ox.UI.elements)); Ox.Log('GC', len, '-->', Ox.len(Ox.UI.elements));
} }