From f91c39fe3aab8fae361559216494b283893a54fa Mon Sep 17 00:00:00 2001 From: Jan Arne Petersen Date: Fri, 27 Jan 2012 13:07:48 +0100 Subject: [PATCH] Use per session socket to connect to maliit server In newer versions of maliit a per session abstract socket for communication between maliit server and input contexts is used. The address is published over the D-Bus session bus as address property in the org.maliit.Server.Address interface of the /org/maliit/server/address object at the org.maliit.server service. Fallback to old socket when org.maliit.server service is not available. Task-number: QTBUG-22982 Change-Id: I1b2cdd0c804d3d625e18b4958dd60008ea289d91 Reviewed-by: Simon Hausmann --- .../platforminputcontexts/meego/meego.pro | 2 + .../meego/qmeegoplatforminputcontext.cpp | 16 +++- .../meego/serveraddressproxy.cpp | 56 +++++++++++++ .../meego/serveraddressproxy.h | 84 +++++++++++++++++++ 4 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 src/plugins/platforminputcontexts/meego/serveraddressproxy.cpp create mode 100644 src/plugins/platforminputcontexts/meego/serveraddressproxy.h diff --git a/src/plugins/platforminputcontexts/meego/meego.pro b/src/plugins/platforminputcontexts/meego/meego.pro index fad256e3dc..a9f1139717 100644 --- a/src/plugins/platforminputcontexts/meego/meego.pro +++ b/src/plugins/platforminputcontexts/meego/meego.pro @@ -6,11 +6,13 @@ QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforminputcontexts QT += dbus platformsupport-private SOURCES += $$PWD/qmeegoplatforminputcontext.cpp \ $$PWD/serverproxy.cpp \ + $$PWD/serveraddressproxy.cpp \ $$PWD/contextadaptor.cpp \ $$PWD/main.cpp HEADERS += $$PWD/qmeegoplatforminputcontext.h \ $$PWD/serverproxy.h \ + $$PWD/serveraddressproxy.h \ $$PWD/contextadaptor.h target.path += $$[QT_INSTALL_PLUGINS]/platforminputcontexts diff --git a/src/plugins/platforminputcontexts/meego/qmeegoplatforminputcontext.cpp b/src/plugins/platforminputcontexts/meego/qmeegoplatforminputcontext.cpp index 607dad6b94..9b5da9d6d7 100644 --- a/src/plugins/platforminputcontexts/meego/qmeegoplatforminputcontext.cpp +++ b/src/plugins/platforminputcontexts/meego/qmeegoplatforminputcontext.cpp @@ -47,6 +47,7 @@ #include #include +#include "serveraddressproxy.h" #include "serverproxy.h" #include "contextadaptor.h" @@ -126,6 +127,19 @@ static TextContentType contentTypeFromHints(Qt::InputMethodHints hints) return type; } +static QString maliitServerAddress() +{ + org::maliit::Server::Address serverAddress(QStringLiteral("org.maliit.server"), QStringLiteral("/org/maliit/server/address"), QDBusConnection::sessionBus()); + + QString address(serverAddress.address()); + + // Fallback to old socket when org.maliit.server service is not available + if (address.isEmpty()) + return QStringLiteral("unix:path=/tmp/meego-im-uiserver/imserver_dbus"); + + return address; +} + class QMeeGoPlatformInputContextPrivate { public: @@ -517,7 +531,7 @@ bool QMeeGoPlatformInputContext::isInputPanelVisible() const } QMeeGoPlatformInputContextPrivate::QMeeGoPlatformInputContextPrivate(QMeeGoPlatformInputContext* qq) - : connection(QDBusConnection::connectToPeer(QStringLiteral("unix:path=/tmp/meego-im-uiserver/imserver_dbus"), QLatin1String("MeeGoIMProxy"))) + : connection(QDBusConnection::connectToPeer(maliitServerAddress(), QLatin1String("MeeGoIMProxy"))) , server(0) , adaptor(0) , visibility(InputPanelHidden) diff --git a/src/plugins/platforminputcontexts/meego/serveraddressproxy.cpp b/src/plugins/platforminputcontexts/meego/serveraddressproxy.cpp new file mode 100644 index 0000000000..fb34d3b0c1 --- /dev/null +++ b/src/plugins/platforminputcontexts/meego/serveraddressproxy.cpp @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: http://www.qt-project.org/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "serveraddressproxy.h" + +/* + * Implementation of interface class OrgMaliitServerAddressInterface + */ + +OrgMaliitServerAddressInterface::OrgMaliitServerAddressInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) + : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) +{ +} + +OrgMaliitServerAddressInterface::~OrgMaliitServerAddressInterface() +{ +} + diff --git a/src/plugins/platforminputcontexts/meego/serveraddressproxy.h b/src/plugins/platforminputcontexts/meego/serveraddressproxy.h new file mode 100644 index 0000000000..1e52064157 --- /dev/null +++ b/src/plugins/platforminputcontexts/meego/serveraddressproxy.h @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: http://www.qt-project.org/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SERVERADDRESSPROXY_H +#define SERVERADDRESSPROXY_H + +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Proxy class for interface org.maliit.Server.Address + */ +class OrgMaliitServerAddressInterface: public QDBusAbstractInterface +{ + Q_OBJECT +public: + static inline const char *staticInterfaceName() + { return "org.maliit.Server.Address"; } + +public: + OrgMaliitServerAddressInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0); + + ~OrgMaliitServerAddressInterface(); + + Q_PROPERTY(QString address READ address) + inline QString address() const + { return qvariant_cast< QString >(property("address")); } + +public Q_SLOTS: // METHODS +Q_SIGNALS: // SIGNALS +}; + +namespace org { + namespace maliit { + namespace Server { + typedef ::OrgMaliitServerAddressInterface Address; + } + } +} +#endif