summaryrefslogtreecommitdiffstats
path: root/src/platformsupport
diff options
context:
space:
mode:
Diffstat (limited to 'src/platformsupport')
-rw-r--r--src/platformsupport/clipboard/qmacmime.mm14
-rw-r--r--src/platformsupport/eglconvenience/qeglplatformintegration_p.h2
-rw-r--r--src/platformsupport/fbconvenience/qfbbackingstore.cpp25
-rw-r--r--src/platformsupport/fbconvenience/qfbbackingstore_p.h10
-rw-r--r--src/platformsupport/fbconvenience/qfbscreen.cpp35
-rw-r--r--src/platformsupport/fbconvenience/qfbscreen_p.h3
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp76
-rw-r--r--src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm5
-rw-r--r--src/platformsupport/input/evdevtouch/qevdevtouch.cpp8
-rw-r--r--src/platformsupport/linuxaccessibility/atspiadaptor.cpp4
-rw-r--r--src/platformsupport/linuxaccessibility/linuxaccessibility.pri1
11 files changed, 129 insertions, 54 deletions
diff --git a/src/platformsupport/clipboard/qmacmime.mm b/src/platformsupport/clipboard/qmacmime.mm
index 6fcd19e07b..44580b017c 100644
--- a/src/platformsupport/clipboard/qmacmime.mm
+++ b/src/platformsupport/clipboard/qmacmime.mm
@@ -611,9 +611,21 @@ QVariant QMacPasteboardMimeFileUri::convertToMime(const QString &mime, QList<QBy
return QVariant();
QList<QVariant> ret;
for (int i = 0; i < data.size(); ++i) {
- QUrl url = QUrl::fromEncoded(data.at(i));
+ const QByteArray &a = data.at(i);
+ NSString *urlString = [[[NSString alloc] initWithBytesNoCopy:(void *)a.data() length:a.size()
+ encoding:NSUTF8StringEncoding freeWhenDone:NO] autorelease];
+ NSURL *nsurl = [NSURL URLWithString:urlString];
+ QUrl url;
+ // OS X 10.10 sends file references instead of file paths
+ if ([nsurl isFileReferenceURL]) {
+ url = QUrl::fromNSURL([nsurl filePathURL]);
+ } else {
+ url = QUrl::fromNSURL(nsurl);
+ }
+
if (url.host().toLower() == QLatin1String("localhost"))
url.setHost(QString());
+
url.setPath(url.path().normalized(QString::NormalizationForm_C));
ret.append(url);
}
diff --git a/src/platformsupport/eglconvenience/qeglplatformintegration_p.h b/src/platformsupport/eglconvenience/qeglplatformintegration_p.h
index 7f0037db92..80e6fae47a 100644
--- a/src/platformsupport/eglconvenience/qeglplatformintegration_p.h
+++ b/src/platformsupport/eglconvenience/qeglplatformintegration_p.h
@@ -45,9 +45,9 @@
// We mean it.
//
+#include <QtCore/QVariant>
#include <qpa/qplatformintegration.h>
#include <qpa/qplatformnativeinterface.h>
-#include <QtCore/QVariant>
#include <EGL/egl.h>
QT_BEGIN_NAMESPACE
diff --git a/src/platformsupport/fbconvenience/qfbbackingstore.cpp b/src/platformsupport/fbconvenience/qfbbackingstore.cpp
index 0fa23ebe02..733235ff42 100644
--- a/src/platformsupport/fbconvenience/qfbbackingstore.cpp
+++ b/src/platformsupport/fbconvenience/qfbbackingstore.cpp
@@ -69,5 +69,30 @@ void QFbBackingStore::resize(const QSize &size, const QRegion &staticContents)
mImage = QImage(size, window()->screen()->handle()->format());
}
+const QImage QFbBackingStore::image()
+{
+ return mImage;
+}
+
+void QFbBackingStore::lock()
+{
+ mImageMutex.lock();
+}
+
+void QFbBackingStore::unlock()
+{
+ mImageMutex.unlock();
+}
+
+void QFbBackingStore::beginPaint(const QRegion &)
+{
+ lock();
+}
+
+void QFbBackingStore::endPaint()
+{
+ unlock();
+}
+
QT_END_NAMESPACE
diff --git a/src/platformsupport/fbconvenience/qfbbackingstore_p.h b/src/platformsupport/fbconvenience/qfbbackingstore_p.h
index cf9e5088ad..be4cdfbecd 100644
--- a/src/platformsupport/fbconvenience/qfbbackingstore_p.h
+++ b/src/platformsupport/fbconvenience/qfbbackingstore_p.h
@@ -46,6 +46,7 @@
//
#include <qpa/qplatformbackingstore.h>
+#include <QtCore/QMutex>
QT_BEGIN_NAMESPACE
@@ -64,12 +65,19 @@ public:
virtual void resize(const QSize &size, const QRegion &region) Q_DECL_OVERRIDE;
- const QImage image() { return mImage; }
+ const QImage image();
+
+ void lock();
+ void unlock();
+
+ void beginPaint(const QRegion &);
+ void endPaint();
protected:
friend class QFbWindow;
QImage mImage;
+ QMutex mImageMutex;
};
QT_END_NAMESPACE
diff --git a/src/platformsupport/fbconvenience/qfbscreen.cpp b/src/platformsupport/fbconvenience/qfbscreen.cpp
index aa35825be0..13341344d8 100644
--- a/src/platformsupport/fbconvenience/qfbscreen.cpp
+++ b/src/platformsupport/fbconvenience/qfbscreen.cpp
@@ -37,11 +37,15 @@
#include "qfbbackingstore_p.h"
#include <QtGui/QPainter>
+#include <QtCore/QCoreApplication>
#include <qpa/qwindowsysteminterface.h>
+#include <QtCore/QDebug>
+#include <QtCore/QElapsedTimer>
+
QT_BEGIN_NAMESPACE
-QFbScreen::QFbScreen() : mCursor(0), mGeometry(), mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0), mCompositePainter(0), mIsUpToDate(false)
+QFbScreen::QFbScreen() : mUpdatePending(false), mCursor(0), mGeometry(), mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0), mCompositePainter(0), mIsUpToDate(false)
{
}
@@ -54,10 +58,17 @@ QFbScreen::~QFbScreen()
void QFbScreen::initializeCompositor()
{
mScreenImage = new QImage(mGeometry.size(), mFormat);
+ scheduleUpdate();
+}
- mRedrawTimer.setSingleShot(true);
- mRedrawTimer.setInterval(0);
- connect(&mRedrawTimer, SIGNAL(timeout()), this, SLOT(doRedraw()));
+bool QFbScreen::event(QEvent *event)
+{
+ if (event->type() == QEvent::UpdateRequest) {
+ doRedraw();
+ mUpdatePending = false;
+ return true;
+ }
+ return QObject::event(event);
}
void QFbScreen::addWindow(QFbWindow *window)
@@ -146,8 +157,10 @@ void QFbScreen::setDirty(const QRect &rect)
void QFbScreen::scheduleUpdate()
{
- if (!mRedrawTimer.isActive())
- mRedrawTimer.start();
+ if (!mUpdatePending) {
+ mUpdatePending = true;
+ QCoreApplication::postEvent(this, new QEvent(QEvent::UpdateRequest));
+ }
}
void QFbScreen::setPhysicalSize(const QSize &size)
@@ -246,12 +259,19 @@ QRegion QFbScreen::doRedraw()
continue;
// if (mWindowStack[layerIndex]->isMinimized())
// continue;
+
QRect windowRect = mWindowStack[layerIndex]->geometry().translated(-screenOffset);
QRect windowIntersect = rect.translated(-windowRect.left(),
-windowRect.top());
+
+
QFbBackingStore *backingStore = mWindowStack[layerIndex]->backingStore();
- if (backingStore)
+
+ if (backingStore) {
+ backingStore->lock();
mCompositePainter->drawImage(rect, backingStore->image(), windowIntersect);
+ backingStore->unlock();
+ }
if (firstLayer) {
firstLayer = false;
}
@@ -272,7 +292,6 @@ QRegion QFbScreen::doRedraw()
// qDebug() << "QFbScreen::doRedraw" << mWindowStack.size() << mScreenImage->size() << touchedRegion;
-
return touchedRegion;
}
diff --git a/src/platformsupport/fbconvenience/qfbscreen_p.h b/src/platformsupport/fbconvenience/qfbscreen_p.h
index b6e50dc786..55aacab9bc 100644
--- a/src/platformsupport/fbconvenience/qfbscreen_p.h
+++ b/src/platformsupport/fbconvenience/qfbscreen_p.h
@@ -94,10 +94,11 @@ protected slots:
protected:
void initializeCompositor();
+ bool event(QEvent *event);
QList<QFbWindow *> mWindowStack;
QRegion mRepaintRegion;
- QTimer mRedrawTimer;
+ bool mUpdatePending;
QFbCursor *mCursor;
QRect mGeometry;
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
index f2e2ded3f5..d001b71a53 100644
--- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
+++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
@@ -535,6 +535,23 @@ QFontEngine::HintStyle defaultHintStyleFromMatch(QFont::HintingPreference hintin
return QFontEngine::HintNone;
}
+ int hint_style = 0;
+ if (FcPatternGetInteger (match, FC_HINT_STYLE, 0, &hint_style) == FcResultMatch) {
+ switch (hint_style) {
+ case FC_HINT_NONE:
+ return QFontEngine::HintNone;
+ case FC_HINT_SLIGHT:
+ return QFontEngine::HintLight;
+ case FC_HINT_MEDIUM:
+ return QFontEngine::HintMedium;
+ case FC_HINT_FULL:
+ return QFontEngine::HintFull;
+ default:
+ Q_UNREACHABLE();
+ break;
+ }
+ }
+
if (useXftConf) {
void *hintStyleResource =
QGuiApplication::platformNativeInterface()->nativeResourceForScreen("hintstyle",
@@ -544,27 +561,31 @@ QFontEngine::HintStyle defaultHintStyleFromMatch(QFont::HintingPreference hintin
return QFontEngine::HintStyle(hintStyle - 1);
}
- int hint_style = 0;
- if (FcPatternGetInteger (match, FC_HINT_STYLE, 0, &hint_style) == FcResultNoMatch)
- hint_style = FC_HINT_FULL;
- switch (hint_style) {
- case FC_HINT_NONE:
- return QFontEngine::HintNone;
- case FC_HINT_SLIGHT:
- return QFontEngine::HintLight;
- case FC_HINT_MEDIUM:
- return QFontEngine::HintMedium;
- case FC_HINT_FULL:
- return QFontEngine::HintFull;
- default:
- Q_UNREACHABLE();
- break;
- }
return QFontEngine::HintFull;
}
QFontEngine::SubpixelAntialiasingType subpixelTypeFromMatch(FcPattern *match, bool useXftConf)
{
+ int subpixel = FC_RGBA_UNKNOWN;
+ if (FcPatternGetInteger(match, FC_RGBA, 0, &subpixel) == FcResultMatch) {
+ switch (subpixel) {
+ case FC_RGBA_UNKNOWN:
+ case FC_RGBA_NONE:
+ return QFontEngine::Subpixel_None;
+ case FC_RGBA_RGB:
+ return QFontEngine::Subpixel_RGB;
+ case FC_RGBA_BGR:
+ return QFontEngine::Subpixel_BGR;
+ case FC_RGBA_VRGB:
+ return QFontEngine::Subpixel_VRGB;
+ case FC_RGBA_VBGR:
+ return QFontEngine::Subpixel_VBGR;
+ default:
+ Q_UNREACHABLE();
+ break;
+ }
+ }
+
if (useXftConf) {
void *subpixelTypeResource =
QGuiApplication::platformNativeInterface()->nativeResourceForScreen("subpixeltype",
@@ -574,25 +595,6 @@ QFontEngine::SubpixelAntialiasingType subpixelTypeFromMatch(FcPattern *match, bo
return QFontEngine::SubpixelAntialiasingType(subpixelType - 1);
}
- int subpixel = FC_RGBA_UNKNOWN;
- FcPatternGetInteger(match, FC_RGBA, 0, &subpixel);
-
- switch (subpixel) {
- case FC_RGBA_UNKNOWN:
- case FC_RGBA_NONE:
- return QFontEngine::Subpixel_None;
- case FC_RGBA_RGB:
- return QFontEngine::Subpixel_RGB;
- case FC_RGBA_BGR:
- return QFontEngine::Subpixel_BGR;
- case FC_RGBA_VRGB:
- return QFontEngine::Subpixel_VRGB;
- case FC_RGBA_VBGR:
- return QFontEngine::Subpixel_VBGR;
- default:
- Q_UNREACHABLE();
- break;
- }
return QFontEngine::Subpixel_None;
}
} // namespace
@@ -832,10 +834,8 @@ void QFontconfigDatabase::setupFontEngine(QFontEngineFT *engine, const QFontDef
QGuiApplication::platformNativeInterface()->nativeResourceForScreen("antialiasingEnabled",
QGuiApplication::primaryScreen());
int antialiasingEnabled = int(reinterpret_cast<qintptr>(antialiasResource));
- if (antialiasingEnabled > 0) {
+ if (antialiasingEnabled > 0)
antialias = antialiasingEnabled - 1;
- forcedAntialiasSetting = true;
- }
}
QFontEngine::GlyphFormat format;
diff --git a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
index 4244719b34..1cc7d90fc7 100644
--- a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
+++ b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
@@ -354,6 +354,8 @@ void QCoreTextFontDatabase::releaseHandle(void *handle)
CFRelease(CTFontDescriptorRef(handle));
}
+extern CGAffineTransform qt_transform_from_fontdef(const QFontDef &fontDef);
+
QFontEngine *QCoreTextFontDatabase::fontEngine(const QFontDef &f, void *usrPtr)
{
qreal scaledPointSize = f.pixelSize;
@@ -368,7 +370,8 @@ QFontEngine *QCoreTextFontDatabase::fontEngine(const QFontDef &f, void *usrPtr)
scaledPointSize = f.pointSize;
CTFontDescriptorRef descriptor = (CTFontDescriptorRef) usrPtr;
- CTFontRef font = CTFontCreateWithFontDescriptor(descriptor, scaledPointSize, NULL);
+ CGAffineTransform matrix = qt_transform_from_fontdef(f);
+ CTFontRef font = CTFontCreateWithFontDescriptor(descriptor, scaledPointSize, &matrix);
if (font) {
QFontEngine *engine = new QCoreTextFontEngine(font, f);
engine->fontDef = f;
diff --git a/src/platformsupport/input/evdevtouch/qevdevtouch.cpp b/src/platformsupport/input/evdevtouch/qevdevtouch.cpp
index dd831c9e82..771a1da549 100644
--- a/src/platformsupport/input/evdevtouch/qevdevtouch.cpp
+++ b/src/platformsupport/input/evdevtouch/qevdevtouch.cpp
@@ -39,6 +39,8 @@
#include <QLoggingCategory>
#include <QtCore/private/qcore_unix_p.h>
#include <QtPlatformSupport/private/qdevicediscovery_p.h>
+#include <QtGui/private/qguiapplication_p.h>
+#include <QtGui/private/qinputdevicemanager_p_p.h>
#include <linux/input.h>
#if !defined(QT_NO_MTDEV)
@@ -146,6 +148,12 @@ void QEvdevTouchScreenData::registerDevice()
m_device->setCapabilities(m_device->capabilities() | QTouchDevice::Pressure);
QWindowSystemInterface::registerTouchDevice(m_device);
+
+ // No monitoring of added/removed devices is done here, so for now just
+ // increase the number of touch devices.
+ QInputDeviceManager *imgr = QGuiApplicationPrivate::inputDeviceManager();
+ QInputDeviceManagerPrivate::get(imgr)->setDeviceCount(QInputDeviceManager::DeviceTypeTouch,
+ imgr->deviceCount(QInputDeviceManager::DeviceTypeTouch) + 1);
}
#define LONG_BITS (sizeof(long) << 3)
diff --git a/src/platformsupport/linuxaccessibility/atspiadaptor.cpp b/src/platformsupport/linuxaccessibility/atspiadaptor.cpp
index 7cbda0c745..b87d1c06b9 100644
--- a/src/platformsupport/linuxaccessibility/atspiadaptor.cpp
+++ b/src/platformsupport/linuxaccessibility/atspiadaptor.cpp
@@ -1048,6 +1048,8 @@ void AtSpiAdaptor::notify(QAccessibleEvent *event)
}
break;
}
+ case QAccessible::SelectionAdd:
+ case QAccessible::SelectionRemove:
case QAccessible::Selection: {
QAccessibleInterface * iface = event->accessibleInterface();
if (!iface) {
@@ -1105,7 +1107,6 @@ void AtSpiAdaptor::notify(QAccessibleEvent *event)
case QAccessible::ParentChanged:
case QAccessible::DialogStart:
case QAccessible::DialogEnd:
- case QAccessible::SelectionRemove:
case QAccessible::PopupMenuStart:
case QAccessible::PopupMenuEnd:
case QAccessible::SoundPlayed:
@@ -1147,7 +1148,6 @@ void AtSpiAdaptor::notify(QAccessibleEvent *event)
case QAccessible::TextAttributeChanged:
case QAccessible::TextColumnChanged:
case QAccessible::VisibleDataChanged:
- case QAccessible::SelectionAdd:
case QAccessible::SelectionWithin:
case QAccessible::LocationChanged:
case QAccessible::HelpChanged:
diff --git a/src/platformsupport/linuxaccessibility/linuxaccessibility.pri b/src/platformsupport/linuxaccessibility/linuxaccessibility.pri
index 1d51d2876c..1b65fb1cad 100644
--- a/src/platformsupport/linuxaccessibility/linuxaccessibility.pri
+++ b/src/platformsupport/linuxaccessibility/linuxaccessibility.pri
@@ -2,7 +2,6 @@ contains(QT_CONFIG, accessibility-atspi-bridge) {
QT_FOR_PRIVATE += dbus
include(../../3rdparty/atspi2/atspi2.pri)
- include(../accessibility/accessibility.pri)
INCLUDEPATH += $$PWD