Attach key handler to map target

This commit is contained in:
Éric Lemoine
2013-09-12 15:23:02 +02:00
parent 4abdac2abf
commit f863ee9e37

View File

@@ -240,11 +240,14 @@ ol.Map = function(options) {
this.handleMapBrowserEvent, false, this); this.handleMapBrowserEvent, false, this);
this.registerDisposable(mapBrowserEventHandler); this.registerDisposable(mapBrowserEventHandler);
// FIXME we probably shouldn't listen on document... /**
var keyHandler = new goog.events.KeyHandler(goog.global.document); * @private
goog.events.listen(keyHandler, goog.events.KeyHandler.EventType.KEY, * @type {goog.events.KeyHandler}
*/
this.keyHandler_ = new goog.events.KeyHandler();
goog.events.listen(this.keyHandler_, goog.events.KeyHandler.EventType.KEY,
this.handleBrowserEvent, false, this); this.handleBrowserEvent, false, this);
this.registerDisposable(keyHandler); this.registerDisposable(this.keyHandler_);
var mouseWheelHandler = new goog.events.MouseWheelHandler(this.viewport_); var mouseWheelHandler = new goog.events.MouseWheelHandler(this.viewport_);
goog.events.listen(mouseWheelHandler, goog.events.listen(mouseWheelHandler,
@@ -745,11 +748,19 @@ ol.Map.prototype.handleTargetChanged_ = function() {
var targetElement = goog.isDef(target) ? var targetElement = goog.isDef(target) ?
goog.dom.getElement(target) : null; goog.dom.getElement(target) : null;
this.keyHandler_.detach();
if (goog.isNull(targetElement)) { if (goog.isNull(targetElement)) {
goog.dom.removeNode(this.viewport_); goog.dom.removeNode(this.viewport_);
} else { } else {
goog.dom.appendChild(targetElement, this.viewport_); goog.dom.appendChild(targetElement, this.viewport_);
// The key handler is attached to the user-provided target. So the key
// handler will only trigger events when the target element is focused
// (requiring that the target element has a tabindex attribute).
this.keyHandler_.attach(targetElement);
} }
this.updateSize(); this.updateSize();
// updateSize calls setSize, so no need to call this.render // updateSize calls setSize, so no need to call this.render
// ourselves here. // ourselves here.