summaryrefslogtreecommitdiffstats
path: root/src/widgets/kernel
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2014-11-27 18:28:12 +0100
committerFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2014-11-27 18:28:12 +0100
commitce6990c3e742e0833df0561246554cf07a888efb (patch)
tree412380582040f5bb314eb90ae029b41a883aa439 /src/widgets/kernel
parent09e674849a40f5eb7e9f95fd2a952c621aec86d1 (diff)
parentfa9bde7d3a12ede956339c570f7b32f95d231e57 (diff)
Merge remote-tracking branch 'origin/5.4' into dev
Diffstat (limited to 'src/widgets/kernel')
-rw-r--r--src/widgets/kernel/qgesturemanager.cpp2
-rw-r--r--src/widgets/kernel/qwidget.cpp4
-rw-r--r--src/widgets/kernel/qwidgetwindow.cpp31
3 files changed, 36 insertions, 1 deletions
diff --git a/src/widgets/kernel/qgesturemanager.cpp b/src/widgets/kernel/qgesturemanager.cpp
index c9af3062d3..f0aceaacf7 100644
--- a/src/widgets/kernel/qgesturemanager.cpp
+++ b/src/widgets/kernel/qgesturemanager.cpp
@@ -63,6 +63,7 @@
QT_BEGIN_NAMESPACE
+#if !defined(Q_OS_OSX)
static inline int panTouchPoints()
{
// Override by environment variable for testing.
@@ -80,6 +81,7 @@ static inline int panTouchPoints()
// correctly.
return 2;
}
+#endif
QGestureManager::QGestureManager(QObject *parent)
: QObject(parent), state(NotGesture), m_lastCustomGestureId(Qt::CustomGesture)
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index ed59e40bb6..143293b589 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -9406,9 +9406,11 @@ void QWidget::focusOutEvent(QFocusEvent *)
if (focusPolicy() != Qt::NoFocus || !isWindow())
update();
- // automatically hide the SIP
+#ifndef Q_OS_IOS
+ // FIXME: revisit autoSIP logic, QTBUG-42906
if (qApp->autoSipEnabled() && testAttribute(Qt::WA_InputMethodEnabled))
qApp->inputMethod()->hide();
+#endif
}
/*!
diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp
index de8f11e5ec..4bca0eab4a 100644
--- a/src/widgets/kernel/qwidgetwindow.cpp
+++ b/src/widgets/kernel/qwidgetwindow.cpp
@@ -33,6 +33,7 @@
#include "private/qwindow_p.h"
#include "qwidgetwindow_p.h"
+#include "qlayout.h"
#include "private/qwidget_p.h"
#include "private/qapplication_p.h"
@@ -79,8 +80,38 @@ public:
widget->focusWidget()->clearFocus();
}
+ QRectF closestAcceptableGeometry(const QRectF &rect) const Q_DECL_OVERRIDE;
};
+QRectF QWidgetWindowPrivate::closestAcceptableGeometry(const QRectF &rect) const
+{
+ Q_Q(const QWidgetWindow);
+ const QWidget *widget = q->widget();
+ if (!widget->isWindow() || !widget->hasHeightForWidth())
+ return QRect();
+ const QSize oldSize = rect.size().toSize();
+ const QSize newSize = QLayout::closestAcceptableSize(widget, oldSize);
+ if (newSize == oldSize)
+ return QRectF();
+ const int dw = newSize.width() - oldSize.width();
+ const int dh = newSize.height() - oldSize.height();
+ QRectF result = rect;
+ const QRectF currentGeometry(widget->geometry());
+ const qreal topOffset = result.top() - currentGeometry.top();
+ const qreal bottomOffset = result.bottom() - currentGeometry.bottom();
+ if (qAbs(topOffset) > qAbs(bottomOffset))
+ result.setTop(result.top() - dh); // top edge drag
+ else
+ result.setBottom(result.bottom() + dh); // bottom edge drag
+ const qreal leftOffset = result.left() - currentGeometry.left();
+ const qreal rightOffset = result.right() - currentGeometry.right();
+ if (qAbs(leftOffset) > qAbs(rightOffset))
+ result.setLeft(result.left() - dw); // left edge drag
+ else
+ result.setRight(result.right() + dw); // right edge drag
+ return result;
+}
+
QWidgetWindow::QWidgetWindow(QWidget *widget)
: QWindow(*new QWidgetWindowPrivate(), 0)
, m_widget(widget)