diff --git a/lib/DirectEditing.js b/lib/DirectEditing.js
index <HASH>..<HASH> 100644
--- a/lib/DirectEditing.js
+++ b/lib/DirectEditing.js
@@ -13,6 +13,8 @@ var TextBox = require('./TextBox');
  */
 function DirectEditing(eventBus, canvas) {
 
+  this._eventBus = eventBus;
+
   this._providers = [];
   this._textbox = new TextBox({
     container: canvas.getContainer(),
@@ -55,12 +57,20 @@ DirectEditing.prototype.cancel = function() {
     return;
   }
 
+  this._fire('cancel');
   this.close();
 };
 
 
+DirectEditing.prototype._fire = function(event) {
+  this._eventBus.fire('directEditing.' + event, { active: this._active });
+};
+
 DirectEditing.prototype.close = function() {
   this._textbox.destroy();
+
+  this._fire('deactivate');
+
   this._active = null;
 };
 
@@ -79,6 +89,8 @@ DirectEditing.prototype.complete = function() {
     active.provider.update(active.element, text, active.context.text);
   }
 
+  this._fire('complete');
+
   this.close();
 };
 
@@ -137,6 +149,8 @@ DirectEditing.prototype.activate = function(element) {
       context: context,
       provider: provider
     };
+
+    this._fire('activate');
   }
 
   return !!context;
feat(plug-in): fire events during editing operation