fix(screen): register Output as a QML namespace

main
reionwong 3 weeks ago
parent 164de9c9f6
commit 43a89b72cb

@ -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

@ -1,6 +1,7 @@
#pragma once
#include <QObject>
#include <QtQml/qqmlregistration.h>
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)
}

@ -1,21 +0,0 @@
#include "output.h"
#include "screen.h"
#include <QQmlExtensionPlugin>
#include <qqml.h>
class QmlPlugins : public QQmlExtensionPlugin
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
public:
void registerTypes(const char *uri) override
{
qmlRegisterType<KScreenScreen>(uri, 1, 0, "Screen");
qmlRegisterUncreatableMetaObject(Output::staticMetaObject, uri, 1, 0, "Output",
QStringLiteral("Output is only a namespace for enums"));
}
};
#include "plugin.moc"

@ -3,12 +3,14 @@
#include <KScreen/Config>
#include <QObject>
#include <QtQml/qqmlregistration.h>
class KScreenOutputModel;
class KScreenScreen : public QObject
{
Q_OBJECT
QML_NAMED_ELEMENT(Screen)
Q_PROPERTY(KScreenOutputModel *outputModel READ outputModel NOTIFY outputModelChanged)
public:

Loading…
Cancel
Save