Skip to content

Instantly share code, notes, and snippets.

@jviereck
Created March 11, 2010 20:17
Show Gist options
  • Save jviereck/329600 to your computer and use it in GitHub Desktop.
Save jviereck/329600 to your computer and use it in GitHub Desktop.
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Bespin.
*
* The Initial Developer of the Original Code is
* Mozilla.
* Portions created by the Initial Developer are Copyright (C) 2009
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Bespin Team ([email protected])
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
var SC = require('sproutcore/runtime').SC;
exports.ReFocus = {
_rf_view: null,
setup: function() {
SC.RootResponder.responder.addObserver('hasFocus', this, function() {
if (SC.RootResponder.responder.get('hasFocus') &&
!SC.none(exports.ReFocus._rf_view)) {
if (SC.none(SC.RootResponder.responder.keyPane.firstResponder)) {
console.log(SC.RootResponder.responder.keyPane);
exports.ReFocus._rf_view.becomeFirstResponder();
}
}
});
},
willLoseKeyResponderTo: function(responder) {
arguments.callee.base.apply(this, arguments);
exports.ReFocus._rf_view = null;
// If the responder is null then the focus is lost to an non-SC-component.
// This can happen, because
// 1) another DOM element on the page
// OR
// 2) the entire page/window lost the focus
//
if (SC.none(responder)) {
setTimeout(function() {
if (!SC.RootResponder.responder.hasFocus) {
exports.ReFocus._rf_view = this;
}
}.bind(this), 0);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment