summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/itemviews/qtreewidget.cpp4
-rw-r--r--src/widgets/kernel/qapplication.cpp20
-rw-r--r--src/widgets/kernel/qwhatsthis.cpp2
-rw-r--r--src/widgets/kernel/qwidget.cpp13
-rw-r--r--src/widgets/styles/qcommonstyle.cpp2
-rw-r--r--src/widgets/styles/qmacstyle_mac.mm30
-rw-r--r--src/widgets/styles/qmacstyle_mac_p_p.h2
-rw-r--r--src/widgets/styles/qstyle.cpp2
-rw-r--r--src/widgets/styles/qwindowsxpstyle.cpp12
-rw-r--r--src/widgets/styles/styles.pri25
-rw-r--r--src/widgets/widgets/qdockwidget.cpp3
-rw-r--r--src/widgets/widgets/qlcdnumber.cpp2
-rw-r--r--src/widgets/widgets/qlineedit.cpp5
-rw-r--r--src/widgets/widgets/qmenu.cpp4
14 files changed, 77 insertions, 49 deletions
diff --git a/src/widgets/itemviews/qtreewidget.cpp b/src/widgets/itemviews/qtreewidget.cpp
index 653a9170b2..f72abd20ab 100644
--- a/src/widgets/itemviews/qtreewidget.cpp
+++ b/src/widgets/itemviews/qtreewidget.cpp
@@ -1677,8 +1677,8 @@ void QTreeWidgetItemPrivate::propagateDisabled(QTreeWidgetItem *item)
the item can be checked, edited, and selected.
The default value for flags is
- Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled.
- If the item was constructed with a parent, flags will in addition contain Qt::ItemIsDropEnabled.
+ Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled |
+ Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled.
\sa setFlags()
*/
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index 0da9460794..61f3b6b8eb 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -707,7 +707,7 @@ QApplication::~QApplication()
QWidgetSet *mySet = QWidgetPrivate::allWidgets;
QWidgetPrivate::allWidgets = 0;
for (QWidgetSet::ConstIterator it = mySet->constBegin(); it != mySet->constEnd(); ++it) {
- register QWidget *w = *it;
+ QWidget *w = *it;
if (!w->parent()) // window
w->destroy(true, true);
}
@@ -1044,7 +1044,7 @@ void QApplication::setStyle(QStyle *style)
if (QApplicationPrivate::app_style) {
if (QApplicationPrivate::is_app_running && !QApplicationPrivate::is_app_closing) {
for (QWidgetList::ConstIterator it = all.constBegin(); it != all.constEnd(); ++it) {
- register QWidget *w = *it;
+ QWidget *w = *it;
if (!(w->windowType() == Qt::Desktop) && // except desktop
w->testAttribute(Qt::WA_WState_Polished)) { // has been polished
QApplicationPrivate::app_style->unpolish(w);
@@ -1086,7 +1086,7 @@ void QApplication::setStyle(QStyle *style)
// re-polish existing widgets if necessary
if (QApplicationPrivate::is_app_running && !QApplicationPrivate::is_app_closing) {
for (QWidgetList::ConstIterator it1 = all.constBegin(); it1 != all.constEnd(); ++it1) {
- register QWidget *w = *it1;
+ QWidget *w = *it1;
if (w->windowType() != Qt::Desktop && w->testAttribute(Qt::WA_WState_Polished)) {
if (w->style() == QApplicationPrivate::app_style)
QApplicationPrivate::app_style->polish(w); // repolish
@@ -1098,7 +1098,7 @@ void QApplication::setStyle(QStyle *style)
}
for (QWidgetList::ConstIterator it2 = all.constBegin(); it2 != all.constEnd(); ++it2) {
- register QWidget *w = *it2;
+ QWidget *w = *it2;
if (w->windowType() != Qt::Desktop && !w->testAttribute(Qt::WA_SetStyle)) {
QEvent e(QEvent::StyleChange);
QApplication::sendEvent(w, &e);
@@ -1328,7 +1328,7 @@ void QApplicationPrivate::setPalette_helper(const QPalette &palette, const char*
QWidgetList wids = QApplication::allWidgets();
for (QWidgetList::ConstIterator it = wids.constBegin(); it != wids.constEnd(); ++it) {
- register QWidget *w = *it;
+ QWidget *w = *it;
if (all || (!className && w->isWindow()) || w->inherits(className)) // matching class
QApplication::sendEvent(w, &e);
}
@@ -1510,7 +1510,7 @@ void QApplication::setFont(const QFont &font, const char *className)
QWidgetList wids = QApplication::allWidgets();
for (QWidgetList::ConstIterator it = wids.constBegin(); it != wids.constEnd(); ++it) {
- register QWidget *w = *it;
+ QWidget *w = *it;
if (all || (!className && w->isWindow()) || w->inherits(className)) // matching class
sendEvent(w, &e);
}
@@ -1580,7 +1580,7 @@ void QApplication::setWindowIcon(const QIcon &icon)
QEvent e(QEvent::ApplicationWindowIconChange);
QWidgetList all = QApplication::allWidgets();
for (QWidgetList::ConstIterator it = all.constBegin(); it != all.constEnd(); ++it) {
- register QWidget *w = *it;
+ QWidget *w = *it;
if (w->isWindow())
sendEvent(w, &e);
}
@@ -2695,12 +2695,14 @@ bool QApplicationPrivate::shouldQuit()
the ones without QuitOnClose), we emit the lastWindowClosed
signal */
QWidgetList list = QApplication::topLevelWidgets();
+ QWindowList processedWindows;
for (int i = 0; i < list.size(); ++i) {
QWidget *w = list.at(i);
+ processedWindows.push_back(w->windowHandle());
if (w->isVisible() && !w->parentWidget() && w->testAttribute(Qt::WA_QuitOnClose))
return false;
}
- return QGuiApplicationPrivate::shouldQuit();
+ return QGuiApplicationPrivate::shouldQuitInternal(processedWindows);
}
static inline void closeAllPopups()
@@ -2975,7 +2977,7 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
&& mouse->type() == QEvent::MouseMove && mouse->buttons() == 0) {
// but still send them through all application event filters (normally done by notify_helper)
for (int i = 0; d->extraData && i < d->extraData->eventFilters.size(); ++i) {
- register QObject *obj = d->extraData->eventFilters.at(i);
+ QObject *obj = d->extraData->eventFilters.at(i);
if (!obj)
continue;
if (obj->d_func()->threadData != w->d_func()->threadData) {
diff --git a/src/widgets/kernel/qwhatsthis.cpp b/src/widgets/kernel/qwhatsthis.cpp
index b96bd024cb..661317d21a 100644
--- a/src/widgets/kernel/qwhatsthis.cpp
+++ b/src/widgets/kernel/qwhatsthis.cpp
@@ -380,7 +380,7 @@ void QWhatsThisPrivate::notifyToplevels(QEvent *e)
{
QWidgetList toplevels = QApplication::topLevelWidgets();
for (int i = 0; i < toplevels.count(); ++i) {
- register QWidget *w = toplevels.at(i);
+ QWidget *w = toplevels.at(i);
QApplication::sendEvent(w, e);
}
}
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index f67a93c7b5..c6bd387a90 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -104,6 +104,8 @@
#include "qtabwidget.h" // Needed in inTabWidget()
#endif // QT_KEYPAD_NAVIGATION
+#include "qwindowcontainer_p.h"
+
// widget/widget data creation count
//#define QWIDGET_EXTRA_DEBUG
@@ -6250,6 +6252,17 @@ bool QWidget::isActiveWindow() const
}
}
+ // Check for an active window container
+ if (QWindow *ww = QGuiApplication::focusWindow()) {
+ while (ww) {
+ QWidgetWindow *qww = qobject_cast<QWidgetWindow *>(ww);
+ QWindowContainer *qwc = qww ? qobject_cast<QWindowContainer *>(qww->widget()) : 0;
+ if (qwc && qwc->topLevelWidget() == tlw)
+ return true;
+ ww = ww->parent();
+ }
+ }
+
// Check if platform adaptation thinks the window is active. This is necessary for
// example in case of ActiveQt servers that are embedded into another application.
// Those are separate processes that are not part of the parent application Qt window/widget
diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp
index c6edbee67d..936eb76dad 100644
--- a/src/widgets/styles/qcommonstyle.cpp
+++ b/src/widgets/styles/qcommonstyle.cpp
@@ -5004,7 +5004,7 @@ int QCommonStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget
case SH_ItemView_ActivateItemOnSingleClick:
ret = 0;
if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme())
- ret = theme->themeHint(QPlatformTheme::ToolButtonStyle).toBool() ? 1 : 0;
+ ret = theme->themeHint(QPlatformTheme::ItemViewActivateItemOnSingleClick).toBool() ? 1 : 0;
break;
case SH_TitleBar_ModifyNotification:
ret = true;
diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm
index a8fba4fb68..f8905b1b1a 100644
--- a/src/widgets/styles/qmacstyle_mac.mm
+++ b/src/widgets/styles/qmacstyle_mac.mm
@@ -119,9 +119,12 @@ QMacStylePrivate *mPrivate;
{
Q_UNUSED(notification);
QEvent event(QEvent::StyleChange);
- foreach (QWidget *widget, QApplication::allWidgets()) {
- if (QScrollBar *scrollBar = qobject_cast<QScrollBar *>(widget))
- QCoreApplication::sendEvent(scrollBar, &event);
+ QMutableSetIterator<QPointer<QObject> > it(QMacStylePrivate::scrollBars);
+ while (it.hasNext()) {
+ if (!it.next())
+ it.remove();
+ else
+ QCoreApplication::sendEvent(it.value(), &event);
}
}
@end
@@ -142,6 +145,13 @@ const int QMacStylePrivate::PushButtonContentPadding = 6;
const qreal QMacStylePrivate::ScrollBarFadeOutDuration = 200.0;
const qreal QMacStylePrivate::ScrollBarFadeOutDelay = 450.0;
+QSet<QPointer<QObject> > QMacStylePrivate::scrollBars;
+
+static uint qHash(const QPointer<QObject> &ptr)
+{
+ return qHash(ptr.data());
+}
+
// These colors specify the titlebar gradient colors on
// Leopard. Ideally we should get them from the system.
static const QColor titlebarGradientActiveBegin(220, 220, 220);
@@ -4934,6 +4944,8 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex
// no longer possible to move it, second the up/down buttons are removed when
// there is not enough space for them.
if (cc == CC_ScrollBar) {
+ if (opt && opt->styleObject && !QMacStylePrivate::scrollBars.contains(opt->styleObject))
+ QMacStylePrivate::scrollBars.insert(QPointer<QObject>(opt->styleObject));
const int scrollBarLength = (slider->orientation == Qt::Horizontal)
? slider->rect.width() : slider->rect.height();
const QMacStyle::WidgetSizePolicy sizePolicy = widgetSizePolicy(widget, opt);
@@ -6021,10 +6033,14 @@ QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt,
bool useAquaGuideline = true;
switch (ct) {
- case QStyle::CT_SpinBox:
- // hack to work around horrible sizeHint() code in QAbstractSpinBox
- sz = QCommonStyle::sizeFromContents(ct, opt, csz, widget);
- sz.setHeight(sz.height() - 3);
+
+ case CT_SpinBox:
+ if (const QStyleOptionSpinBox *vopt = qstyleoption_cast<const QStyleOptionSpinBox *>(opt)) {
+ // Add button + frame widths
+ int buttonWidth = 20;
+ int fw = proxy()->pixelMetric(PM_SpinBoxFrameWidth, vopt, widget);
+ sz += QSize(buttonWidth + 2*fw, 2*fw - 3);
+ }
break;
case QStyle::CT_TabWidget:
// the size between the pane and the "contentsRect" (+4,+4)
diff --git a/src/widgets/styles/qmacstyle_mac_p_p.h b/src/widgets/styles/qmacstyle_mac_p_p.h
index c424ff0c3c..bf42087fcb 100644
--- a/src/widgets/styles/qmacstyle_mac_p_p.h
+++ b/src/widgets/styles/qmacstyle_mac_p_p.h
@@ -93,6 +93,7 @@
#include <qlibrary.h>
#include <qdatetimeedit.h>
#include <qmath.h>
+#include <qset.h>
#include <QtWidgets/qgraphicsproxywidget.h>
#include <QtWidgets/qgraphicsview.h>
@@ -197,6 +198,7 @@ public:
mutable QPointer<QObject> pressedButton;
mutable QPointer<QObject> defaultButton;
mutable QPointer<QObject> autoDefaultButton;
+ static QSet<QPointer<QObject> > scrollBars;
struct ButtonState {
int frame;
diff --git a/src/widgets/styles/qstyle.cpp b/src/widgets/styles/qstyle.cpp
index 603d0e50a5..dccc9ff3ce 100644
--- a/src/widgets/styles/qstyle.cpp
+++ b/src/widgets/styles/qstyle.cpp
@@ -351,7 +351,7 @@ static int unpackControlTypes(QSizePolicy::ControlTypes controls, QSizePolicy::C
\section1 Styles in Item Views
The painting of items in views is performed by a delegate. Qt's
- default delegate, QStyledItemDelegate, is also used for for calculating bounding
+ default delegate, QStyledItemDelegate, is also used for calculating bounding
rectangles of items, and their sub-elements for the various kind
of item \l{Qt::ItemDataRole}{data roles}
QStyledItemDelegate supports. See the QStyledItemDelegate class
diff --git a/src/widgets/styles/qwindowsxpstyle.cpp b/src/widgets/styles/qwindowsxpstyle.cpp
index 31cf329262..3b3c27f6cb 100644
--- a/src/widgets/styles/qwindowsxpstyle.cpp
+++ b/src/widgets/styles/qwindowsxpstyle.cpp
@@ -582,7 +582,7 @@ bool QWindowsXPStylePrivate::hasAlphaChannel(const QRect &rect)
int firstAlpha = -1;
for (int y = startY; y < h/2; ++y) {
- register DWORD *buffer = (DWORD*)bufferPixels + (y * bufferW);
+ DWORD *buffer = (DWORD*)bufferPixels + (y * bufferW);
for (int x = startX; x < w; ++x, ++buffer) {
int alpha = (*buffer) >> 24;
if (firstAlpha == -1)
@@ -611,8 +611,8 @@ bool QWindowsXPStylePrivate::fixAlphaChannel(const QRect &rect)
bool hasFixedAlphaValue = false;
for (int y = startY; y < h; ++y) {
- register DWORD *buffer = (DWORD*)bufferPixels + (y * bufferW);
- for (register int x = startX; x < w; ++x, ++buffer) {
+ DWORD *buffer = (DWORD*)bufferPixels + (y * bufferW);
+ for (int x = startX; x < w; ++x, ++buffer) {
uint pixel = *buffer;
int alpha = qAlpha(pixel);
if (qRed(pixel) > alpha || qGreen(pixel) > alpha || qBlue(pixel) > alpha) {
@@ -643,13 +643,13 @@ bool QWindowsXPStylePrivate::swapAlphaChannel(const QRect &rect, bool allPixels)
// Flip the alphas, so that 255-alpha pixels are 0, and 0-alpha are 255.
for (int y = startY; y < h; ++y) {
- register DWORD *buffer = (DWORD*)bufferPixels + (y * bufferW);
- for (register int x = startX; x < w; ++x, ++buffer) {
+ DWORD *buffer = (DWORD*)bufferPixels + (y * bufferW);
+ for (int x = startX; x < w; ++x, ++buffer) {
if (allPixels) {
*buffer |= 0xFF000000;
continue;
}
- register unsigned int alphaValue = (*buffer) & 0xFF000000;
+ unsigned int alphaValue = (*buffer) & 0xFF000000;
if (alphaValue == 0xFF000000) {
*buffer = 0;
valueChange = true;
diff --git a/src/widgets/styles/styles.pri b/src/widgets/styles/styles.pri
index b39b17fd86..3707090c4c 100644
--- a/src/widgets/styles/styles.pri
+++ b/src/widgets/styles/styles.pri
@@ -54,25 +54,10 @@ contains( styles, mac ) {
styles/qmacstyle_mac_p.h \
styles/qmacstyle_mac_p_p.h
OBJECTIVE_SOURCES += styles/qmacstyle_mac.mm
-
- !contains( styles, windows ) {
- message( mac requires windows )
- styles += windows
- DEFINES+= QT_STYLE_WINDOWS
- }
} else {
DEFINES += QT_NO_STYLE_MAC
}
-contains( styles, windows ) {
- HEADERS += styles/qwindowsstyle_p.h
- HEADERS += styles/qwindowsstyle_p_p.h
- SOURCES += styles/qwindowsstyle.cpp
- DEFINES += QT_STYLE_WINDOWS
-} else {
- DEFINES += QT_NO_STYLE_WINDOWS
-}
-
contains( styles, windowsvista ) {
HEADERS += styles/qwindowsvistastyle_p.h
HEADERS += styles/qwindowsvistastyle_p_p.h
@@ -80,7 +65,6 @@ contains( styles, windowsvista ) {
!contains( styles, windowsxp ) {
message( windowsvista requires windowsxp )
styles += windowsxp
- DEFINES += QT_STYLE_WINDOWSXP
}
} else {
DEFINES += QT_NO_STYLE_WINDOWSVISTA
@@ -93,12 +77,19 @@ contains( styles, windowsxp ) {
!contains( styles, windows ) {
message( windowsxp requires windows )
styles += windows
- DEFINES += QT_STYLE_WINDOWS
}
} else {
DEFINES += QT_NO_STYLE_WINDOWSXP
}
+contains( styles, windows ) {
+ HEADERS += styles/qwindowsstyle_p.h
+ HEADERS += styles/qwindowsstyle_p_p.h
+ SOURCES += styles/qwindowsstyle.cpp
+} else {
+ DEFINES += QT_NO_STYLE_WINDOWS
+}
+
contains( styles, gtk ) {
HEADERS += styles/qgtkglobal_p.h
HEADERS += styles/qgtkstyle_p.h
diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp
index 5217e57333..7cd7172ef5 100644
--- a/src/widgets/widgets/qdockwidget.cpp
+++ b/src/widgets/widgets/qdockwidget.cpp
@@ -1259,6 +1259,9 @@ void QDockWidget::setFloating(bool floating)
d->endDrag(true);
QRect r = d->undockedGeometry;
+ // Keep position when undocking for the first time.
+ if (floating && isVisible() && !r.isValid())
+ r = QRect(mapToGlobal(QPoint(0, 0)), size());
d->setWindowState(floating, false, floating ? r : QRect());
diff --git a/src/widgets/widgets/qlcdnumber.cpp b/src/widgets/widgets/qlcdnumber.cpp
index 3ba9ad9ba3..5104171fb1 100644
--- a/src/widgets/widgets/qlcdnumber.cpp
+++ b/src/widgets/widgets/qlcdnumber.cpp
@@ -429,7 +429,7 @@ void QLCDNumber::setDigitCount(int numDigits)
bool doDisplay = d->ndigits == 0;
if (numDigits == d->ndigits) // no change
return;
- register int i;
+ int i;
int dif;
if (numDigits > d->ndigits) { // expand
dif = numDigits - d->ndigits;
diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp
index abef6e8832..d44e9ad02f 100644
--- a/src/widgets/widgets/qlineedit.cpp
+++ b/src/widgets/widgets/qlineedit.cpp
@@ -132,7 +132,8 @@ void QLineEdit::initStyleOption(QStyleOptionFrame *option) const
A line edit allows the user to enter and edit a single line of
plain text with a useful collection of editing functions,
- including undo and redo, cut and paste, and drag and drop.
+ including undo and redo, cut and paste, and drag and drop (see
+ \l setDragEnabled()).
By changing the echoMode() of a line edit, it can also be used as
a "write-only" field, for inputs such as passwords.
@@ -1801,7 +1802,7 @@ void QLineEdit::paintEvent(QPaintEvent *)
int minLB = qMax(0, -fm.minLeftBearing());
int minRB = qMax(0, -fm.minRightBearing());
- if (d->control->text().isEmpty()) {
+ if (d->control->text().isEmpty() && d->control->preeditAreaText().isEmpty()) {
if (!d->placeholderText.isEmpty()) {
QColor col = pal.text().color();
col.setAlpha(128);
diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp
index 7c72c5c456..4df89a5ede 100644
--- a/src/widgets/widgets/qmenu.cpp
+++ b/src/widgets/widgets/qmenu.cpp
@@ -2854,9 +2854,9 @@ void QMenu::mouseMoveEvent(QMouseEvent *e)
d->hasHadMouse = d->hasHadMouse || rect().contains(e->pos());
QAction *action = d->actionAt(e->pos());
- if (!action) {
+ if (!action || action->isSeparator()) {
if (d->hasHadMouse
- && (!d->currentAction
+ && (!d->currentAction || (action && action->isSeparator())
|| !(d->currentAction->menu() && d->currentAction->menu()->isVisible())))
d->setCurrentAction(0);
return;