QDockWidget: Make floating docks respect DockWidgetMovable feature

Currently, even if DockWidgetFeature::DockWidgetMovable is unset
(i.e. moving docks to different dock areas is disabled), it is still
possible to move a dock to a different dock area after it is made
floating (i.e. the DockWidgetMovable setting is ignored). This
change prevents this unexpected/inconsistent behavior.

Fixes: QTBUG-71703
Change-Id: Iaecc293a5ba12dd5b53f5f0bd0cfe77ae54ab393
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
bb10
Nick D'Ademo 2018-12-07 15:12:07 +08:00
parent e6d1071dd3
commit 3364be7859
1 changed files with 4 additions and 2 deletions

View File

@ -922,7 +922,8 @@ bool QDockWidgetPrivate::mousePressEvent(QMouseEvent *event)
initDrag(event->pos(), false);
if (state)
state->ctrlDrag = hasFeature(this, QDockWidget::DockWidgetFloatable) && event->modifiers() & Qt::ControlModifier;
state->ctrlDrag = (hasFeature(this, QDockWidget::DockWidgetFloatable) && event->modifiers() & Qt::ControlModifier) ||
(!hasFeature(this, QDockWidget::DockWidgetMovable) && q->isFloating());
return true;
}
@ -1044,7 +1045,8 @@ void QDockWidgetPrivate::nonClientAreaMouseEvent(QMouseEvent *event)
initDrag(event->pos(), true);
if (state == 0)
break;
state->ctrlDrag = event->modifiers() & Qt::ControlModifier;
state->ctrlDrag = (event->modifiers() & Qt::ControlModifier) ||
(!hasFeature(this, QDockWidget::DockWidgetMovable) && q->isFloating());
startDrag();
break;
case QEvent::NonClientAreaMouseMove: