       targetPane?.handleChange? change, @rtm
 
 
+  ###*
+   * @param {Object} context
+  ###
+  handleMoveTabChanges: (context) ->
+
+    originTabView = @getTabViewByIDEViewHash context.originIDEViewHash
+    targetTabView = @getTabViewByIDEViewHash context.targetIDEViewHash
+
+    return  if not originTabView or not targetTabView
+
+    @forEachSubViewInIDEViews_ context.paneType, (p) =>
+
+      if p.hash is context.paneHash
+
+        unless @checkPaneInTabView originTabView, context.paneHash
+          originTabView = p.parent.parent # Reach the `IDEApplicationTabView`
+
+        originTabView.activePane = null
+        { pane } = originTabView.removePane p.parent, yes, yes
+
+        originTabView.showPaneByIndex 0  if originTabView.panes.length
+
+        kd.utils.defer =>
+          targetTabView.addPane pane
+          @setActiveTabView targetTabView
+          @doResize()
+
+
+
+  ###*
+   * @param {Object} change
+   * @param {Function=} callback
+  ###
+  handleSplitViewChanges: (change, callback = kd.noop) ->
+
+    tabView = @getTabViewByIDEViewHash change.context.ideViewHash
+    return  unless tabView
+
+    @setActiveTabView tabView
+    callback()
+
+
+  ###*
+   * `pane` there in `tabView` really?
+   *
+   * @param {IDEApplicationTabView} tabView
+   * @param {KDTabPaneView} hash
+   * @return {boolean}
+  ###
+  checkPaneInTabView: (tabView, hash) ->
+
+    return  unless tabView.panes.length
+
+    check = tabView.panes.filter (p) -> p.hash is hash
+
+    return check.length > 0
+
+
   getPaneByChange: (change) ->
 
     return unless change.context

    @setActiveTabView targetTabView
    @doResize()


  runOnboarding: ->



      if type is 'NewPaneCreated'
        @createPaneFromChange change

      else if type is 'NewSplitViewCreated'
        @handleSplitViewChanges change, =>
          @splitTabView
            type            : context.direction
            newIDEViewHash  : context.newIDEViewHash
            quite           : yes

      else if type is 'SplitViewWasMerged'
        @handleSplitViewChanges change, =>
          @mergeSplitView yes

      else if type is 'IDETabWasMoved'
        @handleMoveTabChanges context

      else if type in ['TabChanged', 'PaneRemoved', 'TerminalRenamed']
        paneView = targetPane?.parent
