forked from qt-creator/qt-creator
Fix DockWidget
DockWidget keeps a pointer to the initial inner widget which might change/delete.
Ex:
QWidget *w = new QWidget;
w->setWindowTitle("title");
QDockWidget *dock = addDockForWidget(w);
//...
dock->setWidget(0); // we want to set another widget
delete w;
Change-Id: I04e3d1075787092f3789f32442990aa76848d1b7
Reviewed-by: Daniel Teske <daniel.teske@theqtcompany.com>
Reviewed-by: hjk <hjk@theqtcompany.com>
Reviewed-by: BogDan Vatra <bogdan@kde.org>
This commit is contained in:
committed by
BogDan Vatra
parent
0171f5f6b7
commit
6d3f81b095
@@ -85,7 +85,6 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QPoint m_startPos;
|
QPoint m_startPos;
|
||||||
QWidget *m_inner;
|
|
||||||
TitleBarWidget *m_titleBar;
|
TitleBarWidget *m_titleBar;
|
||||||
QTimer m_timer;
|
QTimer m_timer;
|
||||||
};
|
};
|
||||||
@@ -245,7 +244,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
DockWidget::DockWidget(QWidget *inner, FancyMainWindow *parent)
|
DockWidget::DockWidget(QWidget *inner, FancyMainWindow *parent)
|
||||||
: QDockWidget(parent), q(parent), m_inner(inner)
|
: QDockWidget(parent), q(parent)
|
||||||
{
|
{
|
||||||
setWidget(inner);
|
setWidget(inner);
|
||||||
setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable);
|
setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable);
|
||||||
@@ -288,7 +287,7 @@ bool DockWidget::eventFilter(QObject *, QEvent *event)
|
|||||||
int y = me->pos().y();
|
int y = me->pos().y();
|
||||||
int x = me->pos().x();
|
int x = me->pos().x();
|
||||||
int h = m_titleBar->m_floatButton->height();
|
int h = m_titleBar->m_floatButton->height();
|
||||||
if (!isFloating() && 0 <= x && x < m_inner->width() && 0 <= y && y <= h) {
|
if (!isFloating() && widget() && 0 <= x && x < widget()->width() && 0 <= y && y <= h) {
|
||||||
m_timer.start();
|
m_timer.start();
|
||||||
m_startPos = mapToGlobal(me->pos());
|
m_startPos = mapToGlobal(me->pos());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user