From eaee2bd0d048367f6bd331fdb4a177004848d77e Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Wed, 5 Feb 2014 11:44:42 +0100 Subject: [PATCH] Accessibility: Use factory function instead of plugin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This simplifies deployment and makes instantiating accessible interfaces faster since no plugin needs to be loaded. [ChangeLog][QtWidgets] Accessibility for widgets is now included in the widget library instead of being a separate plugin. For static builds this means that libqtaccessiblewidgets is no longer required. Task-number: QTBUG-32888 Change-Id: Ie7347898868fd67c1fc568f0d251cbd2ef71e041 Reviewed-by: Jan Arve Sæther --- src/plugins/accessible/accessible.pro | 5 -- src/plugins/accessible/widgets/widgets.json | 54 ------------------- src/plugins/plugins.pro | 1 - src/widgets/accessible/accessible.pri | 21 +++++++- .../accessible}/complexwidgets.cpp | 2 +- .../accessible}/complexwidgets.h | 0 .../accessible}/itemviews.cpp | 2 +- .../accessible}/itemviews.h | 0 .../accessible}/qaccessiblemenu.cpp | 4 +- .../accessible}/qaccessiblemenu.h | 0 src/widgets/accessible/qaccessiblewidget.cpp | 4 +- .../accessible/qaccessiblewidgetfactory.cpp} | 23 +------- .../accessible/qaccessiblewidgetfactory_p.h | 53 ++++++++++++++++++ .../accessible}/qaccessiblewidgets.cpp | 3 +- .../accessible}/qaccessiblewidgets.h | 0 .../accessible}/rangecontrols.cpp | 2 +- .../accessible}/rangecontrols.h | 0 .../accessible}/simplewidgets.cpp | 4 +- .../accessible}/simplewidgets.h | 0 .../accessible}/widgets.pro | 0 src/widgets/kernel/qapplication.cpp | 6 +++ src/widgets/widgets.pro | 3 -- 22 files changed, 89 insertions(+), 98 deletions(-) delete mode 100644 src/plugins/accessible/accessible.pro delete mode 100644 src/plugins/accessible/widgets/widgets.json rename src/{plugins/accessible/widgets => widgets/accessible}/complexwidgets.cpp (99%) rename src/{plugins/accessible/widgets => widgets/accessible}/complexwidgets.h (100%) rename src/{plugins/accessible/widgets => widgets/accessible}/itemviews.cpp (99%) rename src/{plugins/accessible/widgets => widgets/accessible}/itemviews.h (100%) rename src/{plugins/accessible/widgets => widgets/accessible}/qaccessiblemenu.cpp (98%) rename src/{plugins/accessible/widgets => widgets/accessible}/qaccessiblemenu.h (100%) rename src/{plugins/accessible/widgets/main.cpp => widgets/accessible/qaccessiblewidgetfactory.cpp} (95%) create mode 100644 src/widgets/accessible/qaccessiblewidgetfactory_p.h rename src/{plugins/accessible/widgets => widgets/accessible}/qaccessiblewidgets.cpp (99%) rename src/{plugins/accessible/widgets => widgets/accessible}/qaccessiblewidgets.h (100%) rename src/{plugins/accessible/widgets => widgets/accessible}/rangecontrols.cpp (99%) rename src/{plugins/accessible/widgets => widgets/accessible}/rangecontrols.h (100%) rename src/{plugins/accessible/widgets => widgets/accessible}/simplewidgets.cpp (99%) rename src/{plugins/accessible/widgets => widgets/accessible}/simplewidgets.h (100%) rename src/{plugins/accessible/widgets => widgets/accessible}/widgets.pro (100%) diff --git a/src/plugins/accessible/accessible.pro b/src/plugins/accessible/accessible.pro deleted file mode 100644 index 26c7d3066d9..00000000000 --- a/src/plugins/accessible/accessible.pro +++ /dev/null @@ -1,5 +0,0 @@ -TEMPLATE = subdirs - -contains(QT_CONFIG, accessibility) { - SUBDIRS += widgets -} diff --git a/src/plugins/accessible/widgets/widgets.json b/src/plugins/accessible/widgets/widgets.json deleted file mode 100644 index 9ebcc89d35b..00000000000 --- a/src/plugins/accessible/widgets/widgets.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "Keys": [ - "QLineEdit", - "QComboBox", - "QAbstractSpinBox", - "QSpinBox", - "QDoubleSpinBox", - "QScrollBar", - "QSlider", - "QAbstractSlider", - "QToolButton", - "QCheckBox", - "QRadioButton", - "QPushButton", - "QAbstractButton", - "QDialog", - "QMessageBox", - "QMainWindow", - "QLabel", - "QLCDNumber", - "QGroupBox", - "QStatusBar", - "QProgressBar", - "QPlainTextEdit", - "QMenuBar", - "QMenu", - "QTabBar", - "QToolBar", - "QSizeGrip", - "QListView", - "QTreeView", - "QTableView", - "QWidget", - "QSplitter", - "QSplitterHandle", - "QTextEdit", - "QTipLabel", - "QFrame", - "QStackedWidget", - "QToolBox", - "QMdiArea", - "QMdiSubWindow", - "QDialogButtonBox", - "QDial", - "QRubberBand", - "QTextBrowser", - "QAbstractScrollArea", - "QScrollArea", - "QCalendarWidget", - "QDockWidget", - "QDesktopScreenWidget", - "QWindowContainer" - ] -} diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro index 942db329ca3..d1cbff59c19 100644 --- a/src/plugins/plugins.pro +++ b/src/plugins/plugins.pro @@ -3,6 +3,5 @@ TEMPLATE = subdirs SUBDIRS *= sqldrivers !winrt:qtHaveModule(network): SUBDIRS += bearer qtHaveModule(gui): SUBDIRS *= imageformats platforms platforminputcontexts platformthemes generic -qtHaveModule(widgets): SUBDIRS += accessible !winrt:!wince*:qtHaveModule(widgets):SUBDIRS += printsupport diff --git a/src/widgets/accessible/accessible.pri b/src/widgets/accessible/accessible.pri index 9fb2f189507..bcdfbd639c4 100644 --- a/src/widgets/accessible/accessible.pri +++ b/src/widgets/accessible/accessible.pri @@ -1,6 +1,23 @@ # Qt accessibility module contains(QT_CONFIG, accessibility) { - HEADERS += accessible/qaccessiblewidget.h - SOURCES += accessible/qaccessiblewidget.cpp + HEADERS += \ + accessible/qaccessiblewidget.h \ + accessible/qaccessiblewidgetfactory_p.h \ + accessible/complexwidgets.h \ + accessible/itemviews.h \ + accessible/qaccessiblemenu.h \ + accessible/qaccessiblewidgets.h \ + accessible/rangecontrols.h \ + accessible/simplewidgets.h + + SOURCES += \ + accessible/qaccessiblewidget.cpp \ + accessible/qaccessiblewidgetfactory.cpp \ + accessible/complexwidgets.cpp \ + accessible/itemviews.cpp \ + accessible/qaccessiblemenu.cpp \ + accessible/qaccessiblewidgets.cpp \ + accessible/rangecontrols.cpp \ + accessible/simplewidgets.cpp } diff --git a/src/plugins/accessible/widgets/complexwidgets.cpp b/src/widgets/accessible/complexwidgets.cpp similarity index 99% rename from src/plugins/accessible/widgets/complexwidgets.cpp rename to src/widgets/accessible/complexwidgets.cpp index b1df6d816a8..5d76ecafbc2 100644 --- a/src/plugins/accessible/widgets/complexwidgets.cpp +++ b/src/widgets/accessible/complexwidgets.cpp @@ -66,7 +66,7 @@ QT_BEGIN_NAMESPACE -QString Q_GUI_EXPORT qt_accStripAmp(const QString &text); +QString qt_accStripAmp(const QString &text); #ifndef QT_NO_TABBAR /*! diff --git a/src/plugins/accessible/widgets/complexwidgets.h b/src/widgets/accessible/complexwidgets.h similarity index 100% rename from src/plugins/accessible/widgets/complexwidgets.h rename to src/widgets/accessible/complexwidgets.h diff --git a/src/plugins/accessible/widgets/itemviews.cpp b/src/widgets/accessible/itemviews.cpp similarity index 99% rename from src/plugins/accessible/widgets/itemviews.cpp rename to src/widgets/accessible/itemviews.cpp index 7d3668ee5a2..81736fc1c68 100644 --- a/src/plugins/accessible/widgets/itemviews.cpp +++ b/src/widgets/accessible/itemviews.cpp @@ -51,7 +51,7 @@ QT_BEGIN_NAMESPACE -QString Q_GUI_EXPORT qt_accStripAmp(const QString &text); +QString qt_accStripAmp(const QString &text); #ifndef QT_NO_ITEMVIEWS /* diff --git a/src/plugins/accessible/widgets/itemviews.h b/src/widgets/accessible/itemviews.h similarity index 100% rename from src/plugins/accessible/widgets/itemviews.h rename to src/widgets/accessible/itemviews.h diff --git a/src/plugins/accessible/widgets/qaccessiblemenu.cpp b/src/widgets/accessible/qaccessiblemenu.cpp similarity index 98% rename from src/plugins/accessible/widgets/qaccessiblemenu.cpp rename to src/widgets/accessible/qaccessiblemenu.cpp index 39ac3351312..a6877404eb3 100644 --- a/src/plugins/accessible/widgets/qaccessiblemenu.cpp +++ b/src/widgets/accessible/qaccessiblemenu.cpp @@ -52,8 +52,8 @@ QT_BEGIN_NAMESPACE #ifndef QT_NO_MENU -QString Q_GUI_EXPORT qt_accStripAmp(const QString &text); -QString Q_GUI_EXPORT qt_accHotKey(const QString &text); +QString qt_accStripAmp(const QString &text); +QString qt_accHotKey(const QString &text); QAccessibleInterface *getOrCreateMenu(QWidget *menu, QAction *action) { diff --git a/src/plugins/accessible/widgets/qaccessiblemenu.h b/src/widgets/accessible/qaccessiblemenu.h similarity index 100% rename from src/plugins/accessible/widgets/qaccessiblemenu.h rename to src/widgets/accessible/qaccessiblemenu.h diff --git a/src/widgets/accessible/qaccessiblewidget.cpp b/src/widgets/accessible/qaccessiblewidget.cpp index 4e5fade3f4d..8a2e38df7ec 100644 --- a/src/widgets/accessible/qaccessiblewidget.cpp +++ b/src/widgets/accessible/qaccessiblewidget.cpp @@ -134,7 +134,7 @@ static int qt_accAmpIndex(const QString &text) #endif } -QString Q_WIDGETS_EXPORT qt_accStripAmp(const QString &text) +QString qt_accStripAmp(const QString &text) { QString newText(text); int ampIndex = qt_accAmpIndex(newText); @@ -144,7 +144,7 @@ QString Q_WIDGETS_EXPORT qt_accStripAmp(const QString &text) return newText.replace(QLatin1String("&&"), QLatin1String("&")); } -QString Q_WIDGETS_EXPORT qt_accHotKey(const QString &text) +QString qt_accHotKey(const QString &text) { int ampIndex = qt_accAmpIndex(text); if (ampIndex != -1) diff --git a/src/plugins/accessible/widgets/main.cpp b/src/widgets/accessible/qaccessiblewidgetfactory.cpp similarity index 95% rename from src/plugins/accessible/widgets/main.cpp rename to src/widgets/accessible/qaccessiblewidgetfactory.cpp index 717c15edd19..a925dd27081 100644 --- a/src/plugins/accessible/widgets/main.cpp +++ b/src/widgets/accessible/qaccessiblewidgetfactory.cpp @@ -46,8 +46,6 @@ #include "complexwidgets.h" #include "itemviews.h" -#include -#include #include #include #include @@ -58,23 +56,7 @@ QT_BEGIN_NAMESPACE - -class AccessibleFactory : public QAccessiblePlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QAccessibleFactoryInterface" FILE "widgets.json") - -public: - AccessibleFactory(); - - QAccessibleInterface *create(const QString &classname, QObject *object); -}; - -AccessibleFactory::AccessibleFactory() -{ -} - -QAccessibleInterface *AccessibleFactory::create(const QString &classname, QObject *object) +QAccessibleInterface *qAccessibleFactory(const QString &classname, QObject *object) { QAccessibleInterface *iface = 0; if (!object || !object->isWidgetType()) @@ -254,9 +236,6 @@ QAccessibleInterface *AccessibleFactory::create(const QString &classname, QObjec return iface; } - QT_END_NAMESPACE -#include "main.moc" - #endif // QT_NO_ACCESSIBILITY diff --git a/src/widgets/accessible/qaccessiblewidgetfactory_p.h b/src/widgets/accessible/qaccessiblewidgetfactory_p.h new file mode 100644 index 00000000000..70ac4629500 --- /dev/null +++ b/src/widgets/accessible/qaccessiblewidgetfactory_p.h @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtWidgets module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, 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, Digia gives you certain additional +** rights. These rights are described in the Digia 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. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#ifndef QACCESSIBLEWIDGETFACTORY_H +#define QACCESSIBLEWIDGETFACTORY_H + +QT_BEGIN_NAMESPACE + +QAccessibleInterface *qAccessibleFactory(const QString &classname, QObject *object); + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/accessible/widgets/qaccessiblewidgets.cpp b/src/widgets/accessible/qaccessiblewidgets.cpp similarity index 99% rename from src/plugins/accessible/widgets/qaccessiblewidgets.cpp rename to src/widgets/accessible/qaccessiblewidgets.cpp index 71d22eabc49..fa976ea94d2 100644 --- a/src/plugins/accessible/widgets/qaccessiblewidgets.cpp +++ b/src/widgets/accessible/qaccessiblewidgets.cpp @@ -72,8 +72,7 @@ QT_BEGIN_NAMESPACE -QString Q_GUI_EXPORT qt_accStripAmp(const QString &text); -QString Q_GUI_EXPORT qt_accHotKey(const QString &text); +QString qt_accStripAmp(const QString &text); QList childWidgets(const QWidget *widget, bool includeTopLevel) { diff --git a/src/plugins/accessible/widgets/qaccessiblewidgets.h b/src/widgets/accessible/qaccessiblewidgets.h similarity index 100% rename from src/plugins/accessible/widgets/qaccessiblewidgets.h rename to src/widgets/accessible/qaccessiblewidgets.h diff --git a/src/plugins/accessible/widgets/rangecontrols.cpp b/src/widgets/accessible/rangecontrols.cpp similarity index 99% rename from src/plugins/accessible/widgets/rangecontrols.cpp rename to src/widgets/accessible/rangecontrols.cpp index f2aa5522e87..d2917e535cf 100644 --- a/src/plugins/accessible/widgets/rangecontrols.cpp +++ b/src/widgets/accessible/rangecontrols.cpp @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE #ifndef QT_NO_ACCESSIBILITY -extern QString Q_GUI_EXPORT qt_accStripAmp(const QString &text); +QString qt_accStripAmp(const QString &text); #ifndef QT_NO_SCROLLBAR extern QStyleOptionSlider Q_GUI_EXPORT qt_qscrollbarStyleOption(QScrollBar *scrollBar); #endif diff --git a/src/plugins/accessible/widgets/rangecontrols.h b/src/widgets/accessible/rangecontrols.h similarity index 100% rename from src/plugins/accessible/widgets/rangecontrols.h rename to src/widgets/accessible/rangecontrols.h diff --git a/src/plugins/accessible/widgets/simplewidgets.cpp b/src/widgets/accessible/simplewidgets.cpp similarity index 99% rename from src/plugins/accessible/widgets/simplewidgets.cpp rename to src/widgets/accessible/simplewidgets.cpp index 893be2df043..b729e66d3cd 100644 --- a/src/plugins/accessible/widgets/simplewidgets.cpp +++ b/src/widgets/accessible/simplewidgets.cpp @@ -71,8 +71,8 @@ QT_BEGIN_NAMESPACE extern QList childWidgets(const QWidget *widget, bool includeTopLevel = false); -QString Q_GUI_EXPORT qt_accStripAmp(const QString &text); -QString Q_GUI_EXPORT qt_accHotKey(const QString &text); +QString qt_accStripAmp(const QString &text); +QString qt_accHotKey(const QString &text); /*! \class QAccessibleButton diff --git a/src/plugins/accessible/widgets/simplewidgets.h b/src/widgets/accessible/simplewidgets.h similarity index 100% rename from src/plugins/accessible/widgets/simplewidgets.h rename to src/widgets/accessible/simplewidgets.h diff --git a/src/plugins/accessible/widgets/widgets.pro b/src/widgets/accessible/widgets.pro similarity index 100% rename from src/plugins/accessible/widgets/widgets.pro rename to src/widgets/accessible/widgets.pro diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index 9e221c1bf41..c053fdfb229 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -77,6 +77,7 @@ #endif #include "private/qkeymapper_p.h" +#include "private/qaccessiblewidgetfactory_p.h" #include #include @@ -557,6 +558,11 @@ void QApplicationPrivate::construct() qt_gui_eval_init(application_type); #endif +#ifndef QT_NO_ACCESSIBILITY + // factory for accessible interfaces for widgets shipped with Qt + QAccessible::installFactory(&qAccessibleFactory); +#endif + #ifndef QT_NO_LIBRARY if(load_testability) { QLibrary testLib(QLatin1String("qttestability")); diff --git a/src/widgets/widgets.pro b/src/widgets/widgets.pro index 0b289c75ae1..c2cf4b7dfe0 100644 --- a/src/widgets/widgets.pro +++ b/src/widgets/widgets.pro @@ -8,9 +8,6 @@ DEFINES += QT_NO_USING_NAMESPACE win32-msvc*|win32-icc:QMAKE_LFLAGS += /BASE:0x65000000 irix-cc*:QMAKE_CXXFLAGS += -no_prelink -ptused -MODULE_PLUGIN_TYPES += \ - accessible/libqtaccessiblewidgets.so - QMAKE_DOCS = $$PWD/doc/qtwidgets.qdocconf load(qt_module)