summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java3
-rw-r--r--src/concurrent/qtconcurrentfunctionwrappers.h84
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_tools_qrect.cpp4
-rw-r--r--src/corelib/global/qfeatures.txt956
-rw-r--r--src/corelib/io/qfilesystemengine_unix.cpp96
-rw-r--r--src/corelib/io/qloggingregistry.cpp22
-rw-r--r--src/corelib/io/qloggingregistry_p.h1
-rw-r--r--src/corelib/io/qprocess_win.cpp3
-rw-r--r--src/corelib/io/qurl.cpp6
-rw-r--r--src/corelib/kernel/qeventdispatcher_cf.mm5
-rw-r--r--src/corelib/kernel/qeventdispatcher_cf_p.h9
-rw-r--r--src/corelib/mimetypes/qmimeprovider.cpp5
-rw-r--r--src/corelib/plugin/qfactoryloader_p.h11
-rw-r--r--src/corelib/plugin/qlibrary.cpp1
-rw-r--r--src/corelib/plugin/qlibrary_p.h13
-rw-r--r--src/corelib/plugin/qpluginloader.cpp2
-rw-r--r--src/corelib/thread/qreadwritelock.cpp6
-rw-r--r--src/corelib/tools/qfreelist_p.h4
-rw-r--r--src/corelib/tools/qlocale.cpp1
-rw-r--r--src/corelib/tools/qrect.cpp6
-rw-r--r--src/corelib/tools/qtimezone.cpp14
-rw-r--r--src/corelib/tools/qvarlengtharray.h20
-rw-r--r--src/gui/configure.json7
-rw-r--r--src/gui/text/qtextdocument_p.cpp2
-rw-r--r--src/gui/text/qtextformat.cpp17
-rw-r--r--src/gui/text/qtextformat_p.h5
-rw-r--r--src/network/configure.json34
-rw-r--r--src/network/socket/qnativesocketengine_unix.cpp14
-rw-r--r--src/network/socket/qnativesocketengine_win.cpp14
-rw-r--r--src/network/ssl/ssl.pri16
-rw-r--r--src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp3
-rw-r--r--src/plugins/platforms/android/qandroidplatformopenglcontext.cpp4
-rw-r--r--src/plugins/platforms/cocoa/qcocoadrag.mm4
-rw-r--r--src/plugins/platforms/vnc/qvncclient.cpp6
-rw-r--r--src/plugins/platforms/vnc/qvncscreen.cpp7
-rw-r--r--src/plugins/platforms/vnc/qvncscreen.h2
-rw-r--r--src/sql/configure.json7
-rw-r--r--src/widgets/styles/qmacstyle_mac.mm7
-rw-r--r--src/widgets/widgets/qdockarealayout.cpp2
-rw-r--r--src/widgets/widgets/qdockwidget.cpp13
-rw-r--r--src/widgets/widgets/qdockwidget_p.h1
-rw-r--r--src/widgets/widgets/qmainwindowlayout.cpp9
42 files changed, 320 insertions, 1126 deletions
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
index bfdbaed43f..e0878f078f 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
@@ -276,6 +276,9 @@ public class QtActivityDelegate
if (m_softInputMode != 0) {
m_activity.getWindow().setSoftInputMode(m_softInputMode);
+ final boolean softInputIsHidden = (m_softInputMode & WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) != 0;
+ if (softInputIsHidden)
+ return;
} else {
if (height > visibleHeight)
m_activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
diff --git a/src/concurrent/qtconcurrentfunctionwrappers.h b/src/concurrent/qtconcurrentfunctionwrappers.h
index a08be69123..111933410b 100644
--- a/src/concurrent/qtconcurrentfunctionwrappers.h
+++ b/src/concurrent/qtconcurrentfunctionwrappers.h
@@ -192,6 +192,32 @@ QtConcurrent::ConstMemberFunctionWrapper<T, C> createFunctionWrapper(T (C::*func
return QtConcurrent::ConstMemberFunctionWrapper<T, C>(func);
}
+#if defined(__cpp_noexcept_function_type) && __cpp_noexcept_function_type >= 201510
+template <typename T, typename U>
+QtConcurrent::FunctionWrapper1<T, U> createFunctionWrapper(T (*func)(U) noexcept)
+{
+ return QtConcurrent::FunctionWrapper1<T, U>(func);
+}
+
+template <typename T, typename C>
+QtConcurrent::MemberFunctionWrapper<T, C> createFunctionWrapper(T (C::*func)() noexcept)
+{
+ return QtConcurrent::MemberFunctionWrapper<T, C>(func);
+}
+
+template <typename T, typename C, typename U>
+QtConcurrent::MemberFunctionWrapper1<T, C, U> createFunctionWrapper(T (C::*func)(U) noexcept)
+{
+ return QtConcurrent::MemberFunctionWrapper1<T, C, U>(func);
+}
+
+template <typename T, typename C>
+QtConcurrent::ConstMemberFunctionWrapper<T, C> createFunctionWrapper(T (C::*func)() const noexcept)
+{
+ return QtConcurrent::ConstMemberFunctionWrapper<T, C>(func);
+}
+#endif
+
struct PushBackWrapper
{
typedef void result_type;
@@ -231,6 +257,20 @@ struct ReduceResultType<T(C::*)(U)>
typedef C ResultType;
};
+#if defined(__cpp_noexcept_function_type) && __cpp_noexcept_function_type >= 201510
+template <class U, class V>
+struct ReduceResultType<void(*)(U&,V) noexcept>
+{
+ typedef U ResultType;
+};
+
+template <class T, class C, class U>
+struct ReduceResultType<T(C::*)(U) noexcept>
+{
+ typedef C ResultType;
+};
+#endif
+
template <class InputSequence, class MapFunctor>
struct MapResultType
{
@@ -249,6 +289,20 @@ struct MapResultType<void, T(C::*)() const>
typedef T ResultType;
};
+#if defined(__cpp_noexcept_function_type) && __cpp_noexcept_function_type >= 201510
+template <class U, class V>
+struct MapResultType<void, U (*)(V) noexcept>
+{
+ typedef U ResultType;
+};
+
+template <class T, class C>
+struct MapResultType<void, T(C::*)() const noexcept>
+{
+ typedef T ResultType;
+};
+#endif
+
#ifndef QT_NO_TEMPLATE_TEMPLATE_PARAMETERS
template <template <typename> class InputSequence, typename MapFunctor, typename T>
@@ -269,6 +323,21 @@ struct MapResultType<InputSequence<T>, U(C::*)() const>
typedef InputSequence<U> ResultType;
};
+#if defined(__cpp_noexcept_function_type) && __cpp_noexcept_function_type >= 201510
+
+template <template <typename> class InputSequence, class T, class U, class V>
+struct MapResultType<InputSequence<T>, U (*)(V) noexcept>
+{
+ typedef InputSequence<U> ResultType;
+};
+
+template <template <typename> class InputSequence, class T, class U, class C>
+struct MapResultType<InputSequence<T>, U(C::*)() const noexcept>
+{
+ typedef InputSequence<U> ResultType;
+};
+#endif
+
#endif // QT_NO_TEMPLATE_TEMPLATE_PARAMETER
template <class MapFunctor>
@@ -289,6 +358,21 @@ struct MapResultType<QStringList, U(C::*)() const>
typedef QList<U> ResultType;
};
+#if defined(__cpp_noexcept_function_type) && __cpp_noexcept_function_type >= 201510
+
+template <class U, class V>
+struct MapResultType<QStringList, U (*)(V) noexcept>
+{
+ typedef QList<U> ResultType;
+};
+
+template <class U, class C>
+struct MapResultType<QStringList, U(C::*)() const noexcept>
+{
+ typedef QList<U> ResultType;
+};
+#endif
+
} // namespace QtPrivate.
#endif //Q_QDOC
diff --git a/src/corelib/doc/snippets/code/src_corelib_tools_qrect.cpp b/src/corelib/doc/snippets/code/src_corelib_tools_qrect.cpp
index 1c7f9d4b54..4bdaa4d657 100644
--- a/src/corelib/doc/snippets/code/src_corelib_tools_qrect.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_tools_qrect.cpp
@@ -55,6 +55,6 @@ QRect r2(QPoint(100, 200), QSize(11, 16));
//! [1]
-QRectF r1(100, 200, 11, 16);
-QRectF r2(QPoint(100, 200), QSize(11, 16));
+QRectF r1(100.0, 200.1, 11.2, 16.3);
+QRectF r2(QPointF(100.0, 200.1), QSizeF(11.2, 16.3));
//! [1]
diff --git a/src/corelib/global/qfeatures.txt b/src/corelib/global/qfeatures.txt
deleted file mode 100644
index 458f87ec16..0000000000
--- a/src/corelib/global/qfeatures.txt
+++ /dev/null
@@ -1,956 +0,0 @@
-# Generic entry format
-#Feature: UPPERCASENAME (for the #define)
-#Description: One sentence description of what this does.
-#Section: Categorization
-#Requires: UPPERCASENAME...
-#Name: CamelCaseName (often a class name)
-#SeeAlso: UPPERCASENAME... (currently unused)
-
-# Kernel
-
-Feature: PROPERTIES
-Description: Supports scripting Qt-based applications.
-Section: Kernel
-Requires:
-Name: Properties
-
-Feature: TEXTHTMLPARSER
-Description: Parser for HTML
-Section: Kernel
-Requires:
-Name: HtmlParser
-
-Feature: TEXTODFWRITER
-Description: Provides an ODF writer
-Section: Kernel
-Requires: XMLSTREAMWRITER
-Name: OdfWriter
-
-Feature: CSSPARSER
-Description: Parser for Style Sheets
-Section: Kernel
-Requires:
-Name: CssParser
-
-Feature: REGULAREXPRESSION
-Description: Perl-compatible regular expression APIs
-Section: Kernel
-Requires:
-Name: QRegularExpression
-
-Feature: CONCURRENT
-Description: Provides a high-level multi-threaded APIs
-Section: Kernel
-Requires:
-Name: QtConcurrent
-
-Feature: DRAGANDDROP
-Description: Supports the drag and drop mechansim.
-Section: Kernel
-Requires: IMAGEFORMAT_XPM
-Name: Drag and drop
-
-Feature: SESSIONMANAGER
-Description: Supports session management.
-Section: Kernel
-Requires:
-Name: Session Manager
-
-Feature: SHORTCUT
-Description: Supports keyboard accelerators and shortcuts.
-Section: Kernel
-Requires:
-Name: QShortcut
-
-Feature: ACTION
-Description: Supports widget actions.
-Section: Kernel
-Requires:
-Name: QAction
-
-Feature: CURSOR
-Description: Supports mouse cursors.
-Section: Kernel
-Requires:
-Name: QCursor
-
-Feature: CLIPBOARD
-Description: Supports cut and paste operations.
-Section: Kernel
-Requires:
-Name: QClipboard
-
-Feature: WHEELEVENT
-Description: Supports wheel events.
-Section: Kernel
-Requires:
-Name: QWheelEvent
-
-Feature: TABLETEVENT
-Description: Supports tablet events.
-Section: Kernel
-Requires:
-Name: QTabletEvent
-
-Feature: EFFECTS
-Description: Supports special widget effects (e.g. fading and scrolling).
-Section: Kernel
-Requires:
-Name: Effects
-
-Feature: SHAREDMEMORY
-Description: Provides access to a shared memory segment.
-Section: Kernel
-Requires:
-Name: QSharedMemory
-
-Feature: SYSTEMSEMAPHORE
-Description: Provides a general counting system semaphore.
-Section: Kernel
-Requires: SHAREDMEMORY
-Name: QSystemSemaphore
-
-Feature: XMLSTREAM
-Description: Provides a simple streaming API for XML.
-Section: Kernel
-Requires:
-Name: XML Streaming APIs
-
-Feature: XMLSTREAMREADER
-Description: Provides a well-formed XML parser with a simple streaming API.
-Section: Kernel
-Requires: XMLSTREAM
-Name: QXmlStreamReader
-
-Feature: XMLSTREAMWRITER
-Description: Provides a XML writer with a simple streaming API.
-Section: Kernel
-Requires: XMLSTREAM
-Name: QXmlStreamWriter
-
-Feature: IM
-Description: Inputmethods with QInputContext
-Section: Kernel
-Requires: LIBRARY
-Name: QInputContext
-
-# Data structures
-
-Feature: TEXTDATE
-Description: Supports month and day names in dates.
-Section: Data structures
-Requires:
-Name: Text Date
-
-Feature: DATESTRING
-Description: Supports convertion between dates and strings.
-Section: Data structures
-Requires: TEXTDATE
-Name: QDate/QTime/QDateTime
-
-# File I/O
-
-Feature: PROCESS
-Description: Supports external process invocation.
-Section: File I/O
-Requires:
-Name: QProcess
-
-Feature: TEMPORARYFILE
-Description: Provides an I/O device that operates on temporary files.
-Section: File I/O
-Requires:
-Name: QTemporaryFile
-
-Feature: LIBRARY
-Description: Supports a shared library wrapper.
-Section: File I/O
-Requires:
-Name: QLibrary
-
-Feature: SETTINGS
-Description: Supports persistent application settings.
-Section: File I/O
-Requires:
-Name: QSettings
-
-Feature: DOM
-Description: Supports the Document Object Model.
-Section: File I/O
-Requires:
-Name: Document Object Model
-
-Feature: FILESYSTEMMODEL
-Description: Provides a data model for the local filesystem.
-Section: File I/O
-Requires:
-Name: QFileSystemModel
-
-Feature: FILESYSTEMWATCHER
-Description: Provides an interface for monitoring files and directories for modications.
-Section: File I/O
-Requires:
-Name: QFileSystemWatcher
-
-Feature: FILESYSTEMITERATOR
-Description: Provides fast file-system iteration.
-Section: File I/O
-Requires:
-Name: QFileSystemIterator
-
-# Widgets
-
-Feature: TREEWIDGET
-Description: Supports views using tree models.
-Section: Widgets
-Requires: TREEVIEW
-Name: QTreeWidget
-
-Feature: LISTWIDGET
-Description: Supports item-based list widgets.
-Section: Widgets
-Requires: LISTVIEW
-Name: QListWidget
-
-Feature: TABLEWIDGET
-Description: Supports item-based table views.
-Section: Widgets
-Requires: TABLEVIEW
-Name: QTableWidget
-
-Feature: DATETIMEEDIT
-Description: Supports editing dates and times.
-Section: Widgets
-Requires: CALENDARWIDGET DATESTRING
-Name: QDateTimeEdit
-
-Feature: STACKEDWIDGET
-Description: Supports stacked widgets.
-Section: Widgets
-Requires:
-Name: QStackedWidget
-
-Feature: TEXTBROWSER
-Description: Supports HTML document browsing.
-Section: Widgets
-Requires: TEXTEDIT
-Name: QTextBrowser
-
-Feature: SPLASHSCREEN
-Description: Supports splash screens that can be shown during application startup.
-Section: Widgets
-Requires:
-Name: Splash screen widget
-
-Feature: SPLITTER
-Description: Supports user controlled splitter widgets.
-Section: Widgets
-Requires: RUBBERBAND
-Name: QSplitter
-
-Feature: LCDNUMBER
-Description: Supports LCD-like digits.
-Section: Widgets
-Requires:
-Name: QLCDNumber
-
-Feature: MENU
-Description: Supports popup-menus.
-Section: Widgets
-Requires: ACTION
-Name: QMenu
-
-Feature: LINEEDIT
-Description: Supports single-line edits.
-Section: Widgets
-Requires:
-Name: QLineEdit
-
-Feature: SPINBOX
-Description: Supports spin boxes handling integers and discrete sets of values.
-Section: Widgets
-Requires: SPINWIDGET LINEEDIT VALIDATOR
-Name: QSpinBox
-
-Feature: TABBAR
-Description: Supports tab bars, e.g. for use in tabbed dialogs.
-Section: Widgets
-Requires: TOOLBUTTON
-Name: QTabBar
-
-Feature: TABWIDGET
-Description: Supports stacking tabbed widgets.
-Section: Widgets
-Requires: TABBAR STACKEDWIDGET
-Name: QTabWidget
-
-Feature: COMBOBOX
-Description: Supports comboboxes presenting a list of options to the user.
-Section: Widgets
-Requires: LINEEDIT STANDARDITEMMODEL LISTVIEW
-Name: QComboBox
-
-Feature: FONTCOMBOBOX
-Description: Supports a combobox that lets the user select a font family.
-Section: Widgets
-Requires: COMBOBOX STRINGLISTMODEL
-Name: QFontComboBox
-
-Feature: TOOLBUTTON
-Description: Supports quick-access buttons to commands and options.
-Section: Widgets
-Requires: ACTION
-Name: QToolButton
-
-Feature: TOOLBAR
-Description: Supports movable panels containing a set of controls.
-Section: Widgets
-Requires: MAINWINDOW
-Name: QToolBar
-
-Feature: TOOLBOX
-Description: Supports columns of tabbed widget items.
-Section: Widgets
-Requires: TOOLBUTTON SCROLLAREA
-Name: QToolBox
-
-Feature: GROUPBOX
-Description: Supports group box frames.
-Section: Widgets
-Requires:
-Name: QGroupBox
-
-Feature: BUTTONGROUP
-Description: Supports organizing groups of button widgets.
-Section: Widgets
-Requires: GROUPBOX
-Name: QButtonGroup
-
-Feature: MAINWINDOW
-Description: Supports main application windows.
-Section: Widgets
-Requires: MENU RESIZEHANDLER TOOLBUTTON
-Name: QMainWindow
-
-Feature: DOCKWIDGET
-Description: Supports docking widgets inside a QMainWindow or floated as a top-level window on the desktop.
-Section: Widgets
-Requires: RUBBERBAND MAINWINDOW
-Name: QDockwidget
-
-Feature: MDIAREA
-Description: Provides an area in which MDI windows are displayed.
-Section: Widgets
-Requires: SCROLLAREA
-Name: QMdiArea
-
-Feature: RESIZEHANDLER
-Description: Supports an internal resize handler.
-Section: Widgets
-Requires:
-Name: Resize Handler
-
-Feature: STATUSBAR
-Description: Supports presentation of status information.
-Section: Widgets
-Requires:
-Name: QStatusBar
-
-Feature: MENUBAR
-Description: Supports pull-down menu items.
-Section: Widgets
-Requires: MENU TOOLBUTTON
-Name: QMenuBar
-
-Feature: CONTEXTMENU
-Description: Supports pop-up menus on right mouse click
-Section: Widgets
-Requires: MENU
-Name: Context menu
-
-Feature: PROGRESSBAR
-Description: Supports presentation of operation progress.
-Section: Widgets
-Requires:
-Name: QProgressBar
-
-Feature: SLIDER
-Description: Supports sliders controlling a bounded value.
-Section: Widgets
-Requires:
-Name: QSlider
-
-Feature: SCROLLBAR
-Description: Supports scrollbars allowing the user access parts of a document that is larger than the widget used to display it.
-Section: Widgets
-Requires: SLIDER
-Name: QScrollBar
-
-Feature: DIAL
-Description: Supports rounded range control, e.g. like a speedometer.
-Section: Widgets
-Requires: SLIDER
-Name: QDial
-
-Feature: SCROLLAREA
-Description: Supports scrolling views onto widgets.
-Section: Widgets
-Requires: SCROLLBAR
-Name: QScrollArea
-
-Feature: GRAPHICSVIEW
-Description: Supports the graphicsview classes.
-Section: Widgets
-Requires: SCROLLAREA
-Name: QGraphicsView
-
-Feature: GRAPHICSEFFECT
-Description: Supports the graphicseffect classes.
-Section: Widgets
-Requires: GRAPHICSVIEW
-Name: QGraphicsEffect
-
-Feature: SPINWIDGET
-Description: Supports spinbox control widgets.
-Section: Widgets
-Requires:
-Name: Spin Widget
-
-Feature: TEXTEDIT
-Description: Supports rich text editing.
-Section: Widgets
-Requires: SCROLLAREA PROPERTIES
-Name: QTextEdit
-
-Feature: SYNTAXHIGHLIGHTER
-Description: Supports custom syntax highlighting.
-Section: Widgets
-Requires: TEXTEDIT
-Name: QSyntaxHighlighter
-
-Feature: RUBBERBAND
-Description: Supports using rubberbands to indicate selections and boundaries.
-Section: Widgets
-Requires:
-Name: QRubberBand
-
-Feature: TOOLTIP
-Description: Supports presentation of tooltips.
-Section: Widgets
-Requires:
-Name: QToolTip
-
-Feature: STATUSTIP
-Description: Supports status tip functionality and events.
-Section: Widgets
-Requires:
-Name: Status Tip
-
-Feature: WHATSTHIS
-Description: Supports displaying "What's this" help.
-Section: Widgets
-Requires: TOOLBUTTON
-Name: QWhatsThis
-
-Feature: VALIDATOR
-Description: Supports validation of input text.
-Section: Widgets
-Requires:
-Name: QValidator
-
-Feature: SIZEGRIP
-Description: Supports corner-grips for resizing a top-level windows.
-Section: Widgets
-Requires:
-Name: QSizeGrip
-
-Feature: CALENDARWIDGET
-Description: Provides a monthly based calendar widget allowing the user to select a date.
-Section: Widgets
-Requires: TABLEVIEW MENU TEXTDATE SPINBOX TOOLBUTTON
-Name: QCalendarWidget
-
-Feature: PRINTPREVIEWWIDGET
-Description: Provides a widget for previewing page layouts for printer output.
-Section: Widgets
-Requires: GRAPHICSVIEW PRINTER MAINWINDOW
-Name: QPrintPreviewWidget
-
-Feature: KEYSEQUENCEEDIT
-Description: Provides a widget for editing QKeySequences
-Section: Widgets
-Requires: LINEEDIT SHORTCUT
-Name: QKeySequenceEdit
-
-# Dialogs
-
-Feature: MESSAGEBOX
-Description: Supports message boxes displaying
-informative messages and simple questions.
-Section: Dialogs
-Requires:
-Name: QMessageBox
-
-Feature: COLORDIALOG
-Description: Supports a dialog widget for specifying colors.
-Section: Dialogs
-Requires: SPINBOX
-Name: QColorDialog
-
-Feature: FILEDIALOG
-Description: Supports a dialog widget for selecting files or directories.
-Section: Dialogs
-Requires: FILESYSTEMMODEL TREEVIEW COMBOBOX TOOLBUTTON BUTTONGROUP TOOLTIP SPLITTER STACKEDWIDGET PROXYMODEL
-Name: QFileDialog
-
-Feature: FONTDIALOG
-Description: Supports a dialog widget for selecting fonts.
-Section: Dialogs
-Requires: STRINGLISTMODEL COMBOBOX VALIDATOR GROUPBOX
-Name: QFontDialog
-
-Feature: PRINTDIALOG
-Description: Supports a dialog widget for specifying printer configuration.
-Section: Dialogs
-Requires: PRINTER COMBOBOX BUTTONGROUP SPINBOX TABWIDGET
-Name: QPrintDialog
-
-Feature: PRINTPREVIEWDIALOG
-Description: Provides a dialog for previewing and configuring page layouts for printer output.
-Section: Dialogs
-Requires: PRINTPREVIEWWIDGET PRINTDIALOG TOOLBAR
-Name: QPrintPreviewDialog
-
-Feature: PROGRESSDIALOG
-Description: Supports feedback on the progress of a slow operation.
-Section: Dialogs
-Requires: PROGRESSBAR
-Name: QProgressDialog
-
-Feature: INPUTDIALOG
-Description: Supports a simple convenience dialog to get a single value from the user.
-Section: Dialogs
-Requires: COMBOBOX SPINBOX STACKEDWIDGET
-Name: QInputDialog
-
-Feature: ERRORMESSAGE
-Description: Supports an error message display dialog.
-Section: Dialogs
-Requires: TEXTEDIT
-Name: QErrorMessage
-
-Feature: WIZARD
-Description: Provides a framework for wizards.
-Section: Dialogs
-Requires: PROPERTIES
-Name: QWizard
-
-# ItemViews
-
-Feature: ITEMVIEWS
-Description: Supports the model/view architecture managing the relationship between data and the way it is presented to the user.
-Section: ItemViews
-Requires: RUBBERBAND SCROLLAREA
-Name: The Model/View Framework
-
-Feature: DIRMODEL
-Description: Supports a data model for the local filesystem.
-Section: ItemViews
-Requires: ITEMVIEWS FILESYSTEMMODEL
-Name: QDirModel
-
-Feature: STANDARDITEMMODEL
-Description: Supports a generic model for storing custom data.
-Section: ItemViews
-Requires: ITEMVIEWS
-Name: QStandardItemModel
-
-Feature: PROXYMODEL
-Description: Supports processing of data passed between another model and a view.
-Section: ItemViews
-Requires: ITEMVIEWS
-Name: QAbstractProxyModel
-
-Feature: SORTFILTERPROXYMODEL
-Description: Supports sorting and filtering of data passed between another model and a view.
-Section: ItemViews
-Requires: PROXYMODEL
-Name: QSortFilterProxyModel
-
-Feature: IDENTITYPROXYMODEL
-Description: Supports proxying a source model unmodified.
-Section: ItemViews
-Requires: PROXYMODEL
-Name: QIdentityProxyModel
-
-Feature: STRINGLISTMODEL
-Description: Supports a model that supplies strings to views.
-Section: ItemViews
-Requires: ITEMVIEWS
-Name: QStringListModel
-
-Feature: LISTVIEW
-Description: Supports a list or icon view onto a model.
-Section: ItemViews
-Requires: ITEMVIEWS
-Name: QListView
-
-Feature: TABLEVIEW
-Description: Supports a default model/view implementation of a table view.
-Section: ItemViews
-Requires: ITEMVIEWS
-Name: QTableView
-
-Feature: TREEVIEW
-Description: Supports a default model/view implementation of a tree view.
-Section: ItemViews
-Requires: ITEMVIEWS
-Name: QTreeView
-
-Feature: DATAWIDGETMAPPER
-Description: Provides mapping between a section of a data model to widgets.
-Section: ItemViews
-Requires: ITEMVIEWS PROPERTIES
-Name: QDataWidgetMapper
-
-Feature: COLUMNVIEW
-Description: Provides a model/view implementation of a column view.
-Section: ItemViews
-Requires: LISTVIEW
-Name: QColumnView
-
-# Styles
-
-Feature: STYLE_WINDOWS
-Description: Supports a Microsoft Windows-like look and feel.
-Section: Styles
-Requires:
-Name: QWindowsStyle
-
-Feature: STYLE_FUSION
-Description: Supports a modern platform independent widget style.
-Section: Styles
-Requires: IMAGEFORMAT_XPM
-Name: QFusionStyle
-
-Feature: STYLE_WINDOWSXP
-Description: Supports a Microsoft WindowsXP-like look and feel.
-Section: Styles
-Requires: STYLE_WINDOWS
-Name: QWindowsXPStyle
-
-Feature: STYLE_WINDOWSVISTA
-Description: Supports a Microsoft WindowsVista-like look and feel.
-Section: Styles
-Requires: STYLE_WINDOWSXP
-Name: QWindowsVistaStyle
-
-Feature: STYLE_WINDOWSCE
-Description: WindowsCE look and feel
-Section: Styles
-Requires: STYLE_WINDOWS IMAGEFORMAT_XPM
-Name: QWindowsCEStyle
-
-Feature: STYLE_WINDOWSMOBILE
-Description: WindowsMobile look and feel
-Section: Styles
-Requires: STYLE_WINDOWS IMAGEFORMAT_XPM
-Name: QWindowsMobileStyle
-
-Feature: STYLE_STYLESHEET
-Description:
-Section: Styles
-Requires: STYLE_WINDOWS PROPERTIES CSSPARSER
-Name: QStyleSheetStyle
-
-# Images
-
-Feature: IMAGEFORMATPLUGIN
-Description: Supports writing an image format plugin.
-Section: Images
-Requires: LIBRARY
-Name: QImageIOPlugin
-
-Feature: MOVIE
-Description: Supports animated images.
-Section: Images
-Requires:
-Name: QMovie
-
-Feature: IMAGEFORMAT_BMP
-Description: Supports Microsoft's Bitmap image file format.
-Section: Images
-Requires:
-Name: BMP Image Format
-
-Feature: IMAGEFORMAT_PPM
-Description: Supports the Portable Pixmap image file format.
-Section: Images
-Requires:
-Name: PPM Image Format
-
-Feature: IMAGEFORMAT_XBM
-Description: Supports the X11 Bitmap image file format.
-Section: Images
-Requires:
-Name: XBM Image Format
-
-Feature: IMAGEFORMAT_XPM
-Description: Supports the X11 Pixmap image file format.
-Section: Images
-Requires:
-Name: XPM Image Format
-
-Feature: IMAGEFORMAT_PNG
-Description: Supports the Portable Network Graphics image file format.
-Section: Images
-Requires:
-Name: PNG Image Format
-
-Feature: IMAGEFORMAT_JPEG
-Description: Supports the Joint Photographic Experts Group image file format.
-Section: Images
-Requires:
-Name: JPEG Image Format
-
-Feature: IMAGE_HEURISTIC_MASK
-Description: Supports creating a 1-bpp heuristic mask for images.
-Section: Images
-Requires:
-Name: QImage::createHeuristicMask()
-
-Feature: IMAGE_TEXT
-Description: Supports image file text strings.
-Section: Images
-Requires:
-Name: Image Text
-
-# Painting
-
-Feature: PICTURE
-Description: Supports recording and replaying QPainter commands.
-Section: Painting
-Requires:
-Name: QPicture
-
-Feature: COLORNAMES
-Description: Supports color names such as "red", used by QColor and by some HTML documents.
-Section: Painting
-Requires:
-Name: Color Names
-
-Feature: PDF
-Description: Supports pdf format
-Section: Painting
-Requires: TEMPORARYFILE
-Name: QPdf
-
-Feature: PRINTER
-Description: Supports printing
-Section: Painting
-Requires: PICTURE TEMPORARYFILE PDF
-Name: QPrinter
-
-Feature: CUPS
-Description Supports the Common UNIX Printing System
-Section: Painting
-Requires: PRINTER LIBRARY
-Name: Common UNIX Printing System
-
-Feature: PAINT_DEBUG
-Description: Debug painting with the environment variables QT_FLUSH_UPDATE and QT_FLUSH_PAINT
-Section: Painting
-Requires:
-Name: Painting Debug Utilities
-
-# Fonts
-
-Feature: FREETYPE
-Description: Supports the FreeType 2 font engine (and its supported font formats).
-Section: Fonts
-Requires:
-Name: Freetype Font Engine
-
-# Internationalization
-
-Feature: TRANSLATION
-Description: Supports translations using QObject::tr().
-Section: Internationalization
-Requires:
-Name: Translation
-
-Feature: TEXTCODEC
-Description: Supports conversions between text encodings.
-Section: Internationalization
-Requires:
-Name: QTextCodec
-
-Feature: CODECS
-Description: Supports non-unicode text conversions.
-Section: Internationalization
-Requires: TEXTCODEC
-Name: Codecs
-
-Feature: BIG_CODECS
-Description: Supports big codecs, e.g. CJK.
-Section: Internationalization
-Requires: TEXTCODEC
-Name: Big Codecs
-
-Feature: ICONV
-Description: Supports conversions between text encodings using iconv.
-Section: Internationalization
-Requires: TEXTCODEC
-Name: iconv
-
-# Networking
-
-Feature: FTP
-Description: Supports FTP file access.
-Section: Networking
-Requires: TEXTDATE
-Name: File Transfer Protocol
-
-Feature: HTTP
-Description: Supports HTTP file access.
-Section: Networking
-Requires:
-Name: Hyper Text Transfer Protocol
-
-Feature: UDPSOCKET
-Description: Supports User Datagram Protocol sockets.
-Section: Networking
-Requires:
-Name: QUdpSocket
-
-Feature: NETWORKPROXY
-Description: Supports configuring network layer proxy support to the Qt network classes.
-Section: Networking
-Requires:
-Name: QNetworkProxy
-
-Feature: SOCKS5
-Description: Supports SOCKS v5 network proxy.
-Section: Networking
-Requires: NETWORKPROXY
-Name: SOCKS5
-
-Feature: NETWORKINTERFACE
-Description: Supports listing the host's IP addresses and network interfaces
-Section: Networking
-Requires:
-Name: QNetworkInterface
-
-Feature: NETWORKDISKCACHE
-Description: Supports a disk cache for network resources
-Section: Networking
-Requires: TEMPORARYFILE
-Name: QNetworkDiskCache
-
-Feature: BEARERMANAGEMENT
-Description: Provides bearer management support
-Section: Networking
-Requires: LIBRARY NETWORKINTERFACE PROPERTIES
-Name: Bearer Management
-
-Feature: LOCALSERVER
-Description: Supports a local socket based server
-Section: Networking
-Requires: TEMPORARYFILE
-Name: QLocalServer
-
-# Utilities
-
-Feature: COMPLETER
-Description: Provides completions based on an item model.
-Section: Utilities
-Requires: PROXYMODEL
-Name: QCompleter
-
-Feature: FSCOMPLETER
-Description: Provides completions based on an item model.
-Section: Utilities
-Requires: FILESYSTEMMODEL COMPLETER
-Name: QCompleter
-
-Feature: DESKTOPSERVICES
-Description: Provides methods for accessing common desktop services.
-Section: Utilities
-Requires:
-Name: QDesktopServices
-
-Feature: MIMETYPE
-Description: Describes types of file or data, represented by a MIME type string.
-Section: Utilities
-Requires:
-Name: QMimeType
-
-Feature: SYSTEMTRAYICON
-Description: Provides an icon for an application in the system tray.
-Section: Utilities
-Requires:
-Name: QSystemTrayIcon
-
-Feature: UNDOCOMMAND
-Description: Applies (redo or) undo of a single change in a document.
-Section: Utilities
-Requires:
-Name: QUndoCommand
-
-Feature: UNDOSTACK
-Description: Provides the ability to (redo or) undo a list of changes in a document.
-Section: Utilities
-Requires: UNDOCOMMAND
-Name: QUndoStack
-
-Feature: UNDOGROUP
-Description:
-Section: Utilities
-Requires: UNDOSTACK
-Name: QUndoGroup
-
-Feature: UNDOVIEW
-Description: A widget which shows the contents of an undo stack.
-Section: Utilities
-Requires: UNDOSTACK LISTVIEW
-Name: QUndoView
-
-Feature: ACCESSIBILITY
-Description: Provides accessibility support.
-Section: Utilities
-Requires: PROPERTIES MENUBAR
-Name: Accessibility
-
-Feature: ANIMATION
-Description: Provides a framework for animations.
-Section: Utilities
-Requires: PROPERTIES
-Name: Animation
-
-Feature: STATEMACHINE
-Description: Provides hierarchical finite state machines.
-Section: Utilities
-Requires: PROPERTIES
-Name: State machine
-
-Feature: GESTURES
-Description: Provides a framework for gestures.
-Section: Utilities
-Requires:
-Name: Gesture
-
-# D-Bus
-
-Feature: DBUS
-Description: Provides classes for D-Bus.
-Section: D-Bus
-Requires: PROPERTIES XMLSTREAMREADER
-Name: Qt D-Bus module
-
-# XML Patterns
-
-Feature: XMLSCHEMA
-Description: Provides XML schema validation.
-Section: Xml Patterns
-Requires:
-Name: XML Schema APIs
diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp
index 40eadfb3e6..3cb412e47c 100644
--- a/src/corelib/io/qfilesystemengine_unix.cpp
+++ b/src/corelib/io/qfilesystemengine_unix.cpp
@@ -553,45 +553,75 @@ bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemM
return data.hasFlags(what);
}
+// Note: if \a shouldMkdirFirst is false, we assume the caller did try to mkdir
+// before calling this function.
+static bool createDirectoryWithParents(const QByteArray &nativeName, bool shouldMkdirFirst = true)
+{
+ // helper function to check if a given path is a directory, since mkdir can
+ // fail if the dir already exists (it may have been created by another
+ // thread or another process)
+ const auto isDir = [](const QByteArray &nativeName) {
+ QT_STATBUF st;
+ return QT_STAT(nativeName.constData(), &st) == 0 && (st.st_mode & S_IFMT) == S_IFDIR;
+ };
+
+ if (shouldMkdirFirst && QT_MKDIR(nativeName, 0777) == 0)
+ return true;
+ if (errno == EEXIST)
+ return isDir(nativeName);
+ if (errno != ENOENT)
+ return false;
+
+ // mkdir failed because the parent dir doesn't exist, so try to create it
+ int slash = nativeName.lastIndexOf('/');
+ if (slash < 1)
+ return false;
+
+ QByteArray parentNativeName = nativeName.left(slash);
+ if (!createDirectoryWithParents(parentNativeName))
+ return false;
+
+ // try again
+ if (QT_MKDIR(nativeName, 0777) == 0)
+ return true;
+ return errno == EEXIST && isDir(nativeName);
+}
+
//static
bool QFileSystemEngine::createDirectory(const QFileSystemEntry &entry, bool createParents)
{
QString dirName = entry.filePath();
- if (createParents) {
- dirName = QDir::cleanPath(dirName);
- for (int oldslash = -1, slash=0; slash != -1; oldslash = slash) {
- slash = dirName.indexOf(QDir::separator(), oldslash+1);
- if (slash == -1) {
- if (oldslash == dirName.length())
- break;
- slash = dirName.length();
- }
- if (slash) {
- const QByteArray chunk = QFile::encodeName(dirName.left(slash));
- if (QT_MKDIR(chunk.constData(), 0777) != 0) {
- if (errno == EEXIST
-#if defined(Q_OS_QNX)
- // On QNX the QNet (VFS paths of other hosts mounted under a directory
- // such as /net) mountpoint returns ENOENT, despite existing. stat()
- // on the QNet mountpoint returns successfully and reports S_IFDIR.
- || errno == ENOENT
-#endif
- ) {
- QT_STATBUF st;
- if (QT_STAT(chunk.constData(), &st) == 0 && (st.st_mode & S_IFMT) == S_IFDIR)
- continue;
- }
- return false;
- }
- }
- }
+
+ // Darwin doesn't support trailing /'s, so remove for everyone
+ while (dirName.size() > 1 && dirName.endsWith(QLatin1Char('/')))
+ dirName.chop(1);
+
+ // try to mkdir this directory
+ QByteArray nativeName = QFile::encodeName(dirName);
+ if (QT_MKDIR(nativeName, 0777) == 0)
return true;
+ if (!createParents)
+ return false;
+
+ // we need the cleaned path in order to create the parents
+ // and we save errno just in case encodeName needs to load codecs
+ int savedErrno = errno;
+ bool pathChanged;
+ {
+ QString cleanName = QDir::cleanPath(dirName);
+
+ // Check if the cleaned name is the same or not. If we were given a
+ // path with resolvable "../" sections, cleanPath will remove them, but
+ // this may change the target dir if one of those segments was a
+ // symlink. This operation depends on cleanPath's optimization of
+ // returning the original string if it didn't modify anything.
+ pathChanged = !dirName.isSharedWith(cleanName);
+ if (pathChanged)
+ nativeName = QFile::encodeName(cleanName);
}
-#if defined(Q_OS_DARWIN) // Mac X doesn't support trailing /'s
- if (dirName.endsWith(QLatin1Char('/')))
- dirName.chop(1);
-#endif
- return (QT_MKDIR(QFile::encodeName(dirName).constData(), 0777) == 0);
+
+ errno = savedErrno;
+ return createDirectoryWithParents(nativeName, pathChanged);
}
//static
diff --git a/src/corelib/io/qloggingregistry.cpp b/src/corelib/io/qloggingregistry.cpp
index b8d1919ee6..4f7bc95330 100644
--- a/src/corelib/io/qloggingregistry.cpp
+++ b/src/corelib/io/qloggingregistry.cpp
@@ -276,10 +276,11 @@ static QVector<QLoggingRule> loadRulesFromFile(const QString &filePath)
*/
void QLoggingRegistry::init()
{
+ QVector<QLoggingRule> er, qr, cr;
// get rules from environment
const QByteArray rulesFilePath = qgetenv("QT_LOGGING_CONF");
if (!rulesFilePath.isEmpty())
- envRules = loadRulesFromFile(QFile::decodeName(rulesFilePath));
+ er = loadRulesFromFile(QFile::decodeName(rulesFilePath));
const QByteArray rulesSrc = qgetenv("QT_LOGGING_RULES").replace(';', '\n');
if (!rulesSrc.isEmpty()) {
@@ -287,7 +288,7 @@ void QLoggingRegistry::init()
QLoggingSettingsParser parser;
parser.setSection(QStringLiteral("Rules"));
parser.setContent(stream);
- envRules += parser.rules();
+ er += parser.rules();
}
const QString configFileName = QStringLiteral("qtlogging.ini");
@@ -296,17 +297,22 @@ void QLoggingRegistry::init()
// get rules from Qt data configuration path
const QString qtConfigPath
= QDir(QLibraryInfo::location(QLibraryInfo::DataPath)).absoluteFilePath(configFileName);
- qtConfigRules = loadRulesFromFile(qtConfigPath);
+ qr = loadRulesFromFile(qtConfigPath);
#endif
// get rules from user's/system configuration
const QString envPath = QStandardPaths::locate(QStandardPaths::GenericConfigLocation,
QString::fromLatin1("QtProject/") + configFileName);
if (!envPath.isEmpty())
- configRules = loadRulesFromFile(envPath);
+ cr = loadRulesFromFile(envPath);
+
+ const QMutexLocker locker(&registryMutex);
+
+ envRules = std::move(er);
+ qtConfigRules = std::move(qr);
+ configRules = std::move(cr);
if (!envRules.isEmpty() || !qtConfigRules.isEmpty() || !configRules.isEmpty()) {
- QMutexLocker locker(&registryMutex);
updateRules();
}
}
@@ -347,11 +353,11 @@ void QLoggingRegistry::setApiRules(const QString &content)
parser.setSection(QStringLiteral("Rules"));
parser.setContent(content);
- QMutexLocker locker(&registryMutex);
-
if (qtLoggingDebug())
debugMsg("Loading logging rules set by QLoggingCategory::setFilterRules ...");
+ const QMutexLocker locker(&registryMutex);
+
apiRules = parser.rules();
updateRules();
@@ -405,6 +411,8 @@ QLoggingRegistry *QLoggingRegistry::instance()
/*!
\internal
Updates category settings according to rules.
+
+ As a category filter, it is run with registryMutex held.
*/
void QLoggingRegistry::defaultCategoryFilter(QLoggingCategory *cat)
{
diff --git a/src/corelib/io/qloggingregistry_p.h b/src/corelib/io/qloggingregistry_p.h
index 5197da1ba4..23740c4955 100644
--- a/src/corelib/io/qloggingregistry_p.h
+++ b/src/corelib/io/qloggingregistry_p.h
@@ -129,6 +129,7 @@ private:
QMutex registryMutex;
+ // protected by mutex:
QVector<QLoggingRule> qtConfigRules;
QVector<QLoggingRule> configRules;
QVector<QLoggingRule> envRules;
diff --git a/src/corelib/io/qprocess_win.cpp b/src/corelib/io/qprocess_win.cpp
index fcdf13fddb..aa69e9e1db 100644
--- a/src/corelib/io/qprocess_win.cpp
+++ b/src/corelib/io/qprocess_win.cpp
@@ -844,7 +844,8 @@ static bool startDetachedUacPrompt(const QString &programIn, const QStringList &
SHELLEXECUTEINFOW shellExecuteExInfo;
memset(&shellExecuteExInfo, 0, sizeof(SHELLEXECUTEINFOW));
shellExecuteExInfo.cbSize = sizeof(SHELLEXECUTEINFOW);
- shellExecuteExInfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_UNICODE | SEE_MASK_FLAG_NO_UI;
+ shellExecuteExInfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_UNICODE | SEE_MASK_FLAG_NO_UI | SEE_MASK_CLASSNAME;
+ shellExecuteExInfo.lpClass = L"exefile";
shellExecuteExInfo.lpVerb = L"runas";
const QString program = QDir::toNativeSeparators(programIn);
shellExecuteExInfo.lpFile = reinterpret_cast<LPCWSTR>(program.utf16());
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp
index a6372b75f6..18ad59f1cb 100644
--- a/src/corelib/io/qurl.cpp
+++ b/src/corelib/io/qurl.cpp
@@ -4169,10 +4169,10 @@ QUrl QUrl::fromUserInput(const QString &userInput, const QString &workingDirecto
return url;
}
- QUrl url = QUrl(trimmedString, QUrl::TolerantMode);
+ QUrl url = QUrl(userInput, QUrl::TolerantMode);
// Check both QUrl::isRelative (to detect full URLs) and QDir::isAbsolutePath (since on Windows drive letters can be interpreted as schemes)
- if (url.isRelative() && !QDir::isAbsolutePath(trimmedString)) {
- QFileInfo fileInfo(QDir(workingDirectory), trimmedString);
+ if (url.isRelative() && !QDir::isAbsolutePath(userInput)) {
+ QFileInfo fileInfo(QDir(workingDirectory), userInput);
if ((options & AssumeLocalFile) || fileInfo.exists())
return QUrl::fromLocalFile(fileInfo.absoluteFilePath());
}
diff --git a/src/corelib/kernel/qeventdispatcher_cf.mm b/src/corelib/kernel/qeventdispatcher_cf.mm
index 27eb3d0337..608dea5426 100644
--- a/src/corelib/kernel/qeventdispatcher_cf.mm
+++ b/src/corelib/kernel/qeventdispatcher_cf.mm
@@ -44,7 +44,6 @@
#include <QtCore/qthread.h>
#include <QtCore/private/qcoreapplication_p.h>
#include <QtCore/private/qcore_unix_p.h>
-#include <QtCore/private/qcore_mac_p.h>
#include <QtCore/private/qthread_p.h>
#include <limits>
@@ -59,11 +58,13 @@
QT_USE_NAMESPACE
-@interface RunLoopModeTracker : NSObject {
+@interface QT_MANGLE_NAMESPACE(RunLoopModeTracker) : NSObject {
QStack<CFStringRef> m_runLoopModes;
}
@end
+QT_NAMESPACE_ALIAS_OBJC_CLASS(RunLoopModeTracker);
+
@implementation RunLoopModeTracker
- (id) init
diff --git a/src/corelib/kernel/qeventdispatcher_cf_p.h b/src/corelib/kernel/qeventdispatcher_cf_p.h
index e6581e2bac..8a234ebc40 100644
--- a/src/corelib/kernel/qeventdispatcher_cf_p.h
+++ b/src/corelib/kernel/qeventdispatcher_cf_p.h
@@ -90,14 +90,11 @@
#include <QtCore/qabstracteventdispatcher.h>
#include <QtCore/private/qtimerinfo_unix_p.h>
#include <QtCore/private/qcfsocketnotifier_p.h>
+#include <QtCore/private/qcore_mac_p.h>
#include <QtCore/qdebug.h>
#include <CoreFoundation/CoreFoundation.h>
-#ifdef __OBJC__
-@class RunLoopModeTracker;
-#else
-typedef struct objc_object RunLoopModeTracker;
-#endif
+Q_FORWARD_DECLARE_OBJC_CLASS(QT_MANGLE_NAMESPACE(RunLoopModeTracker));
QT_BEGIN_NAMESPACE
@@ -253,7 +250,7 @@ private:
RunLoopSource<> m_postedEventsRunLoopSource;
RunLoopObserver<> m_runLoopActivityObserver;
- RunLoopModeTracker *m_runLoopModeTracker;
+ QT_MANGLE_NAMESPACE(RunLoopModeTracker) *m_runLoopModeTracker;
QTimerInfoList m_timerInfoList;
CFRunLoopTimerRef m_runLoopTimer;
diff --git a/src/corelib/mimetypes/qmimeprovider.cpp b/src/corelib/mimetypes/qmimeprovider.cpp
index 959421bf52..5c0acce4c3 100644
--- a/src/corelib/mimetypes/qmimeprovider.cpp
+++ b/src/corelib/mimetypes/qmimeprovider.cpp
@@ -296,12 +296,15 @@ QMimeGlobMatchResult QMimeBinaryProvider::findByFileName(const QString &fileName
const QString lowerFileName = fileName.toLower();
// TODO this parses in the order (local, global). Check that it handles "NOGLOBS" correctly.
for (CacheFile *cacheFile : qAsConst(m_cacheFiles)) {
+ // Check literals (e.g. "Makefile")
matchGlobList(result, cacheFile, cacheFile->getUint32(PosLiteralListOffset), fileName);
+ // Check complex globs (e.g. "callgrind.out[0-9]*")
matchGlobList(result, cacheFile, cacheFile->getUint32(PosGlobListOffset), fileName);
+ // Check the very common *.txt cases with the suffix tree
const int reverseSuffixTreeOffset = cacheFile->getUint32(PosReverseSuffixTreeOffset);
const int numRoots = cacheFile->getUint32(reverseSuffixTreeOffset);
const int firstRootOffset = cacheFile->getUint32(reverseSuffixTreeOffset + 4);
- matchSuffixTree(result, cacheFile, numRoots, firstRootOffset, lowerFileName, fileName.length() - 1, false);
+ matchSuffixTree(result, cacheFile, numRoots, firstRootOffset, lowerFileName, lowerFileName.length() - 1, false);
if (result.m_matchingMimeTypes.isEmpty())
matchSuffixTree(result, cacheFile, numRoots, firstRootOffset, fileName, fileName.length() - 1, true);
}
diff --git a/src/corelib/plugin/qfactoryloader_p.h b/src/corelib/plugin/qfactoryloader_p.h
index 0876d141c4..70a934c976 100644
--- a/src/corelib/plugin/qfactoryloader_p.h
+++ b/src/corelib/plugin/qfactoryloader_p.h
@@ -57,11 +57,22 @@
#include "QtCore/qobject.h"
#include "QtCore/qstringlist.h"
#include "QtCore/qjsonobject.h"
+#include "QtCore/qjsondocument.h"
#include "QtCore/qmap.h"
+#include "QtCore/qendian.h"
#include "private/qlibrary_p.h"
QT_BEGIN_NAMESPACE
+inline QJsonDocument qJsonFromRawLibraryMetaData(const char *raw)
+{
+ raw += strlen("QTMETADATA ");
+ // the size of the embedded JSON object can be found 8 bytes into the data (see qjson_p.h),
+ // but doesn't include the size of the header (8 bytes)
+ QByteArray json(raw, qFromLittleEndian<uint>(*(const uint *)(raw + 8)) + 8);
+ return QJsonDocument::fromBinaryData(json);
+}
+
class QFactoryLoaderPrivate;
class Q_CORE_EXPORT QFactoryLoader : public QObject
{
diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp
index 96cf5371f9..a4a654cd88 100644
--- a/src/corelib/plugin/qlibrary.cpp
+++ b/src/corelib/plugin/qlibrary.cpp
@@ -42,6 +42,7 @@
#ifndef QT_NO_LIBRARY
+#include "qfactoryloader_p.h"
#include "qlibrary_p.h"
#include <qstringlist.h>
#include <qfile.h>
diff --git a/src/corelib/plugin/qlibrary_p.h b/src/corelib/plugin/qlibrary_p.h
index f883e74843..7147ff6ca2 100644
--- a/src/corelib/plugin/qlibrary_p.h
+++ b/src/corelib/plugin/qlibrary_p.h
@@ -58,25 +58,12 @@
#include "QtCore/qstringlist.h"
#include "QtCore/qplugin.h"
#include "QtCore/qsharedpointer.h"
-#include "QtCore/qjsonobject.h"
-#include "QtCore/qjsondocument.h"
-#include "QtCore/qendian.h"
#ifdef Q_OS_WIN
# include "QtCore/qt_windows.h"
#endif
QT_BEGIN_NAMESPACE
-// Needed also in case of QT_NO_LIBRARY, for static plugin loading.
-inline QJsonDocument qJsonFromRawLibraryMetaData(const char *raw)
-{
- raw += strlen("QTMETADATA ");
- // the size of the embedded JSON object can be found 8 bytes into the data (see qjson_p.h),
- // but doesn't include the size of the header (8 bytes)
- QByteArray json(raw, qFromLittleEndian<uint>(*(const uint *)(raw + 8)) + 8);
- return QJsonDocument::fromBinaryData(json);
-}
-
#ifndef QT_NO_LIBRARY
diff --git a/src/corelib/plugin/qpluginloader.cpp b/src/corelib/plugin/qpluginloader.cpp
index 4ec4e43952..6723877ad5 100644
--- a/src/corelib/plugin/qpluginloader.cpp
+++ b/src/corelib/plugin/qpluginloader.cpp
@@ -43,7 +43,7 @@
#include "qcoreapplication.h"
#include "qpluginloader.h"
#include <qfileinfo.h>
-#include "qlibrary_p.h"
+#include "qfactoryloader_p.h"
#include "qdebug.h"
#include "qdir.h"
diff --git a/src/corelib/thread/qreadwritelock.cpp b/src/corelib/thread/qreadwritelock.cpp
index 6302a3a515..42befc4b80 100644
--- a/src/corelib/thread/qreadwritelock.cpp
+++ b/src/corelib/thread/qreadwritelock.cpp
@@ -392,13 +392,13 @@ bool QReadWriteLock::tryLockForWrite(int timeout)
*/
void QReadWriteLock::unlock()
{
- QReadWriteLockPrivate *d = d_ptr.load();
+ QReadWriteLockPrivate *d = d_ptr.loadAcquire();
while (true) {
Q_ASSERT_X(d, "QReadWriteLock::unlock()", "Cannot unlock an unlocked lock");
// Fast case: no contention: (no waiters, no other readers)
if (quintptr(d) <= 2) { // 1 or 2 (StateLockedForRead or StateLockedForWrite)
- if (!d_ptr.testAndSetRelease(d, nullptr, d))
+ if (!d_ptr.testAndSetOrdered(d, nullptr, d))
continue;
return;
}
@@ -407,7 +407,7 @@ void QReadWriteLock::unlock()
Q_ASSERT(quintptr(d) > (1U<<4)); //otherwise that would be the fast case
// Just decrease the reader's count.
auto val = reinterpret_cast<QReadWriteLockPrivate *>(quintptr(d) - (1U<<4));
- if (!d_ptr.testAndSetRelease(d, val, d))
+ if (!d_ptr.testAndSetOrdered(d, val, d))
continue;
return;
}
diff --git a/src/corelib/tools/qfreelist_p.h b/src/corelib/tools/qfreelist_p.h
index c3efc41d62..a8d1132d06 100644
--- a/src/corelib/tools/qfreelist_p.h
+++ b/src/corelib/tools/qfreelist_p.h
@@ -237,7 +237,7 @@ inline int QFreeList<T, ConstantsType>::next()
int id, newid, at;
ElementType *v;
do {
- id = _next.load();
+ id = _next.loadAcquire();
at = id & ConstantsType::IndexMask;
const int block = blockfor(at);
@@ -254,7 +254,7 @@ inline int QFreeList<T, ConstantsType>::next()
}
newid = v[at].next.load() | (id & ~ConstantsType::IndexMask);
- } while (!_next.testAndSetRelaxed(id, newid));
+ } while (!_next.testAndSetRelease(id, newid));
// qDebug("QFreeList::next(): returning %d (_next now %d, serial %d)",
// id & ConstantsType::IndexMask,
// newid & ConstantsType::IndexMask,
diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp
index cdda5292e7..ae4befcb9c 100644
--- a/src/corelib/tools/qlocale.cpp
+++ b/src/corelib/tools/qlocale.cpp
@@ -594,7 +594,6 @@ static QLocalePrivate *c_private()
*/
QSystemLocale::QSystemLocale()
{
- delete _systemLocale;
_systemLocale = this;
if (system_data)
diff --git a/src/corelib/tools/qrect.cpp b/src/corelib/tools/qrect.cpp
index 4b6183646b..895b6b9701 100644
--- a/src/corelib/tools/qrect.cpp
+++ b/src/corelib/tools/qrect.cpp
@@ -1323,8 +1323,8 @@ QDebug operator<<(QDebug dbg, const QRect &r)
rendering.
A QRectF can be constructed with a set of left, top, width and
- height integers, or from a QPoint and a QSize. The following code
- creates two identical rectangles.
+ height coordinates, or from a QPointF and a QSizeF. The following
+ code creates two identical rectangles.
\snippet code/src_corelib_tools_qrect.cpp 1
@@ -1344,7 +1344,7 @@ QDebug operator<<(QDebug dbg, const QRect &r)
translated copy of this rectangle.
The size() function returns the rectange's dimensions as a
- QSize. The dimensions can also be retrieved separately using the
+ QSizeF. The dimensions can also be retrieved separately using the
width() and height() functions. To manipulate the dimensions use
the setSize(), setWidth() or setHeight() functions. Alternatively,
the size can be changed by applying either of the functions
diff --git a/src/corelib/tools/qtimezone.cpp b/src/corelib/tools/qtimezone.cpp
index 359c2d0bdb..ec2f7c4af6 100644
--- a/src/corelib/tools/qtimezone.cpp
+++ b/src/corelib/tools/qtimezone.cpp
@@ -674,9 +674,9 @@ bool QTimeZone::isDaylightTime(const QDateTime &atDateTime) const
QTimeZone::OffsetData QTimeZone::offsetData(const QDateTime &forDateTime) const
{
if (hasTransitions())
- return d->toOffsetData(d->data(forDateTime.toMSecsSinceEpoch()));
+ return QTimeZonePrivate::toOffsetData(d->data(forDateTime.toMSecsSinceEpoch()));
else
- return d->invalidOffsetData();
+ return QTimeZonePrivate::invalidOffsetData();
}
/*!
@@ -712,9 +712,9 @@ bool QTimeZone::hasTransitions() const
QTimeZone::OffsetData QTimeZone::nextTransition(const QDateTime &afterDateTime) const
{
if (hasTransitions())
- return d->toOffsetData(d->nextTransition(afterDateTime.toMSecsSinceEpoch()));
+ return QTimeZonePrivate::toOffsetData(d->nextTransition(afterDateTime.toMSecsSinceEpoch()));
else
- return d->invalidOffsetData();
+ return QTimeZonePrivate::invalidOffsetData();
}
/*!
@@ -733,9 +733,9 @@ QTimeZone::OffsetData QTimeZone::nextTransition(const QDateTime &afterDateTime)
QTimeZone::OffsetData QTimeZone::previousTransition(const QDateTime &beforeDateTime) const
{
if (hasTransitions())
- return d->toOffsetData(d->previousTransition(beforeDateTime.toMSecsSinceEpoch()));
+ return QTimeZonePrivate::toOffsetData(d->previousTransition(beforeDateTime.toMSecsSinceEpoch()));
else
- return d->invalidOffsetData();
+ return QTimeZonePrivate::invalidOffsetData();
}
/*!
@@ -755,7 +755,7 @@ QTimeZone::OffsetDataList QTimeZone::transitions(const QDateTime &fromDateTime,
toDateTime.toMSecsSinceEpoch());
list.reserve(plist.count());
for (const QTimeZonePrivate::Data &pdata : plist)
- list.append(d->toOffsetData(pdata));
+ list.append(QTimeZonePrivate::toOffsetData(pdata));
}
return list;
}
diff --git a/src/corelib/tools/qvarlengtharray.h b/src/corelib/tools/qvarlengtharray.h
index 25f5176c22..ae2c75e7df 100644
--- a/src/corelib/tools/qvarlengtharray.h
+++ b/src/corelib/tools/qvarlengtharray.h
@@ -146,15 +146,25 @@ public:
T value(int i, const T &defaultValue) const;
inline void append(const T &t) {
- if (s == a) // i.e. s != 0
+ if (s == a) { // i.e. s != 0
+ T copy(t);
realloc(s, s<<1);
- const int idx = s++;
- if (QTypeInfo<T>::isComplex) {
- new (ptr + idx) T(t);
+ const int idx = s++;
+ if (QTypeInfo<T>::isComplex) {
+ new (ptr + idx) T(std::move(copy));
+ } else {
+ ptr[idx] = std::move(copy);
+ }
} else {
- ptr[idx] = t;
+ const int idx = s++;
+ if (QTypeInfo<T>::isComplex) {
+ new (ptr + idx) T(t);
+ } else {
+ ptr[idx] = t;
+ }
}
}
+
void append(const T *buf, int size);
inline QVarLengthArray<T, Prealloc> &operator<<(const T &t)
{ append(t); return *this; }
diff --git a/src/gui/configure.json b/src/gui/configure.json
index 52ccb60024..4de560753d 100644
--- a/src/gui/configure.json
+++ b/src/gui/configure.json
@@ -161,9 +161,10 @@
"test": "unix/libpng",
"sources": [
{ "type": "pkgConfig", "args": "libpng" },
- { "libs": "-llibpng -lzdll", "condition": "config.msvc" },
- { "libs": "-lpng -lz", "condition": "!config.msvc" }
- ]
+ { "libs": "-llibpng", "condition": "config.msvc" },
+ { "libs": "-lpng", "condition": "!config.msvc" }
+ ],
+ "use": "zlib"
},
"mirclient": {
"label": "Mir client libraries",
diff --git a/src/gui/text/qtextdocument_p.cpp b/src/gui/text/qtextdocument_p.cpp
index 7107c7c26e..7341fa8e83 100644
--- a/src/gui/text/qtextdocument_p.cpp
+++ b/src/gui/text/qtextdocument_p.cpp
@@ -265,7 +265,7 @@ void QTextDocumentPrivate::clear()
unreachableCharacterCount = 0;
modifiedState = 0;
modified = false;
- formats = QTextFormatCollection();
+ formats.clear();
int len = fragments.length();
fragments.clear();
blocks.clear();
diff --git a/src/gui/text/qtextformat.cpp b/src/gui/text/qtextformat.cpp
index 39fec032dc..36e0a77bd0 100644
--- a/src/gui/text/qtextformat.cpp
+++ b/src/gui/text/qtextformat.cpp
@@ -3371,22 +3371,15 @@ QTextTableCellFormat::QTextTableCellFormat(const QTextFormat &fmt)
// ------------------------------------------------------
-
-QTextFormatCollection::QTextFormatCollection(const QTextFormatCollection &rhs)
-{
- formats = rhs.formats;
- objFormats = rhs.objFormats;
-}
-
-QTextFormatCollection &QTextFormatCollection::operator=(const QTextFormatCollection &rhs)
+QTextFormatCollection::~QTextFormatCollection()
{
- formats = rhs.formats;
- objFormats = rhs.objFormats;
- return *this;
}
-QTextFormatCollection::~QTextFormatCollection()
+void QTextFormatCollection::clear()
{
+ formats.clear();
+ objFormats.clear();
+ hashes.clear();
}
int QTextFormatCollection::indexForFormat(const QTextFormat &format)
diff --git a/src/gui/text/qtextformat_p.h b/src/gui/text/qtextformat_p.h
index f05bfaff71..3557c17a97 100644
--- a/src/gui/text/qtextformat_p.h
+++ b/src/gui/text/qtextformat_p.h
@@ -63,8 +63,7 @@ public:
QTextFormatCollection() {}
~QTextFormatCollection();
- QTextFormatCollection(const QTextFormatCollection &rhs);
- QTextFormatCollection &operator=(const QTextFormatCollection &rhs);
+ void clear();
inline QTextFormat objectFormat(int objectIndex) const
{ return format(objectFormatIndex(objectIndex)); }
@@ -104,6 +103,8 @@ public:
private:
QFont defaultFnt;
+
+ Q_DISABLE_COPY(QTextFormatCollection)
};
QT_END_NAMESPACE
diff --git a/src/network/configure.json b/src/network/configure.json
index 1e08aa7c49..7bd3f6164a 100644
--- a/src/network/configure.json
+++ b/src/network/configure.json
@@ -7,9 +7,6 @@
"commandline": {
"assignments": {
- "OPENSSL_LIBS": "openssl.libs",
- "OPENSSL_LIBS_DEBUG": "openssl.libs.debug",
- "OPENSSL_LIBS_RELEASE": "openssl.libs.release",
"OPENSSL_PATH": "openssl.prefix"
},
"options": {
@@ -46,13 +43,24 @@
"-lproxy"
]
},
+ "openssl_headers": {
+ "label": "OpenSSL Headers",
+ "export": "openssl",
+ "test": "unix/openssl",
+ "sources": [
+ {
+ "comment": "placeholder for OPENSSL_PATH",
+ "libs": ""
+ }
+ ]
+ },
"openssl": {
- "label": "OpenSSL Libraries",
- "export": "",
+ "label": "OpenSSL",
+ "test": "unix/openssl",
"sources": [
{ "type": "openssl" },
{
- "comment": "placeholder for OPENSSL_LIBS{,_{DEBUG,RELEASE}}",
+ "comment": "placeholder for OPENSSL_{PATH,LIBS{,_{DEBUG,RELEASE}}}",
"libs": "",
"builds": {
"debug": "",
@@ -92,11 +100,6 @@
"test": "unix/ipv6ifname",
"use": "network"
},
- "openssl": {
- "label": "OpenSSL",
- "type": "compile",
- "test": "unix/openssl"
- },
"sctp": {
"label": "SCTP support",
"type": "compile",
@@ -138,7 +141,7 @@
"enable": "input.openssl == 'yes' || input.openssl == 'linked' || input.openssl == 'runtime'",
"disable": "input.openssl == 'no' || input.ssl == 'no'",
"autoDetect": "!config.winrt",
- "condition": "!features.securetransport && tests.openssl",
+ "condition": "!features.securetransport && (features.openssl-linked || libs.openssl_headers)",
"output": [
"privateFeature",
{ "type": "publicQtConfig", "condition": "!features.openssl-linked" },
@@ -149,14 +152,9 @@
"label": " Qt directly linked to OpenSSL",
"enable": "input.openssl == 'linked'",
"disable": "input.openssl != 'linked'",
- "condition": "features.openssl && libs.openssl",
+ "condition": "!features.securetransport && libs.openssl",
"output": [
"privateFeature",
- { "type": "varAssign", "name": "OPENSSL_LIBS", "value": "libs.openssl.libs", "eval": "true" },
- { "type": "varAssign", "name": "OPENSSL_LIBS_DEBUG", "value": "libs.openssl.builds.debug.libs",
- "eval": "true", "condition": "config.win32" },
- { "type": "varAssign", "name": "OPENSSL_LIBS_RELEASE", "value": "libs.openssl.builds.release.libs",
- "eval": "true", "condition": "config.win32" },
{ "type": "define", "name": "QT_LINKED_OPENSSL" }
]
},
diff --git a/src/network/socket/qnativesocketengine_unix.cpp b/src/network/socket/qnativesocketengine_unix.cpp
index d1efc21e09..e140b33ce9 100644
--- a/src/network/socket/qnativesocketengine_unix.cpp
+++ b/src/network/socket/qnativesocketengine_unix.cpp
@@ -679,10 +679,16 @@ static bool multicastMembershipHelper(QNativeSocketEnginePrivate *d,
if (interface.isValid()) {
const QList<QNetworkAddressEntry> addressEntries = interface.addressEntries();
- if (!addressEntries.isEmpty()) {
- QHostAddress firstIP = addressEntries.first().ip();
- mreq4.imr_interface.s_addr = htonl(firstIP.toIPv4Address());
- } else {
+ bool found = false;
+ for (const QNetworkAddressEntry &entry : addressEntries) {
+ const QHostAddress ip = entry.ip();
+ if (ip.protocol() == QAbstractSocket::IPv4Protocol) {
+ mreq4.imr_interface.s_addr = htonl(ip.toIPv4Address());
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
d->setError(QAbstractSocket::NetworkError,
QNativeSocketEnginePrivate::NetworkUnreachableErrorString);
return false;
diff --git a/src/network/socket/qnativesocketengine_win.cpp b/src/network/socket/qnativesocketengine_win.cpp
index 80147b47ba..28aea6be3d 100644
--- a/src/network/socket/qnativesocketengine_win.cpp
+++ b/src/network/socket/qnativesocketengine_win.cpp
@@ -955,10 +955,16 @@ static bool multicastMembershipHelper(QNativeSocketEnginePrivate *d,
if (iface.isValid()) {
const QList<QNetworkAddressEntry> addressEntries = iface.addressEntries();
- if (!addressEntries.isEmpty()) {
- QHostAddress firstIP = addressEntries.first().ip();
- mreq4.imr_interface.s_addr = htonl(firstIP.toIPv4Address());
- } else {
+ bool found = false;
+ for (const QNetworkAddressEntry &entry : addressEntries) {
+ const QHostAddress ip = entry.ip();
+ if (ip.protocol() == QAbstractSocket::IPv4Protocol) {
+ mreq4.imr_interface.s_addr = htonl(ip.toIPv4Address());
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
d->setError(QAbstractSocket::NetworkError,
QNativeSocketEnginePrivate::NetworkUnreachableErrorString);
return false;
diff --git a/src/network/ssl/ssl.pri b/src/network/ssl/ssl.pri
index 79351017a6..52ce2eeade 100644
--- a/src/network/ssl/ssl.pri
+++ b/src/network/ssl/ssl.pri
@@ -56,7 +56,7 @@ qtConfig(ssl) {
ssl/qsslellipticcurve_dummy.cpp
}
- qtConfig(openssl)|qtConfig(openssl-linked) {
+ qtConfig(openssl) {
HEADERS += ssl/qsslcontext_openssl_p.h \
ssl/qsslsocket_openssl_p.h \
ssl/qsslsocket_openssl_symbols_p.h
@@ -79,16 +79,10 @@ qtConfig(ssl) {
# - libs in <OPENSSL_DIR>\lib\VC\static
# - configure: -openssl -openssl-linked -I <OPENSSL_DIR>\include -L <OPENSSL_DIR>\lib\VC\static OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32" OPENSSL_LIBS_DEBUG="-lssleay32MDd -llibeay32MDd" OPENSSL_LIBS_RELEASE="-lssleay32MD -llibeay32MD"
- include($$OUT_PWD/qtnetwork-config.pri)
-
- CONFIG(debug, debug|release) {
- LIBS_PRIVATE += $$OPENSSL_LIBS_DEBUG
- } else {
- LIBS_PRIVATE += $$OPENSSL_LIBS_RELEASE
- }
-
- QMAKE_CXXFLAGS += $$OPENSSL_CFLAGS
- LIBS_PRIVATE += $$OPENSSL_LIBS
+ qtConfig(openssl-linked): \
+ QMAKE_USE_FOR_PRIVATE += openssl
+ else: \
+ QMAKE_USE_FOR_PRIVATE += openssl/nolink
win32: LIBS_PRIVATE += -lcrypt32
}
}
diff --git a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp
index 736c66ebc0..0a55f689c6 100644
--- a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp
+++ b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp
@@ -572,7 +572,8 @@ QString QIBusPlatformInputContextPrivate::getSocketPath()
if (debug)
qDebug() << "host=" << host << "displayNumber" << displayNumber;
- return QDir::homePath() + QLatin1String("/.config/ibus/bus/") +
+ return QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) +
+ QLatin1String("/ibus/bus/") +
QLatin1String(QDBusConnection::localMachineId()) +
QLatin1Char('-') + QString::fromLocal8Bit(host) + QLatin1Char('-') + QString::fromLocal8Bit(displayNumber);
}
diff --git a/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp b/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp
index d9ecdfac3d..d3810329c5 100644
--- a/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp
+++ b/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp
@@ -100,10 +100,6 @@ bool QAndroidPlatformOpenGLContext::makeCurrent(QPlatformSurface *surface)
bool ret = QEGLPlatformContext::makeCurrent(surface);
QOpenGLContextPrivate *ctx_d = QOpenGLContextPrivate::get(context());
- const char *rendererString = reinterpret_cast<const char *>(glGetString(GL_RENDERER));
- if (rendererString != 0 && qstrncmp(rendererString, "Android Emulator", 16) == 0)
- ctx_d->workaround_missingPrecisionQualifiers = true;
-
if (!ctx_d->workaround_brokenFBOReadBack && needsFBOReadBackWorkaround())
ctx_d->workaround_brokenFBOReadBack = true;
diff --git a/src/plugins/platforms/cocoa/qcocoadrag.mm b/src/plugins/platforms/cocoa/qcocoadrag.mm
index de4fa95530..c71e80d191 100644
--- a/src/plugins/platforms/cocoa/qcocoadrag.mm
+++ b/src/plugins/platforms/cocoa/qcocoadrag.mm
@@ -201,6 +201,10 @@ QPixmap QCocoaDrag::dragPixmap(QDrag *drag, QPoint &hotSpot) const
dpr = sourceWindow->devicePixelRatio();
}
#endif
+ else {
+ if (const QWindow *focusWindow = qApp->focusWindow())
+ dpr = focusWindow->devicePixelRatio();
+ }
pm = QPixmap(width * dpr, height * dpr);
pm.setDevicePixelRatio(dpr);
QPainter p(&pm);
diff --git a/src/plugins/platforms/vnc/qvncclient.cpp b/src/plugins/platforms/vnc/qvncclient.cpp
index dae3e83f37..58dcfc9b51 100644
--- a/src/plugins/platforms/vnc/qvncclient.cpp
+++ b/src/plugins/platforms/vnc/qvncclient.cpp
@@ -142,7 +142,7 @@ void QVncClient::convertPixels(char *dst, const char *src, int count) const
case 16: {
quint16 p = *reinterpret_cast<const quint16*>(src);
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
- if (swapBytes)
+ if (m_swapBytes)
p = ((p & 0xff) << 8) | ((p & 0xff00) >> 8);
#endif
r = (p >> 11) & 0x1f;
@@ -484,7 +484,7 @@ void QVncClient::setPixelFormat()
m_sameEndian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) == !!m_pixelFormat.bigEndian;
m_needConversion = pixelConversionNeeded();
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
- m_swapBytes = qvnc_screen->swapBytes();
+ m_swapBytes = server()->screen()->swapBytes();
#endif
}
}
@@ -639,7 +639,7 @@ bool QVncClient::pixelConversionNeeded() const
return true;
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
- if (qvnc_screen->swapBytes())
+ if (server()->screen()->swapBytes())
return true;
#endif
diff --git a/src/plugins/platforms/vnc/qvncscreen.cpp b/src/plugins/platforms/vnc/qvncscreen.cpp
index 91a8933dba..75c8bedff7 100644
--- a/src/plugins/platforms/vnc/qvncscreen.cpp
+++ b/src/plugins/platforms/vnc/qvncscreen.cpp
@@ -43,6 +43,7 @@
#include <QtFbSupport/private/qfbcursor_p.h>
#include <QtGui/QPainter>
+#include <QtGui/QScreen>
#include <QtCore/QRegularExpression>
@@ -172,14 +173,18 @@ QPixmap QVncScreen::grabWindow(WId wid, int x, int y, int width, int height) con
}
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
-bool QVNCScreen::swapBytes() const
+bool QVncScreen::swapBytes() const
{
+ return false;
+
+ /* TODO
if (depth() != 16)
return false;
if (screen())
return screen()->frameBufferLittleEndian();
return frameBufferLittleEndian();
+ */
}
#endif
diff --git a/src/plugins/platforms/vnc/qvncscreen.h b/src/plugins/platforms/vnc/qvncscreen.h
index c0a22ed140..b2dd89a2ed 100644
--- a/src/plugins/platforms/vnc/qvncscreen.h
+++ b/src/plugins/platforms/vnc/qvncscreen.h
@@ -75,7 +75,7 @@ public:
void clearDirty() { dirtyRegion = QRegion(); }
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
- bool swapBytes() const
+ bool swapBytes() const;
#endif
QStringList mArgs;
diff --git a/src/sql/configure.json b/src/sql/configure.json
index 72671b6df9..45b3fd9dd1 100644
--- a/src/sql/configure.json
+++ b/src/sql/configure.json
@@ -8,7 +8,6 @@
"commandline": {
"assignments": {
"MYSQL_PATH": "mysql.prefix",
- "PSQL_LIBS": "psql.libs",
"SYBASE": "tds.prefix",
"SYBASE_LIBS": "tds.libs"
},
@@ -115,8 +114,10 @@
"test": "unix/sqlite",
"sources": [
{ "type": "pkgConfig", "args": "sqlite3" },
- { "libs": "-lsqlite3", "condition": "config.win32" },
- { "libs": "-lsqlite3 -lz", "condition": "!config.win32" }
+ "-lsqlite3"
+ ],
+ "use": [
+ { "lib": "zlib", "condition": "!config.win32" }
]
}
},
diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm
index cc895e2c33..f884a1c279 100644
--- a/src/widgets/styles/qmacstyle_mac.mm
+++ b/src/widgets/styles/qmacstyle_mac.mm
@@ -6669,12 +6669,7 @@ QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt,
break;
}
case CT_Menu: {
- QStyleHintReturnMask menuMask;
- QStyleOption myOption = *opt;
- myOption.rect.setSize(sz);
- if (proxy()->styleHint(SH_Menu_Mask, &myOption, widget, &menuMask)) {
- sz = menuMask.region.boundingRect().size();
- }
+ sz = csz;
break; }
case CT_HeaderSection:{
const QStyleOptionHeader *header = qstyleoption_cast<const QStyleOptionHeader *>(opt);
diff --git a/src/widgets/widgets/qdockarealayout.cpp b/src/widgets/widgets/qdockarealayout.cpp
index b33f2dc798..8d9280ebb5 100644
--- a/src/widgets/widgets/qdockarealayout.cpp
+++ b/src/widgets/widgets/qdockarealayout.cpp
@@ -2092,7 +2092,7 @@ void QDockAreaLayoutInfo::reparentWidgets(QWidget *parent)
const QDockAreaLayoutItem &item = item_list.at(i);
if (item.flags & QDockAreaLayoutItem::GapItem)
continue;
- if (!item.widgetItem && item.skip())
+ if (item.skip())
continue;
if (item.subinfo)
item.subinfo->reparentWidgets(parent);
diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp
index aa5d809431..307a261a43 100644
--- a/src/widgets/widgets/qdockwidget.cpp
+++ b/src/widgets/widgets/qdockwidget.cpp
@@ -1026,6 +1026,12 @@ void QDockWidgetPrivate::nonClientAreaMouseEvent(QMouseEvent *event)
}
}
+void QDockWidgetPrivate::recalculatePressPos(QResizeEvent *event)
+{
+ qreal ratio = event->oldSize().width() / (1.0 * event->size().width());
+ state->pressPos.setX(state->pressPos.x() / ratio);
+}
+
/*! \internal
Called when the QDockWidget or the QDockWidgetGroupWindow is moved
*/
@@ -1542,6 +1548,13 @@ bool QDockWidget::event(QEvent *event)
// if the mainwindow is plugging us, we don't want to update undocked geometry
if (isFloating() && layout != 0 && layout->pluggingWidget != this)
d->undockedGeometry = geometry();
+
+ // Usually the window won't get resized while it's being moved, but it can happen,
+ // for example on Windows when moving to a screen with bigger scale factor
+ // (and Qt::AA_EnableHighDpiScaling is enabled). If that happens we should
+ // update state->pressPos, otherwise it will be outside the window when the window shrinks.
+ if (d->state && d->state->dragging)
+ d->recalculatePressPos(static_cast<QResizeEvent*>(event));
break;
default:
break;
diff --git a/src/widgets/widgets/qdockwidget_p.h b/src/widgets/widgets/qdockwidget_p.h
index 94a3ad3b34..84bf8efacf 100644
--- a/src/widgets/widgets/qdockwidget_p.h
+++ b/src/widgets/widgets/qdockwidget_p.h
@@ -118,6 +118,7 @@ public:
void startDrag(bool group = true);
void endDrag(bool abort = false);
void moveEvent(QMoveEvent *event);
+ void recalculatePressPos(QResizeEvent *event);
void unplug(const QRect &rect);
void plug(const QRect &rect);
diff --git a/src/widgets/widgets/qmainwindowlayout.cpp b/src/widgets/widgets/qmainwindowlayout.cpp
index 68ca571acf..640154063e 100644
--- a/src/widgets/widgets/qmainwindowlayout.cpp
+++ b/src/widgets/widgets/qmainwindowlayout.cpp
@@ -2195,10 +2195,8 @@ void QMainWindowLayout::animationFinished(QWidget *widget)
}
if (QDockWidget *dw = qobject_cast<QDockWidget*>(widget)) {
- if (currentHoveredFloat) {
- dw->setParent(currentHoveredFloat);
- dw->show();
- }
+ dw->setParent(currentHoveredFloat ? currentHoveredFloat.data() : parentWidget());
+ dw->show();
dw->d_func()->plug(currentGapRect);
}
#endif
@@ -2380,7 +2378,8 @@ QLayoutItem *QMainWindowLayout::unplug(QWidget *widget, bool group)
// We are unplugging a dock widget from a floating window.
if (QDockWidget *dw = qobject_cast<QDockWidget*>(widget)) {
dw->d_func()->unplug(widget->geometry());
- return 0;
+ int index = widget->parentWidget()->layout()->indexOf(widget);
+ return widget->parentWidget()->layout()->itemAt(index);
}
}
}