#include "RaveBillentyuzet.h" #include #include 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; } ); }