summaryrefslogtreecommitdiff
path: root/raveos-calamares-module/welcome/RaveBillentyuzet.cpp
diff options
context:
space:
mode:
authorNippy <nippy@Nippy-Mac-mini.local>2026-11-01 18:13:54 +0100
committerNippy <nippy@Nippy-Mac-mini.local>2026-11-01 18:13:54 +0100
commita64ef966534f8dba6af889ba4bfce15691bfc85b (patch)
treeb30f284d05b80fa115569ab220deae13797fad6f /raveos-calamares-module/welcome/RaveBillentyuzet.cpp
parent919f977b40016f588b0c8532c8a57f6035056b95 (diff)
downloadRaveOS-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.cpp81
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; } );
+}