diff --git a/declarativeimports/plasmacomponents/plasmacomponentsplugin.cpp b/declarativeimports/plasmacomponents/plasmacomponentsplugin.cpp index 7c1beb50a..065aa2527 100644 --- a/declarativeimports/plasmacomponents/plasmacomponentsplugin.cpp +++ b/declarativeimports/plasmacomponents/plasmacomponentsplugin.cpp @@ -21,6 +21,8 @@ #include #include +#include +#include #include "qrangemodel.h" @@ -31,6 +33,8 @@ #include "qmenuitem.h" #include "kdialogproxy.h" +Q_EXPORT_PLUGIN2(plasmacomponentsplugin, PlasmaComponentsPlugin) + class BKSingleton { public: @@ -47,31 +51,32 @@ EngineBookKeeping *EngineBookKeeping::self() return &privateBKSelf->self; } -QDeclarativeEngine *EngineBookKeeping::engineFor(QDeclarativeItem *item) const +QDeclarativeEngine *EngineBookKeeping::engineFor(QObject *item) const { + foreach (QDeclarativeEngine *engine, m_engines) { + QObject *root = engine->rootContext()->contextObject(); + QObject *candidate = item; + while (candidate) { + if (candidate == root) { + return engine; + } + candidate = candidate->parent(); + } + } return 0; } -void EngineBookKeeping::insertPlugin(PlasmaComponentsPlugin *plugin, QDeclarativeEngine *engine) +void EngineBookKeeping::insertEngine(QDeclarativeEngine *engine) { - m_engines.insert(plugin, engine); -} - -void EngineBookKeeping::removePlugin(PlasmaComponentsPlugin *plugin) -{ - m_engines.remove(plugin); + m_engines.insert(engine); } -PlasmaComponentsPlugin::~PlasmaComponentsPlugin() -{ - EngineBookKeeping::self()->removePlugin(this); -} void PlasmaComponentsPlugin::initializeEngine(QDeclarativeEngine *engine, const char *uri) { QDeclarativeExtensionPlugin::initializeEngine(engine, uri); - EngineBookKeeping::self()->insertPlugin(this, engine); + EngineBookKeeping::self()->insertEngine(engine); } void PlasmaComponentsPlugin::registerTypes(const char *uri) diff --git a/declarativeimports/plasmacomponents/plasmacomponentsplugin.h b/declarativeimports/plasmacomponents/plasmacomponentsplugin.h index 064c46110..11b19ea5f 100644 --- a/declarativeimports/plasmacomponents/plasmacomponentsplugin.h +++ b/declarativeimports/plasmacomponents/plasmacomponentsplugin.h @@ -21,7 +21,7 @@ #define PLASMACOMPONENTSPLUGIN_H #include -#include +#include class QDeclarativeEngine; class QDeclarativeItem; @@ -33,12 +33,11 @@ public: EngineBookKeeping(); static EngineBookKeeping *self(); - void insertPlugin(PlasmaComponentsPlugin *plugin, QDeclarativeEngine *engine); - void removePlugin(PlasmaComponentsPlugin *plugin); - QDeclarativeEngine *engineFor(QDeclarativeItem *item) const; + void insertEngine(QDeclarativeEngine *engine); + QDeclarativeEngine *engineFor(QObject *item) const; private: - QHash m_engines; + QSet m_engines; }; class PlasmaComponentsPlugin : public QDeclarativeExtensionPlugin @@ -46,11 +45,8 @@ class PlasmaComponentsPlugin : public QDeclarativeExtensionPlugin Q_OBJECT public: - ~PlasmaComponentsPlugin(); void initializeEngine(QDeclarativeEngine *engine, const char *uri); void registerTypes(const char *uri); }; -Q_EXPORT_PLUGIN2(plasmacomponentsplugin, PlasmaComponentsPlugin) - #endif diff --git a/declarativeimports/plasmacomponents/qmenu.cpp b/declarativeimports/plasmacomponents/qmenu.cpp index 137557308..03b91624e 100644 --- a/declarativeimports/plasmacomponents/qmenu.cpp +++ b/declarativeimports/plasmacomponents/qmenu.cpp @@ -26,10 +26,11 @@ #include #include +#include "plasmacomponentsplugin.h" QMenuProxy::QMenuProxy (QObject *parent) : QObject(parent), m_status(DialogStatus::Closed) -{ +{qDebug()<<"AAAAAA"<engineFor(this); m_menu = new QMenu(0); connect(m_menu, SIGNAL(triggered(QAction *)), this, SLOT(itemTriggered(QAction *))); diff --git a/declarativeimports/plasmacomponents/qml/SelectionDialog.qml b/declarativeimports/plasmacomponents/qml/SelectionDialog.qml index c8d418e78..a23c2884c 100644 --- a/declarativeimports/plasmacomponents/qml/SelectionDialog.qml +++ b/declarativeimports/plasmacomponents/qml/SelectionDialog.qml @@ -81,8 +81,6 @@ CommonDialog { property int selectedIndex: -1 property Component delegate: defaultDelegate - privateCloseIcon: true - Component { id: defaultDelegate