diff options
| author | Nippy <nippy@Nippy-Mac-mini.local> | 2026-11-01 18:13:54 +0100 |
|---|---|---|
| committer | Nippy <nippy@Nippy-Mac-mini.local> | 2026-11-01 18:13:54 +0100 |
| commit | a64ef966534f8dba6af889ba4bfce15691bfc85b (patch) | |
| tree | b30f284d05b80fa115569ab220deae13797fad6f /raveos-calamares-module/welcome/RaveBillentyuzet.cpp | |
| parent | 919f977b40016f588b0c8532c8a57f6035056b95 (diff) | |
| download | RaveOS-PKGBUILD-a64ef966534f8dba6af889ba4bfce15691bfc85b.tar.gz RaveOS-PKGBUILD-a64ef966534f8dba6af889ba4bfce15691bfc85b.zip | |
új telepítő
Diffstat (limited to 'raveos-calamares-module/welcome/RaveBillentyuzet.cpp')
| -rw-r--r-- | raveos-calamares-module/welcome/RaveBillentyuzet.cpp | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/raveos-calamares-module/welcome/RaveBillentyuzet.cpp b/raveos-calamares-module/welcome/RaveBillentyuzet.cpp new file mode 100644 index 0000000..aeb1205 --- /dev/null +++ b/raveos-calamares-module/welcome/RaveBillentyuzet.cpp @@ -0,0 +1,81 @@ +#include "RaveBillentyuzet.h" + +#include <QQmlEngine> + +#include <xkbcommon/xkbcommon.h> + +namespace +{ +constexpr int EvdevEltolas = 8; + +const QList< QList< int > >& sorKodok() +{ + static const QList< QList< int > > kodok { + { 41, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, + { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }, + { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 43 }, + { 86, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53 }, + }; + return kodok; +} +} + +QVariantList +RaveBillentyuzet::gombok( const QString& layout, const QString& variant ) const +{ + QVariantList sorok; + if ( layout.isEmpty() ) + { + return sorok; + } + + xkb_context* context = xkb_context_new( XKB_CONTEXT_NO_FLAGS ); + if ( !context ) + { + return sorok; + } + + const QByteArray layoutBytes = layout.toUtf8(); + const QByteArray variantBytes = variant.toUtf8(); + xkb_rule_names names {}; + names.rules = "evdev"; + names.model = "pc105"; + names.layout = layoutBytes.constData(); + names.variant = variantBytes.isEmpty() ? nullptr : variantBytes.constData(); + + xkb_keymap* keymap = xkb_keymap_new_from_names( context, &names, XKB_KEYMAP_COMPILE_NO_FLAGS ); + if ( !keymap ) + { + xkb_context_unref( context ); + return sorok; + } + xkb_state* state = xkb_state_new( keymap ); + + for ( const auto& sor : sorKodok() ) + { + QVariantList cimkek; + for ( int kod : sor ) + { + char buffer[ 16 ] = {}; + xkb_state_key_get_utf8( state, static_cast< xkb_keycode_t >( kod + EvdevEltolas ), buffer, sizeof( buffer ) ); + cimkek << QString::fromUtf8( buffer ).toUpper(); + } + sorok << QVariant( cimkek ); + } + + xkb_state_unref( state ); + xkb_keymap_unref( keymap ); + xkb_context_unref( context ); + return sorok; +} + +void +RaveBillentyuzet::regisztral() +{ + if ( qmlTypeId( "RaveOSNative", 1, 0, "Billentyuzet" ) >= 0 ) + { + return; + } + qmlRegisterSingletonType< RaveBillentyuzet >( + "RaveOSNative", 1, 0, "Billentyuzet", []( QQmlEngine*, QJSEngine* ) -> QObject* { return new RaveBillentyuzet; } ); +} |