diff --git a/area.js b/area.js
index 70e2175..4eb284b 100644
--- a/area.js
+++ b/area.js
@@ -395,8 +395,14 @@ var DrawingArea = new Lang.Class({
},
_onStageKeyPressed: function(actor, event) {
- if (event.get_key_symbol() == Clutter.KEY_space)
+ if (event.get_key_symbol() == Clutter.KEY_Escape) {
+ if (this.helper.visible)
+ this.toggleHelp();
+ else
+ this.emit('leave-drawing-mode');
+ } else if (event.get_key_symbol() == Clutter.KEY_space) {
this.spaceKeyPressed = true;
+ }
return Clutter.EVENT_PROPAGATE;
},
@@ -409,38 +415,28 @@ var DrawingArea = new Lang.Class({
},
_onKeyPressed: function(actor, event) {
- if (this.currentElement && this.currentElement.shape == Shapes.LINE) {
- if (event.get_key_symbol() == Clutter.KEY_Return ||
- event.get_key_symbol() == Clutter.KEY_KP_Enter ||
- event.get_key_symbol() == Clutter.KEY_Control_L) {
- if (this.currentElement.points.length == 2)
- // Translators: %s is a key label
- this.emit('show-osd', Files.Icons.ARC, _("Press %s to get\na fourth control point")
- .format(Gtk.accelerator_get_label(Clutter.KEY_Return, 0)), "", -1, true);
- this.currentElement.addPoint();
- this.updatePointerCursor(true);
- this._redisplay();
- return Clutter.EVENT_STOP;
- } else {
- return Clutter.EVENT_PROPAGATE;
- }
-
+ if (this.currentElement && this.currentElement.shape == Shapes.LINE &&
+ (event.get_key_symbol() == Clutter.KEY_Return ||
+ event.get_key_symbol() == Clutter.KEY_KP_Enter ||
+ event.get_key_symbol() == Clutter.KEY_Control_L)) {
+
+ if (this.currentElement.points.length == 2)
+ // Translators: %s is a key label
+ this.emit('show-osd', Files.Icons.ARC, _("Press %s to get\na fourth control point")
+ .format(Gtk.accelerator_get_label(Clutter.KEY_Return, 0)), "", -1, true);
+ this.currentElement.addPoint();
+ this.updatePointerCursor(true);
+ this._redisplay();
+ return Clutter.EVENT_STOP;
} else if (this.currentElement &&
(this.currentElement.shape == Shapes.POLYGON || this.currentElement.shape == Shapes.POLYLINE) &&
(event.get_key_symbol() == Clutter.KEY_Return || event.get_key_symbol() == Clutter.KEY_KP_Enter)) {
+
this.currentElement.addPoint();
return Clutter.EVENT_STOP;
-
- } else if (event.get_key_symbol() == Clutter.KEY_Escape) {
- if (this.helper.visible)
- this.toggleHelp();
- else
- this.emit('leave-drawing-mode');
- return Clutter.EVENT_STOP;
-
- } else {
- return Clutter.EVENT_PROPAGATE;
}
+
+ return Clutter.EVENT_PROPAGATE;
},
_onScroll: function(actor, event) {
@@ -1186,6 +1182,21 @@ var DrawingArea = new Lang.Class({
this.toggleHelp();
if (this.textEntry && this.reactive)
this.textEntry.grab_key_focus();
+
+ if (this.reactive) {
+ this.stageKeyPressedHandler = global.stage.connect('key-press-event', this._onStageKeyPressed.bind(this));
+ this.stageKeyReleasedHandler = global.stage.connect('key-release-event', this._onStageKeyReleased.bind(this));
+ } else {
+ if (this.stageKeyPressedHandler) {
+ global.stage.disconnect(this.stageKeyPressedHandler);
+ this.stageKeyPressedHandler = null;
+ }
+ if (this.stageKeyReleasedHandler) {
+ global.stage.disconnect(this.stageKeyReleasedHandler);
+ this.stageKeyReleasedHandler = null;
+ }
+ this.spaceKeyPressed = false;
+ }
},
_onDestroy: function() {
@@ -1200,8 +1211,6 @@ var DrawingArea = new Lang.Class({
},
enterDrawingMode: function() {
- this.stageKeyPressedHandler = global.stage.connect('key-press-event', this._onStageKeyPressed.bind(this));
- this.stageKeyReleasedHandler = global.stage.connect('key-release-event', this._onStageKeyReleased.bind(this));
this.keyPressedHandler = this.connect('key-press-event', this._onKeyPressed.bind(this));
this.buttonPressedHandler = this.connect('button-press-event', this._onButtonPressed.bind(this));
this.keyboardPopupMenuHandler = this.connect('popup-menu', this._onKeyboardPopupMenu.bind(this));
@@ -1210,14 +1219,6 @@ var DrawingArea = new Lang.Class({
},
leaveDrawingMode: function(save, erase) {
- if (this.stageKeyPressedHandler) {
- global.stage.disconnect(this.stageKeyPressedHandler);
- this.stageKeyPressedHandler = null;
- }
- if (this.stageKeyReleasedHandler) {
- global.stage.disconnect(this.stageKeyReleasedHandler);
- this.stageKeyReleasedHandler = null;
- }
if (this.keyPressedHandler) {
this.disconnect(this.keyPressedHandler);
this.keyPressedHandler = null;