summaryrefslogtreecommitdiffstats
path: root/src/client/qwaylandintegration.cpp
diff options
context:
space:
mode:
authorGiulio Camuffo <giulio.camuffo@kdab.com>2016-10-10 16:26:24 +0200
committerGiulio Camuffo <giulio.camuffo@kdab.com>2016-11-03 08:33:00 +0000
commite05f6c01d2ac4b807c07a682927f75d70292595b (patch)
tree6de9d20cbd6fae789da9e6fb038da1e0e35de922 /src/client/qwaylandintegration.cpp
parent5f264935a42ed56f46b6d0a38f30700429396ac9 (diff)
Fix memory leaks
Several fields in QWaylandIntegration were never deleted, so use QScopedPointer to handle that. Also use QScopedPointer for all the heap allocated fields of the class. Change-Id: I4c33be4157a6e17abfa1610f84ef9a88afe5f38a Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@hawaiios.org> Reviewed-by: Johan Helsing <johan.helsing@qt.io>
Diffstat (limited to 'src/client/qwaylandintegration.cpp')
-rw-r--r--src/client/qwaylandintegration.cpp65
1 files changed, 28 insertions, 37 deletions
diff --git a/src/client/qwaylandintegration.cpp b/src/client/qwaylandintegration.cpp
index 48517fce1..3e2630610 100644
--- a/src/client/qwaylandintegration.cpp
+++ b/src/client/qwaylandintegration.cpp
@@ -119,7 +119,6 @@ public:
QWaylandIntegration::QWaylandIntegration()
: mClientBufferIntegration(0)
- , mShellIntegration(Q_NULLPTR)
, mInputDeviceIntegration(Q_NULLPTR)
, mFontDb(new QGenericUnixFontDatabase())
, mNativeInterface(new QWaylandNativeInterface(this))
@@ -131,16 +130,16 @@ QWaylandIntegration::QWaylandIntegration()
, mShellIntegrationInitialized(false)
{
initializeInputDeviceIntegration();
- mDisplay = new QWaylandDisplay(this);
- mClipboard = new QWaylandClipboard(mDisplay);
- mDrag = new QWaylandDrag(mDisplay);
+ mDisplay.reset(new QWaylandDisplay(this));
+ mClipboard.reset(new QWaylandClipboard(mDisplay.data()));
+ mDrag.reset(new QWaylandDrag(mDisplay.data()));
QString icStr = QPlatformInputContextFactory::requested();
if (!icStr.isNull()) {
mInputContext.reset(QPlatformInputContextFactory::create(icStr));
} else {
//try to use the input context using the wl_text_input interface
- QPlatformInputContext *ctx = new QWaylandInputContext(mDisplay);
+ QPlatformInputContext *ctx = new QWaylandInputContext(mDisplay.data());
mInputContext.reset(ctx);
//use the traditional way for on screen keyboards for now
@@ -153,18 +152,11 @@ QWaylandIntegration::QWaylandIntegration()
QWaylandIntegration::~QWaylandIntegration()
{
- delete mDrag;
- delete mClipboard;
-#ifndef QT_NO_ACCESSIBILITY
- delete mAccessibility;
-#endif
- delete mNativeInterface;
- delete mDisplay;
}
QPlatformNativeInterface * QWaylandIntegration::nativeInterface() const
{
- return mNativeInterface;
+ return mNativeInterface.data();
}
bool QWaylandIntegration::hasCapability(QPlatformIntegration::Capability cap) const
@@ -217,27 +209,27 @@ QAbstractEventDispatcher *QWaylandIntegration::createEventDispatcher() const
void QWaylandIntegration::initialize()
{
QAbstractEventDispatcher *dispatcher = QGuiApplicationPrivate::eventDispatcher;
- QObject::connect(dispatcher, SIGNAL(aboutToBlock()), mDisplay, SLOT(flushRequests()));
- QObject::connect(dispatcher, SIGNAL(awake()), mDisplay, SLOT(flushRequests()));
+ QObject::connect(dispatcher, SIGNAL(aboutToBlock()), mDisplay.data(), SLOT(flushRequests()));
+ QObject::connect(dispatcher, SIGNAL(awake()), mDisplay.data(), SLOT(flushRequests()));
int fd = wl_display_get_fd(mDisplay->wl_display());
- QSocketNotifier *sn = new QSocketNotifier(fd, QSocketNotifier::Read, mDisplay);
- QObject::connect(sn, SIGNAL(activated(int)), mDisplay, SLOT(flushRequests()));
+ QSocketNotifier *sn = new QSocketNotifier(fd, QSocketNotifier::Read, mDisplay.data());
+ QObject::connect(sn, SIGNAL(activated(int)), mDisplay.data(), SLOT(flushRequests()));
}
QPlatformFontDatabase *QWaylandIntegration::fontDatabase() const
{
- return mFontDb;
+ return mFontDb.data();
}
QPlatformClipboard *QWaylandIntegration::clipboard() const
{
- return mClipboard;
+ return mClipboard.data();
}
QPlatformDrag *QWaylandIntegration::drag() const
{
- return mDrag;
+ return mDrag.data();
}
QPlatformInputContext *QWaylandIntegration::inputContext() const
@@ -263,7 +255,7 @@ QVariant QWaylandIntegration::styleHint(StyleHint hint) const
#ifndef QT_NO_ACCESSIBILITY
QPlatformAccessibility *QWaylandIntegration::accessibility() const
{
- return mAccessibility;
+ return mAccessibility.data();
}
#endif
@@ -274,7 +266,7 @@ QPlatformServices *QWaylandIntegration::services() const
QWaylandDisplay *QWaylandIntegration::display() const
{
- return mDisplay;
+ return mDisplay.data();
}
QStringList QWaylandIntegration::themeNames() const
@@ -292,7 +284,7 @@ QWaylandClientBufferIntegration *QWaylandIntegration::clientBufferIntegration()
if (!mClientBufferIntegrationInitialized)
const_cast<QWaylandIntegration *>(this)->initializeClientBufferIntegration();
- return mClientBufferIntegration && mClientBufferIntegration->isValid() ? mClientBufferIntegration : 0;
+ return mClientBufferIntegration && mClientBufferIntegration->isValid() ? mClientBufferIntegration.data() : nullptr;
}
QWaylandServerBufferIntegration *QWaylandIntegration::serverBufferIntegration() const
@@ -300,7 +292,7 @@ QWaylandServerBufferIntegration *QWaylandIntegration::serverBufferIntegration()
if (!mServerBufferIntegrationInitialized)
const_cast<QWaylandIntegration *>(this)->initializeServerBufferIntegration();
- return mServerBufferIntegration;
+ return mServerBufferIntegration.data();
}
QWaylandShellIntegration *QWaylandIntegration::shellIntegration() const
@@ -308,7 +300,7 @@ QWaylandShellIntegration *QWaylandIntegration::shellIntegration() const
if (!mShellIntegrationInitialized)
const_cast<QWaylandIntegration *>(this)->initializeShellIntegration();
- return mShellIntegration;
+ return mShellIntegration.data();
}
void QWaylandIntegration::initializeClientBufferIntegration()
@@ -334,10 +326,10 @@ void QWaylandIntegration::initializeClientBufferIntegration()
QStringList keys = QWaylandClientBufferIntegrationFactory::keys();
if (keys.contains(targetKey)) {
- mClientBufferIntegration = QWaylandClientBufferIntegrationFactory::create(targetKey, QStringList());
+ mClientBufferIntegration.reset(QWaylandClientBufferIntegrationFactory::create(targetKey, QStringList()));
}
if (mClientBufferIntegration)
- mClientBufferIntegration->initialize(mDisplay);
+ mClientBufferIntegration->initialize(mDisplay.data());
else
qWarning("Failed to load client buffer integration: %s\n", qPrintable(targetKey));
}
@@ -364,10 +356,10 @@ void QWaylandIntegration::initializeServerBufferIntegration()
QStringList keys = QWaylandServerBufferIntegrationFactory::keys();
if (keys.contains(targetKey)) {
- mServerBufferIntegration = QWaylandServerBufferIntegrationFactory::create(targetKey, QStringList());
+ mServerBufferIntegration.reset(QWaylandServerBufferIntegrationFactory::create(targetKey, QStringList()));
}
if (mServerBufferIntegration)
- mServerBufferIntegration->initialize(mDisplay);
+ mServerBufferIntegration->initialize(mDisplay.data());
else
qWarning("Failed to load server buffer integration %s\n", qPrintable(targetKey));
}
@@ -383,7 +375,7 @@ void QWaylandIntegration::initializeShellIntegration()
QStringList keys = QWaylandShellIntegrationFactory::keys();
if (keys.contains(targetKey)) {
qDebug("Using the '%s' shell integration", qPrintable(targetKey));
- mShellIntegration = QWaylandShellIntegrationFactory::create(targetKey, QStringList());
+ mShellIntegration.reset(QWaylandShellIntegrationFactory::create(targetKey, QStringList()));
}
} else {
QStringList preferredShells;
@@ -393,15 +385,14 @@ void QWaylandIntegration::initializeShellIntegration()
Q_FOREACH (QString preferredShell, preferredShells) {
if (mDisplay->hasRegistryGlobal(preferredShell)) {
- mShellIntegration = createShellIntegration(preferredShell);
+ mShellIntegration.reset(createShellIntegration(preferredShell));
break;
}
}
}
- if (!mShellIntegration || !mShellIntegration->initialize(mDisplay)) {
- delete mShellIntegration;
- mShellIntegration = Q_NULLPTR;
+ if (!mShellIntegration || !mShellIntegration->initialize(mDisplay.data())) {
+ mShellIntegration.reset();
qWarning("Failed to load shell integration %s", qPrintable(targetKey));
}
}
@@ -425,7 +416,7 @@ void QWaylandIntegration::initializeInputDeviceIntegration()
QStringList keys = QWaylandInputDeviceIntegrationFactory::keys();
if (keys.contains(targetKey)) {
- mInputDeviceIntegration = QWaylandInputDeviceIntegrationFactory::create(targetKey, QStringList());
+ mInputDeviceIntegration.reset(QWaylandInputDeviceIntegrationFactory::create(targetKey, QStringList()));
qDebug("Using the '%s' input device integration", qPrintable(targetKey));
} else {
qWarning("Wayland inputdevice integration '%s' not found, using default", qPrintable(targetKey));
@@ -435,9 +426,9 @@ void QWaylandIntegration::initializeInputDeviceIntegration()
QWaylandShellIntegration *QWaylandIntegration::createShellIntegration(const QString &interfaceName)
{
if (interfaceName == QLatin1Literal("wl_shell")) {
- return new QWaylandWlShellIntegration(mDisplay);
+ return new QWaylandWlShellIntegration(mDisplay.data());
} else if (interfaceName == QLatin1Literal("xdg_shell")) {
- return new QWaylandXdgShellIntegration(mDisplay);
+ return new QWaylandXdgShellIntegration(mDisplay.data());
} else {
return Q_NULLPTR;
}