diff --git a/src/core/plugin.cpp b/src/core/plugin.cpp index 036fde2..1485208 100644 --- a/src/core/plugin.cpp +++ b/src/core/plugin.cpp @@ -3,9 +3,6 @@ #include // NOLINT (what??) -// defined by moc. see below comment. -void qml_register_types_QuickShell(); // NOLINT - static QVector plugins; // NOLINT void QuickshellPlugin::registerPlugin(QuickshellPlugin& plugin) { plugins.push_back(&plugin); } @@ -24,11 +21,6 @@ void QuickshellPlugin::initPlugins() { plugin->init(); } - // This seems incredibly stupid but it appears qt will not register the module types - // if types are already defined for the module, meaning qmlRegisterType does not work - // unless the module types are already registered. - qml_register_types_QuickShell(); - for (QuickshellPlugin* plugin: plugins) { plugin->registerTypes(); } diff --git a/src/wayland/init.cpp b/src/wayland/init.cpp index 156c708..928f523 100644 --- a/src/wayland/init.cpp +++ b/src/wayland/init.cpp @@ -10,7 +10,17 @@ class WaylandPlugin: public QuickshellPlugin { bool applies() override { return QGuiApplication::platformName() == "wayland"; } void registerTypes() override { - qmlRegisterType("QuickShell", 1, 0, "PanelWindow"); + qmlRegisterType("QuickShell._WaylandOverlay", 1, 0, "PanelWindow"); + + // If any types are defined inside a module using QML_ELEMENT then all QML_ELEMENT types + // will not be registered. This can be worked around with a module import which makes + // the QML_ELMENT module import the old register-type style module. + qmlRegisterModuleImport( + "QuickShell", + QQmlModuleImportModuleAny, + "QuickShell._WaylandOverlay", + QQmlModuleImportLatest + ); } };