diff options
Diffstat (limited to 'src/widgets/kernel')
63 files changed, 572 insertions, 220 deletions
diff --git a/src/widgets/kernel/kernel.pri b/src/widgets/kernel/kernel.pri index 4d3d7c4e0a..533b696faa 100644 --- a/src/widgets/kernel/kernel.pri +++ b/src/widgets/kernel/kernel.pri @@ -34,7 +34,8 @@ HEADERS += \ kernel/qgesturerecognizer.h \ kernel/qgesturemanager_p.h \ kernel/qdesktopwidget_qpa_p.h \ - kernel/qwidgetwindow_qpa_p.h + kernel/qwidgetwindow_qpa_p.h \ + kernel/qwindowcontainer_p.h SOURCES += \ kernel/qaction.cpp \ @@ -62,7 +63,8 @@ SOURCES += \ kernel/qapplication_qpa.cpp \ kernel/qdesktopwidget_qpa.cpp \ kernel/qwidget_qpa.cpp \ - kernel/qwidgetwindow.cpp + kernel/qwidgetwindow.cpp \ + kernel/qwindowcontainer.cpp # TODO diff --git a/src/widgets/kernel/mac.pri b/src/widgets/kernel/mac.pri index 5474a41f15..4c507ae80e 100644 --- a/src/widgets/kernel/mac.pri +++ b/src/widgets/kernel/mac.pri @@ -1,4 +1,4 @@ -!x11::mac { +!x11:mac:!ios { LIBS_PRIVATE += -framework Carbon -framework Cocoa -lz *-mwerks:INCLUDEPATH += compat } diff --git a/src/widgets/kernel/qaction.cpp b/src/widgets/kernel/qaction.cpp index f01576d92c..267d787116 100644 --- a/src/widgets/kernel/qaction.cpp +++ b/src/widgets/kernel/qaction.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qaction.h b/src/widgets/kernel/qaction.h index 5fb4c655eb..f2346acfcd 100644 --- a/src/widgets/kernel/qaction.h +++ b/src/widgets/kernel/qaction.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -48,8 +48,6 @@ #include <QtCore/qvariant.h> #include <QtGui/qicon.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -221,6 +219,4 @@ QT_END_INCLUDE_NAMESPACE QT_END_NAMESPACE -QT_END_HEADER - #endif // QACTION_H diff --git a/src/widgets/kernel/qaction_p.h b/src/widgets/kernel/qaction_p.h index d08c42688d..70c9b4ad2b 100644 --- a/src/widgets/kernel/qaction_p.h +++ b/src/widgets/kernel/qaction_p.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qactiongroup.cpp b/src/widgets/kernel/qactiongroup.cpp index 4e19f116bb..8f1b01eca5 100644 --- a/src/widgets/kernel/qactiongroup.cpp +++ b/src/widgets/kernel/qactiongroup.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qactiongroup.h b/src/widgets/kernel/qactiongroup.h index 13c5ea8ef1..eab1d8bd43 100644 --- a/src/widgets/kernel/qactiongroup.h +++ b/src/widgets/kernel/qactiongroup.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -44,8 +44,6 @@ #include <QtWidgets/qaction.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -99,6 +97,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QACTIONGROUP_H diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index 4c6d8cfdc7..ac25d3ed7f 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -588,6 +588,8 @@ extern void qRegisterWidgetsVariant(); */ void QApplicationPrivate::initialize() { + is_app_running = false; // Starting up. + QWidgetPrivate::mapper = new QWidgetMapper; QWidgetPrivate::allWidgets = new QWidgetSet; @@ -601,12 +603,8 @@ void QApplicationPrivate::initialize() qRegisterGuiStateMachine(); #endif - is_app_running = true; // no longer starting up - - Q_Q(QApplication); - if (qgetenv("QT_USE_NATIVE_WINDOWS").toInt() > 0) - q->setAttribute(Qt::AA_NativeWindows); + QCoreApplication::setAttribute(Qt::AA_NativeWindows); #ifdef Q_OS_WINCE #ifdef QT_AUTO_MAXIMIZE_THRESHOLD @@ -629,6 +627,8 @@ void QApplicationPrivate::initialize() if (QApplication::desktopSettingsAware()) if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) QApplicationPrivate::enabledAnimations = theme->themeHint(QPlatformTheme::UiEffects).toInt(); + + is_app_running = true; // no longer starting up } /***************************************************************************** @@ -967,11 +967,7 @@ QStyle *QApplication::style() // Compile-time search for default style // QString style; -#ifdef QT_BUILD_INTERNAL QString envStyle = QString::fromLocal8Bit(qgetenv("QT_STYLE_OVERRIDE")); -#else - QString envStyle; -#endif if (!QApplicationPrivate::styleOverride.isEmpty()) { style = QApplicationPrivate::styleOverride; } else if (!envStyle.isEmpty()) { @@ -2010,7 +2006,8 @@ void QApplication::setActiveWindow(QWidget* act) * Returns 0 if a new focus widget could not be found. * Shared with QGraphicsProxyWidgetPrivate::findFocusChild() */ -QWidget *QApplicationPrivate::focusNextPrevChild_helper(QWidget *toplevel, bool next) +QWidget *QApplicationPrivate::focusNextPrevChild_helper(QWidget *toplevel, bool next, + bool *wrappingOccurred) { uint focus_flag = qt_tab_all_widgets() ? Qt::TabFocus : Qt::StrongFocus; @@ -2020,18 +2017,29 @@ QWidget *QApplicationPrivate::focusNextPrevChild_helper(QWidget *toplevel, bool QWidget *w = f; QWidget *test = f->d_func()->focus_next; + bool seenWindow = false; + bool focusWidgetAfterWindow = false; while (test && test != f) { + if (test->isWindow()) + seenWindow = true; + if ((test->focusPolicy() & focus_flag) == focus_flag && !(test->d_func()->extra && test->d_func()->extra->focus_proxy) && test->isVisibleTo(toplevel) && test->isEnabled() && !(w->windowType() == Qt::SubWindow && !w->isAncestorOf(test)) && (toplevel->windowType() != Qt::SubWindow || toplevel->isAncestorOf(test))) { w = test; + if (seenWindow) + focusWidgetAfterWindow = true; if (next) break; } test = test->d_func()->focus_next; } + + if (wrappingOccurred != 0) + *wrappingOccurred = next ? focusWidgetAfterWindow : !focusWidgetAfterWindow; + if (w == f) { if (qt_in_tab_key_event) { w->window()->setAttribute(Qt::WA_KeyboardFocusChange); @@ -3359,6 +3367,34 @@ bool QApplication::notify(QObject *receiver, QEvent *e) break; } #endif // QT_NO_GESTURES +#ifdef Q_OS_MAC + // Enable touch events on enter, disable on leave. + typedef void (*RegisterTouchWindowFn)(QWindow *, bool); + case QEvent::Enter: + if (receiver->isWidgetType()) { + QWidget *w = static_cast<QWidget *>(receiver); + if (w->testAttribute(Qt::WA_AcceptTouchEvents)) { + RegisterTouchWindowFn registerTouchWindow = reinterpret_cast<RegisterTouchWindowFn> + (platformNativeInterface()->nativeResourceFunctionForIntegration("registertouchwindow")); + if (registerTouchWindow) + registerTouchWindow(w->window()->windowHandle(), true); + } + } + res = d->notify_helper(receiver, e); + break; + case QEvent::Leave: + if (receiver->isWidgetType()) { + QWidget *w = static_cast<QWidget *>(receiver); + if (w->testAttribute(Qt::WA_AcceptTouchEvents)) { + RegisterTouchWindowFn registerTouchWindow = reinterpret_cast<RegisterTouchWindowFn> + (platformNativeInterface()->nativeResourceFunctionForIntegration("registertouchwindow")); + if (registerTouchWindow) + registerTouchWindow(w->window()->windowHandle(), false); + } + } + res = d->notify_helper(receiver, e); + break; +#endif default: res = d->notify_helper(receiver, e); break; @@ -3560,8 +3596,8 @@ int QApplication::doubleClickInterval() \since 4.2 \deprecated - Returns the current keyboard input direction. Replaced with QInputPanel::inputDirection() - \sa QInputPanel::inputDirection() + Returns the current keyboard input direction. Replaced with QInputMethod::inputDirection() + \sa QInputMethod::inputDirection() */ /*! @@ -3765,8 +3801,6 @@ private: bool QApplicationPrivate::translateTouchToMouse(QWidget *widget, QTouchEvent *event) { - Q_Q(QApplication); - // Check if the platform wants synthesized mouse events. if (!QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::SynthesizeMouseFromTouchEvents).toBool()) return false; @@ -3782,7 +3816,7 @@ bool QApplicationPrivate::translateTouchToMouse(QWidget *widget, QTouchEvent *ev const QPoint pos = widget->mapFromGlobal(p.screenPos().toPoint()); - QMouseEvent mouseEvent(eventType, pos, + QMouseEvent mouseEvent(eventType, pos, p.screenPos().toPoint(), Qt::LeftButton, Qt::LeftButton, event->modifiers()); mouseEvent.setAccepted(true); @@ -3797,7 +3831,7 @@ bool QApplicationPrivate::translateTouchToMouse(QWidget *widget, QTouchEvent *ev // Note it has to be a spontaneous event if we want the focus management // and input method support to behave properly. Quite some of the code // related to those aspect check for the spontaneous flag. - const bool res = q->sendSpontaneousEvent(widget, &mouseEvent); + const bool res = QCoreApplication::sendSpontaneousEvent(widget, &mouseEvent); event->setAccepted(mouseEvent.isAccepted()); if (mouseEvent.isAccepted()) diff --git a/src/widgets/kernel/qapplication.h b/src/widgets/kernel/qapplication.h index 29f5ddf455..83673eef4e 100644 --- a/src/widgets/kernel/qapplication.h +++ b/src/widgets/kernel/qapplication.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -55,8 +55,6 @@ #endif #include <QtGui/qguiapplication.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -247,6 +245,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QAPPLICATION_H diff --git a/src/widgets/kernel/qapplication_p.h b/src/widgets/kernel/qapplication_p.h index fbd96366fb..ca1bccb727 100644 --- a/src/widgets/kernel/qapplication_p.h +++ b/src/widgets/kernel/qapplication_p.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -165,7 +165,8 @@ public: void closePopup(QWidget *popup); void openPopup(QWidget *popup); static void setFocusWidget(QWidget *focus, Qt::FocusReason reason); - static QWidget *focusNextPrevChild_helper(QWidget *toplevel, bool next); + static QWidget *focusNextPrevChild_helper(QWidget *toplevel, bool next, + bool *wrappingOccurred = 0); #ifndef QT_NO_GRAPHICSVIEW // Maintain a list of all scenes to ensure font and palette propagation to diff --git a/src/widgets/kernel/qapplication_qpa.cpp b/src/widgets/kernel/qapplication_qpa.cpp index 6c3c5de55f..54eb443c43 100644 --- a/src/widgets/kernel/qapplication_qpa.cpp +++ b/src/widgets/kernel/qapplication_qpa.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qboxlayout.cpp b/src/widgets/kernel/qboxlayout.cpp index c3661f5c50..e1a7903628 100644 --- a/src/widgets/kernel/qboxlayout.cpp +++ b/src/widgets/kernel/qboxlayout.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -248,7 +248,7 @@ void QBoxLayoutPrivate::effectiveMargins(int *left, int *top, int *right, int *b if (right) r = qMax(r, wr.right() - lir.right()); } - } + } } #endif if (left) @@ -509,7 +509,7 @@ void QBoxLayoutPrivate::calcHfw(int w) \list \li setContentsMargins() sets the width of the outer border on - each side of the widget. This is the width of the reserved space + each side of the widget. This is the width of the reserved space along each of the QBoxLayout's four sides. \li setSpacing() sets the width between neighboring boxes. (You can use addSpacing() to get more space at a particular spot.) @@ -595,7 +595,7 @@ int QBoxLayout::spacing() const /*! Reimplements QLayout::setSpacing(). Sets the spacing - property to \a spacing. + property to \a spacing. \sa QLayout::setSpacing(), spacing() */ diff --git a/src/widgets/kernel/qboxlayout.h b/src/widgets/kernel/qboxlayout.h index 3ced397c1d..4c7b27a4ec 100644 --- a/src/widgets/kernel/qboxlayout.h +++ b/src/widgets/kernel/qboxlayout.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -49,8 +49,6 @@ #include <limits.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -141,6 +139,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QBOXLAYOUT_H diff --git a/src/widgets/kernel/qdesktopwidget.cpp b/src/widgets/kernel/qdesktopwidget.cpp index 63b0a3c873..649978a912 100644 --- a/src/widgets/kernel/qdesktopwidget.cpp +++ b/src/widgets/kernel/qdesktopwidget.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qdesktopwidget.h b/src/widgets/kernel/qdesktopwidget.h index c27e96a2d9..da44242b86 100644 --- a/src/widgets/kernel/qdesktopwidget.h +++ b/src/widgets/kernel/qdesktopwidget.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -44,8 +44,6 @@ #include <QtWidgets/qwidget.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -104,6 +102,4 @@ inline int QDesktopWidget::screenCount() const QT_END_NAMESPACE -QT_END_HEADER - #endif // QDESKTOPWIDGET_H diff --git a/src/widgets/kernel/qdesktopwidget.qdoc b/src/widgets/kernel/qdesktopwidget.qdoc index 15ddd3b32f..789a812afb 100644 --- a/src/widgets/kernel/qdesktopwidget.qdoc +++ b/src/widgets/kernel/qdesktopwidget.qdoc @@ -120,9 +120,9 @@ /*! \fn int QDesktopWidget::numScreens() const - + Returns the number of available screens. - + \obsolete This function is deprecated. Use screenCount instead. @@ -239,7 +239,7 @@ \brief the number of screens currently available on the system. \since 4.6 - + \sa screenCountChanged() */ @@ -265,6 +265,6 @@ \since 4.6 This signal is emitted when the number of screens changes to \a newCount. - + \sa screenCount */ diff --git a/src/widgets/kernel/qdesktopwidget_qpa.cpp b/src/widgets/kernel/qdesktopwidget_qpa.cpp index b71734bebb..64236321a4 100644 --- a/src/widgets/kernel/qdesktopwidget_qpa.cpp +++ b/src/widgets/kernel/qdesktopwidget_qpa.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qdesktopwidget_qpa_p.h b/src/widgets/kernel/qdesktopwidget_qpa_p.h index 9f0089616b..017934fbf1 100644 --- a/src/widgets/kernel/qdesktopwidget_qpa_p.h +++ b/src/widgets/kernel/qdesktopwidget_qpa_p.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -61,9 +61,8 @@ QT_BEGIN_NAMESPACE class QDesktopScreenWidget : public QWidget { Q_OBJECT public: - QDesktopScreenWidget(int screenNumber = -1) + QDesktopScreenWidget(int screenNumber = -1) : QWidget(0, Qt::Desktop) { - setWindowFlags(Qt::Desktop); setVisible(false); QTLWExtra *topData = d_func()->topData(); topData->screenIndex = screenNumber; diff --git a/src/widgets/kernel/qformlayout.cpp b/src/widgets/kernel/qformlayout.cpp index 9388532406..e2d25de537 100644 --- a/src/widgets/kernel/qformlayout.cpp +++ b/src/widgets/kernel/qformlayout.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qformlayout.h b/src/widgets/kernel/qformlayout.h index a206e90009..d59f71eb32 100644 --- a/src/widgets/kernel/qformlayout.h +++ b/src/widgets/kernel/qformlayout.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -44,8 +44,6 @@ #include <QtWidgets/QLayout> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -157,6 +155,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif diff --git a/src/widgets/kernel/qgesture.cpp b/src/widgets/kernel/qgesture.cpp index 24ae437b48..4baeae9021 100644 --- a/src/widgets/kernel/qgesture.cpp +++ b/src/widgets/kernel/qgesture.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -367,7 +367,7 @@ void QPanGesture::setAcceleration(qreal value) /*! \enum QPinchGesture::ChangeFlag - + This enum describes the changes that can occur to the properties of the gesture object. diff --git a/src/widgets/kernel/qgesture.h b/src/widgets/kernel/qgesture.h index 4384600f80..056fc35402 100644 --- a/src/widgets/kernel/qgesture.h +++ b/src/widgets/kernel/qgesture.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -52,8 +52,6 @@ #ifndef QT_NO_GESTURES -QT_BEGIN_HEADER - Q_DECLARE_METATYPE(Qt::GestureState) Q_DECLARE_METATYPE(Qt::GestureType) @@ -328,8 +326,6 @@ private: QT_END_NAMESPACE Q_DECLARE_METATYPE(QGesture::GestureCancelPolicy) -QT_END_HEADER - #endif // QT_NO_GESTURES #endif // QGESTURE_H diff --git a/src/widgets/kernel/qgesture_p.h b/src/widgets/kernel/qgesture_p.h index c842e279b5..c041af7317 100644 --- a/src/widgets/kernel/qgesture_p.h +++ b/src/widgets/kernel/qgesture_p.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qgesturemanager.cpp b/src/widgets/kernel/qgesturemanager.cpp index 528d6120cf..d90b187bf0 100644 --- a/src/widgets/kernel/qgesturemanager.cpp +++ b/src/widgets/kernel/qgesturemanager.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qgesturemanager_p.h b/src/widgets/kernel/qgesturemanager_p.h index 5c78932f1d..4ab631a921 100644 --- a/src/widgets/kernel/qgesturemanager_p.h +++ b/src/widgets/kernel/qgesturemanager_p.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qgesturerecognizer.cpp b/src/widgets/kernel/qgesturerecognizer.cpp index b6b0e3c1cb..88983e255b 100644 --- a/src/widgets/kernel/qgesturerecognizer.cpp +++ b/src/widgets/kernel/qgesturerecognizer.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qgesturerecognizer.h b/src/widgets/kernel/qgesturerecognizer.h index b85aa54a6b..a1ce86b50d 100644 --- a/src/widgets/kernel/qgesturerecognizer.h +++ b/src/widgets/kernel/qgesturerecognizer.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -47,8 +47,6 @@ #ifndef QT_NO_GESTURES -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -94,8 +92,6 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(QGestureRecognizer::Result) QT_END_NAMESPACE -QT_END_HEADER - #endif // QT_NO_GESTURES #endif // QGESTURERECOGNIZER_H diff --git a/src/widgets/kernel/qgridlayout.cpp b/src/widgets/kernel/qgridlayout.cpp index fb343264d2..12049f3303 100644 --- a/src/widgets/kernel/qgridlayout.cpp +++ b/src/widgets/kernel/qgridlayout.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qgridlayout.h b/src/widgets/kernel/qgridlayout.h index 9349c7807d..6a788d9cc8 100644 --- a/src/widgets/kernel/qgridlayout.h +++ b/src/widgets/kernel/qgridlayout.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -49,8 +49,6 @@ #include <limits.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -132,6 +130,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QGRIDLAYOUT_H diff --git a/src/widgets/kernel/qlayout.cpp b/src/widgets/kernel/qlayout.cpp index 493a04d2ba..d59a9db75d 100644 --- a/src/widgets/kernel/qlayout.cpp +++ b/src/widgets/kernel/qlayout.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -1270,7 +1270,7 @@ QRect QLayout::alignmentRect(const QRect &r) const Removes the widget \a widget from the layout. After this call, it is the caller's responsibility to give the widget a reasonable geometry or to put the widget back into a layout. - + \b{Note:} The ownership of \a widget remains the same as when it was added. diff --git a/src/widgets/kernel/qlayout.h b/src/widgets/kernel/qlayout.h index 09ddebeb2a..c293939bd3 100644 --- a/src/widgets/kernel/qlayout.h +++ b/src/widgets/kernel/qlayout.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -50,8 +50,6 @@ #include <limits.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -171,6 +169,4 @@ QT_END_NAMESPACE #include <QtWidgets/qboxlayout.h> #include <QtWidgets/qgridlayout.h> -QT_END_HEADER - #endif // QLAYOUT_H diff --git a/src/widgets/kernel/qlayout_p.h b/src/widgets/kernel/qlayout_p.h index e6d96a8253..9321bfc0dc 100644 --- a/src/widgets/kernel/qlayout_p.h +++ b/src/widgets/kernel/qlayout_p.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qlayoutengine.cpp b/src/widgets/kernel/qlayoutengine.cpp index 8fb625581b..8800da33b4 100644 --- a/src/widgets/kernel/qlayoutengine.cpp +++ b/src/widgets/kernel/qlayoutengine.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qlayoutengine_p.h b/src/widgets/kernel/qlayoutengine_p.h index beecf529fb..8a26b389df 100644 --- a/src/widgets/kernel/qlayoutengine_p.h +++ b/src/widgets/kernel/qlayoutengine_p.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qlayoutitem.cpp b/src/widgets/kernel/qlayoutitem.cpp index 31276d015d..223bcf1d9b 100644 --- a/src/widgets/kernel/qlayoutitem.cpp +++ b/src/widgets/kernel/qlayoutitem.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -150,7 +150,7 @@ QSizePolicy::operator QVariant() const \brief The QWidgetItem class is a layout item that represents a widget. \inmodule QtWidgets - + Normally, you don't need to use this class directly. Qt's built-in layout managers provide the following functions for manipulating widgets in layouts: @@ -446,20 +446,20 @@ void QWidgetItem::setGeometry(const QRect &rect) QRect r = !wid->testAttribute(Qt::WA_LayoutUsesWidgetRect) ? fromLayoutItemRect(wid->d_func(), rect) : rect; - const QSize widgetRectSurplus = r.size() - rect.size(); - - /* - For historical reasons, this code is done using widget rect - coordinates, not layout item rect coordinates. However, - QWidgetItem's sizeHint(), maximumSize(), and heightForWidth() - all work in terms of layout item rect coordinates, so we have to - add or subtract widgetRectSurplus here and there. The code could - be much simpler if we did everything using layout item rect - coordinates and did the conversion right before the call to - QWidget::setGeometry(). - */ - - QSize s = r.size().boundedTo(maximumSize() + widgetRectSurplus); + const QSize widgetRectSurplus = r.size() - rect.size(); + + /* + For historical reasons, this code is done using widget rect + coordinates, not layout item rect coordinates. However, + QWidgetItem's sizeHint(), maximumSize(), and heightForWidth() + all work in terms of layout item rect coordinates, so we have to + add or subtract widgetRectSurplus here and there. The code could + be much simpler if we did everything using layout item rect + coordinates and did the conversion right before the call to + QWidget::setGeometry(). + */ + + QSize s = r.size().boundedTo(maximumSize() + widgetRectSurplus); int x = r.x(); int y = r.y(); if (align & (Qt::AlignHorizontal_Mask | Qt::AlignVertical_Mask)) { @@ -474,8 +474,8 @@ void QWidgetItem::setGeometry(const QRect &rect) s.setWidth(qMin(s.width(), pref.width())); if (align & Qt::AlignVertical_Mask) { if (hasHeightForWidth()) - s.setHeight(qMin(s.height(), - heightForWidth(s.width() - widgetRectSurplus.width()) + s.setHeight(qMin(s.height(), + heightForWidth(s.width() - widgetRectSurplus.width()) + widgetRectSurplus.height())); else s.setHeight(qMin(s.height(), pref.height())); diff --git a/src/widgets/kernel/qlayoutitem.h b/src/widgets/kernel/qlayoutitem.h index b19a7c789f..4af57f1458 100644 --- a/src/widgets/kernel/qlayoutitem.h +++ b/src/widgets/kernel/qlayoutitem.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -47,12 +47,10 @@ #include <limits.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE -static const int QLAYOUTSIZE_MAX = INT_MAX/256/16; +static const Q_DECL_UNUSED int QLAYOUTSIZE_MAX = INT_MAX/256/16; class QLayout; class QLayoutItem; @@ -180,6 +178,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QLAYOUTITEM_H diff --git a/src/widgets/kernel/qshortcut.cpp b/src/widgets/kernel/qshortcut.cpp index 07e22e27e2..f323c682d1 100644 --- a/src/widgets/kernel/qshortcut.cpp +++ b/src/widgets/kernel/qshortcut.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qshortcut.h b/src/widgets/kernel/qshortcut.h index f5daa381f7..372cd9ff66 100644 --- a/src/widgets/kernel/qshortcut.h +++ b/src/widgets/kernel/qshortcut.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -45,8 +45,6 @@ #include <QtWidgets/qwidget.h> #include <QtGui/qkeysequence.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -101,6 +99,4 @@ protected: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSHORTCUT_H diff --git a/src/widgets/kernel/qsizepolicy.h b/src/widgets/kernel/qsizepolicy.h index 0a878674cc..2fe85cbe0c 100644 --- a/src/widgets/kernel/qsizepolicy.h +++ b/src/widgets/kernel/qsizepolicy.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -44,8 +44,6 @@ #include <QtCore/qobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -183,6 +181,4 @@ inline void QSizePolicy::transpose() { QT_END_NAMESPACE -QT_END_HEADER - #endif // QSIZEPOLICY_H diff --git a/src/widgets/kernel/qstackedlayout.cpp b/src/widgets/kernel/qstackedlayout.cpp index f38f0a6f08..9514877e50 100644 --- a/src/widgets/kernel/qstackedlayout.cpp +++ b/src/widgets/kernel/qstackedlayout.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qstackedlayout.h b/src/widgets/kernel/qstackedlayout.h index a8067b5bab..87715d10d8 100644 --- a/src/widgets/kernel/qstackedlayout.h +++ b/src/widgets/kernel/qstackedlayout.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -44,8 +44,6 @@ #include <QtWidgets/qlayout.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -111,6 +109,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QSTACKEDLAYOUT_H diff --git a/src/widgets/kernel/qstandardgestures.cpp b/src/widgets/kernel/qstandardgestures.cpp index 98fdfb4b75..e3131e7e56 100644 --- a/src/widgets/kernel/qstandardgestures.cpp +++ b/src/widgets/kernel/qstandardgestures.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qstandardgestures_p.h b/src/widgets/kernel/qstandardgestures_p.h index 61645f364a..70cd241ab4 100644 --- a/src/widgets/kernel/qstandardgestures_p.h +++ b/src/widgets/kernel/qstandardgestures_p.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qt_widgets_pch.h b/src/widgets/kernel/qt_widgets_pch.h index 144a5913cf..9e16d8f19e 100644 --- a/src/widgets/kernel/qt_widgets_pch.h +++ b/src/widgets/kernel/qt_widgets_pch.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qtooltip.cpp b/src/widgets/kernel/qtooltip.cpp index 69dd1f9e63..864ed6a555 100644 --- a/src/widgets/kernel/qtooltip.cpp +++ b/src/widgets/kernel/qtooltip.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qtooltip.h b/src/widgets/kernel/qtooltip.h index 3a09803598..25b138b855 100644 --- a/src/widgets/kernel/qtooltip.h +++ b/src/widgets/kernel/qtooltip.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -44,8 +44,6 @@ #include <QtWidgets/qwidget.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -72,6 +70,4 @@ public: QT_END_NAMESPACE -QT_END_HEADER - #endif // QTOOLTIP_H diff --git a/src/widgets/kernel/qwhatsthis.cpp b/src/widgets/kernel/qwhatsthis.cpp index 1152ef4f8d..b96bd024cb 100644 --- a/src/widgets/kernel/qwhatsthis.cpp +++ b/src/widgets/kernel/qwhatsthis.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qwhatsthis.h b/src/widgets/kernel/qwhatsthis.h index 7e41e5ab58..37887b8cd5 100644 --- a/src/widgets/kernel/qwhatsthis.h +++ b/src/widgets/kernel/qwhatsthis.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -45,8 +45,6 @@ #include <QtCore/qobject.h> #include <QtGui/qcursor.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -74,6 +72,4 @@ public: QT_END_NAMESPACE -QT_END_HEADER - #endif // QWHATSTHIS_H diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 5ec713140e..c2308b780f 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -354,6 +354,7 @@ void QWidgetPrivate::updateWidgetTransform() QPoint p = q->mapTo(q->topLevelWidget(), QPoint(0,0)); t.translate(p.x(), p.y()); qApp->inputMethod()->setInputItemTransform(t); + qApp->inputMethod()->setInputItemRectangle(q->rect()); } } @@ -677,7 +678,7 @@ void QWidget::setAutoFillBackground(bool enabled) (to move the keyboard focus), and passes on most of the other events to one of the more specialized handlers above. - Events and the mechanism used to deliver them are covered in + Events and the mechanism used to deliver them are covered in \l{The Event System}. \section1 Groups of Functions and Properties @@ -1082,7 +1083,8 @@ void QWidgetPrivate::adjustFlags(Qt::WindowFlags &flags, QWidget *w) else flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint | Qt::WindowFullscreenButtonHint; - + if (w->testAttribute(Qt::WA_TransparentForMouseEvents)) + flags |= Qt::WindowTransparentForInput; } void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) @@ -6137,10 +6139,34 @@ bool QWidget::focusNextPrevChild(bool next) if (d->extra && d->extra->proxyWidget) return d->extra->proxyWidget->focusNextPrevChild(next); #endif - QWidget *w = QApplicationPrivate::focusNextPrevChild_helper(this, next); + + bool wrappingOccurred = false; + QWidget *w = QApplicationPrivate::focusNextPrevChild_helper(this, next, + &wrappingOccurred); if (!w) return false; - w->setFocus(next ? Qt::TabFocusReason : Qt::BacktabFocusReason); + Qt::FocusReason reason = next ? Qt::TabFocusReason : Qt::BacktabFocusReason; + + /* If we are about to wrap the focus chain, give the platform + * implementation a chance to alter the wrapping behavior. This is + * especially needed when the window is embedded in a window created by + * another process. + */ + if (wrappingOccurred) { + QWindow *window = windowHandle(); + if (window != 0) { + QWindowPrivate *winp = qt_window_private(window); + + if (winp->platformWindow != 0) { + QFocusEvent event(QEvent::FocusIn, reason); + event.ignore(); + winp->platformWindow->windowEvent(&event); + if (event.isAccepted()) return true; + } + } + } + + w->setFocus(reason); return true; } @@ -6916,14 +6942,15 @@ void QWidget::setUpdatesEnabled(bool enable) Shows the widget and its child widgets. This function is equivalent to setVisible(true) in the normal case, and equivalent to showFullScreen() if the QStyleHints::showIsFullScreen() hint - is true. + is true and the window is not a popup. \sa raise(), showEvent(), hide(), setVisible(), showMinimized(), showMaximized(), - showNormal(), isVisible() + showNormal(), isVisible(), windowFlags() */ void QWidget::show() { - if (isWindow() && qApp->styleHints()->showIsFullScreen()) + bool isPopup = data->window_flags & Qt::Popup & ~Qt::Window; + if (isWindow() && !isPopup && qApp->styleHints()->showIsFullScreen()) showFullScreen(); else setVisible(true); @@ -8232,7 +8259,7 @@ bool QWidget::event(QEvent *event) #ifndef QT_NO_PROPERTIES case QEvent::DynamicPropertyChange: { const QByteArray &propName = static_cast<QDynamicPropertyChangeEvent *>(event)->propertyName(); - if (!qstrncmp(propName, "_q_customDpi", 12) && propName.length() == 13) { + if (propName.length() == 13 && !qstrncmp(propName, "_q_customDpi", 12)) { uint value = property(propName.constData()).toUInt(); if (!d->extra) d->createExtra(); @@ -8574,6 +8601,10 @@ void QWidget::focusOutEvent(QFocusEvent *) { if (focusPolicy() != Qt::NoFocus || !isWindow()) update(); + + // automatically hide the SIP + if (qApp->autoSipEnabled() && testAttribute(Qt::WA_InputMethodEnabled)) + qApp->inputMethod()->hide(); } /*! @@ -8796,7 +8827,7 @@ void QWidget::inputMethodEvent(QInputMethodEvent *event) \a query specifies which property is queried. - \sa inputMethodEvent(), QInputMethodEven, inputMethodHints + \sa inputMethodEvent(), QInputMethodEvent, QInputMethodQueryEvent, inputMethodHints */ QVariant QWidget::inputMethodQuery(Qt::InputMethodQuery query) const { @@ -9096,7 +9127,7 @@ QLayout *QWidget::layout() const existing layout manager (returned by layout()) before you can call setLayout() with the new layout. - If \a layout is the layout manger on a different widget, setLayout() + If \a layout is the layout manager on a different widget, setLayout() will reparent the layout and make it the layout manager for this widget. Example: @@ -9254,7 +9285,7 @@ int QWidget::heightForWidth(int w) const \since 5.0 Returns true if the widget's preferred height depends on its width; otherwise returns false. -*/ +*/ bool QWidget::hasHeightForWidth() const { Q_D(const QWidget); diff --git a/src/widgets/kernel/qwidget.h b/src/widgets/kernel/qwidget.h index 25dac1ed5e..f90f2ee5f5 100644 --- a/src/widgets/kernel/qwidget.h +++ b/src/widgets/kernel/qwidget.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -60,8 +60,6 @@ #include <QtGui/qevent.h> #endif -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -593,6 +591,8 @@ public: QWindow *windowHandle() const; + static QWidget *createWindowContainer(QWindow *window, QWidget *parent=0, Qt::WindowFlags flags=0); + friend class QDesktopScreenWidget; Q_SIGNALS: @@ -704,6 +704,8 @@ private: friend class QStyleSheetStyle; friend struct QWidgetExceptionCleaner; friend class QWidgetWindow; + friend class QAccessibleWidget; + friend class QAccessibleTable; #ifndef QT_NO_GESTURES friend class QGestureManager; friend class QWinNativePanGestureRecognizer; @@ -855,6 +857,4 @@ inline bool QWidget::testAttribute(Qt::WidgetAttribute attribute) const QT_END_NAMESPACE -QT_END_HEADER - #endif // QWIDGET_H diff --git a/src/widgets/kernel/qwidget_p.h b/src/widgets/kernel/qwidget_p.h index 37f295bc9f..50f32af8b0 100644 --- a/src/widgets/kernel/qwidget_p.h +++ b/src/widgets/kernel/qwidget_p.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qwidget_qpa.cpp b/src/widgets/kernel/qwidget_qpa.cpp index 84693d02a5..1374d25cef 100644 --- a/src/widgets/kernel/qwidget_qpa.cpp +++ b/src/widgets/kernel/qwidget_qpa.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -109,7 +109,10 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO win->setFlags(data.window_flags); fixPosIncludesFrame(); - win->setGeometry(q->geometry()); + if (q->testAttribute(Qt::WA_Moved)) + win->setGeometry(q->geometry()); + else + win->resize(q->size()); win->setScreen(QGuiApplication::screens().value(topData()->screenIndex, 0)); if (q->testAttribute(Qt::WA_TranslucentBackground)) { @@ -466,19 +469,6 @@ void QWidget::activateWindow() wnd->requestActivate(); } -// Position top level windows at the center, avoid showing -// Windows at the default 0,0 position excluding the frame. -static inline QRect positionTopLevelWindow(QRect geometry, const QScreen *screen) -{ - if (screen && geometry.x() == 0 && geometry.y() == 0) { - const QRect availableGeometry = screen->availableGeometry(); - if (availableGeometry.width() > geometry.width() - && availableGeometry.height() > geometry.height()) - geometry.moveCenter(availableGeometry.center()); - } - return geometry; -} - // move() was invoked with Qt::WA_WState_Created not set (frame geometry // unknown), that is, crect has a position including the frame. // If we can determine the frame strut, fix that and clear the flag. @@ -529,16 +519,16 @@ void QWidgetPrivate::show_sys() if (q->isWindow()) fixPosIncludesFrame(); QRect geomRect = q->geometry(); - if (q->isWindow()) { - if (!q->testAttribute(Qt::WA_Moved)) - geomRect = positionTopLevelWindow(geomRect, window->screen()); - } else { + if (!q->isWindow()) { QPoint topLeftOfWindow = q->mapTo(q->nativeParentWidget(),QPoint()); geomRect.moveTopLeft(topLeftOfWindow); } const QRect windowRect = window->geometry(); if (windowRect != geomRect) { - window->setGeometry(geomRect); + if (q->testAttribute(Qt::WA_Moved)) + window->setGeometry(geomRect); + else + window->resize(geomRect.size()); } if (QBackingStore *store = q->backingStore()) { @@ -887,7 +877,12 @@ void QWidgetPrivate::createTLSysExtra() extra->topextra->window->setMinimumSize(QSize(extra->minw, extra->minh)); if (extra->maxw != QWIDGETSIZE_MAX || extra->maxh != QWIDGETSIZE_MAX) extra->topextra->window->setMaximumSize(QSize(extra->maxw, extra->maxh)); +#ifdef Q_OS_WIN + if (q->inherits("QTipLabel") || q->inherits("QAlphaWidget")) + extra->topextra->window->setProperty("_q_windowsDropShadow", QVariant(true)); +#endif } + } void QWidgetPrivate::deleteTLSysExtra() @@ -999,6 +994,12 @@ static inline void applyCursor(QWidget *w, QCursor c) window->setCursor(c); } +static inline void unsetCursor(QWidget *w) +{ + if (QWindow *window = w->windowHandle()) + window->unsetCursor(); +} + void qt_qpa_set_cursor(QWidget *w, bool force) { if (!w->testAttribute(Qt::WA_WState_Created)) @@ -1032,11 +1033,11 @@ void qt_qpa_set_cursor(QWidget *w, bool force) else // Enforce the windows behavior of clearing the cursor on // disabled widgets. - applyCursor(nativeParent, Qt::ArrowCursor); + unsetCursor(nativeParent); } else { - applyCursor(nativeParent, Qt::ArrowCursor); + unsetCursor(nativeParent); } } -#endif //QT_NO_CURSOR +#endif //QT_NO_CURSOR QT_END_NAMESPACE diff --git a/src/widgets/kernel/qwidgetaction.cpp b/src/widgets/kernel/qwidgetaction.cpp index fc82fd09f2..7ccb4e2a5c 100644 --- a/src/widgets/kernel/qwidgetaction.cpp +++ b/src/widgets/kernel/qwidgetaction.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qwidgetaction.h b/src/widgets/kernel/qwidgetaction.h index 14f1bfaf7f..7fc24bab9b 100644 --- a/src/widgets/kernel/qwidgetaction.h +++ b/src/widgets/kernel/qwidgetaction.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -44,8 +44,6 @@ #include <QtWidgets/qaction.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -61,13 +59,13 @@ class Q_WIDGETS_EXPORT QWidgetAction : public QAction public: explicit QWidgetAction(QObject *parent); virtual ~QWidgetAction(); - + void setDefaultWidget(QWidget *w); QWidget *defaultWidget() const; QWidget *requestWidget(QWidget *parent); void releaseWidget(QWidget *widget); - + protected: virtual bool event(QEvent *); virtual bool eventFilter(QObject *, QEvent *); @@ -85,6 +83,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QWIDGETACTION_H diff --git a/src/widgets/kernel/qwidgetaction_p.h b/src/widgets/kernel/qwidgetaction_p.h index a95fe07534..8f591bf320 100644 --- a/src/widgets/kernel/qwidgetaction_p.h +++ b/src/widgets/kernel/qwidgetaction_p.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -66,7 +66,7 @@ public: QList<QWidget *> createdWidgets; uint defaultWidgetInUse : 1; uint autoCreated : 1; // created by QToolBar::addWidget and the like - + inline void _q_widgetDestroyed(QObject *o) { createdWidgets.removeAll(static_cast<QWidget *>(o)); } diff --git a/src/widgets/kernel/qwidgetbackingstore.cpp b/src/widgets/kernel/qwidgetbackingstore.cpp index 294ef9f28c..02fa80bef6 100644 --- a/src/widgets/kernel/qwidgetbackingstore.cpp +++ b/src/widgets/kernel/qwidgetbackingstore.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qwidgetbackingstore_p.h b/src/widgets/kernel/qwidgetbackingstore_p.h index 00016a8e7d..39583c8caa 100644 --- a/src/widgets/kernel/qwidgetbackingstore_p.h +++ b/src/widgets/kernel/qwidgetbackingstore_p.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qwidgetsfunctions_wince.h b/src/widgets/kernel/qwidgetsfunctions_wince.h index 5d3640ae75..ca742e296a 100644 --- a/src/widgets/kernel/qwidgetsfunctions_wince.h +++ b/src/widgets/kernel/qwidgetsfunctions_wince.h @@ -40,14 +40,15 @@ ****************************************************************************/ #ifndef QWIDGETSFUNCTIONS_WCE_H #define QWIDGETSFUNCTIONS_WCE_H + +#include <QtCore/qglobal.h> + #ifdef Q_OS_WINCE #include <QtCore/qfunctions_wince.h> #ifdef QT_BUILD_GUI_LIB -QT_BEGIN_HEADER QT_BEGIN_NAMESPACE QT_END_NAMESPACE -QT_END_HEADER #endif diff --git a/src/widgets/kernel/qwidgetsvariant.cpp b/src/widgets/kernel/qwidgetsvariant.cpp index b5b5999c2b..5ac46c1f59 100644 --- a/src/widgets/kernel/qwidgetsvariant.cpp +++ b/src/widgets/kernel/qwidgetsvariant.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp index 50b61beb05..ddb570d6c7 100644 --- a/src/widgets/kernel/qwidgetwindow.cpp +++ b/src/widgets/kernel/qwidgetwindow.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -52,6 +52,8 @@ QT_BEGIN_NAMESPACE +Q_WIDGETS_EXPORT extern bool qt_tab_all_widgets(); + QWidget *qt_button_down = 0; // widget got last button-down static QWidget *qt_tablet_target = 0; @@ -123,6 +125,8 @@ bool QWidgetWindow::event(QEvent *event) // these should not be sent to QWidget, the corresponding events // are sent by QApplicationPrivate::notifyActiveWindowChange() case QEvent::FocusIn: + handleFocusInEvent(static_cast<QFocusEvent *>(event)); + // Fallthrough case QEvent::FocusOut: { #ifndef QT_NO_ACCESSIBILITY QAccessible::State state; @@ -284,6 +288,42 @@ void QWidgetWindow::handleEnterLeaveEvent(QEvent *event) } } +QWidget *QWidgetWindow::getFocusWidget(FocusWidgets fw) +{ + QWidget *tlw = m_widget; + QWidget *w = tlw->nextInFocusChain(); + + QWidget *last = tlw; + + uint focus_flag = qt_tab_all_widgets() ? Qt::TabFocus : Qt::StrongFocus; + + while (w != tlw) + { + if (((w->focusPolicy() & focus_flag) == focus_flag) + && w->isVisibleTo(m_widget) && w->isEnabled()) + { + last = w; + if (fw == FirstFocusWidget) + break; + } + w = w->nextInFocusChain(); + } + + return last; +} + +void QWidgetWindow::handleFocusInEvent(QFocusEvent *e) +{ + QWidget *focusWidget = 0; + if (e->reason() == Qt::BacktabFocusReason) + focusWidget = getFocusWidget(LastFocusWidget); + else if (e->reason() == Qt::TabFocusReason) + focusWidget = getFocusWidget(FirstFocusWidget); + + if (focusWidget != 0) + focusWidget->setFocus(); +} + void QWidgetWindow::handleNonClientAreaMouseEvent(QMouseEvent *e) { QApplication::sendSpontaneousEvent(m_widget, e); @@ -352,6 +392,27 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event) && qt_replay_popup_mouse_event) { if (m_widget->windowType() != Qt::Popup) qt_button_down = 0; + if (event->type() == QEvent::MouseButtonPress) { + // the popup disappeared, replay the mouse press event + QWidget *w = QApplication::widgetAt(event->globalPos()); + if (w && !QApplicationPrivate::isBlockedByModal(w)) { + // activate window of the widget under mouse pointer + if (!w->isActiveWindow()) { + w->activateWindow(); + w->raise(); + } + + QWindow *win = w->windowHandle(); + if (!win) + win = w->nativeParentWidget()->windowHandle(); + if (win && win->geometry().contains(event->globalPos())) { + const QPoint localPos = win->mapFromGlobal(event->globalPos()); + QMouseEvent e(QEvent::MouseButtonPress, localPos, localPos, event->globalPos(), event->button(), event->buttons(), event->modifiers()); + e.setTimestamp(event->timestamp()); + QApplication::sendSpontaneousEvent(win, &e); + } + } + } qt_replay_popup_mouse_event = false; #ifndef QT_NO_CONTEXTMENU } else if (event->type() == QEvent::MouseButtonPress diff --git a/src/widgets/kernel/qwidgetwindow_qpa_p.h b/src/widgets/kernel/qwidgetwindow_qpa_p.h index 7e40ded8c8..cb7bef8f3e 100644 --- a/src/widgets/kernel/qwidgetwindow_qpa_p.h +++ b/src/widgets/kernel/qwidgetwindow_qpa_p.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -47,8 +47,6 @@ #include <QtCore/private/qobject_p.h> #include <QtGui/private/qevent_p.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE @@ -72,6 +70,7 @@ protected: void handleCloseEvent(QCloseEvent *); void handleEnterLeaveEvent(QEvent *); + void handleFocusInEvent(QFocusEvent *); void handleKeyEvent(QKeyEvent *); void handleMouseEvent(QMouseEvent *); void handleNonClientAreaMouseEvent(QMouseEvent *); @@ -102,6 +101,12 @@ private slots: private: void updateGeometry(); + enum FocusWidgets { + FirstFocusWidget, + LastFocusWidget + }; + QWidget *getFocusWidget(FocusWidgets fw); + QWidget *m_widget; QPointer<QWidget> m_implicit_mouse_grabber; #ifndef QT_NO_DRAGANDDROP @@ -111,6 +116,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QWIDGETWINDOW_QPA_P_H diff --git a/src/widgets/kernel/qwindowcontainer.cpp b/src/widgets/kernel/qwindowcontainer.cpp new file mode 100644 index 0000000000..b02b05552f --- /dev/null +++ b/src/widgets/kernel/qwindowcontainer.cpp @@ -0,0 +1,218 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtWidgets module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwindowcontainer_p.h" +#include "qwidget_p.h" +#include <QtGui/qwindow.h> + +QT_BEGIN_NAMESPACE + +class QWindowContainerPrivate : public QWidgetPrivate +{ +public: + Q_DECLARE_PUBLIC(QWindowContainer) + + QWindowContainerPrivate() : window(0), oldFocusWindow(0) { } + ~QWindowContainerPrivate() { } + + QPointer<QWindow> window; + QWindow *oldFocusWindow; +}; + + + +/*! + \fn QWidget *QWidget::createWindowContainer(QWindow *window, QWidget *parent, Qt::WindowFlags flags); + + Creates a QWidget that makes it possible to embed \a window into + a QWidget-based application. + + The window container is created as a child of \a parent and with + window flags \a flags. + + Once the window has been embedded into the container, the + container will control the window's geometry and + visibility. Explicit calls to QWindow::setGeometry(), + QWindow::show() or QWindow::hide() on an embedded window is not + recommended. + + The container takes over ownership of \a window. The window can + be removed from the window container with a call to + QWindow::setParent(). + + The window container has a number of known limitations: + + \list + + \li Stacking order; The embedded window will stack on top of the + widget hierarchy as an opaque box. The stacking order of multiple + overlapping window container instances is undefined. + + \li Window Handles; The window container will explicitly invoke + winId() which will force the use of native window handles + inside the application. See \l {Native Widgets vs Alien Widgets} + {QWidget documentation} for more details. + + \li Rendering Integration; The window container does not interoperate + with QGraphicsProxyWidget, QWidget::render() or similar functionality. + + \li Focus Handling; It is possible to let the window container + instance have any focus policy and it will delegate focus to the + window via a call to QWindow::requestActivate(). However, + returning to the normal focus chain from the QWindow instance will + be up to the QWindow instance implementation itself. For instance, + when entering a Qt Quick based window with tab focus, it is quite + likely that further tab presses will only cycle inside the QML + application. Also, whether QWindow::requestActivate() actually + gives the window focus, is platform dependent. + + \li Using many window container instances in a QWidget-based + application can greatly hurt the overall performance of the + application. + + \endlist + */ + +QWidget *QWidget::createWindowContainer(QWindow *window, QWidget *parent, Qt::WindowFlags flags) +{ + return new QWindowContainer(window, parent, flags); +} + + + +/*! + \internal + */ + +QWindowContainer::QWindowContainer(QWindow *embeddedWindow, QWidget *parent, Qt::WindowFlags flags) + : QWidget(*new QWindowContainerPrivate, parent, flags) +{ + Q_D(QWindowContainer); + if (!embeddedWindow) { + qWarning("QWindowContainer: embedded window cannot be null"); + return; + } + + d->window = embeddedWindow; + + // We force this window to become a native window and reparent the + // window directly to it. This is done so that the order in which + // the QWindowContainer is added to a QWidget tree and when it + // gets a window does not matter. + winId(); + d->window->setParent(windowHandle()); + + connect(QGuiApplication::instance(), SIGNAL(focusWindowChanged(QWindow *)), this, SLOT(focusWindowChanged(QWindow *))); +} + + + +/*! + \internal + */ + +QWindowContainer::~QWindowContainer() +{ + Q_D(QWindowContainer); + delete d->window; +} + + + +/*! + \internal + */ + +void QWindowContainer::focusWindowChanged(QWindow *focusWindow) +{ + Q_D(QWindowContainer); + d->oldFocusWindow = focusWindow; +} + + + +/*! + \internal + */ + +bool QWindowContainer::event(QEvent *e) +{ + Q_D(QWindowContainer); + if (!d->window) + return QWidget::event(e); + + QEvent::Type type = e->type(); + switch (type) { + case QEvent::ChildRemoved: { + QChildEvent *ce = static_cast<QChildEvent *>(e); + if (ce->child() == d->window) + d->window = 0; + break; + } + // The only thing we are interested in is making sure our sizes stay + // in sync, so do a catch-all case. + case QEvent::Resize: + case QEvent::Move: + case QEvent::PolishRequest: + d->window->setGeometry(0, 0, width(), height()); + break; + case QEvent::Show: + d->window->show(); + break; + case QEvent::Hide: + d->window->hide(); + break; + case QEvent::FocusIn: + if (d->oldFocusWindow != d->window) { + d->window->requestActivate(); + } else { + QWidget *next = nextInFocusChain(); + next->setFocus(); + } + break; + default: + break; + } + + return QWidget::event(e); +} + +QT_END_NAMESPACE diff --git a/src/widgets/kernel/qwindowcontainer_p.h b/src/widgets/kernel/qwindowcontainer_p.h new file mode 100644 index 0000000000..37c023fc1d --- /dev/null +++ b/src/widgets/kernel/qwindowcontainer_p.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtWidgets module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWCONTAINER_H +#define QWINDOWCONTAINER_H + +#include <QtWidgets/qwidget.h> + +QT_BEGIN_NAMESPACE + +class QWindowContainerPrivate; + +class QWindowContainer : public QWidget +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QWindowContainer) + +public: + explicit QWindowContainer(QWindow *embeddedWindow, QWidget *parent = 0, Qt::WindowFlags f = 0); + ~QWindowContainer(); + +protected: + bool event(QEvent *ev); + +private slots: + void focusWindowChanged(QWindow *focusWindow); +}; + +QT_END_NAMESPACE + +#endif // QWINDOWCONTAINER_H |