Merge remote-tracking branch 'origin/release' into stable
Change-Id: I885821d93a41b0caad627bfc16aa8eed21d2f5b9
This commit is contained in:
commit
f3bf2efcbd
12
INSTALL
12
INSTALL
@ -1,10 +1,10 @@
|
||||
INSTALLING Qt Source Package Version %VERSION%.
|
||||
|
||||
For full installation instructions for each supported platform, please
|
||||
see http://qt-project.org/doc/qt-%SHORTVERSION%/qtdoc/installation.html,
|
||||
For instructions on building and installing Qt for each supported platform,
|
||||
please see http://qt-project.org/doc/qt-%SHORTVERSION%/build-sources.html,
|
||||
or follow one of these links:
|
||||
|
||||
Mac OS X: http://qt-project.org/doc/qt-%SHORTVERSION%/qtdoc/install-mac.html
|
||||
Windows: http://qt-project.org/doc/qt-%SHORTVERSION%/qtdoc/install-win.html
|
||||
Windows CE: http://qt-project.org/doc/qt-%SHORTVERSION%/qtdoc/install-wince.html
|
||||
X11 Platforms: http://qt-project.org/doc/qt-%SHORTVERSION%/qtdoc/install-x11.html
|
||||
Mac OS X: http://qt-project.org/doc/qt-%SHORTVERSION%/macosx-building.html
|
||||
Windows: http://qt-project.org/doc/qt-%SHORTVERSION%/windows-building.html
|
||||
X11 Platforms: http://qt-project.org/doc/qt-%SHORTVERSION%/linux-building.html
|
||||
Windows CE: http://qt-project.org/doc/qt-%SHORTVERSION%/install-wince.html
|
||||
|
2
src/3rdparty/angle/src/libEGL/Display.cpp
vendored
2
src/3rdparty/angle/src/libEGL/Display.cpp
vendored
@ -523,7 +523,7 @@ void Display::initVendorString()
|
||||
if (mRenderer && mRenderer->getLUID(&adapterLuid))
|
||||
{
|
||||
char adapterLuidString[64];
|
||||
sprintf_s(adapterLuidString, sizeof(adapterLuidString), " (adapter LUID: %08x%08x)", adapterLuid.HighPart, adapterLuid.LowPart);
|
||||
snprintf(adapterLuidString, sizeof(adapterLuidString), " (adapter LUID: %08l%08l)", adapterLuid.HighPart, adapterLuid.LowPart);
|
||||
|
||||
mVendorString += adapterLuidString;
|
||||
}
|
||||
|
@ -0,0 +1,33 @@
|
||||
From 58a797397378aff3aa039a8b2a2d7011fe788737 Mon Sep 17 00:00:00 2001
|
||||
From: Kai Koehne <kai.koehne@digia.com>
|
||||
Date: Tue, 21 Jan 2014 10:23:38 +0100
|
||||
Subject: [PATCH] Fix compilation of ANGLE with mingw-tdm64 gcc 4.8.1
|
||||
|
||||
Do not rely on sprintf_s being declared/defined. This also fixes
|
||||
deployment to Windows XP.
|
||||
|
||||
See https://chromium-review.googlesource.com/#/c/182975/ for a similar
|
||||
commit proposed upstream.
|
||||
|
||||
Task-number: QTBUG-36242
|
||||
Change-Id: I520e2f61aeab34963e7a57baafd413c7db93f110
|
||||
---
|
||||
src/3rdparty/angle/src/libEGL/Display.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/3rdparty/angle/src/libEGL/Display.cpp b/src/3rdparty/angle/src/libEGL/Display.cpp
|
||||
index a382c3b..82b48ce 100644
|
||||
--- a/src/3rdparty/angle/src/libEGL/Display.cpp
|
||||
+++ b/src/3rdparty/angle/src/libEGL/Display.cpp
|
||||
@@ -523,7 +523,7 @@ void Display::initVendorString()
|
||||
if (mRenderer && mRenderer->getLUID(&adapterLuid))
|
||||
{
|
||||
char adapterLuidString[64];
|
||||
- sprintf_s(adapterLuidString, sizeof(adapterLuidString), " (adapter LUID: %08x%08x)", adapterLuid.HighPart, adapterLuid.LowPart);
|
||||
+ snprintf(adapterLuidString, sizeof(adapterLuidString), " (adapter LUID: %08l%08l)", adapterLuid.HighPart, adapterLuid.LowPart);
|
||||
|
||||
mVendorString += adapterLuidString;
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1029,13 +1029,13 @@ inline QT_ASCII_CAST_WARN bool operator==(const char *s1, const QString &s2)
|
||||
inline QT_ASCII_CAST_WARN bool operator!=(const char *s1, const QString &s2)
|
||||
{ return QString::compare_helper(s2.constData(), s2.size(), s1, -1) != 0; }
|
||||
inline QT_ASCII_CAST_WARN bool operator<(const char *s1, const QString &s2)
|
||||
{ return QString::compare_helper(s2.constData(), s2.size(), s1, -1) < 0; }
|
||||
inline QT_ASCII_CAST_WARN bool operator>(const char *s1, const QString &s2)
|
||||
{ return QString::compare_helper(s2.constData(), s2.size(), s1, -1) > 0; }
|
||||
inline QT_ASCII_CAST_WARN bool operator>(const char *s1, const QString &s2)
|
||||
{ return QString::compare_helper(s2.constData(), s2.size(), s1, -1) < 0; }
|
||||
inline QT_ASCII_CAST_WARN bool operator<=(const char *s1, const QString &s2)
|
||||
{ return QString::compare_helper(s2.constData(), s2.size(), s1, -1) <= 0; }
|
||||
inline QT_ASCII_CAST_WARN bool operator>=(const char *s1, const QString &s2)
|
||||
{ return QString::compare_helper(s2.constData(), s2.size(), s1, -1) >= 0; }
|
||||
inline QT_ASCII_CAST_WARN bool operator>=(const char *s1, const QString &s2)
|
||||
{ return QString::compare_helper(s2.constData(), s2.size(), s1, -1) <= 0; }
|
||||
|
||||
inline QT_ASCII_CAST_WARN bool operator==(const char *s1, QLatin1String s2)
|
||||
{ return QString::fromUtf8(s1) == s2; }
|
||||
|
@ -171,7 +171,8 @@ static const HB_FontClass hb_fontClass = {
|
||||
static HB_Error hb_getSFntTable(void *font, HB_Tag tableTag, HB_Byte *buffer, HB_UInt *length)
|
||||
{
|
||||
QFontEngine *fe = (QFontEngine *)font;
|
||||
if (!fe->getSfntTableData(tableTag, buffer, length))
|
||||
Q_ASSERT(fe->faceData.get_font_table);
|
||||
if (!fe->faceData.get_font_table(fe->faceData.user_data, tableTag, buffer, length))
|
||||
return HB_Err_Invalid_Argument;
|
||||
return HB_Err_Ok;
|
||||
}
|
||||
@ -182,6 +183,13 @@ static void hb_freeFace(void *face)
|
||||
}
|
||||
|
||||
|
||||
static bool qt_get_font_table_default(void *user_data, uint tag, uchar *buffer, uint *length)
|
||||
{
|
||||
QFontEngine *fe = (QFontEngine *)user_data;
|
||||
return fe->getSfntTableData(tag, buffer, length);
|
||||
}
|
||||
|
||||
|
||||
#ifdef QT_BUILD_INTERNAL
|
||||
// for testing purpose only, not thread-safe!
|
||||
static QList<QFontEngine *> *enginesCollector = 0;
|
||||
@ -210,6 +218,9 @@ QFontEngine::QFontEngine()
|
||||
font_(0), font_destroy_func(0),
|
||||
face_(0), face_destroy_func(0)
|
||||
{
|
||||
faceData.user_data = this;
|
||||
faceData.get_font_table = qt_get_font_table_default;
|
||||
|
||||
cache_cost = 0;
|
||||
fsType = 0;
|
||||
symbol = false;
|
||||
|
@ -116,6 +116,21 @@ QT_BEGIN_NAMESPACE
|
||||
#define TRUNC(x) ((x) >> 6)
|
||||
#define ROUND(x) (((x)+32) & -64)
|
||||
|
||||
static bool ft_getSfntTable(void *user_data, uint tag, uchar *buffer, uint *length)
|
||||
{
|
||||
FT_Face face = (FT_Face)user_data;
|
||||
|
||||
bool result = false;
|
||||
if (FT_IS_SFNT(face)) {
|
||||
FT_ULong len = *length;
|
||||
result = FT_Load_Sfnt_Table(face, tag, 0, buffer, &len) == FT_Err_Ok;
|
||||
*length = len;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
// -------------------------- Freetype support ------------------------------
|
||||
|
||||
class QtFreetypeData
|
||||
@ -408,15 +423,7 @@ QFontEngine::Properties QFreetypeFace::properties() const
|
||||
|
||||
bool QFreetypeFace::getSfntTable(uint tag, uchar *buffer, uint *length) const
|
||||
{
|
||||
bool result = false;
|
||||
#if (FREETYPE_MAJOR*10000 + FREETYPE_MINOR*100 + FREETYPE_PATCH) > 20103
|
||||
if (FT_IS_SFNT(face)) {
|
||||
FT_ULong len = *length;
|
||||
result = FT_Load_Sfnt_Table(face, tag, 0, buffer, &len) == FT_Err_Ok;
|
||||
*length = len;
|
||||
}
|
||||
#endif
|
||||
return result;
|
||||
return ft_getSfntTable(face, tag, buffer, length);
|
||||
}
|
||||
|
||||
/* Some fonts (such as MingLiu rely on hinting to scale different
|
||||
@ -761,6 +768,8 @@ bool QFontEngineFT::init(FaceId faceId, bool antialias, GlyphFormat format,
|
||||
fontDef.styleName = QString::fromUtf8(face->style_name);
|
||||
|
||||
if (!freetype->hbFace) {
|
||||
faceData.user_data = face;
|
||||
faceData.get_font_table = ft_getSfntTable;
|
||||
freetype->hbFace = harfbuzzFace();
|
||||
freetype->hbFace_destroy_func = face_destroy_func;
|
||||
} else {
|
||||
@ -1179,7 +1188,7 @@ QFixed QFontEngineFT::emSquareSize() const
|
||||
|
||||
bool QFontEngineFT::getSfntTableData(uint tag, uchar *buffer, uint *length) const
|
||||
{
|
||||
return freetype->getSfntTable(tag, buffer, length);
|
||||
return ft_getSfntTable(freetype->face, tag, buffer, length);
|
||||
}
|
||||
|
||||
int QFontEngineFT::synthesized() const
|
||||
|
@ -85,6 +85,7 @@ enum HB_Compat_Error {
|
||||
};
|
||||
|
||||
typedef void (*qt_destroy_func_t) (void *user_data);
|
||||
typedef bool (*qt_get_font_table_func_t) (void *user_data, uint tag, uchar *buffer, uint *length);
|
||||
|
||||
class Q_GUI_EXPORT QFontEngine
|
||||
{
|
||||
@ -280,6 +281,10 @@ public:
|
||||
mutable qt_destroy_func_t font_destroy_func;
|
||||
mutable void *face_;
|
||||
mutable qt_destroy_func_t face_destroy_func;
|
||||
struct FaceData {
|
||||
void *user_data;
|
||||
qt_get_font_table_func_t get_font_table;
|
||||
} faceData;
|
||||
|
||||
uint cache_cost; // amount of mem used in kb by the font
|
||||
uint fsType : 16;
|
||||
|
@ -623,19 +623,22 @@ hb_font_funcs_t *hb_qt_get_font_funcs()
|
||||
|
||||
|
||||
static hb_blob_t *
|
||||
_hb_qt_get_font_table(hb_face_t * /*face*/, hb_tag_t tag, void *user_data)
|
||||
_hb_qt_reference_table(hb_face_t * /*face*/, hb_tag_t tag, void *user_data)
|
||||
{
|
||||
QFontEngine *fe = (QFontEngine *)user_data;
|
||||
Q_ASSERT(fe);
|
||||
QFontEngine::FaceData *data = (QFontEngine::FaceData *)user_data;
|
||||
Q_ASSERT(data);
|
||||
|
||||
qt_get_font_table_func_t get_font_table = data->get_font_table;
|
||||
Q_ASSERT(get_font_table);
|
||||
|
||||
uint length = 0;
|
||||
if (Q_UNLIKELY(!fe->getSfntTableData(tag, 0, &length) || length == 0))
|
||||
if (Q_UNLIKELY(!get_font_table(data->user_data, tag, 0, &length) || length == 0))
|
||||
return hb_blob_get_empty();
|
||||
|
||||
char *buffer = (char *)malloc(length);
|
||||
Q_CHECK_PTR(buffer);
|
||||
|
||||
if (Q_UNLIKELY(!fe->getSfntTableData(tag, reinterpret_cast<uchar *>(buffer), &length)))
|
||||
if (Q_UNLIKELY(!get_font_table(data->user_data, tag, reinterpret_cast<uchar *>(buffer), &length)))
|
||||
length = 0;
|
||||
|
||||
return hb_blob_create(const_cast<const char *>(buffer), length,
|
||||
@ -646,9 +649,14 @@ _hb_qt_get_font_table(hb_face_t * /*face*/, hb_tag_t tag, void *user_data)
|
||||
static inline hb_face_t *
|
||||
_hb_qt_face_create(QFontEngine *fe)
|
||||
{
|
||||
hb_face_t *face;
|
||||
Q_ASSERT(fe);
|
||||
|
||||
face = hb_face_create_for_tables(_hb_qt_get_font_table, (void *)fe, NULL);
|
||||
QFontEngine::FaceData *data = (QFontEngine::FaceData *)malloc(sizeof(QFontEngine::FaceData));
|
||||
Q_CHECK_PTR(data);
|
||||
data->user_data = fe->faceData.user_data;
|
||||
data->get_font_table = fe->faceData.get_font_table;
|
||||
|
||||
hb_face_t *face = hb_face_create_for_tables(_hb_qt_reference_table, (void *)data, free);
|
||||
if (Q_UNLIKELY(hb_face_is_immutable(face))) {
|
||||
hb_face_destroy(face);
|
||||
return NULL;
|
||||
|
@ -418,7 +418,15 @@ namespace QtAndroid
|
||||
{
|
||||
return m_qtTag;
|
||||
}
|
||||
}
|
||||
|
||||
QString deviceName()
|
||||
{
|
||||
QString manufacturer = QJNIObjectPrivate::getStaticObjectField("android/os/Build", "MANUFACTURER", "Ljava/lang/String;").toString();
|
||||
QString model = QJNIObjectPrivate::getStaticObjectField("android/os/Build", "MODEL", "Ljava/lang/String;").toString();
|
||||
|
||||
return manufacturer + QStringLiteral(" ") + model;
|
||||
}
|
||||
} // namespace QtAndroid
|
||||
|
||||
static jboolean startQtAndroidPlugin(JNIEnv* /*env*/, jobject /*object*//*, jobject applicationAssetManager*/)
|
||||
{
|
||||
|
@ -120,5 +120,6 @@ namespace QtAndroid
|
||||
const char *methodErrorMsgFmt();
|
||||
const char *qtTagText();
|
||||
|
||||
QString deviceName();
|
||||
}
|
||||
#endif // ANDROID_APP_H
|
||||
|
@ -82,12 +82,14 @@ void QAndroidOpenGLContext::swapBuffers(QPlatformSurface *surface)
|
||||
bool QAndroidOpenGLContext::makeCurrent(QPlatformSurface *surface)
|
||||
{
|
||||
bool ret = QEglFSContext::makeCurrent(surface);
|
||||
QOpenGLContextPrivate *ctx_d = QOpenGLContextPrivate::get(context());
|
||||
|
||||
const char *rendererString = reinterpret_cast<const char *>(glGetString(GL_RENDERER));
|
||||
if (rendererString != 0 && qstrncmp(rendererString, "Android Emulator", 16) == 0) {
|
||||
QOpenGLContextPrivate *ctx_d = QOpenGLContextPrivate::get(context());
|
||||
if (rendererString != 0 && qstrncmp(rendererString, "Android Emulator", 16) == 0)
|
||||
ctx_d->workaround_missingPrecisionQualifiers = true;
|
||||
}
|
||||
|
||||
if (!ctx_d->workaround_brokenFBOReadBack && QAndroidPlatformIntegration::needsWorkaround())
|
||||
ctx_d->workaround_brokenFBOReadBack = true;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -89,6 +89,10 @@ void *QAndroidPlatformNativeInterface::nativeResourceForIntegration(const QByteA
|
||||
return &m_palettes;
|
||||
if (resource == "AndroidStyleFonts")
|
||||
return &m_fonts;
|
||||
if (resource == "AndroidDeviceName") {
|
||||
static QString deviceName = QtAndroid::deviceName();
|
||||
return &deviceName;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -119,12 +123,26 @@ QAndroidPlatformIntegration::QAndroidPlatformIntegration(const QStringList ¶
|
||||
m_androidSystemLocale = new QAndroidSystemLocale;
|
||||
}
|
||||
|
||||
bool QAndroidPlatformIntegration::needsWorkaround()
|
||||
{
|
||||
static bool needsWorkaround =
|
||||
QtAndroid::deviceName().compare(QStringLiteral("samsung SM-T211"), Qt::CaseInsensitive) == 0
|
||||
|| QtAndroid::deviceName().compare(QStringLiteral("samsung SM-T210"), Qt::CaseInsensitive) == 0
|
||||
|| QtAndroid::deviceName().compare(QStringLiteral("samsung SM-T215"), Qt::CaseInsensitive) == 0;
|
||||
return needsWorkaround;
|
||||
}
|
||||
|
||||
bool QAndroidPlatformIntegration::hasCapability(Capability cap) const
|
||||
{
|
||||
switch (cap) {
|
||||
case ThreadedPixmaps: return true;
|
||||
case ApplicationState: return true;
|
||||
case NativeWidgets: return false;
|
||||
|
||||
case ThreadedOpenGL:
|
||||
if (needsWorkaround())
|
||||
return false;
|
||||
// fall through
|
||||
default:
|
||||
#ifndef ANDROID_PLUGIN_OPENGL
|
||||
return QPlatformIntegration::hasCapability(cap);
|
||||
|
@ -145,8 +145,9 @@ public:
|
||||
QEglFSScreen *createScreen() const;
|
||||
#endif
|
||||
|
||||
private:
|
||||
static bool needsWorkaround();
|
||||
|
||||
private:
|
||||
friend class QEglFSAndroidHooks;
|
||||
|
||||
QTouchDevice *m_touchDevice;
|
||||
|
@ -211,7 +211,6 @@ public: // for QNSView
|
||||
QRect m_exposedGeometry;
|
||||
int m_registerTouchCount;
|
||||
bool m_resizableTransientParent;
|
||||
bool m_overrideBecomeKey;
|
||||
|
||||
static const int NoAlertRequest;
|
||||
NSInteger m_alertRequest;
|
||||
|
@ -160,9 +160,7 @@ static bool isMouseEvent(NSEvent *ev)
|
||||
|
||||
// Only tool or dialog windows should become key:
|
||||
if (m_cocoaPlatformWindow
|
||||
&& (m_cocoaPlatformWindow->m_overrideBecomeKey ||
|
||||
m_cocoaPlatformWindow->window()->type() == Qt::Tool ||
|
||||
m_cocoaPlatformWindow->window()->type() == Qt::Dialog))
|
||||
&& (m_cocoaPlatformWindow->window()->type() == Qt::Tool || m_cocoaPlatformWindow->window()->type() == Qt::Dialog))
|
||||
return YES;
|
||||
return NO;
|
||||
}
|
||||
@ -217,7 +215,6 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw)
|
||||
, m_isExposed(false)
|
||||
, m_registerTouchCount(0)
|
||||
, m_resizableTransientParent(false)
|
||||
, m_overrideBecomeKey(false)
|
||||
, m_alertRequest(NoAlertRequest)
|
||||
, monitor(nil)
|
||||
, m_drawContentBorderGradient(false)
|
||||
@ -267,6 +264,7 @@ QCocoaWindow::~QCocoaWindow()
|
||||
[m_contentView release];
|
||||
[m_nsWindow release];
|
||||
[m_nsWindowDelegate release];
|
||||
[m_windowCursor release];
|
||||
}
|
||||
|
||||
QSurfaceFormat QCocoaWindow::format() const
|
||||
@ -705,8 +703,6 @@ bool QCocoaWindow::setKeyboardGrabEnabled(bool grab)
|
||||
if (!m_nsWindow)
|
||||
return false;
|
||||
|
||||
m_overrideBecomeKey = grab;
|
||||
|
||||
if (grab && ![m_nsWindow isKeyWindow])
|
||||
[m_nsWindow makeKeyWindow];
|
||||
else if (!grab && [m_nsWindow isKeyWindow])
|
||||
@ -719,8 +715,6 @@ bool QCocoaWindow::setMouseGrabEnabled(bool grab)
|
||||
if (!m_nsWindow)
|
||||
return false;
|
||||
|
||||
m_overrideBecomeKey = grab;
|
||||
|
||||
if (grab && ![m_nsWindow isKeyWindow])
|
||||
[m_nsWindow makeKeyWindow];
|
||||
else if (!grab && [m_nsWindow isKeyWindow])
|
||||
@ -1066,7 +1060,10 @@ void QCocoaWindow::setWindowCursor(NSCursor *cursor)
|
||||
[cursor set];
|
||||
// or we can set the cursor on mouse enter/leave using tracking
|
||||
// areas. This is done in QNSView, save the cursor:
|
||||
m_windowCursor = cursor;
|
||||
if (m_windowCursor != cursor) {
|
||||
[m_windowCursor release];
|
||||
m_windowCursor = [cursor retain];
|
||||
}
|
||||
}
|
||||
|
||||
void QCocoaWindow::registerTouch(bool enable)
|
||||
|
@ -1346,6 +1346,11 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
|
||||
{
|
||||
Q_UNUSED(replacementRange)
|
||||
|
||||
if (m_sendKeyEvent && m_composingText.isEmpty()) {
|
||||
// don't send input method events for simple text input (let handleKeyEvent send key events instead)
|
||||
return;
|
||||
}
|
||||
|
||||
QString commitString;
|
||||
if ([aString length]) {
|
||||
if ([aString isKindOfClass:[NSAttributedString class]]) {
|
||||
|
@ -63,6 +63,13 @@ QQnxEglWindow::QQnxEglWindow(QWindow *window, screen_context_t context, bool nee
|
||||
m_eglSurface(EGL_NO_SURFACE)
|
||||
{
|
||||
initWindow();
|
||||
|
||||
// Set window usage
|
||||
const int val = SCREEN_USAGE_OPENGL_ES2;
|
||||
const int result = screen_set_window_property_iv(nativeHandle(), SCREEN_PROPERTY_USAGE, &val);
|
||||
if (result != 0)
|
||||
qFatal("QQnxEglWindow: failed to set window alpha usage, errno=%d", errno);
|
||||
|
||||
m_requestedBufferSize = screen()->rootWindow() == this ?
|
||||
screen()->geometry().size() : window->geometry().size();
|
||||
}
|
||||
|
@ -60,6 +60,12 @@ QQnxRasterWindow::QQnxRasterWindow(QWindow *window, screen_context_t context, bo
|
||||
m_previousBufferIndex(-1)
|
||||
{
|
||||
initWindow();
|
||||
|
||||
// Set window usage
|
||||
const int val = SCREEN_USAGE_NATIVE | SCREEN_USAGE_READ | SCREEN_USAGE_WRITE;
|
||||
const int result = screen_set_window_property_iv(nativeHandle(), SCREEN_PROPERTY_USAGE, &val);
|
||||
if (result != 0)
|
||||
qFatal("QQnxEglWindow: failed to set window alpha usage, errno=%d", errno);
|
||||
}
|
||||
|
||||
void QQnxRasterWindow::post(const QRegion &dirty)
|
||||
|
@ -743,10 +743,10 @@ bool QWindowsKeyMapper::translateKeyEvent(QWindow *widget, HWND hwnd,
|
||||
return true;
|
||||
}
|
||||
|
||||
// WM_CHAR messages already contain the character in question so there is
|
||||
// WM_(IME_)CHAR messages already contain the character in question so there is
|
||||
// no need to fiddle with our key map. In any other case add this key to the
|
||||
// keymap if it is not present yet.
|
||||
if (msg.message != WM_CHAR)
|
||||
if (msg.message != WM_CHAR && msg.message != WM_IME_CHAR)
|
||||
updateKeyMap(msg);
|
||||
|
||||
MSG peekedMsg;
|
||||
|
@ -1842,18 +1842,18 @@ void QCommonListViewBase::paintDragDrop(QPainter *painter)
|
||||
}
|
||||
#endif
|
||||
|
||||
void QCommonListViewBase::updateHorizontalScrollBar(const QSize & /*step*/)
|
||||
void QCommonListViewBase::updateHorizontalScrollBar(const QSize &step)
|
||||
{
|
||||
horizontalScrollBar()->setSingleStep(step.width() + spacing());
|
||||
horizontalScrollBar()->setPageStep(viewport()->width());
|
||||
horizontalScrollBar()->setRange(0, contentsSize.width() - viewport()->width());
|
||||
// we do not want to overwrite (a possible user set) single step
|
||||
}
|
||||
|
||||
void QCommonListViewBase::updateVerticalScrollBar(const QSize & /*step*/)
|
||||
void QCommonListViewBase::updateVerticalScrollBar(const QSize &step)
|
||||
{
|
||||
verticalScrollBar()->setSingleStep(step.height() + spacing());
|
||||
verticalScrollBar()->setPageStep(viewport()->height());
|
||||
verticalScrollBar()->setRange(0, contentsSize.height() - viewport()->height());
|
||||
// we do not want to overwrite (a possible user set) single step
|
||||
}
|
||||
|
||||
void QCommonListViewBase::scrollContentsBy(int dx, int dy, bool /*scrollElasticBand*/)
|
||||
|
@ -2170,7 +2170,7 @@ void QTableView::updateGeometries()
|
||||
} else { // ScrollPerPixel
|
||||
horizontalScrollBar()->setPageStep(vsize.width());
|
||||
horizontalScrollBar()->setRange(0, horizontalLength - vsize.width());
|
||||
// here we do not want to overwrite (a possible user set) single step
|
||||
horizontalScrollBar()->setSingleStep(qMax(vsize.width() / (columnsInViewport + 1), 2));
|
||||
}
|
||||
|
||||
// vertical scroll bar
|
||||
@ -2198,7 +2198,7 @@ void QTableView::updateGeometries()
|
||||
} else { // ScrollPerPixel
|
||||
verticalScrollBar()->setPageStep(vsize.height());
|
||||
verticalScrollBar()->setRange(0, verticalLength - vsize.height());
|
||||
// here we do not want to overwrite (a possible user set) single step
|
||||
verticalScrollBar()->setSingleStep(qMax(vsize.height() / (rowsInViewport + 1), 2));
|
||||
}
|
||||
|
||||
d->geometryRecursionBlock = false;
|
||||
|
@ -3685,7 +3685,7 @@ void QTreeViewPrivate::updateScrollBars()
|
||||
}
|
||||
vbar->setRange(0, contentsHeight - viewportSize.height());
|
||||
vbar->setPageStep(viewportSize.height());
|
||||
// here we do not want to overwrite (a possible user set) single step
|
||||
vbar->setSingleStep(qMax(viewportSize.height() / (itemsInViewport + 1), 2));
|
||||
}
|
||||
|
||||
const int columnCount = header->count();
|
||||
@ -3711,7 +3711,7 @@ void QTreeViewPrivate::updateScrollBars()
|
||||
viewportSize = maxSize;
|
||||
hbar->setPageStep(viewportSize.width());
|
||||
hbar->setRange(0, qMax(horizontalLength - viewportSize.width(), 0));
|
||||
// here we do not want to overwrite (a possible user set) single step
|
||||
hbar->setSingleStep(qMax(viewportSize.width() / (columnsInViewport + 1), 2));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -60,6 +60,9 @@
|
||||
#include <private/qwidget_p.h>
|
||||
#include "qtoolbar_p.h"
|
||||
#include "qwidgetanimator_p.h"
|
||||
#ifdef Q_OS_OSX
|
||||
#include <qpa/qplatformnativeinterface.h>
|
||||
#endif
|
||||
#ifdef Q_WS_MAC
|
||||
#include <private/qt_mac_p.h>
|
||||
#include <private/qt_cocoa_helpers_mac_p.h>
|
||||
@ -76,6 +79,9 @@ class QMainWindowPrivate : public QWidgetPrivate
|
||||
public:
|
||||
inline QMainWindowPrivate()
|
||||
: layout(0), explicitIconSize(false), toolButtonStyle(Qt::ToolButtonIconOnly)
|
||||
#ifdef Q_OS_OSX
|
||||
, useUnifiedToolBar(false)
|
||||
#endif
|
||||
#ifdef Q_WS_MAC
|
||||
, useHIToolBar(false)
|
||||
, activateUnifiedToolbarAfterFullScreen(false)
|
||||
@ -88,6 +94,9 @@ public:
|
||||
QSize iconSize;
|
||||
bool explicitIconSize;
|
||||
Qt::ToolButtonStyle toolButtonStyle;
|
||||
#ifdef Q_OS_OSX
|
||||
bool useUnifiedToolBar;
|
||||
#endif
|
||||
#ifdef Q_WS_MAC
|
||||
bool useHIToolBar;
|
||||
bool activateUnifiedToolbarAfterFullScreen;
|
||||
@ -1492,16 +1501,29 @@ bool QMainWindow::event(QEvent *event)
|
||||
/*!
|
||||
\property QMainWindow::unifiedTitleAndToolBarOnMac
|
||||
\brief whether the window uses the unified title and toolbar look on Mac OS X
|
||||
\since 4.3
|
||||
\obsolete
|
||||
|
||||
This property is not implemented in Qt 5. Setting it has no effect.
|
||||
|
||||
A replacement API (QtMacUnifiedToolBar) is available in QtMacExtras at
|
||||
http://qt.gitorious.org/qtplayground/qtmacextras
|
||||
\since 5.2
|
||||
*/
|
||||
void QMainWindow::setUnifiedTitleAndToolBarOnMac(bool set)
|
||||
{
|
||||
#ifdef Q_OS_OSX
|
||||
Q_D(QMainWindow);
|
||||
if (isWindow()) {
|
||||
QPlatformNativeInterface *nativeInterface = QGuiApplication::platformNativeInterface();
|
||||
QPlatformNativeInterface::NativeResourceForIntegrationFunction function =
|
||||
nativeInterface->nativeResourceFunctionForIntegration("setContentBorderThickness");
|
||||
if (!function)
|
||||
return; // Not Cocoa platform plugin.
|
||||
|
||||
createWinId();
|
||||
|
||||
d->useUnifiedToolBar = set;
|
||||
|
||||
const int toolBarHeight = 50;
|
||||
typedef void (*SetContentBorderThicknessFunction)(QWindow *window, int topThickness, int bottomThickness);
|
||||
(reinterpret_cast<SetContentBorderThicknessFunction>(function))(window()->windowHandle(), toolBarHeight, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef Q_WS_MAC
|
||||
Q_D(QMainWindow);
|
||||
if (!isWindow() || d->useHIToolBar == set || QSysInfo::MacintoshVersion < QSysInfo::MV_10_3)
|
||||
@ -1534,6 +1556,9 @@ void QMainWindow::setUnifiedTitleAndToolBarOnMac(bool set)
|
||||
|
||||
bool QMainWindow::unifiedTitleAndToolBarOnMac() const
|
||||
{
|
||||
#ifdef Q_OS_OSX
|
||||
return d_func()->useUnifiedToolBar;
|
||||
#endif
|
||||
#ifdef Q_WS_MAC
|
||||
return d_func()->useHIToolBar && !testAttribute(Qt::WA_MacBrushedMetal) && !(windowFlags() & Qt::FramelessWindowHint);
|
||||
#endif
|
||||
@ -1655,9 +1680,7 @@ QMenu *QMainWindow::createPopupMenu()
|
||||
for (int i = 0; i < toolbars.size(); ++i) {
|
||||
QToolBar *toolBar = toolbars.at(i);
|
||||
if (toolBar->parentWidget() == this
|
||||
&& (!d->layout->layoutState.toolBarAreaLayout.indexOf(toolBar).isEmpty()
|
||||
|| (unifiedTitleAndToolBarOnMac()
|
||||
&& toolBarArea(toolBar) == Qt::TopToolBarArea))) {
|
||||
&& (!d->layout->layoutState.toolBarAreaLayout.indexOf(toolBar).isEmpty())) {
|
||||
menu->addAction(toolbars.at(i)->toggleViewAction());
|
||||
}
|
||||
}
|
||||
|
@ -655,9 +655,7 @@ QRect QToolBarAreaLayout::fitLayout()
|
||||
docks[QInternal::BottomDock].rect = QRect(rect.left(), center.bottom() + 1,
|
||||
rect.width(), bottom_hint.height());
|
||||
|
||||
if (!mainWindow->unifiedTitleAndToolBarOnMac()) {
|
||||
docks[QInternal::TopDock].fitLayout();
|
||||
}
|
||||
docks[QInternal::TopDock].fitLayout();
|
||||
docks[QInternal::LeftDock].fitLayout();
|
||||
docks[QInternal::RightDock].fitLayout();
|
||||
docks[QInternal::BottomDock].fitLayout();
|
||||
@ -1307,8 +1305,6 @@ bool QToolBarAreaLayout::restoreState(QDataStream &stream, const QList<QToolBar*
|
||||
QList<QToolBar*> toolBars = _toolBars;
|
||||
int lines;
|
||||
stream >> lines;
|
||||
if (!testing)
|
||||
testing = mainWindow->unifiedTitleAndToolBarOnMac();
|
||||
|
||||
for (int j = 0; j < lines; ++j) {
|
||||
int pos;
|
||||
@ -1319,7 +1315,7 @@ bool QToolBarAreaLayout::restoreState(QDataStream &stream, const QList<QToolBar*
|
||||
stream >> cnt;
|
||||
|
||||
QToolBarAreaLayoutInfo &dock = docks[pos];
|
||||
const bool applyingLayout = !testing && !(pos == QInternal::TopDock && mainWindow->unifiedTitleAndToolBarOnMac());
|
||||
const bool applyingLayout = !testing;
|
||||
QToolBarAreaLayoutLine line(dock.o);
|
||||
|
||||
for (int k = 0; k < cnt; ++k) {
|
||||
|
@ -4419,6 +4419,62 @@ void tst_QString::operator_smaller()
|
||||
// operator< is not locale-aware (or shouldn't be)
|
||||
QVERIFY( foo < QString("\xc3\xa9") );
|
||||
QVERIFY( foo < "\xc3\xa9" );
|
||||
|
||||
QVERIFY(QString("a") < QString("b"));
|
||||
QVERIFY(QString("a") <= QString("b"));
|
||||
QVERIFY(QString("a") <= QString("a"));
|
||||
QVERIFY(QString("a") == QString("a"));
|
||||
QVERIFY(QString("a") >= QString("a"));
|
||||
QVERIFY(QString("b") >= QString("a"));
|
||||
QVERIFY(QString("b") > QString("a"));
|
||||
|
||||
QVERIFY("a" < QString("b"));
|
||||
QVERIFY("a" <= QString("b"));
|
||||
QVERIFY("a" <= QString("a"));
|
||||
QVERIFY("a" == QString("a"));
|
||||
QVERIFY("a" >= QString("a"));
|
||||
QVERIFY("b" >= QString("a"));
|
||||
QVERIFY("b" > QString("a"));
|
||||
|
||||
QVERIFY(QString("a") < "b");
|
||||
QVERIFY(QString("a") <= "b");
|
||||
QVERIFY(QString("a") <= "a");
|
||||
QVERIFY(QString("a") == "a");
|
||||
QVERIFY(QString("a") >= "a");
|
||||
QVERIFY(QString("b") >= "a");
|
||||
QVERIFY(QString("b") > "a");
|
||||
|
||||
QVERIFY(QLatin1String("a") < QString("b"));
|
||||
QVERIFY(QLatin1String("a") <= QString("b"));
|
||||
QVERIFY(QLatin1String("a") <= QString("a"));
|
||||
QVERIFY(QLatin1String("a") == QString("a"));
|
||||
QVERIFY(QLatin1String("a") >= QString("a"));
|
||||
QVERIFY(QLatin1String("b") >= QString("a"));
|
||||
QVERIFY(QLatin1String("b") > QString("a"));
|
||||
|
||||
QVERIFY(QString("a") < QLatin1String("b"));
|
||||
QVERIFY(QString("a") <= QLatin1String("b"));
|
||||
QVERIFY(QString("a") <= QLatin1String("a"));
|
||||
QVERIFY(QString("a") == QLatin1String("a"));
|
||||
QVERIFY(QString("a") >= QLatin1String("a"));
|
||||
QVERIFY(QString("b") >= QLatin1String("a"));
|
||||
QVERIFY(QString("b") > QLatin1String("a"));
|
||||
|
||||
QVERIFY("a" < QLatin1String("b"));
|
||||
QVERIFY("a" <= QLatin1String("b"));
|
||||
QVERIFY("a" <= QLatin1String("a"));
|
||||
QVERIFY("a" == QLatin1String("a"));
|
||||
QVERIFY("a" >= QLatin1String("a"));
|
||||
QVERIFY("b" >= QLatin1String("a"));
|
||||
QVERIFY("b" > QLatin1String("a"));
|
||||
|
||||
QVERIFY(QLatin1String("a") < "b");
|
||||
QVERIFY(QLatin1String("a") <= "b");
|
||||
QVERIFY(QLatin1String("a") <= "a");
|
||||
QVERIFY(QLatin1String("a") == "a");
|
||||
QVERIFY(QLatin1String("a") >= "a");
|
||||
QVERIFY(QLatin1String("b") >= "a");
|
||||
QVERIFY(QLatin1String("b") > "a");
|
||||
}
|
||||
|
||||
void tst_QString::integer_conversion_data()
|
||||
|
@ -1286,6 +1286,7 @@ void tst_QAbstractItemView::task200665_itemEntered()
|
||||
QVERIFY(QTest::qWaitForWindowExposed(&view));
|
||||
QRect rect = view.visualRect(model.index(0,0));
|
||||
QCursor::setPos( view.viewport()->mapToGlobal(rect.center()) );
|
||||
QCoreApplication::processEvents();
|
||||
QSignalSpy spy(&view, SIGNAL(entered(QModelIndex)));
|
||||
view.verticalScrollBar()->setValue(view.verticalScrollBar()->maximum());
|
||||
|
||||
|
@ -3702,7 +3702,7 @@ void tst_QTableView::mouseWheel_data()
|
||||
<< 10 + qApp->wheelScrollLines() << 10 + qApp->wheelScrollLines();
|
||||
QTest::newRow("scroll down per pixel")
|
||||
<< int(QAbstractItemView::ScrollPerPixel) << -120
|
||||
<< 10 + qApp->wheelScrollLines() << 10 + qApp->wheelScrollLines();
|
||||
<< 10 + qApp->wheelScrollLines() * 89 << 10 + qApp->wheelScrollLines() * 28;
|
||||
}
|
||||
|
||||
void tst_QTableView::mouseWheel()
|
||||
|
Loading…
Reference in New Issue
Block a user