private void setCursor(int i_cursorId) {

    // save current cursor
    Control ctrl = getCurrentViewer().getControl();
    while (ctrl != null) {
      if (ctrl.getCursor() != null) {
        m_pushedCursor = ctrl.getCursor();
        break;
      }

      ctrl = ctrl.getParent();
    }

    m_pushedCursor = getCurrentViewer().getControl().getDisplay().getSystemCursor(SWT.CURSOR_ARROW);

    // hide cursor and save position
    ctrl = getCurrentViewer().getControl();
    Display display = ctrl.getDisplay();

    Cursor cursor = display.getSystemCursor(i_cursorId);
    ctrl.setCursor(cursor);
  }