summaryrefslogtreecommitdiffstats
path: root/src/widgets/widgets
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2016-04-05 14:22:45 +0200
committerLiang Qi <liang.qi@theqtcompany.com>2016-04-05 14:22:45 +0200
commitf2856875843efce9a00e90dad05bde358ab82197 (patch)
tree93346c38504ce04f0bf02dfe4a21299feb1be8ed /src/widgets/widgets
parenta7b04275082d065f392e7f18c54ea9b41507ae40 (diff)
parenta2970719c26c946fd6fea7d902aad6706a4ca6ea (diff)
Merge remote-tracking branch 'origin/5.7' into dev
Conflicts: examples/corelib/ipc/ipc.pro src/plugins/platforms/xcb/qxcbbackingstore.cpp tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp Change-Id: Ia006e10ff1732fe78f90138c41f05b59b49486cf
Diffstat (limited to 'src/widgets/widgets')
-rw-r--r--src/widgets/widgets/qbuttongroup_p.h1
-rw-r--r--src/widgets/widgets/qlineedit_p.cpp11
-rw-r--r--src/widgets/widgets/qplaintextedit.cpp32
-rw-r--r--src/widgets/widgets/qprogressbar.cpp2
-rw-r--r--src/widgets/widgets/qtabbar.cpp27
-rw-r--r--src/widgets/widgets/qtabbar_p.h15
-rw-r--r--src/widgets/widgets/qtextbrowser.cpp1
-rw-r--r--src/widgets/widgets/qtextedit.cpp30
8 files changed, 73 insertions, 46 deletions
diff --git a/src/widgets/widgets/qbuttongroup_p.h b/src/widgets/widgets/qbuttongroup_p.h
index 01c0367876..95a72eb4fd 100644
--- a/src/widgets/widgets/qbuttongroup_p.h
+++ b/src/widgets/widgets/qbuttongroup_p.h
@@ -67,7 +67,6 @@ public:
QList<QAbstractButton *> buttonList;
QPointer<QAbstractButton> checkedButton;
void detectCheckedButton();
- void notifyChecked(QAbstractButton *button);
bool exclusive;
QHash<QAbstractButton*, int> mapping;
diff --git a/src/widgets/widgets/qlineedit_p.cpp b/src/widgets/widgets/qlineedit_p.cpp
index b852b8991c..6ff40e9c50 100644
--- a/src/widgets/widgets/qlineedit_p.cpp
+++ b/src/widgets/widgets/qlineedit_p.cpp
@@ -323,14 +323,17 @@ QLineEditIconButton::QLineEditIconButton(QWidget *parent)
void QLineEditIconButton::paintEvent(QPaintEvent *)
{
QPainter painter(this);
+ QWindow *window = Q_NULLPTR;
+ if (const QWidget *nativeParent = nativeParentWidget())
+ window = nativeParent->windowHandle();
// Note isDown should really use the active state but in most styles
// this has no proper feedback
QIcon::Mode state = QIcon::Disabled;
if (isEnabled())
state = isDown() ? QIcon::Selected : QIcon::Normal;
- const QPixmap iconPixmap = icon().pixmap(QSize(IconButtonSize, IconButtonSize),
- state, QIcon::Off);
- QRect pixmapRect = QRect(QPoint(0, 0), iconPixmap.size() / iconPixmap.devicePixelRatio());
+ const QSize iconSize(IconButtonSize, IconButtonSize);
+ const QPixmap iconPixmap = icon().pixmap(window, iconSize, state, QIcon::Off);
+ QRect pixmapRect = QRect(QPoint(0, 0), iconSize);
pixmapRect.moveCenter(rect().center());
painter.setOpacity(m_opacity);
painter.drawPixmap(pixmapRect, iconPixmap);
@@ -422,7 +425,7 @@ QIcon QLineEditPrivate::clearButtonIcon() const
Q_Q(const QLineEdit);
QStyleOptionFrame styleOption;
q->initStyleOption(&styleOption);
- return QIcon(q->style()->standardPixmap(QStyle::SP_LineEditClearButton, &styleOption, q));
+ return q->style()->standardIcon(QStyle::SP_LineEditClearButton, &styleOption, q);
}
void QLineEditPrivate::setClearButtonEnabled(bool enabled)
diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp
index 3772a7866e..17eac9db58 100644
--- a/src/widgets/widgets/qplaintextedit.cpp
+++ b/src/widgets/widgets/qplaintextedit.cpp
@@ -2194,27 +2194,25 @@ QVariant QPlainTextEdit::inputMethodQuery(Qt::InputMethodQuery property) const
/*!\internal
*/
-QVariant QPlainTextEdit::inputMethodQuery(Qt::InputMethodQuery property, QVariant argument) const
+QVariant QPlainTextEdit::inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const
{
Q_D(const QPlainTextEdit);
- QVariant v;
- switch (property) {
- case Qt::ImHints:
- v = QWidget::inputMethodQuery(property);
- break;
+ if (query == Qt::ImHints)
+ return QWidget::inputMethodQuery(query);
+ const QVariant v = d->control->inputMethodQuery(query, argument);
+ const QPointF offset = contentOffset();
+ switch (v.type()) {
+ case QVariant::RectF:
+ return v.toRectF().translated(offset);
+ case QVariant::PointF:
+ return v.toPointF() + offset;
+ case QVariant::Rect:
+ return v.toRect().translated(offset.toPoint());
+ case QVariant::Point:
+ return v.toPoint() + offset.toPoint();
default:
- v = d->control->inputMethodQuery(property, argument);
- const QPoint offset(-d->horizontalOffset(), -0);
- if (v.type() == QVariant::RectF)
- v = v.toRectF().toRect().translated(offset);
- else if (v.type() == QVariant::PointF)
- v = v.toPointF().toPoint() + offset;
- else if (v.type() == QVariant::Rect)
- v = v.toRect().translated(offset);
- else if (v.type() == QVariant::Point)
- v = v.toPoint() + offset;
+ break;
}
-
return v;
}
diff --git a/src/widgets/widgets/qprogressbar.cpp b/src/widgets/widgets/qprogressbar.cpp
index 1ba0d78622..10f005e6d3 100644
--- a/src/widgets/widgets/qprogressbar.cpp
+++ b/src/widgets/widgets/qprogressbar.cpp
@@ -161,7 +161,7 @@ bool QProgressBarPrivate::repaintRequired() const
QStyleOptionProgressBar opt;
q->initStyleOption(&opt);
int cw = q->style()->pixelMetric(QStyle::PM_ProgressBarChunkWidth, &opt, q);
- QRect groove = q->style()->subElementRect(QStyle::SE_ProgressBarGroove, &opt, q);
+ QRect groove = q->style()->subElementRect(QStyle::SE_ProgressBarGroove, &opt, q);
// This expression is basically
// (valueDifference / (maximum - minimum) > cw / groove.width())
// transformed to avoid integer division.
diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp
index f56830c14b..6c748c09bb 100644
--- a/src/widgets/widgets/qtabbar.cpp
+++ b/src/widgets/widgets/qtabbar.cpp
@@ -70,6 +70,23 @@
QT_BEGIN_NAMESPACE
+QMovableTabWidget::QMovableTabWidget(QWidget *parent)
+ : QWidget(parent)
+{
+}
+
+void QMovableTabWidget::setPixmap(const QPixmap &pixmap)
+{
+ m_pixmap = pixmap;
+ update();
+}
+
+void QMovableTabWidget::paintEvent(QPaintEvent *e)
+{
+ Q_UNUSED(e);
+ QPainter p(this);
+ p.drawPixmap(0, 0, m_pixmap);
+}
inline static bool verticalTabs(QTabBar::Shape shape)
{
@@ -1992,13 +2009,14 @@ void QTabBarPrivate::setupMovableTab()
{
Q_Q(QTabBar);
if (!movingTab)
- movingTab = new QWidget(q);
+ movingTab = new QMovableTabWidget(q);
int taboverlap = q->style()->pixelMetric(QStyle::PM_TabBarTabOverlap, 0 ,q);
QRect grabRect = q->tabRect(pressedIndex);
grabRect.adjust(-taboverlap, 0, taboverlap, 0);
- QPixmap grabImage(grabRect.size());
+ QPixmap grabImage(grabRect.size() * q->devicePixelRatioF());
+ grabImage.setDevicePixelRatio(q->devicePixelRatioF());
grabImage.fill(Qt::transparent);
QStylePainter p(&grabImage, q);
p.initFrom(q);
@@ -2009,11 +2027,8 @@ void QTabBarPrivate::setupMovableTab()
p.drawControl(QStyle::CE_TabBarTab, tab);
p.end();
- QPalette pal;
- pal.setBrush(QPalette::All, QPalette::Window, grabImage);
- movingTab->setPalette(pal);
+ movingTab->setPixmap(grabImage);
movingTab->setGeometry(grabRect);
- movingTab->setAutoFillBackground(true);
movingTab->raise();
// Re-arrange widget order to avoid overlaps
diff --git a/src/widgets/widgets/qtabbar_p.h b/src/widgets/widgets/qtabbar_p.h
index c5eb0d42d7..48f235f050 100644
--- a/src/widgets/widgets/qtabbar_p.h
+++ b/src/widgets/widgets/qtabbar_p.h
@@ -67,6 +67,19 @@
QT_BEGIN_NAMESPACE
+class QMovableTabWidget : public QWidget
+{
+public:
+ explicit QMovableTabWidget(QWidget *parent = Q_NULLPTR);
+ void setPixmap(const QPixmap &pixmap);
+
+protected:
+ void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
+
+private:
+ QPixmap m_pixmap;
+};
+
class QTabBarPrivate : public QWidgetPrivate
{
Q_DECLARE_PUBLIC(QTabBar)
@@ -207,7 +220,7 @@ public:
int switchTabCurrentIndex;
int switchTabTimerId;
- QWidget *movingTab;
+ QMovableTabWidget *movingTab;
#ifdef Q_DEAD_CODE_FROM_QT4_MAC
int previousPressedIndex;
#endif
diff --git a/src/widgets/widgets/qtextbrowser.cpp b/src/widgets/widgets/qtextbrowser.cpp
index db66d39089..45da34c383 100644
--- a/src/widgets/widgets/qtextbrowser.cpp
+++ b/src/widgets/widgets/qtextbrowser.cpp
@@ -659,6 +659,7 @@ void QTextBrowserPrivate::init()
#ifndef QT_NO_CURSOR
viewport->setCursor(oldCursor);
#endif
+ q->setAttribute(Qt::WA_InputMethodEnabled, !q->isReadOnly());
q->setUndoRedoEnabled(false);
viewport->setMouseTracking(true);
QObject::connect(q->document(), SIGNAL(contentsChanged()), q, SLOT(_q_documentModified()));
diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp
index 3f2e4728ed..1dd774cf7a 100644
--- a/src/widgets/widgets/qtextedit.cpp
+++ b/src/widgets/widgets/qtextedit.cpp
@@ -1727,24 +1727,22 @@ QVariant QTextEdit::inputMethodQuery(Qt::InputMethodQuery property) const
QVariant QTextEdit::inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const
{
Q_D(const QTextEdit);
- QVariant v;
- switch (query) {
- case Qt::ImHints:
- v = QWidget::inputMethodQuery(query);
- break;
+ if (query == Qt::ImHints)
+ return QWidget::inputMethodQuery(query);
+ const QVariant v = d->control->inputMethodQuery(query, argument);
+ const QPointF offset(-d->horizontalOffset(), -d->verticalOffset());
+ switch (v.type()) {
+ case QVariant::RectF:
+ return v.toRectF().translated(offset);
+ case QVariant::PointF:
+ return v.toPointF() + offset;
+ case QVariant::Rect:
+ return v.toRect().translated(offset.toPoint());
+ case QVariant::Point:
+ return v.toPoint() + offset.toPoint();
default:
- v = d->control->inputMethodQuery(query, argument);
- const QPoint offset(-d->horizontalOffset(), -d->verticalOffset());
- if (v.type() == QVariant::RectF)
- v = v.toRectF().toRect().translated(offset);
- else if (v.type() == QVariant::PointF)
- v = v.toPointF().toPoint() + offset;
- else if (v.type() == QVariant::Rect)
- v = v.toRect().translated(offset);
- else if (v.type() == QVariant::Point)
- v = v.toPoint() + offset;
+ break;
}
-
return v;
}