         }
       }
     }
-    signal(eventType, ev: ev)
+    if !se._stopPropagation {
+      signal(eventType, ev: &se)
+    }
+    if eventType == .MouseDown && !se._preventDefault {
+      focus(nil)
+    }
   }
 
   // Returns the id that can be used for removing the handler.

    return eventStore.signal(eventType, ev: ev)
  }

  public func focus(e: FocusElement) {
    if let o = _focusElement {
      if o !== e {
        o._onBlur(SEvent.new(SDL_Event()))
        e._onFocus(SEvent.new(SDL_Event()))
      }
    } else {
      _focusElement = e
      e._onFocus(SEvent.new(SDL_Event()))
    }
  }



  func dispatchCommonPointer(eventType: SEventType, x: Int32, y: Int32,
      ev: SDL_Event) {
    var se = SEvent.new(ev)
    if let dc = textGrid.pointToCell(x, y: y) {
      var a = [Element]()
      if mainDiv.pointToList(dc.x, y: dc.y, list: &a) {
        var i = a.count - 1
        while i >= 0 {
          let e = a[i]
          if e.hasListenerFor(eventType) {
