From 43a89b72cb9a4ae4996f491d8f75dfa7ad82b3cc Mon Sep 17 00:00:00 2001 From: reionwong Date: Fri, 4 Sep 2026 00:24:04 -0400 Subject: [PATCH] fix(screen): register Output as a QML namespace --- screen/CMakeLists.txt | 9 +++++---- screen/output.h | 11 ++++++++++- screen/plugin.cpp | 21 --------------------- screen/screen.h | 2 ++ 4 files changed, 17 insertions(+), 26 deletions(-) delete mode 100644 screen/plugin.cpp diff --git a/screen/CMakeLists.txt b/screen/CMakeLists.txt index 1ad4a79..da555ce 100644 --- a/screen/CMakeLists.txt +++ b/screen/CMakeLists.txt @@ -1,26 +1,27 @@ set(CUTEFISH_SCREEN_SOURCES output.cpp + output.h outputmodel.cpp - plugin.cpp + outputmodel.h screen.cpp + screen.h ) find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick) find_package(KF6Screen REQUIRED) add_library(cutefish-framework-screen SHARED ${CUTEFISH_SCREEN_SOURCES}) +add_library(Cutefish::Screen ALIAS cutefish-framework-screen) qt_add_qml_module(cutefish-framework-screen URI Cutefish.Screen VERSION 1.0 PLUGIN_TARGET cutefish-framework-screen CLASS_NAME QmlPlugins - NO_GENERATE_PLUGIN_SOURCE + NO_PLUGIN_OPTIONAL OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/Cutefish/Screen" ) -add_library(Cutefish::Screen ALIAS cutefish-framework-screen) - target_link_libraries(cutefish-framework-screen PUBLIC Qt6::Core Qt6::Quick diff --git a/screen/output.h b/screen/output.h index fd8ca7c..41b0389 100644 --- a/screen/output.h +++ b/screen/output.h @@ -1,6 +1,7 @@ #pragma once #include +#include class Output { @@ -11,8 +12,16 @@ public: None = 1, Left = 2, Inverted = 4, - Right = 8, + Right = 8 }; Q_ENUM(Rotation) }; +// A Q_GADGET registered directly would become a QML value type, and those have +// to be named in lowercase. Exposing it as a namespace keeps `Output.Left`. +namespace OutputEnums +{ +Q_NAMESPACE +QML_FOREIGN_NAMESPACE(Output) +QML_NAMED_ELEMENT(Output) +} diff --git a/screen/plugin.cpp b/screen/plugin.cpp deleted file mode 100644 index 5d74baf..0000000 --- a/screen/plugin.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "output.h" -#include "screen.h" - -#include -#include - -class QmlPlugins : public QQmlExtensionPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") - -public: - void registerTypes(const char *uri) override - { - qmlRegisterType(uri, 1, 0, "Screen"); - qmlRegisterUncreatableMetaObject(Output::staticMetaObject, uri, 1, 0, "Output", - QStringLiteral("Output is only a namespace for enums")); - } -}; - -#include "plugin.moc" diff --git a/screen/screen.h b/screen/screen.h index 82338f7..9a9e0b9 100644 --- a/screen/screen.h +++ b/screen/screen.h @@ -3,12 +3,14 @@ #include #include +#include class KScreenOutputModel; class KScreenScreen : public QObject { Q_OBJECT + QML_NAMED_ELEMENT(Screen) Q_PROPERTY(KScreenOutputModel *outputModel READ outputModel NOTIFY outputModelChanged) public: