summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/designer/src/components/formeditor/formwindow.h11
-rw-r--r--src/designer/src/components/formeditor/formwindowmanager.cpp8
-rw-r--r--src/designer/src/components/formeditor/widgetselection.cpp13
3 files changed, 32 insertions, 0 deletions
diff --git a/src/designer/src/components/formeditor/formwindow.h b/src/designer/src/components/formeditor/formwindow.h
index d2502f4a7..86027a625 100644
--- a/src/designer/src/components/formeditor/formwindow.h
+++ b/src/designer/src/components/formeditor/formwindow.h
@@ -70,6 +70,13 @@ class QT_FORMEDITOR_EXPORT FormWindow: public FormWindowBase
Q_OBJECT
public:
+ enum HandleOperation
+ {
+ NoHandleOperation,
+ ResizeHandleOperation,
+ ChangeLayoutSpanHandleOperation
+ };
+
explicit FormWindow(FormEditor *core, QWidget *parent = 0, Qt::WindowFlags flags = 0);
virtual ~FormWindow();
@@ -199,6 +206,9 @@ public:
bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
+ HandleOperation handleOperation() const { return m_handleOperation; }
+ void setHandleOperation(HandleOperation o) { m_handleOperation = o; }
+
signals:
void contextMenuRequested(QMenu *menu, QWidget *widget);
@@ -354,6 +364,7 @@ private:
QStringList m_includeHints;
QPoint m_contextMenuPosition;
+ HandleOperation m_handleOperation = NoHandleOperation;
private:
friend class WidgetEditorTool;
diff --git a/src/designer/src/components/formeditor/formwindowmanager.cpp b/src/designer/src/components/formeditor/formwindowmanager.cpp
index 498160f8a..1650e1450 100644
--- a/src/designer/src/components/formeditor/formwindowmanager.cpp
+++ b/src/designer/src/components/formeditor/formwindowmanager.cpp
@@ -209,6 +209,14 @@ bool FormWindowManager::eventFilter(QObject *o, QEvent *e)
return true;
}
switch (eventType) {
+ case QEvent::LayoutRequest:
+ // QTBUG-61439: Suppress layout request while changing the QGridLayout
+ // span of a QTabWidget, which sends LayoutRequest in resizeEvent().
+ if (fw->handleOperation() == FormWindow::ChangeLayoutSpanHandleOperation) {
+ e->ignore();
+ return true;
+ }
+ break;
case QEvent::WindowActivate: {
if (fw->parentWidget()->isWindow() && fw->isMainContainer(managedWidget) && activeFormWindow() != fw) {
diff --git a/src/designer/src/components/formeditor/widgetselection.cpp b/src/designer/src/components/formeditor/widgetselection.cpp
index eda77e213..fcb54de92 100644
--- a/src/designer/src/components/formeditor/widgetselection.cpp
+++ b/src/designer/src/components/formeditor/widgetselection.cpp
@@ -178,6 +178,17 @@ void WidgetHandle::mousePressEvent(QMouseEvent *e)
m_origPressPos = container->mapFromGlobal(e->globalPos());
m_geom = m_origGeom = m_widget->geometry();
+
+ switch (WidgetSelection::widgetState(m_formWindow->core(), m_widget)) {
+ case WidgetSelection::UnlaidOut:
+ case WidgetSelection::LaidOut:
+ m_formWindow->setHandleOperation(FormWindow::ResizeHandleOperation);
+ break;
+ case WidgetSelection::ManagedGridLayout:
+ case WidgetSelection::ManagedFormLayout:
+ m_formWindow->setHandleOperation(FormWindow::ChangeLayoutSpanHandleOperation);
+ break;
+ }
}
void WidgetHandle::mouseMoveEvent(QMouseEvent *e)
@@ -326,6 +337,8 @@ void WidgetHandle::mouseMoveEvent(QMouseEvent *e)
void WidgetHandle::mouseReleaseEvent(QMouseEvent *e)
{
+ m_formWindow->setHandleOperation(FormWindow::NoHandleOperation);
+
if (e->button() != Qt::LeftButton || !m_active)
return;