Merge remote-tracking branch 'origin/5.13' into dev
Change-Id: I4b56ce8c76729d9fc60995564299f8f27336fcde
This commit is contained in:
commit
2a1292b916
@ -44,7 +44,9 @@ for (cp, COPIES) {
|
||||
$${pfx}.output = $$path/${QMAKE_FUNC_FILE_IN_qtStripSrcDir_$$cp}
|
||||
}
|
||||
$${pfx}.input = $${pfx}.files
|
||||
$${pfx}.commands = $(QINSTALL) ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
|
||||
contains(TEMPLATE, "vc.*"): copycommand = $$QMAKE_QMAKE -install qinstall
|
||||
else: copycommand = $(QINSTALL)
|
||||
$${pfx}.commands = $$copycommand ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
|
||||
$${pfx}.name = COPY ${QMAKE_FILE_IN}
|
||||
$${pfx}.CONFIG = no_link no_clean target_predeps
|
||||
QMAKE_EXTRA_COMPILERS += $${pfx}
|
||||
|
@ -21,6 +21,11 @@ EMCC_COMMON_LFLAGS = \
|
||||
--bind \
|
||||
-s \"BINARYEN_TRAP_MODE=\'clamp\'\"
|
||||
|
||||
EMCC_USE_PORTS_FLAGS = \
|
||||
-s USE_LIBPNG=1 \
|
||||
-s USE_FREETYPE=1 \
|
||||
-s USE_ZLIB=1
|
||||
|
||||
# The -s arguments can also be used with release builds,
|
||||
# but are here in debug for clarity.
|
||||
EMCC_COMMON_LFLAGS_DEBUG = \
|
||||
@ -38,6 +43,9 @@ QMAKE_COMPILER += emscripten
|
||||
QMAKE_CC = emcc
|
||||
QMAKE_CXX = em++
|
||||
|
||||
QMAKE_CFLAGS += $$EMCC_USE_PORTS_FLAGS
|
||||
QMAKE_CXXFLAGS += $$EMCC_USE_PORTS_FLAGS
|
||||
|
||||
# Practical debugging setup:
|
||||
# "-g4" preserves function names for stack traces
|
||||
# "-Os" produces reasonably sized binaries
|
||||
|
19
mkspecs/winrt-arm-msvc2019/qmake.conf
Normal file
19
mkspecs/winrt-arm-msvc2019/qmake.conf
Normal file
@ -0,0 +1,19 @@
|
||||
#
|
||||
# qmake configuration for winrt-arm-msvc2019
|
||||
#
|
||||
# Written for Microsoft Visual C++ 2019
|
||||
#
|
||||
|
||||
include(../common/winrt_winphone/qmake.conf)
|
||||
DEFINES += WINAPI_FAMILY=WINAPI_FAMILY_PC_APP WINAPI_PARTITION_PHONE_APP=1 ARM __ARM__ __arm__
|
||||
|
||||
QMAKE_CFLAGS += -FS
|
||||
QMAKE_CXXFLAGS += -FS
|
||||
QMAKE_LFLAGS += /MACHINE:ARM /NODEFAULTLIB:kernel32.lib
|
||||
|
||||
QMAKE_LIBS += windowscodecs.lib WindowsApp.lib runtimeobject.lib OneCore.lib
|
||||
|
||||
VCPROJ_ARCH = ARM
|
||||
WINSDK_VER = 10.0
|
||||
WINRT_MANIFEST = $$PWD/../common/winrt_winphone/manifests/10.0/AppxManifest.xml.in
|
||||
WINRT_MANIFEST.architecture = arm
|
40
mkspecs/winrt-arm-msvc2019/qplatformdefs.h
Normal file
40
mkspecs/winrt-arm-msvc2019/qplatformdefs.h
Normal file
@ -0,0 +1,40 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2019 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the qmake spec 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 The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/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 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "../common/winrt_winphone/qplatformdefs.h"
|
19
mkspecs/winrt-arm64-msvc2019/qmake.conf
Normal file
19
mkspecs/winrt-arm64-msvc2019/qmake.conf
Normal file
@ -0,0 +1,19 @@
|
||||
#
|
||||
# qmake configuration for winrt-arm64-msvc2019
|
||||
#
|
||||
# Written for Microsoft Visual C++ 2019
|
||||
#
|
||||
|
||||
include(../common/winrt_winphone/qmake.conf)
|
||||
DEFINES += WINAPI_FAMILY=WINAPI_FAMILY_PC_APP WINAPI_PARTITION_PHONE_APP=1 arm64 __arm64__ __arm64__
|
||||
|
||||
QMAKE_CFLAGS += -FS
|
||||
QMAKE_CXXFLAGS += -FS
|
||||
QMAKE_LFLAGS += /MACHINE:arm64 /NODEFAULTLIB:kernel32.lib
|
||||
|
||||
QMAKE_LIBS += windowscodecs.lib WindowsApp.lib runtimeobject.lib OneCore.lib
|
||||
|
||||
VCPROJ_ARCH = arm64
|
||||
WINSDK_VER = 10.0
|
||||
WINRT_MANIFEST = $$PWD/../common/winrt_winphone/manifests/10.0/AppxManifest.xml.in
|
||||
WINRT_MANIFEST.architecture = arm64
|
40
mkspecs/winrt-arm64-msvc2019/qplatformdefs.h
Normal file
40
mkspecs/winrt-arm64-msvc2019/qplatformdefs.h
Normal file
@ -0,0 +1,40 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2019 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the qmake spec 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 The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/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 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "../common/winrt_winphone/qplatformdefs.h"
|
19
mkspecs/winrt-x64-msvc2019/qmake.conf
Normal file
19
mkspecs/winrt-x64-msvc2019/qmake.conf
Normal file
@ -0,0 +1,19 @@
|
||||
#
|
||||
# qmake configuration for winrt-x64-msvc2019
|
||||
#
|
||||
# Written for Microsoft Visual C++ 2019
|
||||
#
|
||||
|
||||
include(../common/winrt_winphone/qmake.conf)
|
||||
DEFINES += WINAPI_FAMILY=WINAPI_FAMILY_PC_APP WINAPI_PARTITION_PHONE_APP=1 X64 __X64__ __x64__
|
||||
|
||||
QMAKE_CFLAGS += -FS
|
||||
QMAKE_CXXFLAGS += -FS
|
||||
QMAKE_LFLAGS += /MACHINE:X64 /NODEFAULTLIB:kernel32.lib
|
||||
|
||||
QMAKE_LIBS += windowscodecs.lib WindowsApp.lib runtimeobject.lib OneCore.lib
|
||||
|
||||
VCPROJ_ARCH = x64
|
||||
WINSDK_VER = 10.0
|
||||
WINRT_MANIFEST = $$PWD/../common/winrt_winphone/manifests/10.0/AppxManifest.xml.in
|
||||
WINRT_MANIFEST.architecture = x64
|
40
mkspecs/winrt-x64-msvc2019/qplatformdefs.h
Normal file
40
mkspecs/winrt-x64-msvc2019/qplatformdefs.h
Normal file
@ -0,0 +1,40 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2019 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the qmake spec 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 The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/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 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "../common/winrt_winphone/qplatformdefs.h"
|
18
mkspecs/winrt-x86-msvc2019/qmake.conf
Normal file
18
mkspecs/winrt-x86-msvc2019/qmake.conf
Normal file
@ -0,0 +1,18 @@
|
||||
#
|
||||
# qmake configuration for winrt-x86-msvc2019
|
||||
#
|
||||
# Written for Microsoft Visual C++ 2019
|
||||
#
|
||||
|
||||
include(../common/winrt_winphone/qmake.conf)
|
||||
DEFINES += WINAPI_FAMILY=WINAPI_FAMILY_PC_APP WINAPI_PARTITION_PHONE_APP=1 X86 __X86__ __x86__
|
||||
|
||||
QMAKE_CFLAGS += -FS
|
||||
QMAKE_CXXFLAGS += -FS
|
||||
QMAKE_LFLAGS += /SAFESEH /MACHINE:X86 /NODEFAULTLIB:kernel32.lib
|
||||
|
||||
QMAKE_LIBS += windowscodecs.lib WindowsApp.lib runtimeobject.lib OneCore.lib
|
||||
VCPROJ_ARCH = Win32
|
||||
WINSDK_VER = 10.0
|
||||
WINRT_MANIFEST = $$PWD/../common/winrt_winphone/manifests/10.0/AppxManifest.xml.in
|
||||
WINRT_MANIFEST.architecture = x86
|
40
mkspecs/winrt-x86-msvc2019/qplatformdefs.h
Normal file
40
mkspecs/winrt-x86-msvc2019/qplatformdefs.h
Normal file
@ -0,0 +1,40 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2019 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the qmake spec 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 The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/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 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "../common/winrt_winphone/qplatformdefs.h"
|
@ -13,7 +13,7 @@ QMKSRC = $(SOURCE_PATH)\qmake
|
||||
!if "$(QMAKESPEC)" == "win32-icc"
|
||||
CXX = icl
|
||||
LINKER = xilink
|
||||
CFLAGS_EXTRA = /Zc:forScope /Qstd=c++11
|
||||
CFLAGS_EXTRA = /Zc:forScope /Qstd=c++11 /O3
|
||||
!elseif "$(QMAKESPEC)" == "win32-clang-msvc"
|
||||
CXX = clang-cl
|
||||
LINKER = lld-link
|
||||
@ -30,7 +30,7 @@ PCH_OBJECT = qmake_pch.obj
|
||||
!endif
|
||||
|
||||
CFLAGS_BARE = -c -Fo./ -Fdqmake.pdb \
|
||||
-W2 -nologo -O1 \
|
||||
-W2 -nologo -O2 \
|
||||
$(CFLAGS_EXTRA) \
|
||||
-I$(QMKSRC) -I$(QMKSRC)\library -I$(QMKSRC)\generators -I$(QMKSRC)\generators\unix -I$(QMKSRC)\generators\win32 -I$(QMKSRC)\generators\mac \
|
||||
-I$(INC_PATH) -I$(INC_PATH)\QtCore -I$(INC_PATH)\QtCore\$(QT_VERSION) -I$(INC_PATH)\QtCore\$(QT_VERSION)\QtCore \
|
||||
|
@ -81,8 +81,8 @@ bool MakefileGenerator::canExecute(const QStringList &cmdline, int *a) const
|
||||
|
||||
QString MakefileGenerator::mkdir_p_asstring(const QString &dir, bool escape) const
|
||||
{
|
||||
QString edir = escape ? escapeFilePath(Option::fixPathToTargetOS(dir, false, false)) : dir;
|
||||
return "@" + makedir.arg(edir);
|
||||
return "@" + makedir.arg(
|
||||
escape ? escapeFilePath(Option::fixPathToTargetOS(dir, false, false)) : dir);
|
||||
}
|
||||
|
||||
bool MakefileGenerator::mkdir(const QString &in_path) const
|
||||
|
@ -1357,7 +1357,7 @@ void VcprojGenerator::initWinDeployQtTool()
|
||||
// structure manually by invoking windeployqt a second time, so that
|
||||
// the MDILXapCompile call succeeds and deployment continues.
|
||||
conf.windeployqt.CommandLine += commandLine
|
||||
+ QStringLiteral(" -list relative -dir \"$(MSBuildProjectDirectory)\" \"$(OutDir)\\$(TargetName).exe\" > ")
|
||||
+ QStringLiteral(" -list relative -dir \"$(MSBuildProjectDirectory)\" \"$(OutDir)\\$(TargetFileName)\" > ")
|
||||
+ MakefileGenerator::shellQuote(conf.windeployqt.Record);
|
||||
conf.windeployqt.config = &vcProject.Configuration;
|
||||
conf.windeployqt.ExcludedFromBuild = false;
|
||||
|
@ -604,11 +604,14 @@ public class QtActivityDelegate
|
||||
}
|
||||
QtNative.loadQtLibraries(loaderParams.getStringArrayList(NATIVE_LIBRARIES_KEY));
|
||||
ArrayList<String> libraries = loaderParams.getStringArrayList(BUNDLED_LIBRARIES_KEY);
|
||||
QtNative.loadBundledLibraries(libraries, QtNativeLibrariesDir.nativeLibrariesDir(m_activity));
|
||||
String nativeLibsDir = QtNativeLibrariesDir.nativeLibrariesDir(m_activity);
|
||||
QtNative.loadBundledLibraries(libraries, nativeLibsDir);
|
||||
m_mainLib = loaderParams.getString(MAIN_LIBRARY_KEY);
|
||||
// older apps provide the main library as the last bundled library; look for this if the main library isn't provided
|
||||
if (null == m_mainLib && libraries.size() > 0)
|
||||
if (null == m_mainLib && libraries.size() > 0) {
|
||||
m_mainLib = libraries.get(libraries.size() - 1);
|
||||
libraries.remove(libraries.size() - 1);
|
||||
}
|
||||
|
||||
if (loaderParams.containsKey(EXTRACT_STYLE_KEY)) {
|
||||
String path = loaderParams.getString(EXTRACT_STYLE_KEY);
|
||||
@ -662,8 +665,8 @@ public class QtActivityDelegate
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return true;
|
||||
m_mainLib = QtNative.loadMainLibrary(m_mainLib, nativeLibsDir);
|
||||
return m_mainLib != null;
|
||||
}
|
||||
|
||||
public boolean startApplication()
|
||||
@ -726,11 +729,7 @@ public class QtActivityDelegate
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
String nativeLibraryDir = QtNativeLibrariesDir.nativeLibrariesDir(m_activity);
|
||||
QtNative.startApplication(m_applicationParameters,
|
||||
m_environmentVariables,
|
||||
m_mainLib,
|
||||
nativeLibraryDir);
|
||||
QtNative.startApplication(m_applicationParameters, m_environmentVariables, m_mainLib);
|
||||
m_started = true;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
@ -244,6 +244,41 @@ public class QtNative
|
||||
});
|
||||
}
|
||||
|
||||
public static String loadMainLibrary(final String mainLibrary, final String nativeLibraryDir)
|
||||
{
|
||||
final String[] res = new String[1];
|
||||
res[0] = null;
|
||||
m_qtThread.run(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
String mainLibNameTemplate = "lib" + mainLibrary + ".so";
|
||||
File f = new File(nativeLibraryDir + mainLibNameTemplate);
|
||||
if (!f.exists()) {
|
||||
try {
|
||||
ActivityInfo info = m_activity.getPackageManager().getActivityInfo(m_activity.getComponentName(),
|
||||
PackageManager.GET_META_DATA);
|
||||
String systemLibraryDir = QtNativeLibrariesDir.systemLibrariesDir;
|
||||
if (info.metaData.containsKey("android.app.system_libs_prefix"))
|
||||
systemLibraryDir = info.metaData.getString("android.app.system_libs_prefix");
|
||||
f = new File(systemLibraryDir + mainLibNameTemplate);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (!f.exists())
|
||||
return;
|
||||
System.load(f.getAbsolutePath());
|
||||
res[0] = f.getAbsolutePath();
|
||||
} catch (Exception e) {
|
||||
Log.e(QtTAG, "Can't load '" + mainLibrary + "'", e);
|
||||
}
|
||||
}
|
||||
});
|
||||
return res[0];
|
||||
}
|
||||
|
||||
public static void setActivity(Activity qtMainActivity, QtActivityDelegate qtActivityDelegate)
|
||||
{
|
||||
synchronized (m_mainActivityMutex) {
|
||||
@ -321,46 +356,20 @@ public class QtNative
|
||||
});
|
||||
}
|
||||
|
||||
public static boolean startApplication(String params,
|
||||
final String environment,
|
||||
String mainLibrary,
|
||||
String nativeLibraryDir) throws Exception
|
||||
public static boolean startApplication(String params, final String environment, String mainLib) throws Exception
|
||||
{
|
||||
String mainLibNameTemplate = "lib" + mainLibrary + ".so";
|
||||
File f = new File(nativeLibraryDir + mainLibNameTemplate);
|
||||
if (!f.exists()) {
|
||||
try {
|
||||
ActivityInfo info = m_activity.getPackageManager().getActivityInfo(m_activity.getComponentName(),
|
||||
PackageManager.GET_META_DATA);
|
||||
String systemLibraryDir = QtNativeLibrariesDir.systemLibrariesDir;
|
||||
if (info.metaData.containsKey("android.app.system_libs_prefix"))
|
||||
systemLibraryDir = info.metaData.getString("android.app.system_libs_prefix");
|
||||
f = new File(systemLibraryDir + mainLibNameTemplate);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
}
|
||||
if (!f.exists())
|
||||
throw new Exception("Can't find main library '" + mainLibrary + "'");
|
||||
|
||||
if (params == null)
|
||||
params = "-platform\tandroid";
|
||||
|
||||
final String mainLibraryPath = f.getAbsolutePath();
|
||||
final boolean[] res = new boolean[1];
|
||||
res[0] = false;
|
||||
synchronized (m_mainActivityMutex) {
|
||||
if (params.length() > 0 && !params.startsWith("\t"))
|
||||
params = "\t" + params;
|
||||
final String qtParams = f.getAbsolutePath() + params;
|
||||
final String qtParams = mainLib + params;
|
||||
m_qtThread.run(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
System.load(mainLibraryPath);
|
||||
} catch (Exception e) {
|
||||
Log.i(QtTAG, "Can't load '" + mainLibraryPath + "'", e);
|
||||
}
|
||||
res[0] = startQtAndroidPlugin(qtParams, environment);
|
||||
setDisplayMetrics(m_displayMetricsScreenWidthPixels,
|
||||
m_displayMetricsScreenHeightPixels,
|
||||
|
@ -98,8 +98,8 @@ public class QtServiceDelegate
|
||||
private static final String APP_DISPLAY_METRIC_SCREEN_YDPI_KEY = "display.screen.dpi.y";
|
||||
private static final String APP_DISPLAY_METRIC_SCREEN_DENSITY_KEY = "display.screen.density";
|
||||
|
||||
private String m_mainLib = null;
|
||||
private Service m_service = null;
|
||||
private String m_mainLib;
|
||||
private static String m_environmentVariables = null;
|
||||
private static String m_applicationParameters = null;
|
||||
|
||||
@ -142,9 +142,9 @@ public class QtServiceDelegate
|
||||
}
|
||||
QtNative.loadQtLibraries(loaderParams.getStringArrayList(NATIVE_LIBRARIES_KEY));
|
||||
ArrayList<String> libraries = loaderParams.getStringArrayList(BUNDLED_LIBRARIES_KEY);
|
||||
QtNative.loadBundledLibraries(libraries, QtNativeLibrariesDir.nativeLibrariesDir(m_service));
|
||||
String nativeLibsDir = QtNativeLibrariesDir.nativeLibrariesDir(m_service);
|
||||
QtNative.loadBundledLibraries(libraries, nativeLibsDir);
|
||||
m_mainLib = loaderParams.getString(MAIN_LIBRARY_KEY);
|
||||
|
||||
m_environmentVariables = loaderParams.getString(ENVIRONMENT_VARIABLES_KEY);
|
||||
String additionalEnvironmentVariables = "QT_ANDROID_FONTS_MONOSPACE=Droid Sans Mono;Droid Sans;Droid Sans Fallback"
|
||||
+ "\tQT_ANDROID_FONTS_SERIF=Droid Serif"
|
||||
@ -165,7 +165,8 @@ public class QtServiceDelegate
|
||||
else
|
||||
m_applicationParameters = "";
|
||||
|
||||
return true;
|
||||
m_mainLib = QtNative.loadMainLibrary(m_mainLib, nativeLibsDir);
|
||||
return m_mainLib != null;
|
||||
}
|
||||
|
||||
public boolean startApplication()
|
||||
@ -173,10 +174,7 @@ public class QtServiceDelegate
|
||||
// start application
|
||||
try {
|
||||
String nativeLibraryDir = QtNativeLibrariesDir.nativeLibrariesDir(m_service);
|
||||
QtNative.startApplication(m_applicationParameters,
|
||||
m_environmentVariables,
|
||||
m_mainLib,
|
||||
nativeLibraryDir);
|
||||
QtNative.startApplication(m_applicationParameters, m_environmentVariables, m_mainLib);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
@ -3,4 +3,5 @@
|
||||
<string name="ministro_not_found_msg">Δεν ήταν δυνατή η εύρεση της υπηρεσίας Ministro. Δεν είναι δυνατή η εκκίνηση της εφαρμογής.</string>
|
||||
<string name="ministro_needed_msg">Η εφαρμογή απαιτεί την υπηρεσία Ministro. Να εγκατασταθεί η υπηρεσία?</string>
|
||||
<string name="fatal_error_msg">Παρουσιάστηκε ένα κρίσιμο σφάλμα και η εφαρμογή δεν μπορεί να συνεχίσει.</string>
|
||||
<string name="unsupported_android_version">Αυτή η έκδοση του Android δεν υποστηρίζεται.</string>
|
||||
</resources>
|
||||
|
@ -3,4 +3,5 @@
|
||||
<string name="ministro_not_found_msg">Servicio Ministro inesistente. Imposible ejecutar la aplicación.</string>
|
||||
<string name="ministro_needed_msg">Esta aplicación requiere el servicio Ministro. Instalarlo?</string>
|
||||
<string name="fatal_error_msg">La aplicación ha causado un error grave y no es posible continuar.</string>
|
||||
<string name="unsupported_android_version">Esta versión de Android no es compatible.</string>
|
||||
</resources>
|
||||
|
@ -3,4 +3,5 @@
|
||||
<string name="ministro_not_found_msg">Ei suuda leida Ministro teenust.\nProgrammi ei saa käivitada.</string>
|
||||
<string name="ministro_needed_msg">See programm vajab Ministro teenust.\nKas soovite paigaldada?</string>
|
||||
<string name="fatal_error_msg">Programmiga juhtus fataalne viga.\nKahjuks ei saa jätkata.</string>
|
||||
<string name="unsupported_android_version">Seda Androidi versiooni ei toetata.</string>
|
||||
</resources>
|
||||
|
@ -3,4 +3,5 @@
|
||||
<string name="ministro_not_found_msg">سرویس Ministro را پیدا نمیکند. برنامه نمیتواند آغاز شود.</string>
|
||||
<string name="ministro_needed_msg">این نرمافزار به سرویس Ministro احتیاج دارد. آیا دوست دارید آن را نصب کنید؟</string>
|
||||
<string name="fatal_error_msg">خطایی اساسی در برنامهتان رخ داد و اجرای برنامه نمیتواند ادامه یابد.</string>
|
||||
<string name="unsupported_android_version">این نسخه از Android پشتیبانی نمی شود</string>
|
||||
</resources>
|
||||
|
@ -3,4 +3,5 @@
|
||||
<string name="ministro_not_found_msg">Layanan Ministro tidak bisa ditemukan.\nAplikasi tidak bisa dimulai.</string>
|
||||
<string name="ministro_needed_msg">Aplikasi ini membutuhkan layanan Ministro. Apakah Anda ingin menginstalnya?</string>
|
||||
<string name="fatal_error_msg">Aplikasi Anda mengalami kesalahan fatal dan tidak dapat melanjutkan.</string>
|
||||
<string name="unsupported_android_version">Versi Android ini tidak didukung.</string>
|
||||
</resources>
|
@ -3,4 +3,5 @@
|
||||
<string name="ministro_not_found_msg">Servizio Ministro inesistente. Impossibile eseguire \nl\'applicazione.</string>
|
||||
<string name="ministro_needed_msg">Questa applicazione richiede il servizio Ministro.Installarlo?</string>
|
||||
<string name="fatal_error_msg">L\'applicazione ha provocato un errore grave e non puo\' continuare.</string>
|
||||
<string name="unsupported_android_version">Questa versione di Android non è supportata.</string>
|
||||
</resources>
|
||||
|
@ -3,4 +3,5 @@
|
||||
<string name="ministro_not_found_msg">Ministroサービスが見つかりません。\nアプリケーションが起動できません。</string>
|
||||
<string name="ministro_needed_msg">このアプリケーションにはMinistroサービスが必要です。 インストールしてもよろしいですか?</string>
|
||||
<string name="fatal_error_msg">アプリケーションで致命的なエラーが発生したため続行できません。</string>
|
||||
<string name="unsupported_android_version">このバージョンのAndroidはサポートされていません。</string>
|
||||
</resources>
|
||||
|
@ -3,4 +3,5 @@
|
||||
<string name="ministro_not_found_msg">Tidak jumpa servis Ministro.\nAplikasi tidak boleh dimulakan.</string>
|
||||
<string name="ministro_needed_msg">Aplikasi ini memerlukan servis Ministro. Adakah anda ingin pasang servis itu?</string>
|
||||
<string name="fatal_error_msg">Aplikasi anda menemui ralat muat dan tidak boleh diteruskan.</string>
|
||||
<string name="unsupported_android_version">Versi Android ini tidak disokong.</string>
|
||||
</resources>
|
||||
|
@ -3,4 +3,5 @@
|
||||
<string name="ministro_not_found_msg">Kan ikke finne tjenesten Ministro. Applikasjonen kan ikke starte.</string>
|
||||
<string name="ministro_needed_msg">Denne applikasjonen krever tjenesten Ministro. Vil du installere denne?</string>
|
||||
<string name="fatal_error_msg">Applikasjonen fikk en kritisk feil og kan ikke fortsette</string>
|
||||
<string name="unsupported_android_version">Denne versjonen av Android støttes ikke.</string>
|
||||
</resources>
|
||||
|
@ -3,4 +3,5 @@
|
||||
<string name="ministro_not_found_msg">De Ministro service is niet gevonden.\nDe applicatie kan niet starten.</string>
|
||||
<string name="ministro_needed_msg">Deze applicatie maakt gebruik van de Ministro service. Wilt u deze installeren?</string>
|
||||
<string name="fatal_error_msg">Er is een fatale fout in de applicatie opgetreden. De applicatie kan niet verder gaan.</string>
|
||||
<string name="unsupported_android_version">Deze versie van Android wordt niet ondersteund.</string>
|
||||
</resources>
|
||||
|
@ -3,4 +3,5 @@
|
||||
<string name="ministro_not_found_msg">Usługa Ministro nie została znaleziona.\nAplikacja nie może zostać uruchomiona.</string>
|
||||
<string name="ministro_needed_msg">Aplikacja wymaga usługi Ministro. Czy chcesz ją zainstalować?</string>
|
||||
<string name="fatal_error_msg">Wystąpił błąd krytyczny. Aplikacja zostanie zamknięta.</string>
|
||||
<string name="unsupported_android_version">Ta wersja Androida nie jest obsługiwana.</string>
|
||||
</resources>
|
||||
|
@ -3,4 +3,5 @@
|
||||
<string name="ministro_not_found_msg">Não foi possível encontrar o serviço Ministro.\nA aplicação não pode iniciar.</string>
|
||||
<string name="ministro_needed_msg">Essa aplicação requer o serviço Ministro. Gostaria de instalá-lo?</string>
|
||||
<string name="fatal_error_msg">Sua aplicação encontrou um erro fatal e não pode continuar.</string>
|
||||
<string name="unsupported_android_version">Esta versão do Android não é suportada.</string>
|
||||
</resources>
|
||||
|
@ -3,5 +3,5 @@
|
||||
<string name="ministro_not_found_msg">Serviciul Ministro nu poate fi găsit.\nAplicaţia nu poate porni.</string>
|
||||
<string name="ministro_needed_msg">Această aplicaţie necesită serviciul Ministro.\nDoriţi să-l instalaţi?</string>
|
||||
<string name="fatal_error_msg">Aplicaţia dumneavoastră a întâmpinat o eroare fatală şi nu poate continua.</string>
|
||||
<string name="unsupported_android_version">Versiune Android nesuportată.</string>
|
||||
<string name="unsupported_android_version">Această versiune de Android nu este suportată.</string>
|
||||
</resources>
|
||||
|
@ -3,4 +3,5 @@
|
||||
<string name="ministro_not_found_msg">Ministro servise nije pronađen. Aplikacija ne može biti pokrenuta.</string>
|
||||
<string name="ministro_needed_msg">Ova aplikacija zahteva Ministro servis. Želite li da ga instalirate?</string>
|
||||
<string name="fatal_error_msg">Vaša aplikacija je naišla na fatalnu grešku i ne može nastaviti sa radom.</string>
|
||||
<string name="unsupported_android_version">Ova verzija Android-a nije podržana.</string>
|
||||
</resources>
|
||||
|
@ -3,4 +3,5 @@
|
||||
<string name="ministro_not_found_msg">Сервис Ministro не найден.\nПриложение нельзя запустить.</string>
|
||||
<string name="ministro_needed_msg">Этому приложению необходим сервис Ministro. Вы хотите его установить?</string>
|
||||
<string name="fatal_error_msg">Ваше приложение столкнулось с фатальной ошибкой и не может более работать.</string>
|
||||
<string name="unsupported_android_version">Эта версия Android не поддерживается.</string>
|
||||
</resources>
|
||||
|
@ -3,4 +3,5 @@
|
||||
<string name="ministro_not_found_msg">无法找到Ministro服务。\n应用程序无法启动。</string>
|
||||
<string name="ministro_needed_msg">此应用程序需要Ministro服务。您想安装它吗?</string>
|
||||
<string name="fatal_error_msg">您的应用程序遇到一个致命错误导致它无法继续。</string>
|
||||
<string name="unsupported_android_version">这个版本的安卓系统不被支持。</string>
|
||||
</resources>
|
||||
|
@ -3,4 +3,5 @@
|
||||
<string name="ministro_not_found_msg">無法找到Ministro服務。\n應用程序無法啟動。</string>
|
||||
<string name="ministro_needed_msg">此應用程序需要Ministro服務。您想安裝它嗎?</string>
|
||||
<string name="fatal_error_msg">您的應用程序遇到一個致命錯誤導致它無法繼續。</string>
|
||||
<string name="unsupported_android_version">這個版本的安卓系統不被支持。</string>
|
||||
</resources>
|
||||
|
@ -4,5 +4,5 @@
|
||||
<string name="ministro_not_found_msg">Can\'t find Ministro service.\nThe application can\'t start.</string>
|
||||
<string name="ministro_needed_msg">This application requires Ministro service. Would you like to install it?</string>
|
||||
<string name="fatal_error_msg">Your application encountered a fatal error and cannot continue.</string>
|
||||
<string name="unsupported_android_version">Unsupported Android version.</string>
|
||||
<string name="unsupported_android_version">This version of Android is not supported.</string>
|
||||
</resources>
|
||||
|
@ -362,16 +362,22 @@ void QProcessPrivate::destroyPipe(Q_PIPE pipe[2])
|
||||
}
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void deleteWorker(T *&worker)
|
||||
{
|
||||
if (!worker)
|
||||
return;
|
||||
worker->stop();
|
||||
worker->deleteLater();
|
||||
worker = nullptr;
|
||||
}
|
||||
|
||||
void QProcessPrivate::closeChannel(Channel *channel)
|
||||
{
|
||||
if (channel == &stdinChannel) {
|
||||
delete stdinChannel.writer;
|
||||
stdinChannel.writer = 0;
|
||||
} else if (channel->reader) {
|
||||
channel->reader->stop();
|
||||
channel->reader->deleteLater();
|
||||
channel->reader = 0;
|
||||
}
|
||||
if (channel == &stdinChannel)
|
||||
deleteWorker(channel->writer);
|
||||
else
|
||||
deleteWorker(channel->reader);
|
||||
destroyPipe(channel->pipe);
|
||||
}
|
||||
|
||||
|
@ -2167,6 +2167,9 @@ void QConfFileSettingsPrivate::ensureSectionParsed(QConfFile *confFile,
|
||||
|
||||
\snippet settings/settings.cpp 15
|
||||
|
||||
Note that type information is not preserved when reading settings from INI
|
||||
files; all values will be returned as QString.
|
||||
|
||||
The \l{tools/settingseditor}{Settings Editor} example lets you
|
||||
experiment with different settings location and with fallbacks
|
||||
turned on or off.
|
||||
@ -2448,7 +2451,10 @@ void QConfFileSettingsPrivate::ensureSectionParsed(QConfFile *confFile,
|
||||
On 32-bit Windows or from a 64-bit application on 64-bit Windows,
|
||||
this works the same as specifying NativeFormat.
|
||||
This enum value was added in Qt 5.7.
|
||||
\value IniFormat Store the settings in INI files.
|
||||
\value IniFormat Store the settings in INI files. Note that type information
|
||||
is not preserved when reading settings from INI files;
|
||||
all values will be returned as QString.
|
||||
|
||||
\value InvalidFormat Special value returned by registerFormat().
|
||||
\omitvalue CustomFormat1
|
||||
\omitvalue CustomFormat2
|
||||
|
@ -2,7 +2,7 @@
|
||||
"Id": "psl",
|
||||
"Name": "The Public Suffix List",
|
||||
"QDocModule": "qtcore",
|
||||
"Description": "The Public Suffix List is an initiative of the Mozilla Project,
|
||||
"Description": "The Public Suffix List is an initiative of Mozilla,
|
||||
but is maintained as a community resource. It is available for use in any software,
|
||||
but was originally created to meet the needs of browser manufacturers.
|
||||
It allows browsers to, for example:
|
||||
@ -14,9 +14,11 @@ It allows browsers to, for example:
|
||||
- Accurately sort history entries by site",
|
||||
|
||||
"Files": "qurltlds_p.h",
|
||||
"QtUsage": "Used in Qt Core to avoid \"supercookies\" being set in the cookie jar
|
||||
"QtUsage": "See util/corelib/qurl-generateTLDs/ for code-generator",
|
||||
"QtUsage": "Used in Qt Core to avoid setting \"supercookies\" in the cookie jar
|
||||
supported by Qt (by the QNetworkCookieJar class).",
|
||||
|
||||
"Homepage": "Consult https://github.com/publicsuffix/list for the sha1 but download from ...",
|
||||
"Homepage": "http://publicsuffix.org/",
|
||||
"Version": "Generated on 2018-01-04",
|
||||
"License": "Mozilla Public License 2.0",
|
||||
|
@ -53,7 +53,7 @@
|
||||
|
||||
extern "C" {
|
||||
|
||||
// Equivalent to dbus-arch-deps.h
|
||||
// Equivalent to dbus-arch-deps.h (generated from dbus-arch-deps.h.in)
|
||||
typedef qint64 dbus_int64_t;
|
||||
typedef quint64 dbus_uint64_t;
|
||||
typedef qint32 dbus_int32_t;
|
||||
@ -78,7 +78,7 @@ struct DBusWatch;
|
||||
// which carry the following copyright:
|
||||
/*
|
||||
* Copyright (C) 2002, 2003 CodeFactory AB
|
||||
* Copyright (C) 2004, 2005 Red Hat, Inc.
|
||||
* Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc.
|
||||
*
|
||||
* Licensed under the Academic Free License version 2.1
|
||||
*
|
||||
@ -103,6 +103,20 @@ typedef dbus_uint32_t dbus_unichar_t;
|
||||
typedef dbus_uint32_t dbus_bool_t;
|
||||
|
||||
/* dbus-shared.h */
|
||||
typedef enum
|
||||
{
|
||||
DBUS_BUS_SESSION, /**< The login session bus */
|
||||
DBUS_BUS_SYSTEM, /**< The systemwide bus */
|
||||
DBUS_BUS_STARTER /**< The bus that started us, if any */
|
||||
} DBusBusType;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DBUS_HANDLER_RESULT_HANDLED, /**< Message has had its effect - no need to run more handlers. */
|
||||
DBUS_HANDLER_RESULT_NOT_YET_HANDLED, /**< Message has not had any effect - see if other handlers want it. */
|
||||
DBUS_HANDLER_RESULT_NEED_MEMORY /**< Need more memory in order to return #DBUS_HANDLER_RESULT_HANDLED or #DBUS_HANDLER_RESULT_NOT_YET_HANDLED. Please try again later with more memory. */
|
||||
} DBusHandlerResult;
|
||||
|
||||
#define DBUS_SERVICE_DBUS "org.freedesktop.DBus"
|
||||
#define DBUS_PATH_DBUS "/org/freedesktop/DBus"
|
||||
#define DBUS_PATH_LOCAL "/org/freedesktop/DBus/Local"
|
||||
@ -124,20 +138,6 @@ typedef dbus_uint32_t dbus_bool_t;
|
||||
#define DBUS_RELEASE_NAME_REPLY_NON_EXISTENT 2 /**< The given name does not exist on the bus */
|
||||
#define DBUS_RELEASE_NAME_REPLY_NOT_OWNER 3 /**< Service is not an owner of the given name */
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DBUS_BUS_SESSION, /**< The login session bus */
|
||||
DBUS_BUS_SYSTEM, /**< The systemwide bus */
|
||||
DBUS_BUS_STARTER /**< The bus that started us, if any */
|
||||
} DBusBusType;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DBUS_HANDLER_RESULT_HANDLED, /**< Message has had its effect - no need to run more handlers. */
|
||||
DBUS_HANDLER_RESULT_NOT_YET_HANDLED, /**< Message has not had any effect - see if other handlers want it. */
|
||||
DBUS_HANDLER_RESULT_NEED_MEMORY /**< Need more memory in order to return #DBUS_HANDLER_RESULT_HANDLED or #DBUS_HANDLER_RESULT_NOT_YET_HANDLED. Please try again later with more memory. */
|
||||
} DBusHandlerResult;
|
||||
|
||||
/* dbus-memory.h */
|
||||
typedef void (* DBusFreeFunction) (void *memory);
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
"Description": "D-Bus is a message bus system, a simple way for applications to talk to one another.",
|
||||
"Homepage": "https://www.freedesktop.org/wiki/Software/dbus/",
|
||||
"Version": "Minimal supported is 1.2, compatible up to ...",
|
||||
"Version": "1.12",
|
||||
"Version": "dbus-1.12.12",
|
||||
"LicenseId": "AFL-2.1 OR GPL-2.0-or-later",
|
||||
"License": "Academic Free License v2.1, or GNU General Public License v2.0 or later",
|
||||
"LicenseFile": "LIBDBUS-1-LICENSE.txt",
|
||||
|
@ -439,7 +439,7 @@ void QClipboard::setPixmap(const QPixmap &pixmap, Mode mode)
|
||||
\fn QMimeData *QClipboard::mimeData(Mode mode) const
|
||||
|
||||
Returns a pointer to a QMimeData representation of the current
|
||||
clipboard data (can be NULL if the given \a mode is not
|
||||
clipboard data (can be \nullptr if the given \a mode is not
|
||||
supported by the platform).
|
||||
|
||||
The \a mode argument is used to control which part of the system
|
||||
|
@ -1023,7 +1023,7 @@ QList<QScreen *> QGuiApplication::screens()
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the screen at \a point, or \c nullptr if outside of any screen.
|
||||
Returns the screen at \a point, or \nullptr if outside of any screen.
|
||||
|
||||
The \a point is in relation to the virtualGeometry() of each set of virtual
|
||||
siblings. If the point maps to more than one set of virtual siblings the first
|
||||
|
@ -1235,7 +1235,8 @@ void QOpenGLContext::deleteQGLContext()
|
||||
Returns the platform-specific handle for the OpenGL implementation that
|
||||
is currently in use. (for example, a HMODULE on Windows)
|
||||
|
||||
On platforms that do not use dynamic GL switch the return value is null.
|
||||
On platforms that do not use dynamic GL switching, the return value
|
||||
is \nullptr.
|
||||
|
||||
The library might be GL-only, meaning that windowing system interface
|
||||
functions (for example EGL) may live in another, separate library.
|
||||
|
@ -291,7 +291,7 @@ QPlatformPixmap *QPlatformIntegration::createPlatformPixmap(QPlatformPixmap::Pix
|
||||
platform implementation is responsible for querying the configuriation from the provided
|
||||
native context.
|
||||
|
||||
Returns a pointer to a QPlatformOpenGLContext instance or \c NULL if the context could
|
||||
Returns a pointer to a QPlatformOpenGLContext instance or \nullptr if the context could
|
||||
not be created.
|
||||
|
||||
\sa QOpenGLContext
|
||||
@ -647,7 +647,7 @@ void QPlatformIntegration::setApplicationIcon(const QIcon &icon) const
|
||||
pointer to the instance for which a platform-specific backend needs to be
|
||||
created.
|
||||
|
||||
Returns a pointer to a QPlatformOpenGLContext instance or \c NULL if the context could
|
||||
Returns a pointer to a QPlatformOpenGLContext instance or \nullptr if the context could
|
||||
not be created.
|
||||
|
||||
\sa QVulkanInstance
|
||||
|
@ -175,7 +175,7 @@ int QShortcutMap::addShortcut(QObject *owner, const QKeySequence &key, Qt::Short
|
||||
|
||||
/*! \internal
|
||||
Removes a shortcut from the global map.
|
||||
If \a owner is 0, all entries in the map with the key sequence specified
|
||||
If \a owner is \nullptr, all entries in the map with the key sequence specified
|
||||
is removed. If \a key is null, all sequences for \a owner is removed from
|
||||
the map. If \a id is 0, any identical \a key sequences owned by \a owner
|
||||
are removed.
|
||||
@ -222,7 +222,7 @@ int QShortcutMap::removeShortcut(int id, QObject *owner, const QKeySequence &key
|
||||
|
||||
/*! \internal
|
||||
Changes the enable state of a shortcut to \a enable.
|
||||
If \a owner is 0, all entries in the map with the key sequence specified
|
||||
If \a owner is \nullptr, all entries in the map with the key sequence specified
|
||||
is removed. If \a key is null, all sequences for \a owner is removed from
|
||||
the map. If \a id is 0, any identical \a key sequences owned by \a owner
|
||||
are changed.
|
||||
@ -260,7 +260,7 @@ int QShortcutMap::setShortcutEnabled(bool enable, int id, QObject *owner, const
|
||||
|
||||
/*! \internal
|
||||
Changes the auto repeat state of a shortcut to \a enable.
|
||||
If \a owner is 0, all entries in the map with the key sequence specified
|
||||
If \a owner is \nullptr, all entries in the map with the key sequence specified
|
||||
is removed. If \a key is null, all sequences for \a owner is removed from
|
||||
the map. If \a id is 0, any identical \a key sequences owned by \a owner
|
||||
are changed.
|
||||
|
@ -206,7 +206,8 @@ QOpenGLFunctions::QOpenGLFunctions()
|
||||
|
||||
/*!
|
||||
Constructs a function resolver for \a context. If \a context
|
||||
is null, then the resolver will be created for the current QOpenGLContext.
|
||||
is \nullptr, then the resolver will be created for the current
|
||||
QOpenGLContext.
|
||||
|
||||
The context or another context in the group must be current.
|
||||
|
||||
@ -5035,8 +5036,8 @@ QOpenGLExtraFunctions::QOpenGLExtraFunctions()
|
||||
}
|
||||
|
||||
/*!
|
||||
Constructs a function resolver for context. If \a context is null, then
|
||||
the resolver will be created for the current QOpenGLContext.
|
||||
Constructs a function resolver for context. If \a context is \nullptr,
|
||||
then the resolver will be created for the current QOpenGLContext.
|
||||
|
||||
The context or another context in the group must be current.
|
||||
|
||||
|
@ -3667,7 +3667,8 @@ QVector<float> QOpenGLShaderProgram::defaultInnerTessellationLevels() const
|
||||
Language (GLSL) are supported on this system; false otherwise.
|
||||
|
||||
The \a context is used to resolve the GLSL extensions.
|
||||
If \a context is null, then QOpenGLContext::currentContext() is used.
|
||||
If \a context is \nullptr, then QOpenGLContext::currentContext()
|
||||
is used.
|
||||
*/
|
||||
bool QOpenGLShaderProgram::hasOpenGLShaderPrograms(QOpenGLContext *context)
|
||||
{
|
||||
@ -3694,7 +3695,8 @@ void QOpenGLShaderProgram::shaderDestroyed()
|
||||
this system; false otherwise.
|
||||
|
||||
The \a context is used to resolve the GLSL extensions.
|
||||
If \a context is null, then QOpenGLContext::currentContext() is used.
|
||||
If \a context is \nullptr, then QOpenGLContext::currentContext()
|
||||
is used.
|
||||
*/
|
||||
bool QOpenGLShader::hasOpenGLShaders(ShaderType type, QOpenGLContext *context)
|
||||
{
|
||||
|
@ -208,7 +208,7 @@ static bool isRasterSurface(QWindow *window)
|
||||
|
||||
The \a window must either be the top level window represented by
|
||||
this backingstore, or a non-transient child of that window. Passing
|
||||
\c nullptr falls back to using the backingstore's top level window.
|
||||
\nullptr falls back to using the backingstore's top level window.
|
||||
|
||||
If the \a window is a child window, the \a region should be in child window
|
||||
coordinates, and the \a offset should be the child window's offset in relation
|
||||
|
@ -1022,8 +1022,8 @@ void QFontEngine::getUnscaledGlyph(glyph_t glyph, QPainterPath *path, glyph_metr
|
||||
Returns \c true if the font table idetified by \a tag exists in the font;
|
||||
returns \c false otherwise.
|
||||
|
||||
If \a buffer is NULL, stores the size of the buffer required for the font table data,
|
||||
in bytes, in \a length. If \a buffer is not NULL and the capacity
|
||||
If \a buffer is \nullptr, stores the size of the buffer required for the font table data,
|
||||
in bytes, in \a length. If \a buffer is not \nullptr and the capacity
|
||||
of the buffer, passed in \a length, is sufficient to store the font table data,
|
||||
also copies the font table data to \a buffer.
|
||||
|
||||
|
@ -306,7 +306,7 @@ QVulkanInstance::QVulkanInstance()
|
||||
/*!
|
||||
Destructor.
|
||||
|
||||
\note current() will return \c nullptr once the instance is destroyed.
|
||||
\note current() will return \nullptr once the instance is destroyed.
|
||||
*/
|
||||
QVulkanInstance::~QVulkanInstance()
|
||||
{
|
||||
|
@ -1826,8 +1826,8 @@ int QFtp::cd(const QString &dir)
|
||||
is data available to read. You can then read the data with the
|
||||
read() or readAll() functions.
|
||||
|
||||
If \a dev is not 0, the data is written directly to the device \a
|
||||
dev. Make sure that the \a dev pointer is valid for the duration
|
||||
If \a dev is not \nullptr, the data is written directly to the device
|
||||
\a dev. Make sure that the \a dev pointer is valid for the duration
|
||||
of the operation (it is safe to delete it when the
|
||||
commandFinished() signal is emitted). In this case the readyRead()
|
||||
signal is \e not emitted and you cannot read data with the
|
||||
|
@ -506,8 +506,8 @@ void QLocalServer::setMaxPendingConnections(int numConnections)
|
||||
/*!
|
||||
Waits for at most \a msec milliseconds or until an incoming connection
|
||||
is available. Returns \c true if a connection is available; otherwise
|
||||
returns \c false. If the operation timed out and \a timedOut is not 0,
|
||||
*timedOut will be set to true.
|
||||
returns \c false. If the operation timed out and \a timedOut is not
|
||||
\nullptr, *timedOut will be set to true.
|
||||
|
||||
This is a blocking function call. Its use is ill-advised in a
|
||||
single-threaded GUI application, since the whole application will stop
|
||||
|
@ -999,8 +999,8 @@ void QNativeSocketEngine::close()
|
||||
|
||||
/*!
|
||||
Waits for \a msecs milliseconds or until the socket is ready for
|
||||
reading. If \a timedOut is not 0 and \a msecs milliseconds have
|
||||
passed, the value of \a timedOut is set to true.
|
||||
reading. If \a timedOut is not \nullptr and \a msecs milliseconds
|
||||
have passed, the value of \a timedOut is set to true.
|
||||
|
||||
Returns \c true if data is available for reading; otherwise returns
|
||||
false.
|
||||
@ -1039,8 +1039,8 @@ bool QNativeSocketEngine::waitForRead(int msecs, bool *timedOut)
|
||||
|
||||
/*!
|
||||
Waits for \a msecs milliseconds or until the socket is ready for
|
||||
writing. If \a timedOut is not 0 and \a msecs milliseconds have
|
||||
passed, the value of \a timedOut is set to true.
|
||||
writing. If \a timedOut is not \nullptr and \a msecs milliseconds
|
||||
have passed, the value of \a timedOut is set to true.
|
||||
|
||||
Returns \c true if data is available for writing; otherwise returns
|
||||
false.
|
||||
|
@ -493,7 +493,7 @@ QHostAddress QTcpServer::serverAddress() const
|
||||
Waits for at most \a msec milliseconds or until an incoming
|
||||
connection is available. Returns \c true if a connection is
|
||||
available; otherwise returns \c false. If the operation timed out
|
||||
and \a timedOut is not 0, *\a timedOut will be set to true.
|
||||
and \a timedOut is not \nullptr, *\a timedOut will be set to true.
|
||||
|
||||
This is a blocking function call. Its use is disadvised in a
|
||||
single-threaded GUI application, since the whole application will
|
||||
|
@ -136,7 +136,7 @@ QSslDiffieHellmanParameters QSslDiffieHellmanParameters::fromEncoded(const QByte
|
||||
to check whether the Diffie-Hellman parameters were valid
|
||||
and loaded correctly.
|
||||
|
||||
In particular, if \a device is \c nullptr or not open for reading, an invalid
|
||||
In particular, if \a device is \nullptr or not open for reading, an invalid
|
||||
object will be returned.
|
||||
|
||||
\sa isValid()
|
||||
|
@ -170,7 +170,8 @@ QGLFunctions::QGLFunctions()
|
||||
|
||||
/*!
|
||||
Constructs a function resolver for \a context. If \a context
|
||||
is null, then the resolver will be created for the current QGLContext.
|
||||
is \nullptr, then the resolver will be created for the current
|
||||
QGLContext.
|
||||
|
||||
An object constructed in this way can only be used with \a context
|
||||
and other contexts that share with it. Use initializeGLFunctions()
|
||||
@ -305,7 +306,7 @@ bool QGLFunctions::hasOpenGLFeature(QGLFunctions::OpenGLFeature feature) const
|
||||
|
||||
/*!
|
||||
Initializes GL function resolution for \a context. If \a context
|
||||
is null, then the current QGLContext will be used.
|
||||
is \nullptr, then the current QGLContext will be used.
|
||||
|
||||
After calling this function, the QGLFunctions object can only be
|
||||
used with \a context and other contexts that share with it.
|
||||
|
@ -3169,7 +3169,8 @@ GLenum QGLShaderProgram::geometryOutputType() const
|
||||
Language (GLSL) are supported on this system; false otherwise.
|
||||
|
||||
The \a context is used to resolve the GLSL extensions.
|
||||
If \a context is null, then QGLContext::currentContext() is used.
|
||||
If \a context is \nullptr, then QGLContext::currentContext() is
|
||||
used.
|
||||
*/
|
||||
bool QGLShaderProgram::hasOpenGLShaderPrograms(const QGLContext *context)
|
||||
{
|
||||
@ -3207,7 +3208,8 @@ void QGLShaderProgram::shaderDestroyed()
|
||||
this system; false otherwise.
|
||||
|
||||
The \a context is used to resolve the GLSL extensions.
|
||||
If \a context is null, then QGLContext::currentContext() is used.
|
||||
If \a context is \nullptr, then QGLContext::currentContext() is
|
||||
used.
|
||||
|
||||
\since 4.7
|
||||
*/
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include "qandroidsystemlocale.h"
|
||||
#include "androidjnimain.h"
|
||||
#include <QtCore/private/qjni_p.h>
|
||||
#include <QtCore/private/qjnihelpers_p.h>
|
||||
#include "qdatetime.h"
|
||||
#include "qstringlist.h"
|
||||
#include "qvariant.h"
|
||||
@ -162,6 +163,23 @@ QVariant QAndroidSystemLocale::query(QueryType type, QVariant in) const
|
||||
return m_locale.createSeparatedList(in.value<QStringList>());
|
||||
case LocaleChanged:
|
||||
Q_ASSERT_X(false, Q_FUNC_INFO, "This can't happen.");
|
||||
case UILanguages: {
|
||||
if (QtAndroidPrivate::androidSdkVersion() >= 24) {
|
||||
QJNIObjectPrivate localeListObject =
|
||||
QJNIObjectPrivate::callStaticObjectMethod("android/os/LocaleList", "getDefault",
|
||||
"()Landroid/os/LocaleList;");
|
||||
if (localeListObject.isValid()) {
|
||||
QString lang = localeListObject.callObjectMethod("toLanguageTags",
|
||||
"()Ljava/lang/String;").toString();
|
||||
// Some devices return with it enclosed in []'s so check if both exists before
|
||||
// removing to ensure it is formatted correctly
|
||||
if (lang.startsWith(QChar('[')) && lang.endsWith(QChar(']')))
|
||||
lang = lang.mid(1, lang.length() - 2);
|
||||
return lang.split(QChar(','));
|
||||
}
|
||||
}
|
||||
return QVariant();
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -94,7 +94,6 @@ QT_USE_NAMESPACE
|
||||
bool startedQuit;
|
||||
NSObject <NSApplicationDelegate> *reflectionDelegate;
|
||||
bool inLaunch;
|
||||
QWindowList hiddenWindows;
|
||||
}
|
||||
|
||||
+ (instancetype)sharedDelegate
|
||||
@ -116,22 +115,10 @@ QT_USE_NAMESPACE
|
||||
self = [super init];
|
||||
if (self) {
|
||||
inLaunch = true;
|
||||
[[NSNotificationCenter defaultCenter]
|
||||
addObserver:self
|
||||
selector:@selector(updateScreens:)
|
||||
name:NSApplicationDidChangeScreenParametersNotification
|
||||
object:NSApp];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)updateScreens:(NSNotification *)notification
|
||||
{
|
||||
Q_UNUSED(notification);
|
||||
if (QCocoaIntegration *ci = QCocoaIntegration::instance())
|
||||
ci->updateScreens();
|
||||
}
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
[_dockMenu release];
|
||||
@ -311,41 +298,6 @@ QT_USE_NAMESPACE
|
||||
return NO; // Someday qApp->quitOnLastWindowClosed(); when QApp and NSApp work closer together.
|
||||
}
|
||||
|
||||
- (void)applicationWillHide:(NSNotification *)notification
|
||||
{
|
||||
if (reflectionDelegate
|
||||
&& [reflectionDelegate respondsToSelector:@selector(applicationWillHide:)]) {
|
||||
[reflectionDelegate applicationWillHide:notification];
|
||||
}
|
||||
|
||||
// When the application is hidden Qt will hide the popup windows associated with
|
||||
// it when it has lost the activation for the application. However, when it gets
|
||||
// to this point it believes the popup windows to be hidden already due to the
|
||||
// fact that the application itself is hidden, which will cause a problem when
|
||||
// the application is made visible again.
|
||||
const QWindowList topLevelWindows = QGuiApplication::topLevelWindows();
|
||||
for (QWindow *topLevelWindow : topLevelWindows) {
|
||||
if ((topLevelWindow->type() & Qt::Popup) == Qt::Popup && topLevelWindow->isVisible()) {
|
||||
topLevelWindow->hide();
|
||||
|
||||
if ((topLevelWindow->type() & Qt::Tool) == Qt::Tool)
|
||||
hiddenWindows << topLevelWindow;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)applicationDidUnhide:(NSNotification *)notification
|
||||
{
|
||||
if (reflectionDelegate
|
||||
&& [reflectionDelegate respondsToSelector:@selector(applicationDidUnhide:)])
|
||||
[reflectionDelegate applicationDidUnhide:notification];
|
||||
|
||||
for (QWindow *window : qAsConst(hiddenWindows))
|
||||
window->show();
|
||||
|
||||
hiddenWindows.clear();
|
||||
}
|
||||
|
||||
- (void)applicationDidBecomeActive:(NSNotification *)notification
|
||||
{
|
||||
if (reflectionDelegate
|
||||
|
@ -144,6 +144,7 @@ private:
|
||||
#endif
|
||||
QScopedPointer<QPlatformTheme> mPlatformTheme;
|
||||
QList<QCocoaScreen *> mScreens;
|
||||
QMacScopedObserver m_screensObserver;
|
||||
#ifndef QT_NO_CLIPBOARD
|
||||
QCocoaClipboard *mCocoaClipboard;
|
||||
#endif
|
||||
|
@ -206,6 +206,9 @@ QCocoaIntegration::QCocoaIntegration(const QStringList ¶mList)
|
||||
// by explicitly setting the presentation option to the magic 'default value',
|
||||
// which will resolve to an actual value and result in screen invalidation.
|
||||
cocoaApplication.presentationOptions = NSApplicationPresentationDefault;
|
||||
|
||||
m_screensObserver = QMacScopedObserver([NSApplication sharedApplication],
|
||||
NSApplicationDidChangeScreenParametersNotification, [&]() { updateScreens(); });
|
||||
updateScreens();
|
||||
|
||||
QMacInternalPasteboardMime::initializeMimeTypes();
|
||||
|
@ -410,8 +410,7 @@ QWindow *QCocoaScreen::topLevelAt(const QPoint &point) const
|
||||
if (![nsWindow conformsToProtocol:@protocol(QNSWindowProtocol)])
|
||||
continue;
|
||||
|
||||
id<QNSWindowProtocol> proto = static_cast<id<QNSWindowProtocol> >(nsWindow);
|
||||
QCocoaWindow *cocoaWindow = proto.platformWindow;
|
||||
QCocoaWindow *cocoaWindow = qnsview_cast(nsWindow.contentView).platformWindow;
|
||||
if (!cocoaWindow)
|
||||
continue;
|
||||
window = cocoaWindow->window();
|
||||
|
@ -401,6 +401,11 @@ void QCocoaWindow::setVisible(bool visible)
|
||||
}
|
||||
}
|
||||
|
||||
// Note: We do not guard the order out by checking NSWindow.visible, as AppKit will
|
||||
// in some cases, such as when hiding the application, order out and make a window
|
||||
// invisible, but keep it in a list of "hidden windows", that it then restores again
|
||||
// when the application is unhidden. We need to call orderOut explicitly, to bring
|
||||
// the window out of this "hidden list".
|
||||
[m_view.window orderOut:nil];
|
||||
|
||||
if (m_view.window == [NSApp keyWindow] && !eventDispatcher()->hasModalSession()) {
|
||||
@ -1540,7 +1545,8 @@ QCocoaNSWindow *QCocoaWindow::createNSWindow(bool shouldBePanel)
|
||||
// Deferring window creation breaks OpenGL (the GL context is
|
||||
// set up before the window is shown and needs a proper window)
|
||||
backing:NSBackingStoreBuffered defer:NO
|
||||
screen:cocoaScreen->nativeScreen()];
|
||||
screen:cocoaScreen->nativeScreen()
|
||||
platformWindow:this];
|
||||
|
||||
Q_ASSERT_X(nsWindow.screen == cocoaScreen->nativeScreen(), "QCocoaWindow",
|
||||
"Resulting NSScreen should match the requested NSScreen");
|
||||
|
@ -60,15 +60,10 @@ QT_FORWARD_DECLARE_CLASS(QCocoaWindow)
|
||||
#define QNSWindowProtocol QT_MANGLE_NAMESPACE(QNSWindowProtocol)
|
||||
|
||||
@protocol QNSWindowProtocol
|
||||
@optional
|
||||
- (BOOL)canBecomeKeyWindow;
|
||||
- (BOOL)worksWhenModal;
|
||||
- (void)sendEvent:(NSEvent*)theEvent;
|
||||
- (instancetype)initWithContentRect:(NSRect)contentRect styleMask:(NSWindowStyleMask)style
|
||||
backing:(NSBackingStoreType)backingStoreType defer:(BOOL)flag screen:(NSScreen *)screen
|
||||
platformWindow:(QCocoaWindow*)window;
|
||||
- (void)closeAndRelease;
|
||||
- (void)dealloc;
|
||||
- (BOOL)isOpaque;
|
||||
- (NSColor *)backgroundColor;
|
||||
- (NSString *)description;
|
||||
@property (nonatomic, readonly) QCocoaWindow *platformWindow;
|
||||
@end
|
||||
|
||||
|
@ -37,6 +37,8 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#if !defined(QNSWINDOW_PROTOCOL_IMPLMENTATION)
|
||||
|
||||
#include "qnswindow.h"
|
||||
#include "qcocoawindow.h"
|
||||
#include "qcocoahelpers.h"
|
||||
@ -89,183 +91,10 @@ static bool isMouseEvent(NSEvent *ev)
|
||||
}
|
||||
@end
|
||||
|
||||
#define super USE_qt_objcDynamicSuper_INSTEAD
|
||||
|
||||
@implementation QNSWindow
|
||||
|
||||
+ (void)load
|
||||
{
|
||||
const Class windowClass = [self class];
|
||||
const Class panelClass = [QNSPanel class];
|
||||
|
||||
unsigned int protocolCount;
|
||||
Protocol **protocols = class_copyProtocolList(windowClass, &protocolCount);
|
||||
for (unsigned int i = 0; i < protocolCount; ++i) {
|
||||
Protocol *protocol = protocols[i];
|
||||
|
||||
unsigned int methodDescriptionsCount;
|
||||
objc_method_description *methods = protocol_copyMethodDescriptionList(
|
||||
protocol, NO, YES, &methodDescriptionsCount);
|
||||
|
||||
for (unsigned int j = 0; j < methodDescriptionsCount; ++j) {
|
||||
objc_method_description method = methods[j];
|
||||
class_addMethod(panelClass, method.name,
|
||||
class_getMethodImplementation(windowClass, method.name),
|
||||
method.types);
|
||||
}
|
||||
free(methods);
|
||||
}
|
||||
|
||||
free(protocols);
|
||||
}
|
||||
|
||||
- (QCocoaWindow *)platformWindow
|
||||
{
|
||||
return qnsview_cast(self.contentView).platformWindow;
|
||||
}
|
||||
|
||||
- (NSString *)description
|
||||
{
|
||||
NSMutableString *description = [NSMutableString stringWithString:qt_objcDynamicSuper()];
|
||||
|
||||
#ifndef QT_NO_DEBUG_STREAM
|
||||
QString contentViewDescription;
|
||||
QDebug debug(&contentViewDescription);
|
||||
debug.nospace() << "; contentView=" << qnsview_cast(self.contentView) << ">";
|
||||
|
||||
NSRange lastCharacter = [description rangeOfComposedCharacterSequenceAtIndex:description.length - 1];
|
||||
[description replaceCharactersInRange:lastCharacter withString:contentViewDescription.toNSString()];
|
||||
#endif
|
||||
|
||||
return description;
|
||||
}
|
||||
|
||||
- (BOOL)canBecomeKeyWindow
|
||||
{
|
||||
QCocoaWindow *pw = self.platformWindow;
|
||||
if (!pw)
|
||||
return NO;
|
||||
|
||||
if (pw->shouldRefuseKeyWindowAndFirstResponder())
|
||||
return NO;
|
||||
|
||||
if ([self isKindOfClass:[QNSPanel class]]) {
|
||||
// Only tool or dialog windows should become key:
|
||||
Qt::WindowType type = pw->window()->type();
|
||||
if (type == Qt::Tool || type == Qt::Dialog)
|
||||
return YES;
|
||||
|
||||
return NO;
|
||||
} else {
|
||||
// The default implementation returns NO for title-bar less windows,
|
||||
// override and return yes here to make sure popup windows such as
|
||||
// the combobox popup can become the key window.
|
||||
return YES;
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL)canBecomeMainWindow
|
||||
{
|
||||
BOOL canBecomeMain = YES; // By default, windows can become the main window
|
||||
|
||||
// Windows with a transient parent (such as combobox popup windows)
|
||||
// cannot become the main window:
|
||||
QCocoaWindow *pw = self.platformWindow;
|
||||
if (!pw || pw->window()->transientParent())
|
||||
canBecomeMain = NO;
|
||||
|
||||
return canBecomeMain;
|
||||
}
|
||||
|
||||
- (BOOL)worksWhenModal
|
||||
{
|
||||
if ([self isKindOfClass:[QNSPanel class]]) {
|
||||
if (QCocoaWindow *pw = self.platformWindow) {
|
||||
Qt::WindowType type = pw->window()->type();
|
||||
if (type == Qt::Popup || type == Qt::Dialog || type == Qt::Tool)
|
||||
return YES;
|
||||
}
|
||||
}
|
||||
|
||||
return qt_objcDynamicSuper();
|
||||
}
|
||||
|
||||
- (BOOL)isOpaque
|
||||
{
|
||||
return self.platformWindow ?
|
||||
self.platformWindow->isOpaque() : qt_objcDynamicSuper();
|
||||
}
|
||||
|
||||
/*!
|
||||
Borderless windows need a transparent background
|
||||
|
||||
Technically windows with NSWindowStyleMaskTexturedBackground
|
||||
(such as windows with unified toolbars) need to draw the textured
|
||||
background of the NSWindow, and can't have a transparent
|
||||
background, but as NSWindowStyleMaskBorderless is 0, you can't
|
||||
have a window with NSWindowStyleMaskTexturedBackground that is
|
||||
also borderless.
|
||||
*/
|
||||
- (NSColor *)backgroundColor
|
||||
{
|
||||
return self.styleMask == NSWindowStyleMaskBorderless
|
||||
? [NSColor clearColor] : qt_objcDynamicSuper();
|
||||
}
|
||||
|
||||
- (void)sendEvent:(NSEvent*)theEvent
|
||||
{
|
||||
qCDebug(lcQpaEvents) << "Sending" << theEvent << "to" << self;
|
||||
|
||||
// We might get events for a NSWindow after the corresponding platform
|
||||
// window has been deleted, as the NSWindow can outlive the QCocoaWindow
|
||||
// e.g. if being retained by other parts of AppKit, or in an auto-release
|
||||
// pool. We guard against this in QNSView as well, as not all callbacks
|
||||
// come via events, but if they do there's no point in propagating them.
|
||||
if (!self.platformWindow)
|
||||
return;
|
||||
|
||||
// Prevent deallocation of this NSWindow during event delivery, as we
|
||||
// have logic further below that depends on the window being alive.
|
||||
[[self retain] autorelease];
|
||||
|
||||
const char *eventType = object_getClassName(theEvent);
|
||||
if (QWindowSystemInterface::handleNativeEvent(self.platformWindow->window(),
|
||||
QByteArray::fromRawData(eventType, qstrlen(eventType)), theEvent, nullptr)) {
|
||||
return;
|
||||
}
|
||||
|
||||
qt_objcDynamicSuper(theEvent);
|
||||
|
||||
if (!self.platformWindow)
|
||||
return; // Platform window went away while processing event
|
||||
|
||||
QCocoaWindow *pw = self.platformWindow;
|
||||
if (pw->frameStrutEventsEnabled() && isMouseEvent(theEvent)) {
|
||||
NSPoint loc = [theEvent locationInWindow];
|
||||
NSRect windowFrame = [self convertRectFromScreen:self.frame];
|
||||
NSRect contentFrame = self.contentView.frame;
|
||||
if (NSMouseInRect(loc, windowFrame, NO) && !NSMouseInRect(loc, contentFrame, NO))
|
||||
[qnsview_cast(pw->view()) handleFrameStrutMouseEvent:theEvent];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)closeAndRelease
|
||||
{
|
||||
qCDebug(lcQpaWindow) << "Closing and releasing" << self;
|
||||
[self close];
|
||||
[self release];
|
||||
}
|
||||
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wobjc-missing-super-calls"
|
||||
- (void)dealloc
|
||||
{
|
||||
qCDebug(lcQpaWindow) << "Deallocating" << self;
|
||||
self.delegate = nil;
|
||||
|
||||
qt_objcDynamicSuper();
|
||||
}
|
||||
#pragma clang diagnostic pop
|
||||
#define QNSWINDOW_PROTOCOL_IMPLMENTATION 1
|
||||
#include "qnswindow.mm"
|
||||
#undef QNSWINDOW_PROTOCOL_IMPLMENTATION
|
||||
|
||||
+ (void)applicationActivationChanged:(NSNotification*)notification
|
||||
{
|
||||
@ -326,7 +155,169 @@ static bool isMouseEvent(NSEvent *ev)
|
||||
@end
|
||||
|
||||
@implementation QNSPanel
|
||||
// Implementation shared with QNSWindow, see +[QNSWindow load] above
|
||||
#define QNSWINDOW_PROTOCOL_IMPLMENTATION 1
|
||||
#include "qnswindow.mm"
|
||||
#undef QNSWINDOW_PROTOCOL_IMPLMENTATION
|
||||
@end
|
||||
|
||||
#undef super
|
||||
#else // QNSWINDOW_PROTOCOL_IMPLMENTATION
|
||||
|
||||
// The following content is mixed in to the QNSWindow and QNSPanel classes via includes
|
||||
|
||||
{
|
||||
// Member variables
|
||||
QPointer<QCocoaWindow> m_platformWindow;
|
||||
}
|
||||
|
||||
- (instancetype)initWithContentRect:(NSRect)contentRect styleMask:(NSWindowStyleMask)style
|
||||
backing:(NSBackingStoreType)backingStoreType defer:(BOOL)defer screen:(NSScreen *)screen
|
||||
platformWindow:(QCocoaWindow*)window
|
||||
{
|
||||
// Initializing the window will end up in [NSWindow _commonAwake], which calls many
|
||||
// of the getters below. We need to set up the platform window reference first, so
|
||||
// we can properly reflect the window's state during initialization.
|
||||
m_platformWindow = window;
|
||||
|
||||
return [super initWithContentRect:contentRect styleMask:style backing:backingStoreType defer:defer screen:screen];
|
||||
}
|
||||
|
||||
- (QCocoaWindow *)platformWindow
|
||||
{
|
||||
return m_platformWindow;
|
||||
}
|
||||
|
||||
- (NSString *)description
|
||||
{
|
||||
NSMutableString *description = [NSMutableString stringWithString:[super description]];
|
||||
|
||||
#ifndef QT_NO_DEBUG_STREAM
|
||||
QString contentViewDescription;
|
||||
QDebug debug(&contentViewDescription);
|
||||
debug.nospace() << "; contentView=" << qnsview_cast(self.contentView) << ">";
|
||||
|
||||
NSRange lastCharacter = [description rangeOfComposedCharacterSequenceAtIndex:description.length - 1];
|
||||
[description replaceCharactersInRange:lastCharacter withString:contentViewDescription.toNSString()];
|
||||
#endif
|
||||
|
||||
return description;
|
||||
}
|
||||
|
||||
- (BOOL)canBecomeKeyWindow
|
||||
{
|
||||
if (!m_platformWindow)
|
||||
return NO;
|
||||
|
||||
if (m_platformWindow->shouldRefuseKeyWindowAndFirstResponder())
|
||||
return NO;
|
||||
|
||||
if ([self isKindOfClass:[QNSPanel class]]) {
|
||||
// Only tool or dialog windows should become key:
|
||||
Qt::WindowType type = m_platformWindow->window()->type();
|
||||
if (type == Qt::Tool || type == Qt::Dialog)
|
||||
return YES;
|
||||
|
||||
return NO;
|
||||
} else {
|
||||
// The default implementation returns NO for title-bar less windows,
|
||||
// override and return yes here to make sure popup windows such as
|
||||
// the combobox popup can become the key window.
|
||||
return YES;
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL)canBecomeMainWindow
|
||||
{
|
||||
BOOL canBecomeMain = YES; // By default, windows can become the main window
|
||||
|
||||
// Windows with a transient parent (such as combobox popup windows)
|
||||
// cannot become the main window:
|
||||
if (!m_platformWindow || m_platformWindow->window()->transientParent())
|
||||
canBecomeMain = NO;
|
||||
|
||||
return canBecomeMain;
|
||||
}
|
||||
|
||||
- (BOOL)worksWhenModal
|
||||
{
|
||||
if (m_platformWindow && [self isKindOfClass:[QNSPanel class]]) {
|
||||
Qt::WindowType type = m_platformWindow->window()->type();
|
||||
if (type == Qt::Popup || type == Qt::Dialog || type == Qt::Tool)
|
||||
return YES;
|
||||
}
|
||||
|
||||
return [super worksWhenModal];
|
||||
}
|
||||
|
||||
- (BOOL)isOpaque
|
||||
{
|
||||
return m_platformWindow ? m_platformWindow->isOpaque() : [super isOpaque];
|
||||
}
|
||||
|
||||
/*!
|
||||
Borderless windows need a transparent background
|
||||
|
||||
Technically windows with NSWindowStyleMaskTexturedBackground
|
||||
(such as windows with unified toolbars) need to draw the textured
|
||||
background of the NSWindow, and can't have a transparent
|
||||
background, but as NSWindowStyleMaskBorderless is 0, you can't
|
||||
have a window with NSWindowStyleMaskTexturedBackground that is
|
||||
also borderless.
|
||||
*/
|
||||
- (NSColor *)backgroundColor
|
||||
{
|
||||
return self.styleMask == NSWindowStyleMaskBorderless
|
||||
? [NSColor clearColor] : [super backgroundColor];
|
||||
}
|
||||
|
||||
- (void)sendEvent:(NSEvent*)theEvent
|
||||
{
|
||||
qCDebug(lcQpaEvents) << "Sending" << theEvent << "to" << self;
|
||||
|
||||
// We might get events for a NSWindow after the corresponding platform
|
||||
// window has been deleted, as the NSWindow can outlive the QCocoaWindow
|
||||
// e.g. if being retained by other parts of AppKit, or in an auto-release
|
||||
// pool. We guard against this in QNSView as well, as not all callbacks
|
||||
// come via events, but if they do there's no point in propagating them.
|
||||
if (!m_platformWindow)
|
||||
return;
|
||||
|
||||
// Prevent deallocation of this NSWindow during event delivery, as we
|
||||
// have logic further below that depends on the window being alive.
|
||||
[[self retain] autorelease];
|
||||
|
||||
const char *eventType = object_getClassName(theEvent);
|
||||
if (QWindowSystemInterface::handleNativeEvent(m_platformWindow->window(),
|
||||
QByteArray::fromRawData(eventType, qstrlen(eventType)), theEvent, nullptr)) {
|
||||
return;
|
||||
}
|
||||
|
||||
[super sendEvent:theEvent];
|
||||
|
||||
if (!m_platformWindow)
|
||||
return; // Platform window went away while processing event
|
||||
|
||||
if (m_platformWindow->frameStrutEventsEnabled() && isMouseEvent(theEvent)) {
|
||||
NSPoint loc = [theEvent locationInWindow];
|
||||
NSRect windowFrame = [self convertRectFromScreen:self.frame];
|
||||
NSRect contentFrame = self.contentView.frame;
|
||||
if (NSMouseInRect(loc, windowFrame, NO) && !NSMouseInRect(loc, contentFrame, NO))
|
||||
[qnsview_cast(m_platformWindow->view()) handleFrameStrutMouseEvent:theEvent];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)closeAndRelease
|
||||
{
|
||||
qCDebug(lcQpaWindow) << "Closing and releasing" << self;
|
||||
[self close];
|
||||
[self release];
|
||||
}
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
qCDebug(lcQpaWindow) << "Deallocating" << self;
|
||||
self.delegate = nil;
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -17,7 +17,7 @@ HEADERS = qoffscreenintegration.h \
|
||||
|
||||
OTHER_FILES += offscreen.json
|
||||
|
||||
qtConfig(system-xcb):qtConfig(xlib):qtConfig(opengl):!qtConfig(opengles2) {
|
||||
qtConfig(xlib):qtConfig(opengl):!qtConfig(opengles2) {
|
||||
SOURCES += qoffscreenintegration_x11.cpp
|
||||
HEADERS += qoffscreenintegration_x11.h
|
||||
QT += glx_support-private
|
||||
|
@ -66,7 +66,7 @@
|
||||
|
||||
#include <qpa/qplatformservices.h>
|
||||
|
||||
#if QT_CONFIG(system_xcb) && QT_CONFIG(xlib) && QT_CONFIG(opengl) && !QT_CONFIG(opengles2)
|
||||
#if QT_CONFIG(xlib) && QT_CONFIG(opengl) && !QT_CONFIG(opengles2)
|
||||
#include "qoffscreenintegration_x11.h"
|
||||
#endif
|
||||
|
||||
@ -225,7 +225,7 @@ QPlatformServices *QOffscreenIntegration::services() const
|
||||
|
||||
QOffscreenIntegration *QOffscreenIntegration::createOffscreenIntegration()
|
||||
{
|
||||
#if QT_CONFIG(system_xcb) && QT_CONFIG(xlib) && QT_CONFIG(opengl) && !QT_CONFIG(opengles2)
|
||||
#if QT_CONFIG(xlib) && QT_CONFIG(opengl) && !QT_CONFIG(opengles2)
|
||||
QByteArray glx = qgetenv("QT_QPA_OFFSCREEN_NO_GLX");
|
||||
if (glx.isEmpty())
|
||||
return new QOffscreenX11Integration;
|
||||
|
@ -53,7 +53,8 @@ void QWasmCursor::changeCursor(QCursor *windowCursor, QWindow *window)
|
||||
htmlCursorName = "auto";
|
||||
|
||||
// Set cursor on the main canvas
|
||||
emscripten::val::global("window").set("cursor", emscripten::val(htmlCursorName.constData()));
|
||||
emscripten::val canvasStyle = emscripten::val::module_property("canvas")["style"];
|
||||
canvasStyle.set("cursor", emscripten::val(htmlCursorName.constData()));
|
||||
}
|
||||
|
||||
QByteArray QWasmCursor::cursorShapeToHtml(Qt::CursorShape shape)
|
||||
|
@ -198,8 +198,10 @@ void QWasmWindow::injectMouseReleased(const QPoint &local, const QPoint &global,
|
||||
if (!hasTitleBar() || button != Qt::LeftButton)
|
||||
return;
|
||||
|
||||
if (closeButtonRect().contains(global) && m_activeControl == QWasmCompositor::SC_TitleBarCloseButton)
|
||||
if (closeButtonRect().contains(global) && m_activeControl == QWasmCompositor::SC_TitleBarCloseButton) {
|
||||
window()->close();
|
||||
return;
|
||||
}
|
||||
|
||||
if (maxButtonRect().contains(global) && m_activeControl == QWasmCompositor::SC_TitleBarMaxButton) {
|
||||
window()->setWindowState(Qt::WindowMaximized);
|
||||
|
@ -48,6 +48,7 @@
|
||||
#include <QDBusPendingCallWatcher>
|
||||
#include <QDBusPendingReply>
|
||||
|
||||
#include <QFile>
|
||||
#include <QMetaType>
|
||||
#include <QMimeType>
|
||||
#include <QMimeDatabase>
|
||||
@ -181,10 +182,10 @@ void QXdgDesktopPortalFileDialog::openPortal()
|
||||
|
||||
if (d->saveFile) {
|
||||
if (!d->directory.isEmpty())
|
||||
options.insert(QLatin1String("current_folder"), d->directory.toLatin1().append('\0'));
|
||||
options.insert(QLatin1String("current_folder"), QFile::encodeName(d->directory).append('\0'));
|
||||
|
||||
if (!d->selectedFiles.isEmpty())
|
||||
options.insert(QLatin1String("current_file"), d->selectedFiles.first().toLatin1().append('\0'));
|
||||
options.insert(QLatin1String("current_file"), QFile::encodeName(d->selectedFiles.first()).append('\0'));
|
||||
}
|
||||
|
||||
// Insert filters
|
||||
|
@ -63,7 +63,7 @@
|
||||
|
||||
Constructs a new QSignalSpy that listens for emissions of the \a signal
|
||||
from the QObject \a object. If QSignalSpy is not able to listen for a
|
||||
valid signal (for example, because \a object is null or \a signal does
|
||||
valid signal (for example, because \a object is \nullptr or \a signal does
|
||||
not denote a valid signal of \a object), an explanatory warning message
|
||||
will be output using qWarning() and subsequent calls to \c isValid() will
|
||||
return false.
|
||||
@ -77,7 +77,7 @@
|
||||
|
||||
Constructs a new QSignalSpy that listens for emissions of the \a signal
|
||||
from the QObject \a object. If QSignalSpy is not able to listen for a
|
||||
valid signal (for example, because \a object is null or \a signal does
|
||||
valid signal (for example, because \a object is \nullptr or \a signal does
|
||||
not denote a valid signal of \a object), an explanatory warning message
|
||||
will be output using qWarning() and subsequent calls to \c isValid() will
|
||||
return false.
|
||||
|
@ -104,6 +104,7 @@ static QSet<QByteArray> keywords()
|
||||
#endif
|
||||
#ifdef Q_OS_OSX
|
||||
<< "osx"
|
||||
<< "macos"
|
||||
#endif
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
|
||||
<< "windows"
|
||||
|
@ -475,6 +475,8 @@ void QTestLog::addBXFail(const char *msg, const char *file, int line)
|
||||
QTEST_ASSERT(msg);
|
||||
QTEST_ASSERT(file);
|
||||
|
||||
++QTest::blacklists;
|
||||
|
||||
QTest::TestLoggers::addIncident(QAbstractTestLogger::BlacklistedXFail, msg, file, line);
|
||||
}
|
||||
|
||||
|
@ -43,6 +43,15 @@
|
||||
#include <QRegExp>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#ifdef Q_CC_MSVC
|
||||
#define popen _popen
|
||||
#define QT_POPEN_READ "rb"
|
||||
#define pclose _pclose
|
||||
#else
|
||||
#define QT_POPEN_READ "r"
|
||||
#endif
|
||||
|
||||
static const bool mustReadOutputAnyway = true; // pclose seems to return the wrong error code unless we read the output
|
||||
|
||||
void deleteRecursively(const QString &dirName)
|
||||
@ -70,7 +79,7 @@ FILE *openProcess(const QString &command)
|
||||
QString processedCommand = command;
|
||||
#endif
|
||||
|
||||
return popen(processedCommand.toLocal8Bit().constData(), "r");
|
||||
return popen(processedCommand.toLocal8Bit().constData(), QT_POPEN_READ);
|
||||
}
|
||||
|
||||
struct QtDependency
|
||||
@ -1252,7 +1261,7 @@ bool updateStringsXml(const Options &options)
|
||||
fprintf(stderr, "Can't open %s for writing.\n", qPrintable(fileName));
|
||||
return false;
|
||||
}
|
||||
file.write(QByteArray("<?xml version='1.0' encoding='utf-8'?><resources><string name=\"app_name\">")
|
||||
file.write(QByteArray("<?xml version='1.0' encoding='utf-8'?><resources><string name=\"app_name\" translatable=\"false\">")
|
||||
.append(QFileInfo(options.applicationBinary).baseName().mid(sizeof("lib") - 1).toLatin1())
|
||||
.append("</string></resources>\n"));
|
||||
return true;
|
||||
@ -1721,7 +1730,7 @@ bool scanImports(Options *options, QSet<QString> *usedDependencies)
|
||||
.arg(shellQuote(rootPath))
|
||||
.arg(importPaths.join(QLatin1Char(' ')));
|
||||
|
||||
FILE *qmlImportScannerCommand = popen(qmlImportScanner.toLocal8Bit().constData(), "r");
|
||||
FILE *qmlImportScannerCommand = popen(qmlImportScanner.toLocal8Bit().constData(), QT_POPEN_READ);
|
||||
if (qmlImportScannerCommand == 0) {
|
||||
fprintf(stderr, "Couldn't run qmlimportscanner.\n");
|
||||
return false;
|
||||
@ -2160,7 +2169,7 @@ bool createAndroidProject(const Options &options)
|
||||
if (options.verbose)
|
||||
fprintf(stdout, " -- Command: %s\n", qPrintable(androidTool));
|
||||
|
||||
FILE *androidToolCommand = popen(androidTool.toLocal8Bit().constData(), "r");
|
||||
FILE *androidToolCommand = popen(androidTool.toLocal8Bit().constData(), QT_POPEN_READ);
|
||||
if (androidToolCommand == 0) {
|
||||
fprintf(stderr, "Cannot run command '%s'\n", qPrintable(androidTool));
|
||||
return false;
|
||||
|
@ -2129,8 +2129,8 @@ QString QFileDialog::labelText(DialogLabel label) const
|
||||
\snippet code/src_gui_dialogs_qfiledialog.cpp 8
|
||||
|
||||
The function creates a modal file dialog with the given \a parent widget.
|
||||
If \a parent is not 0, the dialog will be shown centered over the parent
|
||||
widget.
|
||||
If \a parent is not \nullptr, the dialog will be shown centered over the
|
||||
parent widget.
|
||||
|
||||
The file dialog's working directory will be set to \a dir. If \a dir
|
||||
includes a file name, the file will be selected. Only files that match the
|
||||
@ -2152,8 +2152,8 @@ QString QFileDialog::labelText(DialogLabel label) const
|
||||
native file dialog and not a QFileDialog.
|
||||
|
||||
On Windows the dialog will spin a blocking modal event loop that will not
|
||||
dispatch any QTimers, and if \a parent is not 0 then it will position the
|
||||
dialog just below the parent's title bar.
|
||||
dispatch any QTimers, and if \a parent is not \nullptr then it will position
|
||||
the dialog just below the parent's title bar.
|
||||
|
||||
On Unix/X11, the normal behavior of the file dialog is to resolve and
|
||||
follow symlinks. For example, if \c{/usr/tmp} is a symlink to \c{/var/tmp},
|
||||
@ -2242,8 +2242,8 @@ QUrl QFileDialog::getOpenFileUrl(QWidget *parent,
|
||||
\snippet code/src_gui_dialogs_qfiledialog.cpp 9
|
||||
|
||||
This function creates a modal file dialog with the given \a parent widget.
|
||||
If \a parent is not 0, the dialog will be shown centered over the parent
|
||||
widget.
|
||||
If \a parent is not \nullptr, the dialog will be shown centered over the
|
||||
parent widget.
|
||||
|
||||
The file dialog's working directory will be set to \a dir. If \a dir
|
||||
includes a file name, the file will be selected. The filter is set to
|
||||
@ -2261,8 +2261,8 @@ QUrl QFileDialog::getOpenFileUrl(QWidget *parent,
|
||||
native file dialog and not a QFileDialog.
|
||||
|
||||
On Windows the dialog will spin a blocking modal event loop that will not
|
||||
dispatch any QTimers, and if \a parent is not 0 then it will position the
|
||||
dialog just below the parent's title bar.
|
||||
dispatch any QTimers, and if \a parent is not \nullptr then it will position
|
||||
the dialog just below the parent's title bar.
|
||||
|
||||
On Unix/X11, the normal behavior of the file dialog is to resolve and
|
||||
follow symlinks. For example, if \c{/usr/tmp} is a symlink to \c{/var/tmp},
|
||||
@ -2434,8 +2434,8 @@ void QFileDialog::getOpenFileContent(const QString &nameFilter, const std::funct
|
||||
by the user. The file does not have to exist.
|
||||
|
||||
It creates a modal file dialog with the given \a parent widget. If
|
||||
\a parent is not 0, the dialog will be shown centered over the parent
|
||||
widget.
|
||||
\a parent is not \nullptr, the dialog will be shown centered over the
|
||||
parent widget.
|
||||
|
||||
\snippet code/src_gui_dialogs_qfiledialog.cpp 11
|
||||
|
||||
@ -2461,9 +2461,9 @@ void QFileDialog::getOpenFileContent(const QString &nameFilter, const std::funct
|
||||
native file dialog and not a QFileDialog.
|
||||
|
||||
On Windows the dialog will spin a blocking modal event loop that will not
|
||||
dispatch any QTimers, and if \a parent is not 0 then it will position the
|
||||
dialog just below the parent's title bar. On \macos, with its native file
|
||||
dialog, the filter argument is ignored.
|
||||
dispatch any QTimers, and if \a parent is not \nullptr then it will
|
||||
position the dialog just below the parent's title bar. On \macos, with its
|
||||
native file dialog, the filter argument is ignored.
|
||||
|
||||
On Unix/X11, the normal behavior of the file dialog is to resolve and
|
||||
follow symlinks. For example, if \c{/usr/tmp} is a symlink to \c{/var/tmp},
|
||||
@ -2553,8 +2553,8 @@ QUrl QFileDialog::getSaveFileUrl(QWidget *parent,
|
||||
\snippet code/src_gui_dialogs_qfiledialog.cpp 12
|
||||
|
||||
This function creates a modal file dialog with the given \a parent widget.
|
||||
If \a parent is not 0, the dialog will be shown centered over the parent
|
||||
widget.
|
||||
If \a parent is not \nullptr, the dialog will be shown centered over the
|
||||
parent widget.
|
||||
|
||||
The dialog's working directory is set to \a dir, and the caption is set to
|
||||
\a caption. Either of these may be an empty string in which case the
|
||||
@ -2578,8 +2578,8 @@ QUrl QFileDialog::getSaveFileUrl(QWidget *parent,
|
||||
symlinks as regular directories.
|
||||
|
||||
On Windows, the dialog will spin a blocking modal event loop that will not
|
||||
dispatch any QTimers, and if \a parent is not 0 then it will position the
|
||||
dialog just below the parent's title bar.
|
||||
dispatch any QTimers, and if \a parent is not \nullptr then it will position
|
||||
the dialog just below the parent's title bar.
|
||||
|
||||
\warning Do not delete \a parent during the execution of the dialog. If you
|
||||
want to do this, you should create the dialog yourself using one of the
|
||||
|
@ -109,7 +109,7 @@ static int menuBarHeightForWidth(QWidget *menubar, int w)
|
||||
|
||||
/*!
|
||||
Constructs a new top-level QLayout, with parent \a parent.
|
||||
\a parent may not be a \c nullptr.
|
||||
\a parent may not be a \nullptr.
|
||||
|
||||
The layout is set directly as the top-level layout for
|
||||
\a parent. There can be only one top-level layout for a
|
||||
|
@ -102,9 +102,9 @@ QT_BEGIN_NAMESPACE
|
||||
/*!
|
||||
Constructs a QUndoCommand object with the given \a parent and \a text.
|
||||
|
||||
If \a parent is not 0, this command is appended to parent's child list.
|
||||
The parent command then owns this command and will delete it in its
|
||||
destructor.
|
||||
If \a parent is not \nullptr, this command is appended to parent's
|
||||
child list. The parent command then owns this command and will delete
|
||||
it in its destructor.
|
||||
|
||||
\sa ~QUndoCommand()
|
||||
*/
|
||||
@ -118,9 +118,9 @@ QUndoCommand::QUndoCommand(const QString &text, QUndoCommand *parent)
|
||||
/*!
|
||||
Constructs a QUndoCommand object with parent \a parent.
|
||||
|
||||
If \a parent is not 0, this command is appended to parent's child list.
|
||||
The parent command then owns this command and will delete it in its
|
||||
destructor.
|
||||
If \a parent is not \nullptr, this command is appended to parent's
|
||||
child list. The parent command then owns this command and will delete
|
||||
it in its destructor.
|
||||
|
||||
\sa ~QUndoCommand()
|
||||
*/
|
||||
|
@ -1092,6 +1092,7 @@ void QDateTimeEdit::keyPressEvent(QKeyEvent *event)
|
||||
d->setSelected(d->currentSectionIndex, true);
|
||||
event->ignore();
|
||||
emit editingFinished();
|
||||
emit d->edit->returnPressed();
|
||||
return;
|
||||
default:
|
||||
#ifdef QT_KEYPAD_NAVIGATION
|
||||
|
@ -1232,7 +1232,7 @@ QSplitterHandle *QSplitter::createHandle()
|
||||
|
||||
/*!
|
||||
Returns the handle to the left of (or above) the item in the
|
||||
splitter's layout at the given \a index, or \c nullptr if there is no such item.
|
||||
splitter's layout at the given \a index, or \nullptr if there is no such item.
|
||||
The handle at index 0 is always hidden.
|
||||
|
||||
For right-to-left languages such as Arabic and Hebrew, the layout
|
||||
@ -1251,7 +1251,7 @@ QSplitterHandle *QSplitter::handle(int index) const
|
||||
|
||||
/*!
|
||||
Returns the widget at the given \a index in the splitter's layout,
|
||||
or \c nullptr if there is no such widget.
|
||||
or \nullptr if there is no such widget.
|
||||
|
||||
\sa count(), handle(), indexOf(), insertWidget()
|
||||
*/
|
||||
|
@ -2613,8 +2613,9 @@ void QXmlSimpleReaderPrivate::initIncrementalParsing()
|
||||
is returned. If no such feature exists the return value is
|
||||
undefined.
|
||||
|
||||
If \a ok is not 0: \c{*}\a{ok} is set to true if the reader has the
|
||||
feature called \a name; otherwise \c{*}\a{ok} is set to false.
|
||||
If \a ok is not \nullptr: \c{*}\a{ok} is set to true if the
|
||||
reader has the feature called \a name; otherwise \c{*}\a{ok} is
|
||||
set to false.
|
||||
|
||||
\sa setFeature(), hasFeature()
|
||||
*/
|
||||
@ -2643,7 +2644,7 @@ void QXmlSimpleReaderPrivate::initIncrementalParsing()
|
||||
If the reader has the property \a name, this function returns the
|
||||
value of the property; otherwise the return value is undefined.
|
||||
|
||||
If \a ok is not 0: if the reader has the \a name property
|
||||
If \a ok is not \nullptr: if the reader has the \a name property
|
||||
\c{*}\a{ok} is set to true; otherwise \c{*}\a{ok} is set to false.
|
||||
|
||||
\sa setProperty(), hasProperty()
|
||||
|
@ -431,6 +431,13 @@ void Http2Server::readReady()
|
||||
if (connectionError)
|
||||
return;
|
||||
|
||||
if (redirectSent) {
|
||||
// We are a "single shot" server, working in 'h2' mode,
|
||||
// responding with a redirect code. Don't bother to handle
|
||||
// anything else now.
|
||||
return;
|
||||
}
|
||||
|
||||
if (upgradeProtocol) {
|
||||
handleProtocolUpgrade();
|
||||
} else if (waitingClientPreface) {
|
||||
@ -800,6 +807,13 @@ void Http2Server::sendResponse(quint32 streamID, bool emptyBody)
|
||||
|
||||
HttpHeader header;
|
||||
if (redirectWhileReading) {
|
||||
if (redirectSent) {
|
||||
// This is a "single-shot" server responding with a redirect code.
|
||||
return;
|
||||
}
|
||||
|
||||
redirectSent = true;
|
||||
|
||||
qDebug("server received HEADERS frame (followed by DATA frames), redirecting ...");
|
||||
Q_ASSERT(targetPort);
|
||||
header.push_back({":status", "308"});
|
||||
|
@ -193,6 +193,7 @@ private:
|
||||
// Redirect, with status code 308, as soon as we've seen headers, while client
|
||||
// may still be sending DATA frames. See tst_Http2::earlyResponse().
|
||||
bool redirectWhileReading = false;
|
||||
bool redirectSent = false;
|
||||
quint16 targetPort = 0;
|
||||
QAtomicInt interrupted;
|
||||
protected slots:
|
||||
|
@ -474,7 +474,7 @@ void tst_Http2::earlyResponse()
|
||||
runEventLoop();
|
||||
|
||||
QVERIFY(serverPort);
|
||||
sendRequest(1, QNetworkRequest::NormalPriority, {10000000, Qt::Uninitialized});
|
||||
sendRequest(1, QNetworkRequest::NormalPriority, {1000000, Qt::Uninitialized});
|
||||
|
||||
runEventLoop();
|
||||
|
||||
|
@ -1640,15 +1640,14 @@ void tst_QUdpSocket::linkLocalIPv6()
|
||||
sockets << s;
|
||||
}
|
||||
|
||||
QUdpSocket neutral;
|
||||
QVERIFY(neutral.bind(QHostAddress(QHostAddress::AnyIPv6)));
|
||||
QSignalSpy neutralReadSpy(&neutral, SIGNAL(readyRead()));
|
||||
|
||||
QByteArray testData("hello");
|
||||
foreach (QUdpSocket *s, sockets) {
|
||||
QUdpSocket neutral;
|
||||
QVERIFY(neutral.bind(QHostAddress(QHostAddress::AnyIPv6)));
|
||||
QSignalSpy neutralReadSpy(&neutral, SIGNAL(readyRead()));
|
||||
|
||||
QSignalSpy spy(s, SIGNAL(readyRead()));
|
||||
|
||||
neutralReadSpy.clear();
|
||||
QVERIFY(s->writeDatagram(testData, s->localAddress(), neutral.localPort()));
|
||||
QTRY_VERIFY(neutralReadSpy.count() > 0); //note may need to accept a firewall prompt
|
||||
|
||||
|
@ -913,7 +913,7 @@ void tst_QSqlDatabase::recordMySQL()
|
||||
FieldDef("date", QVariant::Date, QDate::currentDate()),
|
||||
FieldDef("datetime", QVariant::DateTime, dt),
|
||||
FieldDef("timestamp", QVariant::DateTime, dt, false),
|
||||
FieldDef("time", QVariant::Time, dt.time()),
|
||||
FieldDef("time", QVariant::String, dt.time()),
|
||||
FieldDef("year", QVariant::Int, 2003),
|
||||
FieldDef("char(20)", QVariant::String, "Blah"),
|
||||
FieldDef("varchar(20)", QVariant::String, "BlahBlah"),
|
||||
|
@ -1,8 +1,8 @@
|
||||
TEMPLATE=subdirs
|
||||
SUBDIRS=\
|
||||
qtHaveModule(widgets): SUBDIRS = \
|
||||
qsqlquerymodel \
|
||||
qsqlrelationaltablemodel \
|
||||
qsqlrelationaldelegate
|
||||
|
||||
SUBDIRS += qsqlrelationaltablemodel \
|
||||
qsqltablemodel \
|
||||
|
||||
!qtHaveModule(widgets): SUBDIRS -= \
|
||||
qsqlquerymodel
|
||||
|
@ -158,12 +158,13 @@ void tst_QSqlRelationalDelegate::comboBoxEditor()
|
||||
QTest::keyClick(editor, Qt::Key_Down);
|
||||
QTest::keyClick(editor, Qt::Key_Enter);
|
||||
QCOMPARE(editor->currentText(), "mister");
|
||||
QTest::keyClick(tv.viewport(), Qt::Key_Tab);
|
||||
QVERIFY_SQL(model, submitAll());
|
||||
|
||||
QSqlQuery qry(db);
|
||||
QVERIFY_SQL(qry, exec("SELECT title_key FROM " + reltest1 + " WHERE id=1"));
|
||||
QVERIFY(qry.next());
|
||||
QCOMPARE(qry.value(0).toString(), "mister");
|
||||
QCOMPARE(qry.value(0).toString(), "2");
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QSqlRelationalDelegate)
|
||||
|
11
tests/auto/widgets/dialogs/qfilesystemmodel/BLACKLIST
Normal file
11
tests/auto/widgets/dialogs/qfilesystemmodel/BLACKLIST
Normal file
@ -0,0 +1,11 @@
|
||||
winrt
|
||||
[sort:QFileDialog usage]
|
||||
ubuntu
|
||||
b2qt
|
||||
[specialFiles]
|
||||
ubuntu
|
||||
b2qt
|
||||
[dirsBeforeFiles]
|
||||
ubuntu
|
||||
b2qt
|
||||
windows
|
@ -1,3 +1,6 @@
|
||||
INCLUDEPATH += ../../../../shared
|
||||
HEADERS += ../../../../shared/emulationdetector.h
|
||||
|
||||
CONFIG += testcase
|
||||
# This testcase can be slow on Windows and OS X, and may interfere with other file system tests.
|
||||
win32:testcase.timeout = 900
|
||||
@ -8,5 +11,3 @@ QT += core-private testlib
|
||||
|
||||
SOURCES += tst_qfilesystemmodel.cpp
|
||||
TARGET = tst_qfilesystemmodel
|
||||
|
||||
CONFIG += insignificant_test # QTBUG-29403
|
||||
|
@ -27,6 +27,7 @@
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
#include <emulationdetector.h>
|
||||
#include <QtTest/QtTest>
|
||||
#ifdef QT_BUILD_INTERNAL
|
||||
#include <private/qfilesystemmodel_p.h>
|
||||
@ -788,6 +789,9 @@ void tst_QFileSystemModel::sort()
|
||||
MyFriendFileSystemModel *myModel = new MyFriendFileSystemModel();
|
||||
QTreeView *tree = new QTreeView();
|
||||
|
||||
if (fileDialogMode && EmulationDetector::isRunningArmOnX86())
|
||||
QSKIP("Crashes in QEMU. QTBUG-70572");
|
||||
|
||||
#ifdef QT_BUILD_INTERNAL
|
||||
if (fileDialogMode)
|
||||
myModel->d_func()->disableRecursiveSort = true;
|
||||
|
Loading…
Reference in New Issue
Block a user