summaryrefslogtreecommitdiffstats
path: root/src/widgets/widgets
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-04-12 21:59:27 +0200
committerLars Knoll <lars.knoll@qt.io>2018-04-12 22:00:35 +0200
commit4f158ccee56827af2a0d7b0a043c5e6cdc3bad5b (patch)
tree068d0e99a0100f64364f6490d5c1e39c34ffc2aa /src/widgets/widgets
parent5c63e6fd7541609c3fadb694c071b42e93b7acf5 (diff)
parent9c4c136bc9f29bab1cc9684dfced55a92a8bbe96 (diff)
Merge remote-tracking branch 'origin/5.11' into dev
Diffstat (limited to 'src/widgets/widgets')
-rw-r--r--src/widgets/widgets/qmainwindowlayout.cpp18
-rw-r--r--src/widgets/widgets/qmainwindowlayout_p.h4
2 files changed, 21 insertions, 1 deletions
diff --git a/src/widgets/widgets/qmainwindowlayout.cpp b/src/widgets/widgets/qmainwindowlayout.cpp
index 9cf2e7de1f..d4ce0ffa4c 100644
--- a/src/widgets/widgets/qmainwindowlayout.cpp
+++ b/src/widgets/widgets/qmainwindowlayout.cpp
@@ -317,6 +317,9 @@ bool QDockWidgetGroupWindow::event(QEvent *e)
// We might need to show the widget again
destroyOrHideIfEmpty();
break;
+ case QEvent::Resize:
+ updateCurrentGapRect();
+ emit resized();
default:
break;
}
@@ -467,6 +470,8 @@ void QDockWidgetGroupWindow::adjustFlags()
}
if (oldFlags != flags) {
+ if (!windowHandle())
+ create(); // The desired geometry is forgotten if we call setWindowFlags before having a window
setWindowFlags(flags);
const bool gainedNativeDecos = (oldFlags & Qt::FramelessWindowHint) && !(flags & Qt::FramelessWindowHint);
const bool lostNativeDecos = !(oldFlags & Qt::FramelessWindowHint) && (flags & Qt::FramelessWindowHint);
@@ -546,12 +551,18 @@ bool QDockWidgetGroupWindow::hover(QLayoutItem *widgetItem, const QPoint &mouseP
currentGapPos = newGapPos;
newState.insertGap(currentGapPos, widgetItem);
newState.fitItems();
- currentGapRect = newState.info(currentGapPos)->itemRect(currentGapPos.last(), true);
*layoutInfo() = std::move(newState);
+ updateCurrentGapRect();
layoutInfo()->apply(opts & QMainWindow::AnimatedDocks);
return true;
}
+void QDockWidgetGroupWindow::updateCurrentGapRect()
+{
+ if (!currentGapPos.isEmpty())
+ currentGapRect = layoutInfo()->info(currentGapPos)->itemRect(currentGapPos.last(), true);
+}
+
/*
Remove the gap that was created by hover()
*/
@@ -1977,6 +1988,8 @@ void QMainWindowLayout::setCurrentHoveredFloat(QDockWidgetGroupWindow *w)
if (currentHoveredFloat) {
disconnect(currentHoveredFloat.data(), &QObject::destroyed,
this, &QMainWindowLayout::updateGapIndicator);
+ disconnect(currentHoveredFloat.data(), &QDockWidgetGroupWindow::resized,
+ this, &QMainWindowLayout::updateGapIndicator);
if (currentHoveredFloat)
currentHoveredFloat->restore();
} else if (w) {
@@ -1988,6 +2001,8 @@ void QMainWindowLayout::setCurrentHoveredFloat(QDockWidgetGroupWindow *w)
if (w) {
connect(w, &QObject::destroyed,
this, &QMainWindowLayout::updateGapIndicator, Qt::UniqueConnection);
+ connect(w, &QDockWidgetGroupWindow::resized,
+ this, &QMainWindowLayout::updateGapIndicator, Qt::UniqueConnection);
}
updateGapIndicator();
@@ -2559,6 +2574,7 @@ void QMainWindowLayout::hover(QLayoutItem *widgetItem, const QPoint &mousePos)
dropTo->show();
dropTo->d_func()->plug(QRect());
w = floatingTabs;
+ widget->raise(); // raise, as our newly created drop target is now on top
}
Q_ASSERT(qobject_cast<QDockWidgetGroupWindow *>(w));
auto group = static_cast<QDockWidgetGroupWindow *>(w);
diff --git a/src/widgets/widgets/qmainwindowlayout_p.h b/src/widgets/widgets/qmainwindowlayout_p.h
index 168d4444b9..53e045aaae 100644
--- a/src/widgets/widgets/qmainwindowlayout_p.h
+++ b/src/widgets/widgets/qmainwindowlayout_p.h
@@ -338,12 +338,16 @@ public:
bool hasNativeDecos() const;
bool hover(QLayoutItem *widgetItem, const QPoint &mousePos);
+ void updateCurrentGapRect();
void restore();
void apply();
QRect currentGapRect;
QList<int> currentGapPos;
+signals:
+ void resized();
+
protected:
bool event(QEvent *) override;
void paintEvent(QPaintEvent*) override;