bool QDockWidgetPrivate::mouseMoveEvent(QMouseEvent *event) { bool ret = false; #if !defined(QT_NO_MAINWINDOW) Q_Q(QDockWidget); if (!state) return ret; QDockWidgetLayout *dwlayout = qobject_cast<QDockWidgetLayout*>(layout); QMainWindowLayout *mwlayout = qobject_cast<QMainWindowLayout*>(q->parentWidget()->layout()); if (!dwlayout->nativeWindowDeco()) { if (!state->dragging && mwlayout->pluggingWidget == 0 && (event->pos() - state->pressPos).manhattanLength() > QApplication::startDragDistance()) { startDrag(); #ifdef Q_OS_WIN grabMouseWhileInWindow(); #else q->grabMouse(); #endif ret = true; } } if (state->dragging && !state->nca) { QPoint pos = event->globalPos() - state->pressPos; q->move(pos); if (!state->ctrlDrag) mwlayout->hover(state->widgetItem, event->globalPos()); ret = true; } #endif // !defined(QT_NO_MAINWINDOW) return ret; }
bool QToolBarPrivate::mouseMoveEvent(QMouseEvent *event) { Q_Q(QToolBar); if (!state) { #ifdef Q_WS_MAC if (!macWindowDragging) return false; QWidget *w = q->window(); const QPoint delta = event->pos() - macWindowDragPressPosition; w->move(w->pos() + delta); return true; #endif return false; } QMainWindow *win = qobject_cast<QMainWindow*>(parent); if (win == 0) return true; QMainWindowLayout *layout = qobject_cast<QMainWindowLayout*>(win->layout()); Q_ASSERT(layout != 0); if (layout->pluggingWidget == 0 && (event->pos() - state->pressPos).manhattanLength() > QApplication::startDragDistance()) { const bool wasDragging = state->dragging; const bool moving = !q->isWindow() && (orientation == Qt::Vertical ? event->x() >= 0 && event->x() < q->width() : event->y() >= 0 && event->y() < q->height()); startDrag(moving); if (!moving && !wasDragging) { #ifdef Q_OS_WIN grabMouseWhileInWindow(); #else q->grabMouse(); #endif } } if (state->dragging) { QPoint pos = event->globalPos(); // if we are right-to-left, we move so as to keep the right edge the same distance // from the mouse if (q->isLeftToRight()) pos -= state->pressPos; else pos += QPoint(state->pressPos.x() - q->width(), -state->pressPos.y()); q->move(pos); layout->hover(state->widgetItem, event->globalPos()); } else if (state->moving) { const QPoint rtl(q->width() - state->pressPos.x(), state->pressPos.y()); //for RTL const QPoint globalPressPos = q->mapToGlobal(q->isRightToLeft() ? rtl : state->pressPos); int pos = 0; QPoint delta = event->globalPos() - globalPressPos; if (orientation == Qt::Vertical) { pos = q->y() + delta.y(); } else { if (q->isRightToLeft()) { pos = win->width() - q->width() - q->x() - delta.x(); } else { pos = q->x() + delta.x(); } } layout->moveToolBar(q, pos); } return true; }