summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/corelib/tools/qrect.cpp8
-rw-r--r--src/gui/opengl/qopenglpaintengine.cpp1
-rw-r--r--src/gui/opengl/qopengltextureglyphcache_p.h5
-rw-r--r--src/plugins/platforms/cocoa/qcocoaintegration.mm21
-rw-r--r--src/plugins/styles/mac/qmacstyle_mac.mm36
-rw-r--r--src/widgets/widgets/qmaccocoaviewcontainer_mac.mm5
-rw-r--r--src/xml/dom/qdom.cpp2
7 files changed, 46 insertions, 32 deletions
diff --git a/src/corelib/tools/qrect.cpp b/src/corelib/tools/qrect.cpp
index 40d6c8b7c3..ad1885e8ce 100644
--- a/src/corelib/tools/qrect.cpp
+++ b/src/corelib/tools/qrect.cpp
@@ -73,7 +73,7 @@ QT_BEGIN_NAMESPACE
The QRect class provides a collection of functions that return the
various rectangle coordinates, and enable manipulation of
- these. QRect also provide functions to move the rectangle relative
+ these. QRect also provides functions to move the rectangle relative
to the various coordinates. In addition there is a moveTo()
function that moves the rectangle, leaving its top left corner at
the given coordinates. Alternatively, the translate() function
@@ -155,7 +155,7 @@ QT_BEGIN_NAMESPACE
The QRect class provides a collection of functions that return the
various rectangle coordinates, and enable manipulation of
- these. QRect also provide functions to move the rectangle relative
+ these. QRect also provides functions to move the rectangle relative
to the various coordinates.
For example the left(), setLeft() and moveLeft() functions as an
@@ -1335,7 +1335,7 @@ QDebug operator<<(QDebug dbg, const QRect &r)
The QRectF class provides a collection of functions that return
the various rectangle coordinates, and enable manipulation of
- these. QRectF also provide functions to move the rectangle
+ these. QRectF also provides functions to move the rectangle
relative to the various coordinates. In addition there is a
moveTo() function that moves the rectangle, leaving its top left
corner at the given coordinates. Alternatively, the translate()
@@ -1418,7 +1418,7 @@ QDebug operator<<(QDebug dbg, const QRect &r)
The QRectF class provides a collection of functions that return
the various rectangle coordinates, and enable manipulation of
- these. QRectF also provide functions to move the rectangle
+ these. QRectF also provides functions to move the rectangle
relative to the various coordinates.
For example: the bottom(), setBottom() and moveBottom() functions:
diff --git a/src/gui/opengl/qopenglpaintengine.cpp b/src/gui/opengl/qopenglpaintengine.cpp
index 3d1c362275..6a89089f18 100644
--- a/src/gui/opengl/qopenglpaintengine.cpp
+++ b/src/gui/opengl/qopenglpaintengine.cpp
@@ -1741,6 +1741,7 @@ void QOpenGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngine::GlyphFormat gly
// we may have to re-bind brush textures after filling in the cache.
brushTextureDirty = (QT_BRUSH_TEXTURE_UNIT == glypchCacheTextureUnit);
}
+ cache->setPaintEnginePrivate(nullptr);
}
if (cache->width() == 0 || cache->height() == 0)
diff --git a/src/gui/opengl/qopengltextureglyphcache_p.h b/src/gui/opengl/qopengltextureglyphcache_p.h
index 0b7b5f6082..598cb00ee5 100644
--- a/src/gui/opengl/qopengltextureglyphcache_p.h
+++ b/src/gui/opengl/qopengltextureglyphcache_p.h
@@ -152,6 +152,11 @@ public:
void clear();
+ QOpenGL2PaintEngineExPrivate *paintEnginePrivate() const
+ {
+ return pex;
+ }
+
private:
void setupVertexAttribs();
diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.mm b/src/plugins/platforms/cocoa/qcocoaintegration.mm
index 79f7ebda54..55b3805df3 100644
--- a/src/plugins/platforms/cocoa/qcocoaintegration.mm
+++ b/src/plugins/platforms/cocoa/qcocoaintegration.mm
@@ -70,12 +70,6 @@
#include <IOKit/graphics/IOGraphicsLib.h>
-#if !QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_14)
-@interface NSApplication (MojaveForwardDeclarations)
-@property (strong) NSAppearance *appearance NS_AVAILABLE_MAC(10_14);
-@end
-#endif
-
static void initResources()
{
Q_INIT_RESOURCE(qcocoaresources);
@@ -137,21 +131,6 @@ QCocoaIntegration::QCocoaIntegration(const QStringList &paramList)
NSApplication *cocoaApplication = [QNSApplication sharedApplication];
qt_redirectNSApplicationSendEvent();
- if (__builtin_available(macOS 10.14, *)) {
- // Disable dark appearance, unless the Info.plist or environment requests that it should be enabled
- bool plistEnablesDarkAppearance = [[[NSBundle mainBundle] objectForInfoDictionaryKey:
- @"NSRequiresAquaSystemAppearance"] boolValue];
-
- bool hasEnvironmentRequiresAquaAppearance;
- int environmentRequiresAquaAppearance = qEnvironmentVariableIntValue(
- "QT_MAC_REQUIRES_AQUA_SYSTEM_APPEARANCE", &hasEnvironmentRequiresAquaAppearance);
- bool environmentEnablesDarkAppearance = hasEnvironmentRequiresAquaAppearance
- && environmentRequiresAquaAppearance == 0;
-
- if (!(plistEnablesDarkAppearance || environmentEnablesDarkAppearance))
- NSApp.appearance = [NSAppearance appearanceNamed:NSAppearanceNameAqua];
- }
-
if (qEnvironmentVariableIsEmpty("QT_MAC_DISABLE_FOREGROUND_APPLICATION_TRANSFORM")) {
// Applications launched from plain executables (without an app
// bundle) are "background" applications that does not take keybaord
diff --git a/src/plugins/styles/mac/qmacstyle_mac.mm b/src/plugins/styles/mac/qmacstyle_mac.mm
index 45da5fbd84..3405f01046 100644
--- a/src/plugins/styles/mac/qmacstyle_mac.mm
+++ b/src/plugins/styles/mac/qmacstyle_mac.mm
@@ -1880,20 +1880,46 @@ NSCell *QMacStylePrivate::cocoaCell(CocoaControl widget) const
return cell;
}
-void QMacStylePrivate::drawNSViewInRect(NSView *view, const QRectF &qtRect, QPainter *p,
+void QMacStylePrivate::drawNSViewInRect(NSView *view, const QRectF &rect, QPainter *p,
__attribute__((noescape)) DrawRectBlock drawRectBlock) const
{
QMacCGContext ctx(p);
setupNSGraphicsContext(ctx, YES);
- const CGRect rect = qtRect.toCGRect();
+ // FIXME: The rect that we get in is relative to the widget that we're drawing
+ // style on behalf of, and doesn't take into account the offset of that widget
+ // to the widget that owns the backingstore, which we are placing the native
+ // view into below. This means most of the views are placed in the upper left
+ // corner of backingStoreNSView, which does not map to where the actual widget
+ // is, and which may cause problems such as triggering a setNeedsDisplay of the
+ // backingStoreNSView for the wrong rect. We work around this by making the view
+ // layer-backed, which prevents triggering display of the backingStoreNSView, but
+ // but there may be other issues lurking here due to the wrong position. QTBUG-68023
+ view.wantsLayer = YES;
+
+ // FIXME: We are also setting the frame of the incoming view a lot at the call
+ // sites of this function, making it unclear who's actually responsible for
+ // maintaining the size and position of the view. In theory the call sites
+ // should ensure the _size_ of the view is correct, and then let this code
+ // take care of _positioning_ the view at the right place inside backingStoreNSView.
+ // For now we pass on the rect as is, to prevent any regressions until this
+ // can be investigated properly.
+ view.frame = rect.toCGRect();
[backingStoreNSView addSubview:view];
- view.frame = rect;
+
+ // FIXME: Based on the code below, this method isn't drawing an NSView into
+ // a rect, it's drawing _part of the NSView_, defined by the incoming clip
+ // or dirty rect, into the current graphics context. We're doing some manual
+ // translations at the call sites that would indicate that this relationship
+ // is a bit fuzzy.
+ const CGRect dirtyRect = rect.toCGRect();
+
if (drawRectBlock)
- drawRectBlock(ctx, rect);
+ drawRectBlock(ctx, dirtyRect);
else
- [view drawRect:rect];
+ [view drawRect:dirtyRect];
+
[view removeFromSuperviewWithoutNeedingDisplay];
restoreNSGraphicsContext(ctx);
diff --git a/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm b/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm
index 98ee90deb7..0b64b2a2bb 100644
--- a/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm
+++ b/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm
@@ -165,6 +165,11 @@ void QMacCocoaViewContainer::setCocoaView(NSView *view)
Q_ASSERT(window->handle());
[oldView release];
+
+ // The QWindow::destroy()) call above will explicitly hide this widget.
+ // Clear the hidden state here so it can be implicitly shown again.
+ setAttribute(Qt::WA_WState_Hidden, false);
+
}
QT_END_NAMESPACE
diff --git a/src/xml/dom/qdom.cpp b/src/xml/dom/qdom.cpp
index 17f87804e9..91796106a2 100644
--- a/src/xml/dom/qdom.cpp
+++ b/src/xml/dom/qdom.cpp
@@ -6666,8 +6666,6 @@ bool QDomDocument::setContent(const QString& text, bool namespaceProcessing, QSt
}
/*!
- \nonreentrant
-
This function parses the XML document from the byte array \a
data and sets it as the content of the document. It tries to
detect the encoding of the document as required by the XML