docs: def mouseReleaseEvent(self, event):
          """
          Overloads the mouse release event to apply the current changes.
          
          :param      event | <QEvent>
          """
          super(XGanttViewItem, self).mouseReleaseEvent(event)
          
          if not self.flags() & self.ItemIsMovable:
              return
          
          # force the x position to snap to the nearest date
          scene = self.scene()
          
          if scene:
              gantt  = scene.ganttWidget()
              curr_x = self.pos().x() + gantt.cellWidth() / 2.0
              new_x  = curr_x - curr_x % gantt.cellWidth()
              self.setPos(new_x, self.pos().y())
          
          # look for date based times
          gantt = self.scene().ganttWidget()
          
          # determine hour/minute information
          if gantt.timescale() in (gantt.Timescale.Minute,
                                   gantt.Timescale.Hour,
                                   gantt.Timescale.Day):
              dstart = self.scene().datetimeAt(self.pos().x())
              dend = self.scene().datetimeAt(self.pos().x() + self.rect().width())
              dend.addSecs(-60)
          else:
              dstart = self.scene().dateAt(self.pos().x())
              dend   = self.scene().dateAt(self.pos().x() + self.rect().width())
              dend   = dend.addDays(-1)
          
          item = self._treeItem()
          if item:
              item.viewChanged(dstart, dend)