From 5f89601ef2d2bbdc85678ddfaaef8d374504a00a Mon Sep 17 00:00:00 2001 From: Mona Mayrhofer Date: Tue, 3 Mar 2026 14:11:50 +0100 Subject: [PATCH 1/4] ime for text input --- .../jh41lavwqi3qdwypiv713yipf3dxi3nx-source | 1 - .../npfcdcbsyzm1cnh0jqqn3jf2wx49hgwp-source | 1 - .../pg23i5nvj8wg12bb657b2r4s5kixjqic-source | 1 + .../zgbjmrhgvd8a42nyi1jck6v98gzvvql0-source | 1 + ...e-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa | 2 +- ...5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc | 30 +- .../src/components/mouse_area.rs | 65 +- .../src/server/input_proxy_service.rs | 159 ++++- .../cursor-move-webapp/src/server/keymap.rs | 568 ++++++++++++++++++ flake.nix | 4 - 10 files changed, 784 insertions(+), 48 deletions(-) delete mode 120000 .direnv/flake-inputs/jh41lavwqi3qdwypiv713yipf3dxi3nx-source delete mode 120000 .direnv/flake-inputs/npfcdcbsyzm1cnh0jqqn3jf2wx49hgwp-source create mode 120000 .direnv/flake-inputs/pg23i5nvj8wg12bb657b2r4s5kixjqic-source create mode 120000 .direnv/flake-inputs/zgbjmrhgvd8a42nyi1jck6v98gzvvql0-source diff --git a/.direnv/flake-inputs/jh41lavwqi3qdwypiv713yipf3dxi3nx-source b/.direnv/flake-inputs/jh41lavwqi3qdwypiv713yipf3dxi3nx-source deleted file mode 120000 index 491c89e..0000000 --- a/.direnv/flake-inputs/jh41lavwqi3qdwypiv713yipf3dxi3nx-source +++ /dev/null @@ -1 +0,0 @@ -/nix/store/jh41lavwqi3qdwypiv713yipf3dxi3nx-source \ No newline at end of file diff --git a/.direnv/flake-inputs/npfcdcbsyzm1cnh0jqqn3jf2wx49hgwp-source b/.direnv/flake-inputs/npfcdcbsyzm1cnh0jqqn3jf2wx49hgwp-source deleted file mode 120000 index d0f2aea..0000000 --- a/.direnv/flake-inputs/npfcdcbsyzm1cnh0jqqn3jf2wx49hgwp-source +++ /dev/null @@ -1 +0,0 @@ -/nix/store/npfcdcbsyzm1cnh0jqqn3jf2wx49hgwp-source \ No newline at end of file diff --git a/.direnv/flake-inputs/pg23i5nvj8wg12bb657b2r4s5kixjqic-source b/.direnv/flake-inputs/pg23i5nvj8wg12bb657b2r4s5kixjqic-source new file mode 120000 index 0000000..1d1d25b --- /dev/null +++ b/.direnv/flake-inputs/pg23i5nvj8wg12bb657b2r4s5kixjqic-source @@ -0,0 +1 @@ +/nix/store/pg23i5nvj8wg12bb657b2r4s5kixjqic-source \ No newline at end of file diff --git a/.direnv/flake-inputs/zgbjmrhgvd8a42nyi1jck6v98gzvvql0-source b/.direnv/flake-inputs/zgbjmrhgvd8a42nyi1jck6v98gzvvql0-source new file mode 120000 index 0000000..2590ae8 --- /dev/null +++ b/.direnv/flake-inputs/zgbjmrhgvd8a42nyi1jck6v98gzvvql0-source @@ -0,0 +1 @@ +/nix/store/zgbjmrhgvd8a42nyi1jck6v98gzvvql0-source \ No newline at end of file diff --git a/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa b/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa index e2924f3..aa8f82b 120000 --- a/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa +++ b/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa @@ -1 +1 @@ -/nix/store/mq0i12vdknm9wx5w5n7md59xn1z15ag3-my-project-env \ No newline at end of file +/nix/store/xa13w7i8cjcs7bhc21lczj9qyi40ay3s-my-project-env \ No newline at end of file diff --git a/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc b/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc index 6c7d79b..3714305 100644 --- a/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc +++ b/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc @@ -18,7 +18,7 @@ DEVENV_DOTFILE='/home/nionidh/projects/rust-tomfoolery/cursor-mover-app/.devenv' export DEVENV_DOTFILE DEVENV_FLAKE_SHELL='default' export DEVENV_FLAKE_SHELL -DEVENV_PROFILE='/nix/store/7wyfm3pdjlbl7747ghfqlvz2rfsf013l-devenv-profile' +DEVENV_PROFILE='/nix/store/3niz0g2hddnbba4bcql8s8arc6mmna5m-devenv-profile' export DEVENV_PROFILE DEVENV_ROOT='/home/nionidh/projects/rust-tomfoolery/cursor-mover-app' export DEVENV_ROOT @@ -31,7 +31,7 @@ export DEVENV_TASKS DEVENV_TASK_FILE='/nix/store/r04g3f96h64qk8xzpm7z0vd17w5b494d-tasks.json' export DEVENV_TASK_FILE HOSTTYPE='x86_64' -HOST_PATH='/nix/store/idl8schy78hxa05jyndj4nmb4wzgcln2-compiler-rt-libc-21.1.8/bin:/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin:/nix/store/16wfacfgap3chf7mcjnd8dwi85dj4qqi-findutils-4.10.0/bin:/nix/store/3p87h6dn5i87i3iq9364imzbqgwvkg2p-diffutils-3.12/bin:/nix/store/ryz8kcrm2bxpccllfqlb7qldsfnqp5c2-gnused-4.9/bin:/nix/store/02vv0r262agf9j5n2y1gmbjvdf12zkl0-gnugrep-3.12/bin:/nix/store/2xq9rayckw8zq26k274xxlikn77jn60j-gawk-5.3.2/bin:/nix/store/qyg62bc2xnpwz0fa9prqxvvk00zj4g9q-gnutar-1.35/bin:/nix/store/84yyzmxs7mb8nhkvcfv9n1l9irpb6mnq-gzip-1.14/bin:/nix/store/90yw24gqmwph4xjp4mqhpx1y1gcrvqla-bzip2-1.0.8-bin/bin:/nix/store/vbah5c4rzy1q1hbqhginyxjhj8d4dj8j-gnumake-4.4.1/bin:/nix/store/f15k3dpilmiyv6zgpib289rnjykgr1r4-bash-5.3p9/bin:/nix/store/wwij6563c6wbg4kzgjhng7vlhf7api19-patch-2.8/bin:/nix/store/zys6d102zp171wpwcs08g632886w2qxs-xz-5.8.2-bin/bin:/nix/store/nyy0bvgjwd98x7ih8pl6pr79qjljgsf7-file-5.45/bin' +HOST_PATH='/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin:/nix/store/16wfacfgap3chf7mcjnd8dwi85dj4qqi-findutils-4.10.0/bin:/nix/store/3p87h6dn5i87i3iq9364imzbqgwvkg2p-diffutils-3.12/bin:/nix/store/ryz8kcrm2bxpccllfqlb7qldsfnqp5c2-gnused-4.9/bin:/nix/store/02vv0r262agf9j5n2y1gmbjvdf12zkl0-gnugrep-3.12/bin:/nix/store/2xq9rayckw8zq26k274xxlikn77jn60j-gawk-5.3.2/bin:/nix/store/qyg62bc2xnpwz0fa9prqxvvk00zj4g9q-gnutar-1.35/bin:/nix/store/84yyzmxs7mb8nhkvcfv9n1l9irpb6mnq-gzip-1.14/bin:/nix/store/90yw24gqmwph4xjp4mqhpx1y1gcrvqla-bzip2-1.0.8-bin/bin:/nix/store/vbah5c4rzy1q1hbqhginyxjhj8d4dj8j-gnumake-4.4.1/bin:/nix/store/f15k3dpilmiyv6zgpib289rnjykgr1r4-bash-5.3p9/bin:/nix/store/wwij6563c6wbg4kzgjhng7vlhf7api19-patch-2.8/bin:/nix/store/zys6d102zp171wpwcs08g632886w2qxs-xz-5.8.2-bin/bin:/nix/store/nyy0bvgjwd98x7ih8pl6pr79qjljgsf7-file-5.45/bin' export HOST_PATH IFS=' ' @@ -53,13 +53,13 @@ NIX_CC='/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0' export NIX_CC NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1' export NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu -NIX_CFLAGS_COMPILE=' -frandom-seed=mq0i12vdkn -isystem /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/include -isystem /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/include -isystem /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev/include -isystem /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev/include -isystem /nix/store/rszqwjpka3yy6x72d4n3j12a3gxkqbpn-clang-21.1.8-dev/include -isystem /nix/store/rszqwjpka3yy6x72d4n3j12a3gxkqbpn-clang-21.1.8-dev/include -isystem /nix/store/i5vppnbl2qnrvm4h5azwq83rr9gm7sdy-compiler-rt-libc-21.1.8-dev/include -isystem /nix/store/i5vppnbl2qnrvm4h5azwq83rr9gm7sdy-compiler-rt-libc-21.1.8-dev/include -isystem /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/include -isystem /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/include -isystem /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev/include -isystem /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev/include -isystem /nix/store/rszqwjpka3yy6x72d4n3j12a3gxkqbpn-clang-21.1.8-dev/include -isystem /nix/store/rszqwjpka3yy6x72d4n3j12a3gxkqbpn-clang-21.1.8-dev/include -isystem /nix/store/i5vppnbl2qnrvm4h5azwq83rr9gm7sdy-compiler-rt-libc-21.1.8-dev/include -isystem /nix/store/i5vppnbl2qnrvm4h5azwq83rr9gm7sdy-compiler-rt-libc-21.1.8-dev/include' +NIX_CFLAGS_COMPILE=' -frandom-seed=xa13w7i8cj -isystem /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/include -isystem /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev/include -isystem /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/include -isystem /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev/include' export NIX_CFLAGS_COMPILE NIX_ENFORCE_NO_NATIVE='1' export NIX_ENFORCE_NO_NATIVE NIX_HARDENING_ENABLE='bindnow format fortify fortify3 libcxxhardeningextensive libcxxhardeningfast pic relro stackclashprotection stackprotector strictoverflow zerocallusedregs' export NIX_HARDENING_ENABLE -NIX_LDFLAGS='-rpath /home/nionidh/projects/rust-tomfoolery/cursor-mover-app/outputs/out/lib -L/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/lib -L/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/lib -L/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/lib -L/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/lib -L/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/lib -L/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/lib -L/nix/store/xibf2ayyaljj1r7wgjf4n7n4vg5z8n2v-clang-21.1.8-lib/lib -L/nix/store/xibf2ayyaljj1r7wgjf4n7n4vg5z8n2v-clang-21.1.8-lib/lib -L/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/lib -L/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/lib -L/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/lib -L/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/lib -L/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/lib -L/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/lib -L/nix/store/xibf2ayyaljj1r7wgjf4n7n4vg5z8n2v-clang-21.1.8-lib/lib -L/nix/store/xibf2ayyaljj1r7wgjf4n7n4vg5z8n2v-clang-21.1.8-lib/lib' +NIX_LDFLAGS='-rpath /home/nionidh/projects/rust-tomfoolery/cursor-mover-app/outputs/out/lib -L/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/lib -L/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/lib -L/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/lib -L/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/lib -L/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/lib -L/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/lib' export NIX_LDFLAGS NIX_NO_SELF_RPATH='1' NIX_PKG_CONFIG_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1' @@ -76,7 +76,7 @@ OLDPWD='' export OLDPWD OPTERR='1' OSTYPE='linux-gnu' -PATH='/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0/bin:/nix/store/f53d7gw5jh2yc1rv62kp670gnqq3vwwz-checkall/bin:/nix/store/py79xv22ipf2ycg4qks55wwai9g4w2qg-dioxus-cli-0.7.3/bin:/nix/store/9dpg06rzbppmxi5q8rms8zyybz56sa6r-cargo-expand-1.0.119/bin:/nix/store/fl02yv3ax1qf1xkq64ik8qz5bjxyyd71-cargo-deny-0.19.0/bin:/nix/store/hadf76x1xknx2w6ydp05gzl2w3j40hqy-cargo-nextest-0.9.124/bin:/nix/store/s4rgqv7brrcq2jm8m00dyair22knq10s-typos-1.42.3/bin:/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/bin:/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/bin:/nix/store/m05d7wi0zxg35937jbp6rp7zsvbb5qv4-rust-analyzer-nightly-a96b6a9b887008bae01839543f9ca8e1f67f4ebe/bin:/nix/store/8njkmn9yfcka8yid251wk109n7a6sz1y-wasm-bindgen-cli-0.2.114/bin:/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/bin:/nix/store/6n5r46icm0bl55s9p5z2zgcv93m39r5l-clang-wrapper-21.1.8/bin:/nix/store/rm8isfm4fd14is3fv3h4m459rbiy91bx-clang-21.1.8/bin:/nix/store/0bdqq2z98kg2hfn3k60if6pb5fd5p10h-glibc-2.42-47-bin/bin:/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin:/nix/store/m0rbbdfsbkdqpr6bs621jwi21ra1br4g-binutils-wrapper-2.44/bin:/nix/store/47mn80zqpygykqailwzw8zlag4cgl75q-binutils-2.44/bin:/nix/store/rszqwjpka3yy6x72d4n3j12a3gxkqbpn-clang-21.1.8-dev/bin:/nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2/bin:/nix/store/c2p7haf4zzkbrir9zs662r68c5dmylbq-patchelf-0.15.2/bin:/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0/bin:/nix/store/mjf8jlq9grydcdvyw6hb063x5c34g5gf-gcc-15.2.0/bin:/nix/store/i6ppbrlpp6yki8qvka7nyv091xa8dchx-binutils-wrapper-2.44/bin:/nix/store/idl8schy78hxa05jyndj4nmb4wzgcln2-compiler-rt-libc-21.1.8/bin:/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin:/nix/store/16wfacfgap3chf7mcjnd8dwi85dj4qqi-findutils-4.10.0/bin:/nix/store/3p87h6dn5i87i3iq9364imzbqgwvkg2p-diffutils-3.12/bin:/nix/store/ryz8kcrm2bxpccllfqlb7qldsfnqp5c2-gnused-4.9/bin:/nix/store/02vv0r262agf9j5n2y1gmbjvdf12zkl0-gnugrep-3.12/bin:/nix/store/2xq9rayckw8zq26k274xxlikn77jn60j-gawk-5.3.2/bin:/nix/store/qyg62bc2xnpwz0fa9prqxvvk00zj4g9q-gnutar-1.35/bin:/nix/store/84yyzmxs7mb8nhkvcfv9n1l9irpb6mnq-gzip-1.14/bin:/nix/store/90yw24gqmwph4xjp4mqhpx1y1gcrvqla-bzip2-1.0.8-bin/bin:/nix/store/vbah5c4rzy1q1hbqhginyxjhj8d4dj8j-gnumake-4.4.1/bin:/nix/store/f15k3dpilmiyv6zgpib289rnjykgr1r4-bash-5.3p9/bin:/nix/store/wwij6563c6wbg4kzgjhng7vlhf7api19-patch-2.8/bin:/nix/store/zys6d102zp171wpwcs08g632886w2qxs-xz-5.8.2-bin/bin:/nix/store/nyy0bvgjwd98x7ih8pl6pr79qjljgsf7-file-5.45/bin' +PATH='/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0/bin:/nix/store/f53d7gw5jh2yc1rv62kp670gnqq3vwwz-checkall/bin:/nix/store/py79xv22ipf2ycg4qks55wwai9g4w2qg-dioxus-cli-0.7.3/bin:/nix/store/9dpg06rzbppmxi5q8rms8zyybz56sa6r-cargo-expand-1.0.119/bin:/nix/store/fl02yv3ax1qf1xkq64ik8qz5bjxyyd71-cargo-deny-0.19.0/bin:/nix/store/hadf76x1xknx2w6ydp05gzl2w3j40hqy-cargo-nextest-0.9.124/bin:/nix/store/s4rgqv7brrcq2jm8m00dyair22knq10s-typos-1.42.3/bin:/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/bin:/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/bin:/nix/store/m05d7wi0zxg35937jbp6rp7zsvbb5qv4-rust-analyzer-nightly-a96b6a9b887008bae01839543f9ca8e1f67f4ebe/bin:/nix/store/8njkmn9yfcka8yid251wk109n7a6sz1y-wasm-bindgen-cli-0.2.114/bin:/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/bin:/nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2/bin:/nix/store/c2p7haf4zzkbrir9zs662r68c5dmylbq-patchelf-0.15.2/bin:/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0/bin:/nix/store/mjf8jlq9grydcdvyw6hb063x5c34g5gf-gcc-15.2.0/bin:/nix/store/0bdqq2z98kg2hfn3k60if6pb5fd5p10h-glibc-2.42-47-bin/bin:/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin:/nix/store/i6ppbrlpp6yki8qvka7nyv091xa8dchx-binutils-wrapper-2.44/bin:/nix/store/47mn80zqpygykqailwzw8zlag4cgl75q-binutils-2.44/bin:/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin:/nix/store/16wfacfgap3chf7mcjnd8dwi85dj4qqi-findutils-4.10.0/bin:/nix/store/3p87h6dn5i87i3iq9364imzbqgwvkg2p-diffutils-3.12/bin:/nix/store/ryz8kcrm2bxpccllfqlb7qldsfnqp5c2-gnused-4.9/bin:/nix/store/02vv0r262agf9j5n2y1gmbjvdf12zkl0-gnugrep-3.12/bin:/nix/store/2xq9rayckw8zq26k274xxlikn77jn60j-gawk-5.3.2/bin:/nix/store/qyg62bc2xnpwz0fa9prqxvvk00zj4g9q-gnutar-1.35/bin:/nix/store/84yyzmxs7mb8nhkvcfv9n1l9irpb6mnq-gzip-1.14/bin:/nix/store/90yw24gqmwph4xjp4mqhpx1y1gcrvqla-bzip2-1.0.8-bin/bin:/nix/store/vbah5c4rzy1q1hbqhginyxjhj8d4dj8j-gnumake-4.4.1/bin:/nix/store/f15k3dpilmiyv6zgpib289rnjykgr1r4-bash-5.3p9/bin:/nix/store/wwij6563c6wbg4kzgjhng7vlhf7api19-patch-2.8/bin:/nix/store/zys6d102zp171wpwcs08g632886w2qxs-xz-5.8.2-bin/bin:/nix/store/nyy0bvgjwd98x7ih8pl6pr79qjljgsf7-file-5.45/bin' export PATH PC_CONFIG_FILES='/nix/store/f90qf91rzv18zpk3y4yf5saigawqw9nm-process-compose.yaml' export PC_CONFIG_FILES @@ -101,7 +101,7 @@ STRINGS='strings' export STRINGS STRIP='strip' export STRIP -XDG_DATA_DIRS='/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0/share:/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/share:/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/share:/nix/store/rm8isfm4fd14is3fv3h4m459rbiy91bx-clang-21.1.8/share:/nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2/share:/nix/store/c2p7haf4zzkbrir9zs662r68c5dmylbq-patchelf-0.15.2/share' +XDG_DATA_DIRS='/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0/share:/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/share:/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/share:/nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2/share:/nix/store/c2p7haf4zzkbrir9zs662r68c5dmylbq-patchelf-0.15.2/share' export XDG_DATA_DIRS __structuredAttrs='' export __structuredAttrs @@ -151,8 +151,8 @@ export dontAddDisableDepTrack declare -a envBuildBuildHooks=() declare -a envBuildHostHooks=() declare -a envBuildTargetHooks=() -declare -a envHostHostHooks=('ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' 'pkgConfigWrapper_addPkgConfigPath' 'ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' ) -declare -a envHostTargetHooks=('ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' 'pkgConfigWrapper_addPkgConfigPath' 'ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' ) +declare -a envHostHostHooks=('pkgConfigWrapper_addPkgConfigPath' 'ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' ) +declare -a envHostTargetHooks=('pkgConfigWrapper_addPkgConfigPath' 'ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' ) declare -a envTargetTargetHooks=() declare -a fixupOutputHooks=('if [ -z "${dontPatchELF-}" ]; then patchELF "$prefix"; fi' 'if [[ -z "${noAuditTmpdir-}" && -e "$prefix" ]]; then auditTmpdir "$prefix"; fi' 'if [ -z "${dontGzipMan-}" ]; then compressManPages "$prefix"; fi' '_moveLib64' '_moveSbin' '_moveSystemdUserUnits' 'patchShebangsAuto' '_pruneLibtoolFiles' '_doStrip' ) hardeningDisable='' @@ -162,7 +162,7 @@ mesonFlags='' export mesonFlags name='my-project-env' export name -nativeBuildInputs='/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0 /nix/store/f53d7gw5jh2yc1rv62kp670gnqq3vwwz-checkall /nix/store/py79xv22ipf2ycg4qks55wwai9g4w2qg-dioxus-cli-0.7.3 /nix/store/9dpg06rzbppmxi5q8rms8zyybz56sa6r-cargo-expand-1.0.119 /nix/store/fl02yv3ax1qf1xkq64ik8qz5bjxyyd71-cargo-deny-0.19.0 /nix/store/hadf76x1xknx2w6ydp05gzl2w3j40hqy-cargo-nextest-0.9.124 /nix/store/s4rgqv7brrcq2jm8m00dyair22knq10s-typos-1.42.3 /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125 /nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed /nix/store/m05d7wi0zxg35937jbp6rp7zsvbb5qv4-rust-analyzer-nightly-a96b6a9b887008bae01839543f9ca8e1f67f4ebe /nix/store/8njkmn9yfcka8yid251wk109n7a6sz1y-wasm-bindgen-cli-0.2.114 /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev /nix/store/6n5r46icm0bl55s9p5z2zgcv93m39r5l-clang-wrapper-21.1.8 /nix/store/rszqwjpka3yy6x72d4n3j12a3gxkqbpn-clang-21.1.8-dev /nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2' +nativeBuildInputs='/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0 /nix/store/f53d7gw5jh2yc1rv62kp670gnqq3vwwz-checkall /nix/store/py79xv22ipf2ycg4qks55wwai9g4w2qg-dioxus-cli-0.7.3 /nix/store/9dpg06rzbppmxi5q8rms8zyybz56sa6r-cargo-expand-1.0.119 /nix/store/fl02yv3ax1qf1xkq64ik8qz5bjxyyd71-cargo-deny-0.19.0 /nix/store/hadf76x1xknx2w6ydp05gzl2w3j40hqy-cargo-nextest-0.9.124 /nix/store/s4rgqv7brrcq2jm8m00dyair22knq10s-typos-1.42.3 /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125 /nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed /nix/store/m05d7wi0zxg35937jbp6rp7zsvbb5qv4-rust-analyzer-nightly-a96b6a9b887008bae01839543f9ca8e1f67f4ebe /nix/store/8njkmn9yfcka8yid251wk109n7a6sz1y-wasm-bindgen-cli-0.2.114 /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev /nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2' export nativeBuildInputs out='/home/nionidh/projects/rust-tomfoolery/cursor-mover-app/outputs/out' export out @@ -183,9 +183,9 @@ phases='buildPhase' export phases pkg='/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0' declare -a pkgsBuildBuild=() -declare -a pkgsBuildHost=('/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0' '/nix/store/f53d7gw5jh2yc1rv62kp670gnqq3vwwz-checkall' '/nix/store/py79xv22ipf2ycg4qks55wwai9g4w2qg-dioxus-cli-0.7.3' '/nix/store/9dpg06rzbppmxi5q8rms8zyybz56sa6r-cargo-expand-1.0.119' '/nix/store/fl02yv3ax1qf1xkq64ik8qz5bjxyyd71-cargo-deny-0.19.0' '/nix/store/hadf76x1xknx2w6ydp05gzl2w3j40hqy-cargo-nextest-0.9.124' '/nix/store/s4rgqv7brrcq2jm8m00dyair22knq10s-typos-1.42.3' '/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125' '/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed' '/nix/store/m05d7wi0zxg35937jbp6rp7zsvbb5qv4-rust-analyzer-nightly-a96b6a9b887008bae01839543f9ca8e1f67f4ebe' '/nix/store/8njkmn9yfcka8yid251wk109n7a6sz1y-wasm-bindgen-cli-0.2.114' '/nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev' '/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0' '/nix/store/6n5r46icm0bl55s9p5z2zgcv93m39r5l-clang-wrapper-21.1.8' '/nix/store/m0rbbdfsbkdqpr6bs621jwi21ra1br4g-binutils-wrapper-2.44' '/nix/store/rszqwjpka3yy6x72d4n3j12a3gxkqbpn-clang-21.1.8-dev' '/nix/store/xibf2ayyaljj1r7wgjf4n7n4vg5z8n2v-clang-21.1.8-lib' '/nix/store/rm8isfm4fd14is3fv3h4m459rbiy91bx-clang-21.1.8' '/nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2' '/nix/store/c2p7haf4zzkbrir9zs662r68c5dmylbq-patchelf-0.15.2' '/nix/store/y03z7y8cgdck7vk8qpim30vps4d22gzv-update-autotools-gnu-config-scripts-hook' '/nix/store/0y5xmdb7qfvimjwbq7ibg1xdgkgjwqng-no-broken-symlinks.sh' '/nix/store/cv1d7p48379km6a85h4zp6kr86brh32q-audit-tmpdir.sh' '/nix/store/85clx3b0xkdf58jn161iy80y5223ilbi-compress-man-pages.sh' '/nix/store/p3l1a5y7nllfyrjn2krlwgcc3z0cd3fq-make-symlinks-relative.sh' '/nix/store/5yzw0vhkyszf2d179m0qfkgxmp5wjjx4-move-docs.sh' '/nix/store/fyaryjvghbkpfnsyw97hb3lyb37s1pd6-move-lib64.sh' '/nix/store/kd4xwxjpjxi71jkm6ka0np72if9rm3y0-move-sbin.sh' '/nix/store/pag6l61paj1dc9sv15l7bm5c17xn5kyk-move-systemd-user-units.sh' '/nix/store/cmzya9irvxzlkh7lfy6i82gbp0saxqj3-multiple-outputs.sh' '/nix/store/x8c40nfigps493a07sdr2pm5s9j1cdc0-patch-shebangs.sh' '/nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh' '/nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh' '/nix/store/z7k98578dfzi6l3hsvbivzm7hfqlk0zc-set-source-date-epoch-to-latest.sh' '/nix/store/pilsssjjdxvdphlg2h19p0bfx5q0jzkn-strip.sh' '/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0' '/nix/store/i6ppbrlpp6yki8qvka7nyv091xa8dchx-binutils-wrapper-2.44' ) +declare -a pkgsBuildHost=('/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0' '/nix/store/f53d7gw5jh2yc1rv62kp670gnqq3vwwz-checkall' '/nix/store/py79xv22ipf2ycg4qks55wwai9g4w2qg-dioxus-cli-0.7.3' '/nix/store/9dpg06rzbppmxi5q8rms8zyybz56sa6r-cargo-expand-1.0.119' '/nix/store/fl02yv3ax1qf1xkq64ik8qz5bjxyyd71-cargo-deny-0.19.0' '/nix/store/hadf76x1xknx2w6ydp05gzl2w3j40hqy-cargo-nextest-0.9.124' '/nix/store/s4rgqv7brrcq2jm8m00dyair22knq10s-typos-1.42.3' '/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125' '/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed' '/nix/store/m05d7wi0zxg35937jbp6rp7zsvbb5qv4-rust-analyzer-nightly-a96b6a9b887008bae01839543f9ca8e1f67f4ebe' '/nix/store/8njkmn9yfcka8yid251wk109n7a6sz1y-wasm-bindgen-cli-0.2.114' '/nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev' '/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0' '/nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2' '/nix/store/c2p7haf4zzkbrir9zs662r68c5dmylbq-patchelf-0.15.2' '/nix/store/y03z7y8cgdck7vk8qpim30vps4d22gzv-update-autotools-gnu-config-scripts-hook' '/nix/store/0y5xmdb7qfvimjwbq7ibg1xdgkgjwqng-no-broken-symlinks.sh' '/nix/store/cv1d7p48379km6a85h4zp6kr86brh32q-audit-tmpdir.sh' '/nix/store/85clx3b0xkdf58jn161iy80y5223ilbi-compress-man-pages.sh' '/nix/store/p3l1a5y7nllfyrjn2krlwgcc3z0cd3fq-make-symlinks-relative.sh' '/nix/store/5yzw0vhkyszf2d179m0qfkgxmp5wjjx4-move-docs.sh' '/nix/store/fyaryjvghbkpfnsyw97hb3lyb37s1pd6-move-lib64.sh' '/nix/store/kd4xwxjpjxi71jkm6ka0np72if9rm3y0-move-sbin.sh' '/nix/store/pag6l61paj1dc9sv15l7bm5c17xn5kyk-move-systemd-user-units.sh' '/nix/store/cmzya9irvxzlkh7lfy6i82gbp0saxqj3-multiple-outputs.sh' '/nix/store/x8c40nfigps493a07sdr2pm5s9j1cdc0-patch-shebangs.sh' '/nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh' '/nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh' '/nix/store/z7k98578dfzi6l3hsvbivzm7hfqlk0zc-set-source-date-epoch-to-latest.sh' '/nix/store/pilsssjjdxvdphlg2h19p0bfx5q0jzkn-strip.sh' '/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0' '/nix/store/i6ppbrlpp6yki8qvka7nyv091xa8dchx-binutils-wrapper-2.44' ) declare -a pkgsBuildTarget=() -declare -a pkgsHostHost=('/nix/store/i5vppnbl2qnrvm4h5azwq83rr9gm7sdy-compiler-rt-libc-21.1.8-dev' '/nix/store/idl8schy78hxa05jyndj4nmb4wzgcln2-compiler-rt-libc-21.1.8' ) +declare -a pkgsHostHost=() declare -a pkgsHostTarget=() declare -a pkgsTargetTarget=() declare -a postFixupHooks=('noBrokenSymlinksInAllOutputs' '_makeSymlinksRelative' '_multioutPropagateDev' ) @@ -231,9 +231,9 @@ if [ ! type -p direnv &>/dev/null && -f .envrc ]; then fi mkdir -p "$DEVENV_STATE" -if [ ! -L "$DEVENV_DOTFILE/profile" ] || [ "$(/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin/readlink $DEVENV_DOTFILE/profile)" != "/nix/store/7wyfm3pdjlbl7747ghfqlvz2rfsf013l-devenv-profile" ] +if [ ! -L "$DEVENV_DOTFILE/profile" ] || [ "$(/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin/readlink $DEVENV_DOTFILE/profile)" != "/nix/store/3niz0g2hddnbba4bcql8s8arc6mmna5m-devenv-profile" ] then - ln -snf /nix/store/7wyfm3pdjlbl7747ghfqlvz2rfsf013l-devenv-profile "$DEVENV_DOTFILE/profile" + ln -snf /nix/store/3niz0g2hddnbba4bcql8s8arc6mmna5m-devenv-profile "$DEVENV_DOTFILE/profile" fi unset HOST_PATH NIX_BUILD_CORES __structuredAttrs buildInputs buildPhase builder depsBuildBuild depsBuildBuildPropagated depsBuildTarget depsBuildTargetPropagated depsHostHost depsHostHostPropagated depsTargetTarget depsTargetTargetPropagated dontAddDisableDepTrack doCheck doInstallCheck nativeBuildInputs out outputs patches phases preferLocalBuild propagatedBuildInputs propagatedNativeBuildInputs shell shellHook stdenv strictDeps @@ -241,10 +241,10 @@ mkdir -p /tmp/devenv-b51d30d ln -snf /tmp/devenv-b51d30d /home/nionidh/projects/rust-tomfoolery/cursor-mover-app/.devenv/run -export PATH=/nix/store/c0xxs40qc5szabj2yiimh0cziknji84q-devenv-flake-compat/bin:$PATH +export PATH=/nix/store/qgm0a9f2cxfsf6v0d4b5riy5x54w3zib-devenv-flake-compat/bin:$PATH if [ -z "${DEVENV_SKIP_TASKS:-}" ]; then - /nix/store/vjc136ikp6is5m8jv4r5s24gwcfl2naf-devenv-tasks-2.0.0/bin/devenv-tasks run devenv:enterShell --mode all --cache-dir /home/nionidh/projects/rust-tomfoolery/cursor-mover-app/.devenv --runtime-dir /tmp/devenv-b51d30d || exit $? + /nix/store/bkl9r14hgr0qy850wkdj1bgs8884i46r-devenv-tasks-2.0.0/bin/devenv-tasks run devenv:enterShell --mode all --cache-dir /home/nionidh/projects/rust-tomfoolery/cursor-mover-app/.devenv --runtime-dir /tmp/devenv-b51d30d || exit $? if [ -f "$DEVENV_DOTFILE/load-exports" ]; then source "$DEVENV_DOTFILE/load-exports" fi diff --git a/crates/cursor-move-webapp/src/components/mouse_area.rs b/crates/cursor-move-webapp/src/components/mouse_area.rs index 54c1692..0caf6d1 100644 --- a/crates/cursor-move-webapp/src/components/mouse_area.rs +++ b/crates/cursor-move-webapp/src/components/mouse_area.rs @@ -64,7 +64,6 @@ pub fn MouseArea() -> Element { }); let key_down_handler = use_callback(move |evt: Event| { - tracing::info!("Keydown"); spawn(async move { _ = socket .send(ClientEvent::KeyEvent { @@ -75,12 +74,49 @@ pub fn MouseArea() -> Element { }); }); - let key_up_handler = use_callback(move |evt: Event| { + // let key_up_handler = use_callback(move |evt: Event| { + // spawn(async move { + // _ = socket + // .send(ClientEvent::KeyEvent { + // key: evt.key().to_string(), + // is_pressed: false, + // }) + // .await; + // }); + // }); + + let mut input_state = use_signal(String::new); + let input_handler = use_callback(move |evt: Event| { + let v = evt.value(); + input_state.set(v.clone()); + + spawn(async move { + _ = socket.send(ClientEvent::TextInputEvent { text: v }).await; + }); + }); + let key_press_handler = use_callback(move |evt: Event| { + if evt.key() == Key::Enter { + spawn(async move { + _ = socket + .send(ClientEvent::TextInputDoneEvent { + text: input_state.replace(String::new()), + }) + .await; + }); + } + }); + let input_focus_handler = use_callback(move |evt: Event| { + input_state.set(String::new()); + spawn(async move { + _ = socket.send(ClientEvent::TextInputStartEvent).await; + }); + }); + + let input_blur_handler = use_callback(move |evt: Event| { spawn(async move { _ = socket - .send(ClientEvent::KeyEvent { - key: evt.key().to_string(), - is_pressed: false, + .send(ClientEvent::TextInputDoneEvent { + text: input_state.replace(String::new()), }) .await; }); @@ -88,7 +124,12 @@ pub fn MouseArea() -> Element { rsx! { div { - input { onkeydown: key_down_handler, onkeyup: key_up_handler} + input { + oninput: input_handler, + value: input_state, + onkeypress: key_press_handler, + onfocus: input_focus_handler, + onblur: input_blur_handler } div { class: Styles::mouse_area, @@ -105,6 +146,9 @@ enum ClientEvent { MouseMove { dx: f64, dy: f64 }, Click, KeyEvent { key: String, is_pressed: bool }, + TextInputStartEvent, + TextInputEvent { text: String }, + TextInputDoneEvent { text: String }, } #[derive(Serialize, Deserialize, Debug)] @@ -131,6 +175,15 @@ async fn mouse_move( ClientEvent::KeyEvent { key, is_pressed } => { mouse_service.key_event(key, is_pressed).await; }, + ClientEvent::TextInputEvent { text } => { + mouse_service.text_input(text).await; + }, + ClientEvent::TextInputStartEvent => { + mouse_service.text_input_start().await; + }, + ClientEvent::TextInputDoneEvent { text } => { + mouse_service.text_input_end(text).await; + }, } } })) diff --git a/crates/cursor-move-webapp/src/server/input_proxy_service.rs b/crates/cursor-move-webapp/src/server/input_proxy_service.rs index 4f6a7a3..fb4cef8 100644 --- a/crates/cursor-move-webapp/src/server/input_proxy_service.rs +++ b/crates/cursor-move-webapp/src/server/input_proxy_service.rs @@ -1,8 +1,7 @@ -use std::{io::Write, str::FromStr, sync::Arc, time::Duration}; +use std::{io::Write, sync::Arc, time::Duration}; use dioxus::{ fullstack::{FullstackContext, extract::FromRef}, - html::Key, logger::tracing, }; use memfile::MemFile; @@ -16,9 +15,14 @@ use wayland_client::{ wl_seat::{self, WlSeat}, }, }; -use wayland_protocols_misc::zwp_virtual_keyboard_v1::client::{ - zwp_virtual_keyboard_manager_v1::ZwpVirtualKeyboardManagerV1, - zwp_virtual_keyboard_v1::ZwpVirtualKeyboardV1, +use wayland_protocols_misc::{ + zwp_input_method_v2::client::{ + zwp_input_method_manager_v2::ZwpInputMethodManagerV2, zwp_input_method_v2::ZwpInputMethodV2, + }, + zwp_virtual_keyboard_v1::client::{ + zwp_virtual_keyboard_manager_v1::ZwpVirtualKeyboardManagerV1, + zwp_virtual_keyboard_v1::ZwpVirtualKeyboardV1, + }, }; use wayland_protocols_wlr::virtual_pointer::v1::client::{ zwlr_virtual_pointer_manager_v1::ZwlrVirtualPointerManagerV1, @@ -93,14 +97,49 @@ impl InputProxyService { key: String, is_pressed: bool, ) { - let guard = self.input_proxy_service_state.lock().await; - if let Some(keyboard) = &guard.state.virtual_keyboard() { - let time = get_wayland_timestamp(); + todo!(); + } - let key = Key::from_str(key.as_str()).unwrap().legacy_charcode(); + pub async fn text_input_start(&self) { + let mut guard = self.input_proxy_service_state.lock().await; - keyboard.key(time, key, if is_pressed { 1 } else { 0 }); + if let Some(keyboard) = guard.state.input_method_mut() { + keyboard.input_method_state += 1; + tracing::info!("Text Input Start"); + keyboard.input_method.delete_surrounding_text(4, 4); + keyboard.input_method.commit(keyboard.input_method_state); + + guard.event_queue.flush().unwrap(); + } + } + pub async fn text_input( + &self, + key: String, + ) { + let mut guard = self.input_proxy_service_state.lock().await; + + if let Some(keyboard) = guard.state.input_method_mut() { + keyboard.input_method_state += 1; + + tracing::info!("Text Input {key}"); + keyboard.input_method.set_preedit_string(key, 0, 0); + keyboard.input_method.commit(keyboard.input_method_state); + guard.event_queue.flush().unwrap(); + } + } + pub async fn text_input_end( + &self, + text: String, + ) { + let mut guard = self.input_proxy_service_state.lock().await; + + if let Some(keyboard) = guard.state.input_method_mut() { + keyboard.input_method_state += 1; + + tracing::info!("Text Input End"); + keyboard.input_method.commit_string(text); + keyboard.input_method.commit(keyboard.input_method_state); guard.event_queue.flush().unwrap(); } } @@ -143,12 +182,18 @@ struct Keymap { size: u32, } +struct InputMethod { + input_method: ZwpInputMethodV2, + input_method_state: u32, +} + enum InputProxyServiceState { Incomplete { queue_handle: QueueHandle, seat: Option, virtual_pointer_manager: Option, virtual_keyboard_manager: Option, + input_method_manager: Option, keymap: Keymap, }, Running { @@ -158,6 +203,8 @@ enum InputProxyServiceState { virtual_pointer: ZwlrVirtualPointerV1, virtual_keyboard: ZwpVirtualKeyboardV1, + + input_method: InputMethod, }, } impl InputProxyServiceState { @@ -177,6 +224,7 @@ impl InputProxyServiceState { seat: None, virtual_pointer_manager: None, virtual_keyboard_manager: None, + input_method_manager: None, } } @@ -198,6 +246,13 @@ impl InputProxyServiceState { } } + fn input_method_mut(&mut self) -> Option<&mut InputMethod> { + match self { + Self::Running { input_method, .. } => Some(input_method), + Self::Incomplete { .. } => None, + } + } + pub fn set_seat( &mut self, seat: WlSeat, @@ -249,35 +304,63 @@ impl InputProxyServiceState { } } + pub fn set_input_method_manager( + &mut self, + input_method_manager: ZwpInputMethodManagerV2, + ) { + if let Self::Incomplete { + input_method_manager: existing @ None, + .. + } = self + { + *existing = Some(input_method_manager); + tracing::info!("Obtained Input Method Manager!"); + self.try_upgrade(); + } else { + tracing::info!("Received duplicate ZwpInputMethodManagerV2"); + } + } + pub fn try_upgrade(&mut self) { if let Self::Incomplete { queue_handle, keymap, - seat: oseat @ Some(..), - virtual_pointer_manager: ovpm @ Some(..), - virtual_keyboard_manager: ovkm @ Some(..), + seat: seat @ Some(..), + virtual_pointer_manager: vpm @ Some(..), + virtual_keyboard_manager: vkm @ Some(..), + input_method_manager: imm @ Some(..), } = self { - let virtual_keyboard = ovkm.as_ref().unwrap().create_virtual_keyboard( - oseat.as_ref().unwrap(), + let virtual_keyboard = vkm.as_ref().unwrap().create_virtual_keyboard( + seat.as_ref().unwrap(), queue_handle, (), ); virtual_keyboard.keymap(XKB_V1, keymap.file.as_fd(), keymap.size); - let virtual_pointer = ovpm.as_ref().unwrap().create_virtual_pointer( - Some(oseat.as_ref().unwrap()), + let virtual_pointer = vpm.as_ref().unwrap().create_virtual_pointer( + Some(seat.as_ref().unwrap()), queue_handle, (), ); + + let input_method = + imm.as_ref() + .unwrap() + .get_input_method(seat.as_ref().unwrap(), queue_handle, ()); + tracing::info!("InputProxyServiceState upgraded to running"); *self = Self::Running { - seat: oseat.take().unwrap(), - virtual_pointer_manager: ovpm.take().unwrap(), - virtual_keyboard_manager: ovkm.take().unwrap(), + seat: seat.take().unwrap(), + virtual_pointer_manager: vpm.take().unwrap(), + virtual_keyboard_manager: vkm.take().unwrap(), virtual_pointer, virtual_keyboard, + input_method: InputMethod { + input_method, + input_method_state: 0, + }, }; } } @@ -339,6 +422,33 @@ impl Dispatch for InputProxyServiceState { } } +impl Dispatch for InputProxyServiceState { + fn event( + _state: &mut Self, + _proxy: &ZwpInputMethodManagerV2, + _event: ::Event, + _data: &(), + _conn: &Connection, + _qhandle: &QueueHandle, + ) { + tracing::warn!("Unknown event received from ZwpInputMethodManagerV2"); + } +} + +impl Dispatch for InputProxyServiceState { + fn event( + _state: &mut Self, + _proxy: &ZwpInputMethodV2, + _event: ::Event, + _data: &(), + _conn: &Connection, + _qhandle: &QueueHandle, + ) { + panic!(); + tracing::warn!("Unknown event received from ZwpInputMethodV2"); + } +} + impl Dispatch for InputProxyServiceState { fn event( _state: &mut Self, @@ -399,6 +509,15 @@ impl Dispatch for InputProxyServiceState { ); app_data.set_virtual_keyboard_manager(manager); }, + "zwp_input_method_manager_v2" => { + let manager = registry.bind::( + name, + version, + queue_handle, + (), + ); + app_data.set_input_method_manager(manager); + }, _ => {}, }, Event::GlobalRemove { .. } => todo!(), diff --git a/crates/cursor-move-webapp/src/server/keymap.rs b/crates/cursor-move-webapp/src/server/keymap.rs index 06d8abe..de52a2f 100644 --- a/crates/cursor-move-webapp/src/server/keymap.rs +++ b/crates/cursor-move-webapp/src/server/keymap.rs @@ -1,3 +1,571 @@ +fn is_key_string(s: &str) -> bool { + s.chars().all(|c| !c.is_control()) && s.chars().skip(1).all(|c| !c.is_ascii()) +} + +pub fn web_key_to_linux_keycode(s: &str) -> Option { + match s { + //s if is_key_string(s) => Ok(Character(s.to_string())), + "Unidentified" => todo!(), + "Alt" => Some(KEY_LEFTALT), + "AltGraph" => Some(KEY_RIGHTALT), + "CapsLock" => todo!(), + "Control" => todo!(), + "Fn" => todo!(), + "FnLock" => todo!(), + "Meta" => todo!(), + "NumLock" => todo!(), + "ScrollLock" => todo!(), + "Shift" => todo!(), + "Symbol" => todo!(), + "SymbolLock" => todo!(), + "Hyper" => todo!(), + "Super" => todo!(), + "Enter" => todo!(), + "Tab" => todo!(), + "ArrowDown" => todo!(), + "ArrowLeft" => todo!(), + "ArrowRight" => todo!(), + "ArrowUp" => todo!(), + "End" => todo!(), + "Home" => todo!(), + "PageDown" => todo!(), + "PageUp" => todo!(), + "Backspace" => todo!(), + "Clear" => todo!(), + "Copy" => todo!(), + "CrSel" => todo!(), + "Cut" => todo!(), + "Delete" => todo!(), + "EraseEof" => todo!(), + "ExSel" => todo!(), + "Insert" => todo!(), + "Paste" => todo!(), + "Redo" => todo!(), + "Undo" => todo!(), + "Accept" => todo!(), + "Again" => todo!(), + "Attn" => todo!(), + "Cancel" => todo!(), + "ContextMenu" => todo!(), + "Escape" => todo!(), + "Execute" => todo!(), + "Find" => todo!(), + "Help" => todo!(), + "Pause" => todo!(), + "Play" => todo!(), + "Props" => todo!(), + "Select" => todo!(), + "ZoomIn" => todo!(), + "ZoomOut" => todo!(), + "BrightnessDown" => todo!(), + "BrightnessUp" => todo!(), + "Eject" => todo!(), + "LogOff" => todo!(), + "Power" => todo!(), + "PowerOff" => todo!(), + "PrintScreen" => todo!(), + "Hibernate" => todo!(), + "Standby" => todo!(), + "WakeUp" => todo!(), + "AllCandidates" => todo!(), + "Alphanumeric" => todo!(), + "CodeInput" => todo!(), + "Compose" => todo!(), + "Convert" => todo!(), + "Dead" => todo!(), + "FinalMode" => todo!(), + "GroupFirst" => todo!(), + "GroupLast" => todo!(), + "GroupNext" => todo!(), + "GroupPrevious" => todo!(), + "ModeChange" => todo!(), + "NextCandidate" => todo!(), + "NonConvert" => todo!(), + "PreviousCandidate" => todo!(), + "Process" => todo!(), + "SingleCandidate" => todo!(), + "HangulMode" => todo!(), + "HanjaMode" => todo!(), + "JunjaMode" => todo!(), + "Eisu" => todo!(), + "Hankaku" => todo!(), + "Hiragana" => todo!(), + "HiraganaKatakana" => todo!(), + "KanaMode" => todo!(), + "KanjiMode" => todo!(), + "Katakana" => todo!(), + "Romaji" => todo!(), + "Zenkaku" => todo!(), + "ZenkakuHankaku" => todo!(), + "Soft1" => todo!(), + "Soft2" => todo!(), + "Soft3" => todo!(), + "Soft4" => todo!(), + "ChannelDown" => todo!(), + "ChannelUp" => todo!(), + "Close" => todo!(), + "MailForward" => todo!(), + "MailReply" => todo!(), + "MailSend" => todo!(), + "MediaClose" => todo!(), + "MediaFastForward" => todo!(), + "MediaPause" => todo!(), + "MediaPlay" => todo!(), + "MediaPlayPause" => todo!(), + "MediaRecord" => todo!(), + "MediaRewind" => todo!(), + "MediaStop" => todo!(), + "MediaTrackNext" => todo!(), + "MediaTrackPrevious" => todo!(), + "New" => todo!(), + "Open" => todo!(), + "Print" => todo!(), + "Save" => todo!(), + "SpellCheck" => todo!(), + "Key11" => todo!(), + "Key12" => todo!(), + "AudioBalanceLeft" => todo!(), + "AudioBalanceRight" => todo!(), + "AudioBassBoostDown" => todo!(), + "AudioBassBoostToggle" => todo!(), + "AudioBassBoostUp" => todo!(), + "AudioFaderFront" => todo!(), + "AudioFaderRear" => todo!(), + "AudioSurroundModeNext" => todo!(), + "AudioTrebleDown" => todo!(), + "AudioTrebleUp" => todo!(), + "AudioVolumeDown" => todo!(), + "AudioVolumeUp" => todo!(), + "AudioVolumeMute" => todo!(), + "MicrophoneToggle" => todo!(), + "MicrophoneVolumeDown" => todo!(), + "MicrophoneVolumeUp" => todo!(), + "MicrophoneVolumeMute" => todo!(), + "SpeechCorrectionList" => todo!(), + "SpeechInputToggle" => todo!(), + "LaunchApplication1" => todo!(), + "LaunchApplication2" => todo!(), + "LaunchCalendar" => todo!(), + "LaunchContacts" => todo!(), + "LaunchMail" => todo!(), + "LaunchMediaPlayer" => todo!(), + "LaunchMusicPlayer" => todo!(), + "LaunchPhone" => todo!(), + "LaunchScreenSaver" => todo!(), + "LaunchSpreadsheet" => todo!(), + "LaunchWebBrowser" => todo!(), + "LaunchWebCam" => todo!(), + "LaunchWordProcessor" => todo!(), + "BrowserBack" => todo!(), + "BrowserFavorites" => todo!(), + "BrowserForward" => todo!(), + "BrowserHome" => todo!(), + "BrowserRefresh" => todo!(), + "BrowserSearch" => todo!(), + "BrowserStop" => todo!(), + "AppSwitch" => todo!(), + "Call" => todo!(), + "Camera" => todo!(), + "CameraFocus" => todo!(), + "EndCall" => todo!(), + "GoBack" => todo!(), + "GoHome" => todo!(), + "HeadsetHook" => todo!(), + "LastNumberRedial" => todo!(), + "Notification" => todo!(), + "MannerMode" => todo!(), + "VoiceDial" => todo!(), + "TV" => todo!(), + "TV3DMode" => todo!(), + "TVAntennaCable" => todo!(), + "TVAudioDescription" => todo!(), + "TVAudioDescriptionMixDown" => todo!(), + "TVAudioDescriptionMixUp" => todo!(), + "TVContentsMenu" => todo!(), + "TVDataService" => todo!(), + "TVInput" => todo!(), + "TVInputComponent1" => todo!(), + "TVInputComponent2" => todo!(), + "TVInputComposite1" => todo!(), + "TVInputComposite2" => todo!(), + "TVInputHDMI1" => todo!(), + "TVInputHDMI2" => todo!(), + "TVInputHDMI3" => todo!(), + "TVInputHDMI4" => todo!(), + "TVInputVGA1" => todo!(), + "TVMediaContext" => todo!(), + "TVNetwork" => todo!(), + "TVNumberEntry" => todo!(), + "TVPower" => todo!(), + "TVRadioService" => todo!(), + "TVSatellite" => todo!(), + "TVSatelliteBS" => todo!(), + "TVSatelliteCS" => todo!(), + "TVSatelliteToggle" => todo!(), + "TVTerrestrialAnalog" => todo!(), + "TVTerrestrialDigital" => todo!(), + "TVTimer" => todo!(), + "AVRInput" => todo!(), + "AVRPower" => todo!(), + "ColorF0Red" => todo!(), + "ColorF1Green" => todo!(), + "ColorF2Yellow" => todo!(), + "ColorF3Blue" => todo!(), + "ColorF4Grey" => todo!(), + "ColorF5Brown" => todo!(), + "ClosedCaptionToggle" => todo!(), + "Dimmer" => todo!(), + "DisplaySwap" => todo!(), + "DVR" => todo!(), + "Exit" => todo!(), + "FavoriteClear0" => todo!(), + "FavoriteClear1" => todo!(), + "FavoriteClear2" => todo!(), + "FavoriteClear3" => todo!(), + "FavoriteRecall0" => todo!(), + "FavoriteRecall1" => todo!(), + "FavoriteRecall2" => todo!(), + "FavoriteRecall3" => todo!(), + "FavoriteStore0" => todo!(), + "FavoriteStore1" => todo!(), + "FavoriteStore2" => todo!(), + "FavoriteStore3" => todo!(), + "Guide" => todo!(), + "GuideNextDay" => todo!(), + "GuidePreviousDay" => todo!(), + "Info" => todo!(), + "InstantReplay" => todo!(), + "Link" => todo!(), + "ListProgram" => todo!(), + "LiveContent" => todo!(), + "Lock" => todo!(), + "MediaApps" => todo!(), + "MediaAudioTrack" => todo!(), + "MediaLast" => todo!(), + "MediaSkipBackward" => todo!(), + "MediaSkipForward" => todo!(), + "MediaStepBackward" => todo!(), + "MediaStepForward" => todo!(), + "MediaTopMenu" => todo!(), + "NavigateIn" => todo!(), + "NavigateNext" => todo!(), + "NavigateOut" => todo!(), + "NavigatePrevious" => todo!(), + "NextFavoriteChannel" => todo!(), + "NextUserProfile" => todo!(), + "OnDemand" => todo!(), + "Pairing" => todo!(), + "PinPDown" => todo!(), + "PinPMove" => todo!(), + "PinPToggle" => todo!(), + "PinPUp" => todo!(), + "PlaySpeedDown" => todo!(), + "PlaySpeedReset" => todo!(), + "PlaySpeedUp" => todo!(), + "RandomToggle" => todo!(), + "RcLowBattery" => todo!(), + "RecordSpeedNext" => todo!(), + "RfBypass" => todo!(), + "ScanChannelsToggle" => todo!(), + "ScreenModeNext" => todo!(), + "Settings" => todo!(), + "SplitScreenToggle" => todo!(), + "STBInput" => todo!(), + "STBPower" => todo!(), + "Subtitle" => todo!(), + "Teletext" => todo!(), + "VideoModeNext" => todo!(), + "Wink" => todo!(), + "ZoomToggle" => todo!(), + "F1" => todo!(), + "F2" => todo!(), + "F3" => todo!(), + "F4" => todo!(), + "F5" => todo!(), + "F6" => todo!(), + "F7" => todo!(), + "F8" => todo!(), + "F9" => todo!(), + "F10" => todo!(), + "F11" => todo!(), + "F12" => todo!(), + "F13" => todo!(), + "F14" => todo!(), + "F15" => todo!(), + "F16" => todo!(), + "F17" => todo!(), + "F18" => todo!(), + "F19" => todo!(), + "F20" => todo!(), + "F21" => todo!(), + "F22" => todo!(), + "F23" => todo!(), + "F24" => todo!(), + "F25" => todo!(), + "F26" => todo!(), + "F27" => todo!(), + "F28" => todo!(), + "F29" => todo!(), + "F30" => todo!(), + "F31" => todo!(), + "F32" => todo!(), + "F33" => todo!(), + "F34" => todo!(), + "F35" => todo!(), + _ => todo!(), + } +} + +const KEY_RESERVED: u32 = 0; +const KEY_ESC: u32 = 1; +const KEY_1: u32 = 2; +const KEY_2: u32 = 3; +const KEY_3: u32 = 4; +const KEY_4: u32 = 5; +const KEY_5: u32 = 6; +const KEY_6: u32 = 7; +const KEY_7: u32 = 8; +const KEY_8: u32 = 9; +const KEY_9: u32 = 10; +const KEY_0: u32 = 11; +const KEY_MINUS: u32 = 12; +const KEY_EQUAL: u32 = 13; +const KEY_BACKSPACE: u32 = 14; +const KEY_TAB: u32 = 15; +const KEY_Q: u32 = 16; +const KEY_W: u32 = 17; +const KEY_E: u32 = 18; +const KEY_R: u32 = 19; +const KEY_T: u32 = 20; +const KEY_Y: u32 = 21; +const KEY_U: u32 = 22; +const KEY_I: u32 = 23; +const KEY_O: u32 = 24; +const KEY_P: u32 = 25; +const KEY_LEFTBRACE: u32 = 26; +const KEY_RIGHTBRACE: u32 = 27; +const KEY_ENTER: u32 = 28; +const KEY_LEFTCTRL: u32 = 29; +const KEY_A: u32 = 30; +const KEY_S: u32 = 31; +const KEY_D: u32 = 32; +const KEY_F: u32 = 33; +const KEY_G: u32 = 34; +const KEY_H: u32 = 35; +const KEY_J: u32 = 36; +const KEY_K: u32 = 37; +const KEY_L: u32 = 38; +const KEY_SEMICOLON: u32 = 39; +const KEY_APOSTROPHE: u32 = 40; +const KEY_GRAVE: u32 = 41; +const KEY_LEFTSHIFT: u32 = 42; +const KEY_BACKSLASH: u32 = 43; +const KEY_Z: u32 = 44; +const KEY_X: u32 = 45; +const KEY_C: u32 = 46; +const KEY_V: u32 = 47; +const KEY_B: u32 = 48; +const KEY_N: u32 = 49; +const KEY_M: u32 = 50; +const KEY_COMMA: u32 = 51; +const KEY_DOT: u32 = 52; +const KEY_SLASH: u32 = 53; +const KEY_RIGHTSHIFT: u32 = 54; +const KEY_KPASTERISK: u32 = 55; +const KEY_LEFTALT: u32 = 56; +const KEY_SPACE: u32 = 57; +const KEY_CAPSLOCK: u32 = 58; +const KEY_F1: u32 = 59; +const KEY_F2: u32 = 60; +const KEY_F3: u32 = 61; +const KEY_F4: u32 = 62; +const KEY_F5: u32 = 63; +const KEY_F6: u32 = 64; +const KEY_F7: u32 = 65; +const KEY_F8: u32 = 66; +const KEY_F9: u32 = 67; +const KEY_F10: u32 = 68; +const KEY_NUMLOCK: u32 = 69; +const KEY_SCROLLLOCK: u32 = 70; +const KEY_KP7: u32 = 71; +const KEY_KP8: u32 = 72; +const KEY_KP9: u32 = 73; +const KEY_KPMINUS: u32 = 74; +const KEY_KP4: u32 = 75; +const KEY_KP5: u32 = 76; +const KEY_KP6: u32 = 77; +const KEY_KPPLUS: u32 = 78; +const KEY_KP1: u32 = 79; +const KEY_KP2: u32 = 80; +const KEY_KP3: u32 = 81; +const KEY_KP0: u32 = 82; +const KEY_KPDOT: u32 = 83; +const KEY_ZENKAKUHANKAKU: u32 = 85; +const KEY_102ND: u32 = 86; +const KEY_F11: u32 = 87; +const KEY_F12: u32 = 88; +const KEY_RO: u32 = 89; +const KEY_KATAKANA: u32 = 90; +const KEY_HIRAGANA: u32 = 91; +const KEY_HENKAN: u32 = 92; +const KEY_KATAKANAHIRAGANA: u32 = 93; +const KEY_MUHENKAN: u32 = 94; +const KEY_KPJPCOMMA: u32 = 95; +const KEY_KPENTER: u32 = 96; +const KEY_RIGHTCTRL: u32 = 97; +const KEY_KPSLASH: u32 = 98; +const KEY_SYSRQ: u32 = 99; +const KEY_RIGHTALT: u32 = 100; +const KEY_LINEFEED: u32 = 101; +const KEY_HOME: u32 = 102; +const KEY_UP: u32 = 103; +const KEY_PAGEUP: u32 = 104; +const KEY_LEFT: u32 = 105; +const KEY_RIGHT: u32 = 106; +const KEY_END: u32 = 107; +const KEY_DOWN: u32 = 108; +const KEY_PAGEDOWN: u32 = 109; +const KEY_INSERT: u32 = 110; +const KEY_DELETE: u32 = 111; +const KEY_MACRO: u32 = 112; +const KEY_MUTE: u32 = 113; +const KEY_VOLUMEDOWN: u32 = 114; +const KEY_VOLUMEUP: u32 = 115; +const KEY_POWER : u32 = 116 /* SC System Power Down */; +const KEY_KPEQUAL: u32 = 117; +const KEY_KPPLUSMINUS: u32 = 118; +const KEY_PAUSE: u32 = 119; +const KEY_SCALE : u32 = 120 /* AL Compiz Scale (Expose) */; +const KEY_KPCOMMA: u32 = 121; +const KEY_HANGEUL: u32 = 122; +const KEY_HANGUEL: u32 = KEY_HANGEUL; +const KEY_HANJA: u32 = 123; +const KEY_YEN: u32 = 124; +const KEY_LEFTMETA: u32 = 125; +const KEY_RIGHTMETA: u32 = 126; +const KEY_COMPOSE: u32 = 127; +const KEY_STOP : u32 = 128 /* AC Stop */; +const KEY_AGAIN: u32 = 129; +const KEY_PROPS : u32 = 130 /* AC Properties */; +const KEY_UNDO : u32 = 131 /* AC Undo */; +const KEY_FRONT: u32 = 132; +const KEY_COPY : u32 = 133 /* AC Copy */; +const KEY_OPEN : u32 = 134 /* AC Open */; +const KEY_PASTE : u32 = 135 /* AC Paste */; +const KEY_FIND : u32 = 136 /* AC Search */; +const KEY_CUT : u32 = 137 /* AC Cut */; +const KEY_HELP : u32 = 138 /* AL Integrated Help Center */; +const KEY_MENU : u32 = 139 /* Menu (show menu) */; +const KEY_CALC : u32 = 140 /* AL Calculator */; +const KEY_SETUP: u32 = 141; +const KEY_SLEEP : u32 = 142 /* SC System Sleep */; +const KEY_WAKEUP : u32 = 143 /* System Wake Up */; +const KEY_FILE : u32 = 144 /* AL Local Machine Browser */; +const KEY_SENDFILE: u32 = 145; +const KEY_DELETEFILE: u32 = 146; +const KEY_XFER: u32 = 147; +const KEY_PROG1: u32 = 148; +const KEY_PROG2: u32 = 149; +const KEY_WWW : u32 = 150 /* AL Internet Browser */; +const KEY_MSDOS: u32 = 151; +const KEY_COFFEE : u32 = 152 /* AL Terminal Lock/Screensaver */; +const KEY_SCREENLOCK: u32 = KEY_COFFEE; +const KEY_ROTATE_DISPLAY : u32 = 153 /* Display orientation for e.g. tablets */; +const KEY_DIRECTION: u32 = KEY_ROTATE_DISPLAY; +const KEY_CYCLEWINDOWS: u32 = 154; +const KEY_MAIL: u32 = 155; +const KEY_BOOKMARKS : u32 = 156 /* AC Bookmarks */; +const KEY_COMPUTER: u32 = 157; +const KEY_BACK : u32 = 158 /* AC Back */; +const KEY_FORWARD : u32 = 159 /* AC Forward */; +const KEY_CLOSECD: u32 = 160; +const KEY_EJECTCD: u32 = 161; +const KEY_EJECTCLOSECD: u32 = 162; +const KEY_NEXTSONG: u32 = 163; +const KEY_PLAYPAUSE: u32 = 164; +const KEY_PREVIOUSSONG: u32 = 165; +const KEY_STOPCD: u32 = 166; +const KEY_RECORD: u32 = 167; +const KEY_REWIND: u32 = 168; +const KEY_PHONE : u32 = 169 /* Media Select Telephone */; +const KEY_ISO: u32 = 170; +const KEY_CONFIG : u32 = 171 /* AL Consumer Control Configuration */; +const KEY_HOMEPAGE : u32 = 172 /* AC Home */; +const KEY_REFRESH : u32 = 173 /* AC Refresh */; +const KEY_EXIT : u32 = 174 /* AC Exit */; +const KEY_MOVE: u32 = 175; +const KEY_EDIT: u32 = 176; +const KEY_SCROLLUP: u32 = 177; +const KEY_SCROLLDOWN: u32 = 178; +const KEY_KPLEFTPAREN: u32 = 179; +const KEY_KPRIGHTPAREN: u32 = 180; +const KEY_NEW : u32 = 181 /* AC New */; +const KEY_REDO : u32 = 182 /* AC Redo/Repeat */; +const KEY_F13: u32 = 183; +const KEY_F14: u32 = 184; +const KEY_F15: u32 = 185; +const KEY_F16: u32 = 186; +const KEY_F17: u32 = 187; +const KEY_F18: u32 = 188; +const KEY_F19: u32 = 189; +const KEY_F20: u32 = 190; +const KEY_F21: u32 = 191; +const KEY_F22: u32 = 192; +const KEY_F23: u32 = 193; +const KEY_F24: u32 = 194; +const KEY_PLAYCD: u32 = 200; +const KEY_PAUSECD: u32 = 201; +const KEY_PROG3: u32 = 202; +const KEY_PROG4: u32 = 203; +const KEY_ALL_APPLICATIONS : u32 = 204 /* AC Desktop Show All Applications */; +const KEY_DASHBOARD: u32 = KEY_ALL_APPLICATIONS; +const KEY_SUSPEND: u32 = 205; +const KEY_CLOSE : u32 = 206 /* AC Close */; +const KEY_PLAY: u32 = 207; +const KEY_FASTFORWARD: u32 = 208; +const KEY_BASSBOOST: u32 = 209; +const KEY_PRINT : u32 = 210 /* AC Print */; +const KEY_HP: u32 = 211; +const KEY_CAMERA: u32 = 212; +const KEY_SOUND: u32 = 213; +const KEY_QUESTION: u32 = 214; +const KEY_EMAIL: u32 = 215; +const KEY_CHAT: u32 = 216; +const KEY_SEARCH: u32 = 217; +const KEY_CONNECT: u32 = 218; +const KEY_FINANCE : u32 = 219 /* AL Checkbook/Finance */; +const KEY_SPORT: u32 = 220; +const KEY_SHOP: u32 = 221; +const KEY_ALTERASE: u32 = 222; +const KEY_CANCEL : u32 = 223 /* AC Cancel */; +const KEY_BRIGHTNESSDOWN: u32 = 224; +const KEY_BRIGHTNESSUP: u32 = 225; +const KEY_MEDIA: u32 = 226; +const KEY_SWITCHVIDEOMODE : u32 = 227 /* Cycle between available video outputs (Monitor/LCD/TV-out/etc) */; +const KEY_KBDILLUMTOGGLE: u32 = 228; +const KEY_KBDILLUMDOWN: u32 = 229; +const KEY_KBDILLUMUP: u32 = 230; +const KEY_SEND : u32 = 231 /* AC Send */; +const KEY_REPLY : u32 = 232 /* AC Reply */; +const KEY_FORWARDMAIL : u32 = 233 /* AC Forward Msg */; +const KEY_SAVE : u32 = 234 /* AC Save */; +const KEY_DOCUMENTS: u32 = 235; +const KEY_BATTERY: u32 = 236; +const KEY_BLUETOOTH: u32 = 237; +const KEY_WLAN: u32 = 238; +const KEY_UWB: u32 = 239; +const KEY_UNKNOWN: u32 = 240; +const KEY_VIDEO_NEXT : u32 = 241 /* drive next video source */; +const KEY_VIDEO_PREV : u32 = 242 /* drive previous video source */; +const KEY_BRIGHTNESS_CYCLE : u32 = 243 /* brightness up, after max is min */; +const KEY_BRIGHTNESS_AUTO : u32 = 244 /* Set Auto Brightness: manual brightness control is off, rely on ambient */; +const KEY_BRIGHTNESS_ZERO: u32 = KEY_BRIGHTNESS_AUTO; +const KEY_DISPLAY_OFF : u32 = 245 /* display device to off state */; +const KEY_WWAN : u32 = 246 /* Wireless WAN (LTE, UMTS, GSM, etc.) */; +const KEY_WIMAX: u32 = KEY_WWAN; +const KEY_RFKILL : u32 = 247 /* Key that controls all radios */; +const KEY_MICMUTE : u32 = 248 /* Mute / unmute the microphone */; + pub const KEYMAP: &str = "xkb_keymap {}"; pub const KEYMAP_: &str = "xkb_keymap {\ diff --git a/flake.nix b/flake.nix index f00ac9b..4c8667d 100644 --- a/flake.nix +++ b/flake.nix @@ -117,10 +117,6 @@ wasmBindgen pkgs.libxkbcommon - - pkgs.clang - pkgs.llvmPackages.libclang - ]; scripts.checkall.exec = '' From d0a458b4503262176cadaab6007a404e911eb54d Mon Sep 17 00:00:00 2001 From: Mona Mayrhofer Date: Tue, 3 Mar 2026 17:46:51 +0100 Subject: [PATCH 2/4] add cursor flinging --- Cargo.lock | 16 + crates/cursor-move-webapp/Cargo.toml | 2 + .../assets/styling/controls.module.css | 3 + .../assets/styling/keyboard_area.module.css | 8 + .../assets/styling/main.css | 5 +- .../assets/styling/mouse_area.module.css | 3 +- .../src/components/controls.rs | 99 ++ .../src/components/keyboard_area.rs | 57 + .../cursor-move-webapp/src/components/mod.rs | 4 + .../src/components/mouse_area.rs | 283 ++- crates/cursor-move-webapp/src/main.rs | 2 + .../src/server/input_proxy_service.rs | 86 +- .../cursor-move-webapp/src/server/keymap.rs | 1550 +---------------- crates/cursor-move-webapp/src/utils/mod.rs | 1 + .../src/utils/mouse_filter_buffer.rs | 80 + crates/cursor-move-webapp/src/views/home.rs | 4 +- 16 files changed, 511 insertions(+), 1692 deletions(-) create mode 100644 crates/cursor-move-webapp/assets/styling/controls.module.css create mode 100644 crates/cursor-move-webapp/assets/styling/keyboard_area.module.css create mode 100644 crates/cursor-move-webapp/src/components/controls.rs create mode 100644 crates/cursor-move-webapp/src/components/keyboard_area.rs create mode 100644 crates/cursor-move-webapp/src/utils/mod.rs create mode 100644 crates/cursor-move-webapp/src/utils/mouse_filter_buffer.rs diff --git a/Cargo.lock b/Cargo.lock index 375aa93..031c856 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -757,10 +757,12 @@ name = "cursor-move-webapp" version = "0.1.0" dependencies = [ "dioxus", + "dioxus-html", "memfile", "rustix 1.1.4", "serde", "tokio", + "wasmtimer", "wayland-client", "wayland-protocols", "wayland-protocols-misc", @@ -5590,6 +5592,20 @@ dependencies = [ "semver", ] +[[package]] +name = "wasmtimer" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c598d6b99ea013e35844697fc4670d08339d5cda15588f193c6beedd12f644b" +dependencies = [ + "futures", + "js-sys", + "parking_lot", + "pin-utils", + "slab", + "wasm-bindgen", +] + [[package]] name = "wayland-backend" version = "0.3.12" diff --git a/crates/cursor-move-webapp/Cargo.toml b/crates/cursor-move-webapp/Cargo.toml index 9b8fdf2..d74a50f 100644 --- a/crates/cursor-move-webapp/Cargo.toml +++ b/crates/cursor-move-webapp/Cargo.toml @@ -8,6 +8,7 @@ edition = "2024" [dependencies] dioxus = { version = "0.7.3", features = ["router", "fullstack", "logger"] } +dioxus-html = { version = "0.7.3", features = ["serialize"] } serde = { version = "1.0.228", features = ["derive"] } wayland-client = { version = "0.31.12", optional = true } @@ -18,6 +19,7 @@ wayland-protocols-misc = { version = "0.3.10", features = ["client"], optional = wayland-protocols = { version = "0.32.10", features = ["client", "staging"], optional = true } xkb = {version = "0.3.0", optional = true} memfile = {version = "0.3.2", optional = true} +wasmtimer = "0.4.3" [features] default = ["web"] diff --git a/crates/cursor-move-webapp/assets/styling/controls.module.css b/crates/cursor-move-webapp/assets/styling/controls.module.css new file mode 100644 index 0000000..20c62df --- /dev/null +++ b/crates/cursor-move-webapp/assets/styling/controls.module.css @@ -0,0 +1,3 @@ +.controls { + flex-grow: 1; +} diff --git a/crates/cursor-move-webapp/assets/styling/keyboard_area.module.css b/crates/cursor-move-webapp/assets/styling/keyboard_area.module.css new file mode 100644 index 0000000..8362b83 --- /dev/null +++ b/crates/cursor-move-webapp/assets/styling/keyboard_area.module.css @@ -0,0 +1,8 @@ +.keyboard-area { + height: 48px; + + input { + width: 100%; + height: 100%; + } +} diff --git a/crates/cursor-move-webapp/assets/styling/main.css b/crates/cursor-move-webapp/assets/styling/main.css index 07bd1dc..814f086 100644 --- a/crates/cursor-move-webapp/assets/styling/main.css +++ b/crates/cursor-move-webapp/assets/styling/main.css @@ -3,8 +3,9 @@ body, #main { margin: 0; padding: 0; - min-height: 100vh; - width: 100vw; + min-height: 100dvh; + width: 100dvw; + overflow: hidden; } #main { diff --git a/crates/cursor-move-webapp/assets/styling/mouse_area.module.css b/crates/cursor-move-webapp/assets/styling/mouse_area.module.css index 2be2e3a..62e637c 100644 --- a/crates/cursor-move-webapp/assets/styling/mouse_area.module.css +++ b/crates/cursor-move-webapp/assets/styling/mouse_area.module.css @@ -1,5 +1,6 @@ .mouse-area { - background-color: white; + background: radial-gradient(#0004 15%, transparent 20%), white; + background-size: 15px 15px; touch-action: none; flex-grow: 1; diff --git a/crates/cursor-move-webapp/src/components/controls.rs b/crates/cursor-move-webapp/src/components/controls.rs new file mode 100644 index 0000000..5dc812c --- /dev/null +++ b/crates/cursor-move-webapp/src/components/controls.rs @@ -0,0 +1,99 @@ +use dioxus::{ + fullstack::{CborEncoding, WebSocketOptions, Websocket, extract::State, use_websocket}, + html::{ + geometry::{ElementSpace, euclid::Point2D}, + input_data::MouseButton, + }, + logger::tracing, + prelude::*, +}; +use serde::{Deserialize, Serialize}; + +use crate::components::{KeyboardArea, MouseArea}; + +#[component] +pub fn Controls() -> Element { + #[css_module("/assets/styling/controls.module.css")] + struct Styles; + + let mut socket = use_websocket(move || mouse_move(WebSocketOptions::new())); + + use_future(move || async move { + loop { + // Wait for the socket to connect + _ = socket.connect().await; + + // Loop poll with recv. Throws an error when the connection closes, making it possible + // to run code before the socket re-connects when the name input changes + while let Ok(message) = socket.recv().await { + tracing::info!("Received message: {:?}", message); + } + } + }); + + let event_handler = use_callback(move |evt| { + spawn(async move { + _ = socket.send(evt).await; + }); + }); + + rsx! { + div { + class: Styles::controls, + MouseArea { onevent: event_handler } + KeyboardArea { onevent: event_handler } + } + } +} + +#[derive(Serialize, Deserialize, Debug)] +pub enum ClientEvent { + MouseMove { dx: f64, dy: f64 }, + MouseScroll { dx: f64, dy: f64 }, + Click { button: MouseButton }, + KeyPressEvent { key: String }, + TextInputStartEvent, + TextInputEvent { text: String }, + TextInputDoneEvent { text: String }, +} + +#[derive(Serialize, Deserialize, Debug)] +enum ServerEvent { + Ping, +} + +#[expect(clippy::unused_async)] +#[get("/api/mouse_move_ws", mouse_service: State)] +async fn mouse_move( + options: WebSocketOptions +) -> Result> { + Ok(options.on_upgrade(move |mut socket| async move { + _ = socket.send(ServerEvent::Ping).await; + + while let Ok(event) = socket.recv().await { + match event { + ClientEvent::MouseMove { dx, dy } => { + mouse_service.move_mouse(dx, dy).await; + }, + ClientEvent::MouseScroll { dx, dy } => { + mouse_service.mouse_scroll(dx, dy).await; + }, + ClientEvent::Click { button } => { + mouse_service.click(button).await; + }, + ClientEvent::KeyPressEvent { key } => { + mouse_service.key_press_event(key).await; + }, + ClientEvent::TextInputEvent { text } => { + mouse_service.text_input(text).await; + }, + ClientEvent::TextInputStartEvent => { + mouse_service.text_input_start().await; + }, + ClientEvent::TextInputDoneEvent { text } => { + mouse_service.text_input_end(text).await; + }, + } + } + })) +} diff --git a/crates/cursor-move-webapp/src/components/keyboard_area.rs b/crates/cursor-move-webapp/src/components/keyboard_area.rs new file mode 100644 index 0000000..885c39d --- /dev/null +++ b/crates/cursor-move-webapp/src/components/keyboard_area.rs @@ -0,0 +1,57 @@ +use dioxus::prelude::*; + +use crate::components::controls::ClientEvent; + +#[component] +pub fn KeyboardArea(onevent: EventHandler) -> Element { + #[css_module("/assets/styling/keyboard_area.module.css")] + struct Styles; + + let mut input_state = use_signal(String::new); + let input_handler = use_callback(move |evt: Event| { + let v = evt.value(); + input_state.set(v.clone()); + + onevent.call(ClientEvent::TextInputEvent { text: v }) + }); + let key_press_handler = use_callback(move |evt: Event| { + if input_state.read().is_empty() { + match evt.key() { + Key::Character(_) => {}, + _ => { + onevent.call(ClientEvent::KeyPressEvent { + key: evt.key().to_string(), + }); + }, + } + } else if evt.key() == Key::Enter { + onevent.call(ClientEvent::TextInputDoneEvent { + text: input_state.replace(String::new()), + }); + } + }); + let input_focus_handler = use_callback(move |_: Event| { + input_state.set(String::new()); + onevent.call(ClientEvent::TextInputStartEvent); + }); + + let input_blur_handler = use_callback(move |_: Event| { + onevent.call(ClientEvent::TextInputDoneEvent { + text: input_state.replace(String::new()), + }); + }); + + rsx! { + div { + class: Styles::keyboard_area, + + input { + oninput: input_handler, + value: input_state, + onkeydown: key_press_handler, + onfocus: input_focus_handler, + onblur: input_blur_handler + } + } + } +} diff --git a/crates/cursor-move-webapp/src/components/mod.rs b/crates/cursor-move-webapp/src/components/mod.rs index a3263ad..f319458 100644 --- a/crates/cursor-move-webapp/src/components/mod.rs +++ b/crates/cursor-move-webapp/src/components/mod.rs @@ -1,2 +1,6 @@ +mod controls; +mod keyboard_area; mod mouse_area; +pub use controls::Controls; +pub use keyboard_area::KeyboardArea; pub use mouse_area::MouseArea; diff --git a/crates/cursor-move-webapp/src/components/mouse_area.rs b/crates/cursor-move-webapp/src/components/mouse_area.rs index 0caf6d1..e684f41 100644 --- a/crates/cursor-move-webapp/src/components/mouse_area.rs +++ b/crates/cursor-move-webapp/src/components/mouse_area.rs @@ -1,5 +1,10 @@ +use std::{ + collections::{HashMap, VecDeque}, + ops::Sub, + time::Duration, +}; + use dioxus::{ - fullstack::{CborEncoding, WebSocketOptions, Websocket, extract::State, use_websocket}, html::{ geometry::{ElementSpace, euclid::Point2D}, input_data::MouseButton, @@ -7,184 +12,160 @@ use dioxus::{ logger::tracing, prelude::*, }; -use serde::{Deserialize, Serialize}; +use dioxus_html::geometry::euclid::Vector2D; + +use crate::{components::controls::ClientEvent, utils::mouse_filter_buffer::MouseFilterBuffer}; + +const FLING_START_THRESHOLD_VELOCITY: f64 = 500.0; +const FLING_STOP_THRESHOLD_VELOCITY: f64 = 100.0; +const FLING_DAMPENING: f64 = 0.98; + +pub struct PointerRegistryData { + initial_position: Point2D, + + last_positions: MouseFilterBuffer, +} + +pub struct FlingerData { + velocity: Vector2D, +} + +#[derive(Default)] +pub struct PointerRegistry { + pointers: HashMap, +} + +#[derive(Default)] +pub struct FlingerRegistry { + flinger: Option, +} #[component] -pub fn MouseArea() -> Element { +pub fn MouseArea(onevent: EventHandler) -> Element { #[css_module("/assets/styling/mouse_area.module.css")] struct Styles; - let mut last_cursor_position = use_signal::>>(|| None); - - let mut socket = use_websocket(move || mouse_move(WebSocketOptions::new())); - - use_future(move || async move { - loop { - // Wait for the socket to connect - _ = socket.connect().await; - - // Loop poll with recv. Throws an error when the connection closes, making it possible - // to run code before the socket re-connects when the name input changes - while let Ok(message) = socket.recv().await { - tracing::info!("Received message: {:?}", message); - } - } - }); + let mut registry = use_signal::(PointerRegistry::default); + let mut flingers = use_signal::(FlingerRegistry::default); let pointer_move_handler = use_callback(move |evt: Event| { - if evt.held_buttons().contains(MouseButton::Primary) { + let mut registry = registry.write(); + if let Some(data) = registry.pointers.get_mut(&evt.pointer_id()) { evt.prevent_default(); let point = evt.element_coordinates(); - let last_position = last_cursor_position.write().replace(point); + let last_position = data.last_positions.back(); + let delta = point - last_position.position; - if let Some(last_position) = last_position { - let delta = point - last_position; + data.last_positions + .push(point, wasmtimer::std::SystemTime::now()); - spawn(async move { - _ = socket - .send(ClientEvent::MouseMove { - dx: delta.x, - dy: delta.y, - }) - .await; + if registry.pointers.len() == 1 { + onevent.call(ClientEvent::MouseMove { + dx: delta.x, + dy: delta.y, + }); + } else if registry.pointers.len() == 2 { + onevent.call(ClientEvent::MouseScroll { + dx: -delta.x, + dy: -delta.y, }); } } }); let pointer_down_handler = use_callback(move |evt: Event| { + //If any pointer is down, we cancel the flingers + flingers.write().flinger.take(); + let point = evt.element_coordinates(); - *last_cursor_position.write() = Some(point); + + registry.write().pointers.insert( + evt.pointer_id(), + PointerRegistryData { + last_positions: MouseFilterBuffer::new( + 10, + point, + wasmtimer::std::SystemTime::now(), + ), + initial_position: point, + }, + ); }); + let pointer_up_handler = use_callback(move |evt: Event| { + let point = evt.element_coordinates(); + let mut registry = registry.write(); + let data = registry.pointers.remove(&evt.pointer_id()); + if let Some(data) = data { + let distance_moved = data.initial_position - point; + let release_velocity = data.last_positions.average_velocity_since( + wasmtimer::std::SystemTime::now().sub(Duration::from_millis(100)), + ); + tracing::info!("Release Velocity: {:?}", release_velocity.length()); - let pointer_click_handler = use_callback(move |evt: Event| { - spawn(async move { - _ = socket.send(ClientEvent::Click).await; - }); - }); - - let key_down_handler = use_callback(move |evt: Event| { - spawn(async move { - _ = socket - .send(ClientEvent::KeyEvent { - key: evt.key().to_string(), - is_pressed: true, - }) - .await; - }); - }); - - // let key_up_handler = use_callback(move |evt: Event| { - // spawn(async move { - // _ = socket - // .send(ClientEvent::KeyEvent { - // key: evt.key().to_string(), - // is_pressed: false, - // }) - // .await; - // }); - // }); - - let mut input_state = use_signal(String::new); - let input_handler = use_callback(move |evt: Event| { - let v = evt.value(); - input_state.set(v.clone()); - - spawn(async move { - _ = socket.send(ClientEvent::TextInputEvent { text: v }).await; - }); - }); - let key_press_handler = use_callback(move |evt: Event| { - if evt.key() == Key::Enter { - spawn(async move { - _ = socket - .send(ClientEvent::TextInputDoneEvent { - text: input_state.replace(String::new()), - }) - .await; - }); + if distance_moved.length() <= 1.0 { + match registry.pointers.len() { + 0 => { + onevent.call(ClientEvent::Click { + button: MouseButton::Primary, + }); + }, + 1 => { + onevent.call(ClientEvent::Click { + button: MouseButton::Secondary, + }); + }, + _ => {}, + } + } else if release_velocity.length() > FLING_START_THRESHOLD_VELOCITY { + //We only fling if there are no other pointers + if registry.pointers.is_empty() { + flingers.write().flinger = Some(FlingerData { + velocity: release_velocity, + }); + } + } } }); - let input_focus_handler = use_callback(move |evt: Event| { - input_state.set(String::new()); - spawn(async move { - _ = socket.send(ClientEvent::TextInputStartEvent).await; - }); - }); - let input_blur_handler = use_callback(move |evt: Event| { - spawn(async move { - _ = socket - .send(ClientEvent::TextInputDoneEvent { - text: input_state.replace(String::new()), - }) - .await; - }); + use_future(move || async move { + let mut last_frame_time = wasmtimer::std::SystemTime::now(); + + loop { + wasmtimer::tokio::sleep(Duration::from_millis(16)).await; + let new_frame_time = wasmtimer::std::SystemTime::now(); + let delta_seconds = new_frame_time + .duration_since(last_frame_time) + .unwrap() + .as_secs_f64(); + last_frame_time = new_frame_time; + + let mut flinger = flingers.write(); + let new_flinger = flinger.flinger.as_ref().and_then(|flinger| { + if flinger.velocity.length() < FLING_STOP_THRESHOLD_VELOCITY { + None + } else { + onevent.call(ClientEvent::MouseMove { + dx: flinger.velocity.x * delta_seconds, + dy: flinger.velocity.y * delta_seconds, + }); + + //tracing::info!("Fling: {:?}", flinger.velocity); + Some(FlingerData { + velocity: flinger.velocity * FLING_DAMPENING, + }) + } + }); + flinger.flinger = new_flinger; + } }); rsx! { div { - input { - oninput: input_handler, - value: input_state, - onkeypress: key_press_handler, - onfocus: input_focus_handler, - onblur: input_blur_handler } - div { - class: Styles::mouse_area, + class: Styles::mouse_area, - onpointermove: pointer_move_handler, - onpointerdown: pointer_down_handler, - onclick: pointer_click_handler - } + onpointermove: pointer_move_handler, + onpointerdown: pointer_down_handler, + onpointerup: pointer_up_handler, } } } - -#[derive(Serialize, Deserialize, Debug)] -enum ClientEvent { - MouseMove { dx: f64, dy: f64 }, - Click, - KeyEvent { key: String, is_pressed: bool }, - TextInputStartEvent, - TextInputEvent { text: String }, - TextInputDoneEvent { text: String }, -} - -#[derive(Serialize, Deserialize, Debug)] -enum ServerEvent { - Ping, -} - -#[expect(clippy::unused_async)] -#[get("/api/mouse_move_ws", mouse_service: State)] -async fn mouse_move( - options: WebSocketOptions -) -> Result> { - Ok(options.on_upgrade(move |mut socket| async move { - _ = socket.send(ServerEvent::Ping).await; - - while let Ok(event) = socket.recv().await { - match event { - ClientEvent::MouseMove { dx, dy } => { - mouse_service.move_mouse(dx, dy).await; - }, - ClientEvent::Click => { - mouse_service.click().await; - }, - ClientEvent::KeyEvent { key, is_pressed } => { - mouse_service.key_event(key, is_pressed).await; - }, - ClientEvent::TextInputEvent { text } => { - mouse_service.text_input(text).await; - }, - ClientEvent::TextInputStartEvent => { - mouse_service.text_input_start().await; - }, - ClientEvent::TextInputDoneEvent { text } => { - mouse_service.text_input_end(text).await; - }, - } - } - })) -} diff --git a/crates/cursor-move-webapp/src/main.rs b/crates/cursor-move-webapp/src/main.rs index d171f40..749da33 100644 --- a/crates/cursor-move-webapp/src/main.rs +++ b/crates/cursor-move-webapp/src/main.rs @@ -4,6 +4,7 @@ use dioxus::prelude::*; use views::{Home, Navbar}; mod components; +mod utils; mod views; #[cfg(feature = "server")] @@ -45,6 +46,7 @@ fn App() -> Element { rsx! { document::Link { rel: "icon", href: FAVICON } document::Link { rel: "stylesheet", href: MAIN_CSS } + document::Meta { name: "viewport", content: "width=device-width, initial-scale=1.0" } Router:: {} } diff --git a/crates/cursor-move-webapp/src/server/input_proxy_service.rs b/crates/cursor-move-webapp/src/server/input_proxy_service.rs index fb4cef8..9a77df1 100644 --- a/crates/cursor-move-webapp/src/server/input_proxy_service.rs +++ b/crates/cursor-move-webapp/src/server/input_proxy_service.rs @@ -4,13 +4,14 @@ use dioxus::{ fullstack::{FullstackContext, extract::FromRef}, logger::tracing, }; +use dioxus_html::input_data::MouseButton; use memfile::MemFile; use rustix::time::{ClockId, clock_gettime}; use tokio::sync::Mutex; use wayland_client::{ Connection, Dispatch, EventQueue, Proxy, QueueHandle, protocol::{ - wl_pointer::ButtonState, + wl_pointer::{Axis, ButtonState}, wl_registry::{Event, WlRegistry}, wl_seat::{self, WlSeat}, }, @@ -29,12 +30,12 @@ use wayland_protocols_wlr::virtual_pointer::v1::client::{ zwlr_virtual_pointer_v1::ZwlrVirtualPointerV1, }; -use crate::server::keymap; +use crate::server::keymap::{self, web_key_to_linux_keycode}; // https://github.com/torvalds/linux/blob/master/include/uapi/linux/input-event-codes.h const BUTTON_LEFT: u32 = 0x110; -const BTN_RIGHT: u32 = 0x111; -const BTN_MIDDLE: u32 = 0x112; +const BUTTON_RIGHT: u32 = 0x111; +const BUTTON_MIDDLE: u32 = 0x112; // https://wayland.app/protocols/wayland#wl_keyboard:enum:keymap_format const NO_KEYMAP: u32 = 0; @@ -78,37 +79,72 @@ impl InputProxyService { } } - pub async fn click(&self) { + pub async fn mouse_scroll( + &self, + dx: f64, + dy: f64, + ) { let guard = self.input_proxy_service_state.lock().await; if let Some(pointer) = &guard.state.virtual_pointer() { - tracing::info!("Do click"); let time = get_wayland_timestamp(); - - pointer.button(time, BUTTON_LEFT, ButtonState::Pressed); - pointer.frame(); - pointer.button(time, BUTTON_LEFT, ButtonState::Released); + pointer.axis(time, Axis::HorizontalScroll, dx); + pointer.axis(time, Axis::VerticalScroll, dy); pointer.frame(); guard.event_queue.flush().unwrap(); } } - pub async fn key_event( + pub async fn click( + &self, + button: MouseButton, + ) { + let guard = self.input_proxy_service_state.lock().await; + if let Some(pointer) = &guard.state.virtual_pointer() { + tracing::info!("Do click"); + let time = get_wayland_timestamp(); + + let button = match button { + MouseButton::Primary => BUTTON_LEFT, + MouseButton::Secondary => BUTTON_RIGHT, + MouseButton::Auxiliary => BUTTON_MIDDLE, + MouseButton::Fourth | MouseButton::Fifth | MouseButton::Unknown => { + return; + }, + }; + + pointer.button(time, button, ButtonState::Pressed); + pointer.frame(); + pointer.button(time, button, ButtonState::Released); + pointer.frame(); + guard.event_queue.flush().unwrap(); + } + } + + pub async fn key_press_event( &self, key: String, - is_pressed: bool, ) { - todo!(); + let guard = self.input_proxy_service_state.lock().await; + + if let Some(keyboard) = guard.state.virtual_keyboard() { + let time = get_wayland_timestamp(); + let key = web_key_to_linux_keycode(key.as_str()).unwrap(); + keyboard.key(time, key, 1); + keyboard.key(time, key, 0); + + guard.event_queue.flush().unwrap(); + } } pub async fn text_input_start(&self) { let mut guard = self.input_proxy_service_state.lock().await; - if let Some(keyboard) = guard.state.input_method_mut() { - keyboard.input_method_state += 1; + if let Some(ime) = guard.state.input_method_mut() { + ime.input_method_state += 1; tracing::info!("Text Input Start"); - keyboard.input_method.delete_surrounding_text(4, 4); - keyboard.input_method.commit(keyboard.input_method_state); + ime.input_method.delete_surrounding_text(4, 4); + ime.input_method.commit(ime.input_method_state); guard.event_queue.flush().unwrap(); } @@ -119,12 +155,12 @@ impl InputProxyService { ) { let mut guard = self.input_proxy_service_state.lock().await; - if let Some(keyboard) = guard.state.input_method_mut() { - keyboard.input_method_state += 1; + if let Some(ime) = guard.state.input_method_mut() { + ime.input_method_state += 1; tracing::info!("Text Input {key}"); - keyboard.input_method.set_preedit_string(key, 0, 0); - keyboard.input_method.commit(keyboard.input_method_state); + ime.input_method.set_preedit_string(key, 0, 0); + ime.input_method.commit(ime.input_method_state); guard.event_queue.flush().unwrap(); } } @@ -134,12 +170,12 @@ impl InputProxyService { ) { let mut guard = self.input_proxy_service_state.lock().await; - if let Some(keyboard) = guard.state.input_method_mut() { - keyboard.input_method_state += 1; + if let Some(ime) = guard.state.input_method_mut() { + ime.input_method_state += 1; tracing::info!("Text Input End"); - keyboard.input_method.commit_string(text); - keyboard.input_method.commit(keyboard.input_method_state); + ime.input_method.commit_string(text); + ime.input_method.commit(ime.input_method_state); guard.event_queue.flush().unwrap(); } } diff --git a/crates/cursor-move-webapp/src/server/keymap.rs b/crates/cursor-move-webapp/src/server/keymap.rs index de52a2f..93c6432 100644 --- a/crates/cursor-move-webapp/src/server/keymap.rs +++ b/crates/cursor-move-webapp/src/server/keymap.rs @@ -1,10 +1,12 @@ +use dioxus::logger::tracing; + fn is_key_string(s: &str) -> bool { s.chars().all(|c| !c.is_control()) && s.chars().skip(1).all(|c| !c.is_ascii()) } pub fn web_key_to_linux_keycode(s: &str) -> Option { + tracing::info!("Converting {s}"); match s { - //s if is_key_string(s) => Ok(Character(s.to_string())), "Unidentified" => todo!(), "Alt" => Some(KEY_LEFTALT), "AltGraph" => Some(KEY_RIGHTALT), @@ -20,17 +22,17 @@ pub fn web_key_to_linux_keycode(s: &str) -> Option { "SymbolLock" => todo!(), "Hyper" => todo!(), "Super" => todo!(), - "Enter" => todo!(), - "Tab" => todo!(), - "ArrowDown" => todo!(), - "ArrowLeft" => todo!(), - "ArrowRight" => todo!(), - "ArrowUp" => todo!(), - "End" => todo!(), - "Home" => todo!(), - "PageDown" => todo!(), - "PageUp" => todo!(), - "Backspace" => todo!(), + "Enter" => Some(KEY_ENTER), + "Tab" => Some(KEY_TAB), + "ArrowDown" => Some(KEY_DOWN), + "ArrowLeft" => Some(KEY_LEFT), + "ArrowRight" => Some(KEY_RIGHT), + "ArrowUp" => Some(KEY_UP), + "End" => Some(KEY_END), + "Home" => Some(KEY_HOME), + "PageDown" => Some(KEY_PAGEDOWN), + "PageUp" => Some(KEY_PAGEUP), + "Backspace" => Some(KEY_BACKSPACE), "Clear" => todo!(), "Copy" => todo!(), "CrSel" => todo!(), @@ -82,7 +84,7 @@ pub fn web_key_to_linux_keycode(s: &str) -> Option { "NextCandidate" => todo!(), "NonConvert" => todo!(), "PreviousCandidate" => todo!(), - "Process" => todo!(), + "Process" => None, "SingleCandidate" => todo!(), "HangulMode" => todo!(), "HanjaMode" => todo!(), @@ -277,41 +279,30 @@ pub fn web_key_to_linux_keycode(s: &str) -> Option { "VideoModeNext" => todo!(), "Wink" => todo!(), "ZoomToggle" => todo!(), - "F1" => todo!(), - "F2" => todo!(), - "F3" => todo!(), - "F4" => todo!(), - "F5" => todo!(), - "F6" => todo!(), - "F7" => todo!(), - "F8" => todo!(), - "F9" => todo!(), - "F10" => todo!(), - "F11" => todo!(), - "F12" => todo!(), - "F13" => todo!(), - "F14" => todo!(), - "F15" => todo!(), - "F16" => todo!(), - "F17" => todo!(), - "F18" => todo!(), - "F19" => todo!(), - "F20" => todo!(), - "F21" => todo!(), - "F22" => todo!(), - "F23" => todo!(), - "F24" => todo!(), - "F25" => todo!(), - "F26" => todo!(), - "F27" => todo!(), - "F28" => todo!(), - "F29" => todo!(), - "F30" => todo!(), - "F31" => todo!(), - "F32" => todo!(), - "F33" => todo!(), - "F34" => todo!(), - "F35" => todo!(), + "F1" => Some(KEY_F1), + "F2" => Some(KEY_F2), + "F3" => Some(KEY_F3), + "F4" => Some(KEY_F4), + "F5" => Some(KEY_F5), + "F6" => Some(KEY_F6), + "F7" => Some(KEY_F7), + "F8" => Some(KEY_F8), + "F9" => Some(KEY_F9), + "F10" => Some(KEY_F10), + "F11" => Some(KEY_F11), + "F12" => Some(KEY_F12), + "F13" => Some(KEY_F13), + "F14" => Some(KEY_F14), + "F15" => Some(KEY_F15), + "F16" => Some(KEY_F16), + "F17" => Some(KEY_F17), + "F18" => Some(KEY_F18), + "F19" => Some(KEY_F19), + "F20" => Some(KEY_F20), + "F21" => Some(KEY_F21), + "F22" => Some(KEY_F22), + "F23" => Some(KEY_F23), + "F24" => Some(KEY_F24), _ => todo!(), } } @@ -567,1466 +558,3 @@ const KEY_RFKILL : u32 = 247 /* Key that controls all radios */; const KEY_MICMUTE : u32 = 248 /* Mute / unmute the microphone */; pub const KEYMAP: &str = "xkb_keymap {}"; - -pub const KEYMAP_: &str = "xkb_keymap {\ -xkb_keycodes \"(unnamed)\" {\ - minimum = 8;\ - maximum = 255;\ - = 9;\ - = 10;\ - = 11;\ - = 12;\ - = 13;\ - = 14;\ - = 15;\ - = 16;\ - = 17;\ - = 18;\ - = 19;\ - = 20;\ - = 21;\ - = 22;\ - = 23;\ - = 24;\ - = 25;\ - = 26;\ - = 27;\ - = 28;\ - = 29;\ - = 30;\ - = 31;\ - = 32;\ - = 33;\ - = 34;\ - = 35;\ - = 36;\ - = 37;\ - = 38;\ - = 39;\ - = 40;\ - = 41;\ - = 42;\ - = 43;\ - = 44;\ - = 45;\ - = 46;\ - = 47;\ - = 48;\ - = 49;\ - = 50;\ - = 51;\ - = 52;\ - = 53;\ - = 54;\ - = 55;\ - = 56;\ - = 57;\ - = 58;\ - = 59;\ - = 60;\ - = 61;\ - = 62;\ - = 63;\ - = 64;\ - = 65;\ - = 66;\ - = 67;\ - = 68;\ - = 69;\ - = 70;\ - = 71;\ - = 72;\ - = 73;\ - = 74;\ - = 75;\ - = 76;\ - = 77;\ - = 78;\ - = 79;\ - = 80;\ - = 81;\ - = 82;\ - = 83;\ - = 84;\ - = 85;\ - = 86;\ - = 87;\ - = 88;\ - = 89;\ - = 90;\ - = 91;\ - = 92;\ - = 94;\ - = 95;\ - = 96;\ - = 97;\ - = 98;\ - = 99;\ - = 100;\ - = 101;\ - = 102;\ - = 103;\ - = 104;\ - = 105;\ - = 106;\ - = 107;\ - = 108;\ - = 109;\ - = 110;\ - = 111;\ - = 112;\ - = 113;\ - = 114;\ - = 115;\ - = 116;\ - = 117;\ - = 118;\ - = 119;\ - = 120;\ - = 121;\ - = 122;\ - = 123;\ - = 124;\ - = 125;\ - = 126;\ - = 127;\ - = 128;\ - = 129;\ - = 130;\ - = 131;\ - = 132;\ - = 133;\ - = 134;\ - = 135;\ - = 136;\ - = 137;\ - = 138;\ - = 139;\ - = 140;\ - = 141;\ - = 142;\ - = 143;\ - = 144;\ - = 145;\ - = 146;\ - = 147;\ - = 148;\ - = 149;\ - = 150;\ - = 151;\ - = 152;\ - = 153;\ - = 154;\ - = 155;\ - = 156;\ - = 157;\ - = 158;\ - = 159;\ - = 160;\ - = 161;\ - = 162;\ - = 163;\ - = 164;\ - = 165;\ - = 166;\ - = 167;\ - = 168;\ - = 169;\ - = 170;\ - = 171;\ - = 172;\ - = 173;\ - = 174;\ - = 175;\ - = 176;\ - = 177;\ - = 178;\ - = 179;\ - = 180;\ - = 181;\ - = 182;\ - = 183;\ - = 184;\ - = 185;\ - = 186;\ - = 187;\ - = 188;\ - = 189;\ - = 190;\ - = 191;\ - = 192;\ - = 193;\ - = 194;\ - = 195;\ - = 196;\ - = 197;\ - = 198;\ - = 199;\ - = 200;\ - = 201;\ - = 202;\ - = 203;\ - = 204;\ - = 205;\ - = 206;\ - = 207;\ - = 208;\ - = 209;\ - = 210;\ - = 211;\ - = 212;\ - = 213;\ - = 214;\ - = 215;\ - = 216;\ - = 217;\ - = 218;\ - = 219;\ - = 220;\ - = 221;\ - = 222;\ - = 223;\ - = 224;\ - = 225;\ - = 226;\ - = 227;\ - = 228;\ - = 229;\ - = 230;\ - = 231;\ - = 232;\ - = 233;\ - = 234;\ - = 235;\ - = 236;\ - = 237;\ - = 238;\ - = 239;\ - = 240;\ - = 241;\ - = 242;\ - = 243;\ - = 244;\ - = 245;\ - = 246;\ - = 247;\ - = 248;\ - = 249;\ - = 250;\ - = 251;\ - = 252;\ - = 253;\ - = 254;\ - = 255;\ - indicator 1 = \"Caps Lock\";\ - indicator 2 = \"Num Lock\";\ - indicator 3 = \"Scroll Lock\";\ - indicator 4 = \"Compose\";\ - indicator 5 = \"Kana\";\ - indicator 6 = \"Sleep\";\ - indicator 7 = \"Suspend\";\ - indicator 8 = \"Mute\";\ - indicator 9 = \"Misc\";\ - indicator 10 = \"Mail\";\ - indicator 11 = \"Charging\";\ - indicator 12 = \"Shift Lock\";\ - indicator 13 = \"Group 2\";\ - indicator 14 = \"Mouse Keys\";\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ - alias = ;\ -};\ -\ -xkb_types \"(unnamed)\" {\ - virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ -\ - type \"ONE_LEVEL\" {\ - modifiers= none;\ - level_name[Level1]= \"Any\";\ - };\ - type \"TWO_LEVEL\" {\ - modifiers= Shift;\ - map[Shift]= Level2;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Shift\";\ - };\ - type \"ALPHABETIC\" {\ - modifiers= Shift+Lock;\ - map[Shift]= Level2;\ - map[Lock]= Level2;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Caps\";\ - };\ - type \"SHIFT+ALT\" {\ - modifiers= Shift+Alt;\ - map[Shift+Alt]= Level2;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Shift+Alt\";\ - };\ - type \"PC_SUPER_LEVEL2\" {\ - modifiers= Mod4;\ - map[Mod4]= Level2;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Super\";\ - };\ - type \"PC_CONTROL_LEVEL2\" {\ - modifiers= Control;\ - map[Control]= Level2;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Control\";\ - };\ - type \"PC_LCONTROL_LEVEL2\" {\ - modifiers= LControl;\ - map[LControl]= Level2;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"LControl\";\ - };\ - type \"PC_RCONTROL_LEVEL2\" {\ - modifiers= RControl;\ - map[RControl]= Level2;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"RControl\";\ - };\ - type \"PC_ALT_LEVEL2\" {\ - modifiers= Alt;\ - map[Alt]= Level2;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Alt\";\ - };\ - type \"PC_LALT_LEVEL2\" {\ - modifiers= LAlt;\ - map[LAlt]= Level2;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"LAlt\";\ - };\ - type \"PC_RALT_LEVEL2\" {\ - modifiers= RAlt;\ - map[RAlt]= Level2;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"RAlt\";\ - };\ - type \"CTRL+ALT\" {\ - modifiers= Shift+Control+Alt+LevelThree;\ - map[Shift]= Level2;\ - preserve[Shift]= Shift;\ - map[LevelThree]= Level3;\ - map[Shift+LevelThree]= Level4;\ - preserve[Shift+LevelThree]= Shift;\ - map[Control+Alt]= Level5;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Shift\";\ - level_name[Level3]= \"Alt Base\";\ - level_name[Level4]= \"Shift Alt\";\ - level_name[Level5]= \"Ctrl+Alt\";\ - };\ - type \"LOCAL_EIGHT_LEVEL\" {\ - modifiers= Shift+Lock+Control+LevelThree;\ - map[Shift]= Level2;\ - map[Lock]= Level2;\ - map[LevelThree]= Level3;\ - map[Shift+Lock+LevelThree]= Level3;\ - map[Shift+LevelThree]= Level4;\ - map[Lock+LevelThree]= Level4;\ - map[Control]= Level5;\ - map[Shift+Lock+Control]= Level5;\ - map[Shift+Control]= Level6;\ - map[Lock+Control]= Level6;\ - map[Control+LevelThree]= Level7;\ - map[Shift+Lock+Control+LevelThree]= Level7;\ - map[Shift+Control+LevelThree]= Level8;\ - map[Lock+Control+LevelThree]= Level8;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Shift\";\ - level_name[Level3]= \"Level3\";\ - level_name[Level4]= \"Shift Level3\";\ - level_name[Level5]= \"Ctrl\";\ - level_name[Level6]= \"Shift Ctrl\";\ - level_name[Level7]= \"Level3 Ctrl\";\ - level_name[Level8]= \"Shift Level3 Ctrl\";\ - };\ - type \"THREE_LEVEL\" {\ - modifiers= Shift+LevelThree;\ - map[Shift]= Level2;\ - map[LevelThree]= Level3;\ - map[Shift+LevelThree]= Level3;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Shift\";\ - level_name[Level3]= \"Level3\";\ - };\ - type \"EIGHT_LEVEL\" {\ - modifiers= Shift+LevelThree+LevelFive;\ - map[Shift]= Level2;\ - map[LevelThree]= Level3;\ - map[Shift+LevelThree]= Level4;\ - map[LevelFive]= Level5;\ - map[Shift+LevelFive]= Level6;\ - map[LevelThree+LevelFive]= Level7;\ - map[Shift+LevelThree+LevelFive]= Level8;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Shift\";\ - level_name[Level3]= \"Alt Base\";\ - level_name[Level4]= \"Shift Alt\";\ - level_name[Level5]= \"X\";\ - level_name[Level6]= \"X Shift\";\ - level_name[Level7]= \"X Alt Base\";\ - level_name[Level8]= \"X Shift Alt\";\ - };\ - type \"EIGHT_LEVEL_ALPHABETIC\" {\ - modifiers= Shift+Lock+LevelThree+LevelFive;\ - map[Shift]= Level2;\ - map[Lock]= Level2;\ - map[LevelThree]= Level3;\ - map[Shift+LevelThree]= Level4;\ - map[Lock+LevelThree]= Level4;\ - map[Shift+Lock+LevelThree]= Level3;\ - map[LevelFive]= Level5;\ - map[Shift+LevelFive]= Level6;\ - map[Lock+LevelFive]= Level6;\ - map[LevelThree+LevelFive]= Level7;\ - map[Shift+LevelThree+LevelFive]= Level8;\ - map[Lock+LevelThree+LevelFive]= Level8;\ - map[Shift+Lock+LevelThree+LevelFive]= Level7;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Shift\";\ - level_name[Level3]= \"Alt Base\";\ - level_name[Level4]= \"Shift Alt\";\ - level_name[Level5]= \"X\";\ - level_name[Level6]= \"X Shift\";\ - level_name[Level7]= \"X Alt Base\";\ - level_name[Level8]= \"X Shift Alt\";\ - };\ - type \"EIGHT_LEVEL_LEVEL_FIVE_LOCK\" {\ - modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ - map[Shift]= Level2;\ - map[LevelThree]= Level3;\ - map[Shift+LevelThree]= Level4;\ - map[LevelFive]= Level5;\ - map[Shift+LevelFive]= Level6;\ - preserve[Shift+LevelFive]= Shift;\ - map[LevelThree+LevelFive]= Level7;\ - map[Shift+LevelThree+LevelFive]= Level8;\ - map[NumLock]= Level5;\ - map[Shift+NumLock]= Level6;\ - preserve[Shift+NumLock]= Shift;\ - map[NumLock+LevelThree]= Level7;\ - map[Shift+NumLock+LevelThree]= Level8;\ - map[Shift+NumLock+LevelFive]= Level2;\ - map[NumLock+LevelThree+LevelFive]= Level3;\ - map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ - map[Shift+Lock]= Level2;\ - map[Lock+LevelThree]= Level3;\ - map[Shift+Lock+LevelThree]= Level4;\ - map[Lock+LevelFive]= Level5;\ - map[Shift+Lock+LevelFive]= Level6;\ - preserve[Shift+Lock+LevelFive]= Shift;\ - map[Lock+LevelThree+LevelFive]= Level7;\ - map[Shift+Lock+LevelThree+LevelFive]= Level8;\ - map[Lock+NumLock]= Level5;\ - map[Shift+Lock+NumLock]= Level6;\ - preserve[Shift+Lock+NumLock]= Shift;\ - map[Lock+NumLock+LevelThree]= Level7;\ - map[Shift+Lock+NumLock+LevelThree]= Level8;\ - map[Shift+Lock+NumLock+LevelFive]= Level2;\ - map[Lock+NumLock+LevelThree+LevelFive]= Level3;\ - map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Shift\";\ - level_name[Level3]= \"Alt Base\";\ - level_name[Level4]= \"Shift Alt\";\ - level_name[Level5]= \"X\";\ - level_name[Level6]= \"X Shift\";\ - level_name[Level7]= \"X Alt Base\";\ - level_name[Level8]= \"X Shift Alt\";\ - };\ - type \"EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK\" {\ - modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ - map[Shift]= Level2;\ - map[LevelThree]= Level3;\ - map[Shift+LevelThree]= Level4;\ - map[LevelFive]= Level5;\ - map[Shift+LevelFive]= Level6;\ - preserve[Shift+LevelFive]= Shift;\ - map[LevelThree+LevelFive]= Level7;\ - map[Shift+LevelThree+LevelFive]= Level8;\ - map[NumLock]= Level5;\ - map[Shift+NumLock]= Level6;\ - preserve[Shift+NumLock]= Shift;\ - map[NumLock+LevelThree]= Level7;\ - map[Shift+NumLock+LevelThree]= Level8;\ - map[Shift+NumLock+LevelFive]= Level2;\ - map[NumLock+LevelThree+LevelFive]= Level3;\ - map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ - map[Lock]= Level2;\ - map[Lock+LevelThree]= Level3;\ - map[Shift+Lock+LevelThree]= Level4;\ - map[Lock+LevelFive]= Level5;\ - map[Shift+Lock+LevelFive]= Level6;\ - map[Lock+LevelThree+LevelFive]= Level7;\ - map[Shift+Lock+LevelThree+LevelFive]= Level8;\ - map[Lock+NumLock]= Level5;\ - map[Shift+Lock+NumLock]= Level6;\ - map[Lock+NumLock+LevelThree]= Level7;\ - map[Shift+Lock+NumLock+LevelThree]= Level8;\ - map[Lock+NumLock+LevelFive]= Level2;\ - map[Lock+NumLock+LevelThree+LevelFive]= Level4;\ - map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Shift\";\ - level_name[Level3]= \"Alt Base\";\ - level_name[Level4]= \"Shift Alt\";\ - level_name[Level5]= \"X\";\ - level_name[Level6]= \"X Shift\";\ - level_name[Level7]= \"X Alt Base\";\ - level_name[Level8]= \"X Shift Alt\";\ - };\ - type \"EIGHT_LEVEL_SEMIALPHABETIC\" {\ - modifiers= Shift+Lock+LevelThree+LevelFive;\ - map[Shift]= Level2;\ - map[Lock]= Level2;\ - map[LevelThree]= Level3;\ - map[Shift+LevelThree]= Level4;\ - map[Lock+LevelThree]= Level3;\ - preserve[Lock+LevelThree]= Lock;\ - map[Shift+Lock+LevelThree]= Level4;\ - preserve[Shift+Lock+LevelThree]= Lock;\ - map[LevelFive]= Level5;\ - map[Shift+LevelFive]= Level6;\ - map[Lock+LevelFive]= Level6;\ - preserve[Lock+LevelFive]= Lock;\ - map[Shift+Lock+LevelFive]= Level6;\ - preserve[Shift+Lock+LevelFive]= Lock;\ - map[LevelThree+LevelFive]= Level7;\ - map[Shift+LevelThree+LevelFive]= Level8;\ - map[Lock+LevelThree+LevelFive]= Level7;\ - preserve[Lock+LevelThree+LevelFive]= Lock;\ - map[Shift+Lock+LevelThree+LevelFive]= Level8;\ - preserve[Shift+Lock+LevelThree+LevelFive]= Lock;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Shift\";\ - level_name[Level3]= \"Alt Base\";\ - level_name[Level4]= \"Shift Alt\";\ - level_name[Level5]= \"X\";\ - level_name[Level6]= \"X Shift\";\ - level_name[Level7]= \"X Alt Base\";\ - level_name[Level8]= \"X Shift Alt\";\ - };\ - type \"FOUR_LEVEL\" {\ - modifiers= Shift+LevelThree;\ - map[Shift]= Level2;\ - map[LevelThree]= Level3;\ - map[Shift+LevelThree]= Level4;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Shift\";\ - level_name[Level3]= \"Alt Base\";\ - level_name[Level4]= \"Shift Alt\";\ - };\ - type \"FOUR_LEVEL_ALPHABETIC\" {\ - modifiers= Shift+Lock+LevelThree;\ - map[Shift]= Level2;\ - map[Lock]= Level2;\ - map[LevelThree]= Level3;\ - map[Shift+LevelThree]= Level4;\ - map[Lock+LevelThree]= Level4;\ - map[Shift+Lock+LevelThree]= Level3;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Shift\";\ - level_name[Level3]= \"Alt Base\";\ - level_name[Level4]= \"Shift Alt\";\ - };\ - type \"FOUR_LEVEL_SEMIALPHABETIC\" {\ - modifiers= Shift+Lock+LevelThree;\ - map[Shift]= Level2;\ - map[Lock]= Level2;\ - map[LevelThree]= Level3;\ - map[Shift+LevelThree]= Level4;\ - map[Lock+LevelThree]= Level3;\ - preserve[Lock+LevelThree]= Lock;\ - map[Shift+Lock+LevelThree]= Level4;\ - preserve[Shift+Lock+LevelThree]= Lock;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Shift\";\ - level_name[Level3]= \"Alt Base\";\ - level_name[Level4]= \"Shift Alt\";\ - };\ - type \"FOUR_LEVEL_MIXED_KEYPAD\" {\ - modifiers= Shift+NumLock+LevelThree;\ - map[NumLock]= Level2;\ - map[Shift]= Level2;\ - map[LevelThree]= Level3;\ - map[NumLock+LevelThree]= Level3;\ - map[Shift+LevelThree]= Level4;\ - map[Shift+NumLock+LevelThree]= Level4;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Number\";\ - level_name[Level3]= \"Alt Base\";\ - level_name[Level4]= \"Shift Alt\";\ - };\ - type \"FOUR_LEVEL_X\" {\ - modifiers= Shift+Control+Alt+LevelThree;\ - map[LevelThree]= Level2;\ - map[Shift+LevelThree]= Level3;\ - map[Control+Alt]= Level4;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Alt Base\";\ - level_name[Level3]= \"Shift Alt\";\ - level_name[Level4]= \"Ctrl+Alt\";\ - };\ - type \"SEPARATE_CAPS_AND_SHIFT_ALPHABETIC\" {\ - modifiers= Shift+Lock+LevelThree;\ - map[Shift]= Level2;\ - map[Lock]= Level4;\ - preserve[Lock]= Lock;\ - map[LevelThree]= Level3;\ - map[Shift+LevelThree]= Level4;\ - map[Lock+LevelThree]= Level3;\ - preserve[Lock+LevelThree]= Lock;\ - map[Shift+Lock+LevelThree]= Level3;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Shift\";\ - level_name[Level3]= \"AltGr Base\";\ - level_name[Level4]= \"Shift AltGr\";\ - };\ - type \"FOUR_LEVEL_PLUS_LOCK\" {\ - modifiers= Shift+Lock+LevelThree;\ - map[Shift]= Level2;\ - map[LevelThree]= Level3;\ - map[Shift+LevelThree]= Level4;\ - map[Lock]= Level5;\ - map[Shift+Lock]= Level2;\ - map[Lock+LevelThree]= Level3;\ - map[Shift+Lock+LevelThree]= Level4;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Shift\";\ - level_name[Level3]= \"Alt Base\";\ - level_name[Level4]= \"Shift Alt\";\ - level_name[Level5]= \"Lock\";\ - };\ - type \"KEYPAD\" {\ - modifiers= Shift+NumLock;\ - map[Shift]= Level2;\ - map[NumLock]= Level2;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Number\";\ - };\ - type \"FOUR_LEVEL_KEYPAD\" {\ - modifiers= Shift+NumLock+LevelThree;\ - map[Shift]= Level2;\ - map[NumLock]= Level2;\ - map[LevelThree]= Level3;\ - map[Shift+LevelThree]= Level4;\ - map[NumLock+LevelThree]= Level4;\ - map[Shift+NumLock+LevelThree]= Level3;\ - level_name[Level1]= \"Base\";\ - level_name[Level2]= \"Number\";\ - level_name[Level3]= \"Alt Base\";\ - level_name[Level4]= \"Alt Number\";\ - };\ -};\ -\ -xkb_compatibility \"(unnamed)\" {\ - virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ -\ - interpret.useModMapMods= AnyLevel;\ - interpret.repeat= False;\ - interpret ISO_Level2_Latch+Exactly(Shift) {\ - useModMapMods=level1;\ - action= LatchMods(modifiers=Shift,clearLocks,latchToLock);\ - };\ - interpret Shift_Lock+AnyOf(Shift+Lock) {\ - action= LockMods(modifiers=Shift);\ - };\ - interpret Num_Lock+AnyOf(all) {\ - virtualModifier= NumLock;\ - action= LockMods(modifiers=NumLock);\ - };\ - interpret ISO_Level3_Shift+AnyOf(all) {\ - virtualModifier= LevelThree;\ - useModMapMods=level1;\ - action= SetMods(modifiers=LevelThree,clearLocks);\ - };\ - interpret ISO_Level3_Latch+AnyOf(all) {\ - virtualModifier= LevelThree;\ - useModMapMods=level1;\ - action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ - };\ - interpret ISO_Level3_Lock+AnyOf(all) {\ - virtualModifier= LevelThree;\ - useModMapMods=level1;\ - action= LockMods(modifiers=LevelThree);\ - };\ - interpret Alt_L+AnyOf(all) {\ - virtualModifier= Alt;\ - action= SetMods(modifiers=modMapMods,clearLocks);\ - };\ - interpret Alt_R+AnyOf(all) {\ - virtualModifier= Alt;\ - action= SetMods(modifiers=modMapMods,clearLocks);\ - };\ - interpret Meta_L+AnyOf(all) {\ - virtualModifier= Meta;\ - action= SetMods(modifiers=modMapMods,clearLocks);\ - };\ - interpret Meta_R+AnyOf(all) {\ - virtualModifier= Meta;\ - action= SetMods(modifiers=modMapMods,clearLocks);\ - };\ - interpret Super_L+AnyOf(all) {\ - virtualModifier= Super;\ - action= SetMods(modifiers=modMapMods,clearLocks);\ - };\ - interpret Super_R+AnyOf(all) {\ - virtualModifier= Super;\ - action= SetMods(modifiers=modMapMods,clearLocks);\ - };\ - interpret Hyper_L+AnyOf(all) {\ - virtualModifier= Hyper;\ - action= SetMods(modifiers=modMapMods,clearLocks);\ - };\ - interpret Hyper_R+AnyOf(all) {\ - virtualModifier= Hyper;\ - action= SetMods(modifiers=modMapMods,clearLocks);\ - };\ - interpret Scroll_Lock+AnyOf(all) {\ - virtualModifier= ScrollLock;\ - action= LockMods(modifiers=modMapMods);\ - };\ - interpret ISO_Level5_Shift+AnyOf(all) {\ - virtualModifier= LevelFive;\ - useModMapMods=level1;\ - action= SetMods(modifiers=LevelFive,clearLocks);\ - };\ - interpret ISO_Level5_Latch+AnyOf(all) {\ - virtualModifier= LevelFive;\ - useModMapMods=level1;\ - action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ - };\ - interpret ISO_Level5_Lock+AnyOf(all) {\ - virtualModifier= LevelFive;\ - useModMapMods=level1;\ - action= LockMods(modifiers=LevelFive);\ - };\ - interpret Mode_switch+AnyOfOrNone(all) {\ - virtualModifier= AltGr;\ - useModMapMods=level1;\ - action= SetGroup(group=+1);\ - };\ - interpret ISO_Level3_Shift+AnyOfOrNone(all) {\ - action= SetMods(modifiers=LevelThree,clearLocks);\ - };\ - interpret ISO_Level3_Latch+AnyOfOrNone(all) {\ - action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ - };\ - interpret ISO_Level3_Lock+AnyOfOrNone(all) {\ - action= LockMods(modifiers=LevelThree);\ - };\ - interpret ISO_Group_Latch+AnyOfOrNone(all) {\ - virtualModifier= AltGr;\ - useModMapMods=level1;\ - action= LatchGroup(group=2);\ - };\ - interpret ISO_Next_Group+AnyOfOrNone(all) {\ - virtualModifier= AltGr;\ - useModMapMods=level1;\ - action= LockGroup(group=+1);\ - };\ - interpret ISO_Prev_Group+AnyOfOrNone(all) {\ - virtualModifier= AltGr;\ - useModMapMods=level1;\ - action= LockGroup(group=-1);\ - };\ - interpret ISO_First_Group+AnyOfOrNone(all) {\ - action= LockGroup(group=1);\ - };\ - interpret ISO_Last_Group+AnyOfOrNone(all) {\ - action= LockGroup(group=2);\ - };\ - interpret KP_1+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=-1,y=+1);\ - };\ - interpret KP_End+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=-1,y=+1);\ - };\ - interpret KP_2+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=+0,y=+1);\ - };\ - interpret KP_Down+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=+0,y=+1);\ - };\ - interpret KP_3+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=+1,y=+1);\ - };\ - interpret KP_Next+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=+1,y=+1);\ - };\ - interpret KP_4+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=-1,y=+0);\ - };\ - interpret KP_Left+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=-1,y=+0);\ - };\ - interpret KP_6+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=+1,y=+0);\ - };\ - interpret KP_Right+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=+1,y=+0);\ - };\ - interpret KP_7+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=-1,y=-1);\ - };\ - interpret KP_Home+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=-1,y=-1);\ - };\ - interpret KP_8+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=+0,y=-1);\ - };\ - interpret KP_Up+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=+0,y=-1);\ - };\ - interpret KP_9+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=+1,y=-1);\ - };\ - interpret KP_Prior+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=+1,y=-1);\ - };\ - interpret KP_5+AnyOfOrNone(all) {\ - repeat= True;\ - action= PtrBtn(button=default);\ - };\ - interpret KP_Begin+AnyOfOrNone(all) {\ - repeat= True;\ - action= PtrBtn(button=default);\ - };\ - interpret KP_F2+AnyOfOrNone(all) {\ - repeat= True;\ - action= SetPtrDflt(affect=button,button=1);\ - };\ - interpret KP_Divide+AnyOfOrNone(all) {\ - repeat= True;\ - action= SetPtrDflt(affect=button,button=1);\ - };\ - interpret KP_F3+AnyOfOrNone(all) {\ - repeat= True;\ - action= SetPtrDflt(affect=button,button=2);\ - };\ - interpret KP_Multiply+AnyOfOrNone(all) {\ - repeat= True;\ - action= SetPtrDflt(affect=button,button=2);\ - };\ - interpret KP_F4+AnyOfOrNone(all) {\ - repeat= True;\ - action= SetPtrDflt(affect=button,button=3);\ - };\ - interpret KP_Subtract+AnyOfOrNone(all) {\ - repeat= True;\ - action= SetPtrDflt(affect=button,button=3);\ - };\ - interpret KP_Separator+AnyOfOrNone(all) {\ - repeat= True;\ - action= PtrBtn(button=default,count=2);\ - };\ - interpret KP_Add+AnyOfOrNone(all) {\ - repeat= True;\ - action= PtrBtn(button=default,count=2);\ - };\ - interpret KP_0+AnyOfOrNone(all) {\ - repeat= True;\ - action= LockPtrBtn(button=default,affect=lock);\ - };\ - interpret KP_Insert+AnyOfOrNone(all) {\ - repeat= True;\ - action= LockPtrBtn(button=default,affect=lock);\ - };\ - interpret KP_Decimal+AnyOfOrNone(all) {\ - repeat= True;\ - action= LockPtrBtn(button=default,affect=unlock);\ - };\ - interpret KP_Delete+AnyOfOrNone(all) {\ - repeat= True;\ - action= LockPtrBtn(button=default,affect=unlock);\ - };\ - interpret F25+AnyOfOrNone(all) {\ - repeat= True;\ - action= SetPtrDflt(affect=button,button=1);\ - };\ - interpret F26+AnyOfOrNone(all) {\ - repeat= True;\ - action= SetPtrDflt(affect=button,button=2);\ - };\ - interpret F27+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=-1,y=-1);\ - };\ - interpret F29+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=+1,y=-1);\ - };\ - interpret F31+AnyOfOrNone(all) {\ - repeat= True;\ - action= PtrBtn(button=default);\ - };\ - interpret F33+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=-1,y=+1);\ - };\ - interpret F35+AnyOfOrNone(all) {\ - repeat= True;\ - action= MovePtr(x=+1,y=+1);\ - };\ - interpret Pointer_Button_Dflt+AnyOfOrNone(all) {\ - action= PtrBtn(button=default);\ - };\ - interpret Pointer_Button1+AnyOfOrNone(all) {\ - action= PtrBtn(button=1);\ - };\ - interpret Pointer_Button2+AnyOfOrNone(all) {\ - action= PtrBtn(button=2);\ - };\ - interpret Pointer_Button3+AnyOfOrNone(all) {\ - action= PtrBtn(button=3);\ - };\ - interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {\ - action= PtrBtn(button=default,count=2);\ - };\ - interpret Pointer_DblClick1+AnyOfOrNone(all) {\ - action= PtrBtn(button=1,count=2);\ - };\ - interpret Pointer_DblClick2+AnyOfOrNone(all) {\ - action= PtrBtn(button=2,count=2);\ - };\ - interpret Pointer_DblClick3+AnyOfOrNone(all) {\ - action= PtrBtn(button=3,count=2);\ - };\ - interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {\ - action= LockPtrBtn(button=default);\ - };\ - interpret Pointer_Drag1+AnyOfOrNone(all) {\ - action= LockPtrBtn(button=1);\ - };\ - interpret Pointer_Drag2+AnyOfOrNone(all) {\ - action= LockPtrBtn(button=2);\ - };\ - interpret Pointer_Drag3+AnyOfOrNone(all) {\ - action= LockPtrBtn(button=3);\ - };\ - interpret Pointer_EnableKeys+AnyOfOrNone(all) {\ - action= LockControls(controls=MouseKeys);\ - };\ - interpret Pointer_Accelerate+AnyOfOrNone(all) {\ - action= LockControls(controls=MouseKeysAccel);\ - };\ - interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {\ - action= SetPtrDflt(affect=button,button=+1);\ - };\ - interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {\ - action= SetPtrDflt(affect=button,button=-1);\ - };\ - interpret AccessX_Enable+AnyOfOrNone(all) {\ - action= LockControls(controls=AccessXKeys);\ - };\ - interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {\ - action= LockControls(controls=AccessXFeedback);\ - };\ - interpret RepeatKeys_Enable+AnyOfOrNone(all) {\ - action= LockControls(controls=RepeatKeys);\ - };\ - interpret SlowKeys_Enable+AnyOfOrNone(all) {\ - action= LockControls(controls=SlowKeys);\ - };\ - interpret BounceKeys_Enable+AnyOfOrNone(all) {\ - action= LockControls(controls=BounceKeys);\ - };\ - interpret StickyKeys_Enable+AnyOfOrNone(all) {\ - action= LockControls(controls=StickyKeys);\ - };\ - interpret MouseKeys_Enable+AnyOfOrNone(all) {\ - action= LockControls(controls=MouseKeys);\ - };\ - interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {\ - action= LockControls(controls=MouseKeysAccel);\ - };\ - interpret Overlay1_Enable+AnyOfOrNone(all) {\ - action= LockControls(controls=none);\ - };\ - interpret Overlay2_Enable+AnyOfOrNone(all) {\ - action= LockControls(controls=none);\ - };\ - interpret AudibleBell_Enable+AnyOfOrNone(all) {\ - action= LockControls(controls=AudibleBell);\ - };\ - interpret Terminate_Server+AnyOfOrNone(all) {\ - action= Terminate();\ - };\ - interpret Alt_L+AnyOfOrNone(all) {\ - action= SetMods(modifiers=Alt,clearLocks);\ - };\ - interpret Alt_R+AnyOfOrNone(all) {\ - action= SetMods(modifiers=Alt,clearLocks);\ - };\ - interpret Meta_L+AnyOfOrNone(all) {\ - action= SetMods(modifiers=Meta,clearLocks);\ - };\ - interpret Meta_R+AnyOfOrNone(all) {\ - action= SetMods(modifiers=Meta,clearLocks);\ - };\ - interpret Super_L+AnyOfOrNone(all) {\ - action= SetMods(modifiers=Super,clearLocks);\ - };\ - interpret Super_R+AnyOfOrNone(all) {\ - action= SetMods(modifiers=Super,clearLocks);\ - };\ - interpret Hyper_L+AnyOfOrNone(all) {\ - action= SetMods(modifiers=Hyper,clearLocks);\ - };\ - interpret Hyper_R+AnyOfOrNone(all) {\ - action= SetMods(modifiers=Hyper,clearLocks);\ - };\ - interpret Shift_L+AnyOfOrNone(all) {\ - action= SetMods(modifiers=Shift,clearLocks);\ - };\ - interpret XF86Switch_VT_1+AnyOfOrNone(all) {\ - repeat= True;\ - action= SwitchScreen(screen=1,!same);\ - };\ - interpret XF86Switch_VT_2+AnyOfOrNone(all) {\ - repeat= True;\ - action= SwitchScreen(screen=2,!same);\ - };\ - interpret XF86Switch_VT_3+AnyOfOrNone(all) {\ - repeat= True;\ - action= SwitchScreen(screen=3,!same);\ - };\ - interpret XF86Switch_VT_4+AnyOfOrNone(all) {\ - repeat= True;\ - action= SwitchScreen(screen=4,!same);\ - };\ - interpret XF86Switch_VT_5+AnyOfOrNone(all) {\ - repeat= True;\ - action= SwitchScreen(screen=5,!same);\ - };\ - interpret XF86Switch_VT_6+AnyOfOrNone(all) {\ - repeat= True;\ - action= SwitchScreen(screen=6,!same);\ - };\ - interpret XF86Switch_VT_7+AnyOfOrNone(all) {\ - repeat= True;\ - action= SwitchScreen(screen=7,!same);\ - };\ - interpret XF86Switch_VT_8+AnyOfOrNone(all) {\ - repeat= True;\ - action= SwitchScreen(screen=8,!same);\ - };\ - interpret XF86Switch_VT_9+AnyOfOrNone(all) {\ - repeat= True;\ - action= SwitchScreen(screen=9,!same);\ - };\ - interpret XF86Switch_VT_10+AnyOfOrNone(all) {\ - repeat= True;\ - action= SwitchScreen(screen=10,!same);\ - };\ - interpret XF86Switch_VT_11+AnyOfOrNone(all) {\ - repeat= True;\ - action= SwitchScreen(screen=11,!same);\ - };\ - interpret XF86Switch_VT_12+AnyOfOrNone(all) {\ - repeat= True;\ - action= SwitchScreen(screen=12,!same);\ - };\ - interpret XF86LogGrabInfo+AnyOfOrNone(all) {\ - repeat= True;\ - action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);\ - };\ - interpret XF86LogWindowTree+AnyOfOrNone(all) {\ - repeat= True;\ - action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);\ - };\ - interpret XF86Next_VMode+AnyOfOrNone(all) {\ - repeat= True;\ - action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ - };\ - interpret XF86Prev_VMode+AnyOfOrNone(all) {\ - repeat= True;\ - action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ - };\ - interpret ISO_Level5_Shift+AnyOfOrNone(all) {\ - action= SetMods(modifiers=LevelFive,clearLocks);\ - };\ - interpret ISO_Level5_Latch+AnyOfOrNone(all) {\ - action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ - };\ - interpret ISO_Level5_Lock+AnyOfOrNone(all) {\ - action= LockMods(modifiers=LevelFive);\ - };\ - interpret Caps_Lock+AnyOfOrNone(all) {\ - action= LockMods(modifiers=Lock);\ - };\ - interpret Any+Exactly(Lock) {\ - action= LockMods(modifiers=Lock);\ - };\ - interpret Any+AnyOf(all) {\ - action= SetMods(modifiers=modMapMods,clearLocks);\ - };\ - indicator \"Caps Lock\" {\ - whichModState= locked;\ - modifiers= Lock;\ - };\ - indicator \"Num Lock\" {\ - whichModState= locked;\ - modifiers= NumLock;\ - };\ - indicator \"Scroll Lock\" {\ - whichModState= locked;\ - modifiers= ScrollLock;\ - };\ - indicator \"Shift Lock\" {\ - whichModState= locked;\ - modifiers= Shift;\ - };\ - indicator \"Group 2\" {\ - groups= 0xfe;\ - };\ - indicator \"Mouse Keys\" {\ - controls= MouseKeys;\ - };\ -};\ -\ -xkb_symbols \"(unnamed)\" {\ - name[group1]=\"English (US)\";\ -\ - key { [ Escape ] };\ - key { [ 1, exclam ] };\ - key { [ 2, at ] };\ - key { [ 3, numbersign ] };\ - key { [ 4, dollar ] };\ - key { [ 5, percent ] };\ - key { [ 6, asciicircum ] };\ - key { [ 7, ampersand ] };\ - key { [ 8, asterisk ] };\ - key { [ 9, parenleft ] };\ - key { [ 0, parenright ] };\ - key { [ minus, underscore ] };\ - key { [ equal, plus ] };\ - key { [ BackSpace, BackSpace ] };\ - key { [ Tab, ISO_Left_Tab ] };\ - key { [ q, Q, 1 ] };\ - key { [ w, W, 2 ] };\ - key { [ e, E, 3 ] };\ - key { [ r, R, 4 ] };\ - key { [ t, T, 5 ] };\ - key { [ y, Y, 6 ] };\ - key { [ u, U, 7 ] };\ - key { [ i, I, 8 ] };\ - key { [ o, O, 9 ] };\ - key { [ p, P, 0 ] };\ - key { [ bracketleft, braceleft ] };\ - key { [ bracketright, braceright ] };\ - key { [ Return ] };\ - key { [ Control_L ] };\ - key { [ a, A, minus ] };\ - key { [ s, S, at ] };\ - key { [ d, D, asterisk ] };\ - key { [ f, F, asciicircum ] };\ - key { [ g, G, colon ] };\ - key { [ h, H, semicolon ] };\ - key { [ j, J, parenleft ] };\ - key { [ k, K, parenright ] };\ - key { [ l, L, asciitilde ] };\ - key { [ semicolon, colon ] };\ - key { [ apostrophe, quotedbl ] };\ - key { [ grave, asciitilde ] };\ - key { [ Shift_L ] };\ - key { [ backslash, bar ] };\ - key { [ z, Z, slash ] };\ - key { [ x, X, apostrophe ] };\ - key { [ c, C, quotedbl ] };\ - key { [ v, V, plus ] };\ - key { [ b, B, equal ] };\ - key { [ n, N, question ] };\ - key { [ m, M, exclam ] };\ - key { [ comma, less, backslash] };\ - key { [ period, greater, bar ] };\ - key { [ slash, question ] };\ - key { [ Shift_R ] };\ - key {\ - type= \"CTRL+ALT\",\ - symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ]\ - };\ - key { [ Alt_L, Meta_L ] };\ - key { [ space ] };\ - key { [ Caps_Lock ] };\ - key {\ - type= \"CTRL+ALT\",\ - symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ]\ - };\ - key {\ - type= \"CTRL+ALT\",\ - symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]\ - };\ - key {\ - type= \"CTRL+ALT\",\ - symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ]\ - };\ - key {\ - type= \"CTRL+ALT\",\ - symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ]\ - };\ - key {\ - type= \"CTRL+ALT\",\ - symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ]\ - };\ - key {\ - type= \"CTRL+ALT\",\ - symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ]\ - };\ - key {\ - type= \"CTRL+ALT\",\ - symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ]\ - };\ - key {\ - type= \"CTRL+ALT\",\ - symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ]\ - };\ - key {\ - type= \"CTRL+ALT\",\ - symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ]\ - };\ - key {\ - type= \"CTRL+ALT\",\ - symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ]\ - };\ - key { [ Num_Lock ] };\ - key { [ Scroll_Lock ] };\ - key { [ KP_Home, KP_7 ] };\ - key { [ KP_Up, KP_8 ] };\ - key { [ KP_Prior, KP_9 ] };\ - key {\ - type= \"CTRL+ALT\",\ - symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ]\ - };\ - key { [ KP_Left, KP_4 ] };\ - key { [ KP_Begin, KP_5 ] };\ - key { [ KP_Right, KP_6 ] };\ - key {\ - type= \"CTRL+ALT\",\ - symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ]\ - };\ - key { [ KP_End, KP_1 ] };\ - key { [ KP_Down, KP_2 ] };\ - key { [ KP_Next, KP_3 ] };\ - key { [ KP_Insert, KP_0 ] };\ - key { [ KP_Delete, KP_Decimal ] };\ - key { [ ISO_Level3_Shift ] };\ - key { [ less, greater, bar, brokenbar ] };\ - key {\ - type= \"CTRL+ALT\",\ - symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ]\ - };\ - key {\ - type= \"CTRL+ALT\",\ - symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ]\ - };\ - key { [ Katakana ] };\ - key { [ Hiragana ] };\ - key { [ Henkan_Mode ] };\ - key { [ Hiragana_Katakana ] };\ - key { [ Muhenkan ] };\ - key { [ KP_Enter ] };\ - key { [ Control_R ] };\ - key {\ - type= \"CTRL+ALT\",\ - symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ]\ - };\ - key {\ - type= \"PC_ALT_LEVEL2\",\ - symbols[Group1]= [ Print, Sys_Req ]\ - };\ - key {\ - type= \"TWO_LEVEL\",\ - symbols[Group1]= [ Alt_R, Meta_R ]\ - };\ - key { [ Linefeed ] };\ - key { [ Home ] };\ - key { [ Up ] };\ - key { [ Prior ] };\ - key { [ Left ] };\ - key { [ Right ] };\ - key { [ End ] };\ - key { [ Down ] };\ - key { [ Next ] };\ - key { [ Insert ] };\ - key { [ Delete ] };\ - key { [ XF86AudioMute ] };\ - key { [ XF86AudioLowerVolume ] };\ - key { [ XF86AudioRaiseVolume ] };\ - key { [ XF86PowerOff ] };\ - key { [ KP_Equal ] };\ - key { [ plusminus ] };\ - key {\ - type= \"PC_CONTROL_LEVEL2\",\ - symbols[Group1]= [ Pause, Break ]\ - };\ - key { [ XF86LaunchA ] };\ - key { [ KP_Decimal, KP_Decimal ] };\ - key { [ Hangul ] };\ - key { [ Hangul_Hanja ] };\ - key { [ Super_L ] };\ - key { [ Super_R ] };\ - key { [ Menu ] };\ - key { [ Cancel ] };\ - key { [ Redo ] };\ - key { [ SunProps ] };\ - key { [ Undo ] };\ - key { [ SunFront ] };\ - key { [ XF86Copy ] };\ - key { [ XF86Open ] };\ - key { [ XF86Paste ] };\ - key { [ Find ] };\ - key { [ XF86Cut ] };\ - key { [ Help ] };\ - key { [ XF86MenuKB ] };\ - key { [ XF86Calculator ] };\ - key { [ XF86Sleep ] };\ - key { [ XF86WakeUp ] };\ - key { [ XF86Explorer ] };\ - key { [ XF86Send ] };\ - key { [ XF86Xfer ] };\ - key { [ XF86Launch1 ] };\ - key { [ XF86Launch2 ] };\ - key { [ XF86WWW ] };\ - key { [ XF86DOS ] };\ - key { [ XF86ScreenSaver ] };\ - key { [ XF86RotateWindows ] };\ - key { [ XF86TaskPane ] };\ - key { [ XF86Mail ] };\ - key { [ XF86Favorites ] };\ - key { [ XF86MyComputer ] };\ - key { [ XF86Back ] };\ - key { [ XF86Forward ] };\ - key { [ XF86Eject ] };\ - key { [ XF86Eject, XF86Eject ] };\ - key { [ XF86AudioNext ] };\ - key { [ XF86AudioPlay, XF86AudioPause ] };\ - key { [ XF86AudioPrev ] };\ - key { [ XF86AudioStop, XF86Eject ] };\ - key { [ XF86AudioRecord ] };\ - key { [ XF86AudioRewind ] };\ - key { [ XF86Phone ] };\ - key { [ XF86Tools ] };\ - key { [ XF86HomePage ] };\ - key { [ XF86Reload ] };\ - key { [ XF86Close ] };\ - key { [ XF86ScrollUp ] };\ - key { [ XF86ScrollDown ] };\ - key { [ parenleft ] };\ - key { [ parenright ] };\ - key { [ XF86New ] };\ - key { [ Redo ] };\ - key { [ XF86Tools ] };\ - key { [ XF86Launch5 ] };\ - key { [ XF86Launch6 ] };\ - key { [ XF86Launch7 ] };\ - key { [ XF86Launch8 ] };\ - key { [ XF86Launch9 ] };\ - key { [ XF86AudioMicMute ] };\ - key { [ XF86TouchpadToggle ] };\ - key { [ XF86TouchpadOn ] };\ - key { [ XF86TouchpadOff ] };\ - key { [ Mode_switch ] };\ - key { [ NoSymbol, Alt_L ] };\ - key { [ NoSymbol, Meta_L ] };\ - key { [ NoSymbol, Super_L ] };\ - key { [ NoSymbol, Hyper_L ] };\ - key { [ XF86AudioPlay ] };\ - key { [ XF86AudioPause ] };\ - key { [ XF86Launch3 ] };\ - key { [ XF86Launch4 ] };\ - key { [ XF86LaunchB ] };\ - key { [ XF86Suspend ] };\ - key { [ XF86Close ] };\ - key { [ XF86AudioPlay ] };\ - key { [ XF86AudioForward ] };\ - key { [ Print ] };\ - key { [ XF86WebCam ] };\ - key { [ XF86AudioPreset ] };\ - key { [ XF86Mail ] };\ - key { [ XF86Messenger ] };\ - key { [ XF86Search ] };\ - key { [ XF86Go ] };\ - key { [ XF86Finance ] };\ - key { [ XF86Game ] };\ - key { [ XF86Shop ] };\ - key { [ Cancel ] };\ - key { [ XF86MonBrightnessDown ] };\ - key { [ XF86MonBrightnessUp ] };\ - key { [ XF86AudioMedia ] };\ - key { [ XF86Display ] };\ - key { [ XF86KbdLightOnOff ] };\ - key { [ XF86KbdBrightnessDown ] };\ - key { [ XF86KbdBrightnessUp ] };\ - key { [ XF86Send ] };\ - key { [ XF86Reply ] };\ - key { [ XF86MailForward ] };\ - key { [ XF86Save ] };\ - key { [ XF86Documents ] };\ - key { [ XF86Battery ] };\ - key { [ XF86Bluetooth ] };\ - key { [ XF86WLAN ] };\ - key { [ XF86UWB ] };\ - key { [ XF86WWAN ] };\ - key { [ XF86RFKill ] };\ - modifier_map Shift { , };\ - modifier_map Lock { };\ - modifier_map Control { , };\ - modifier_map Mod1 { , , };\ - modifier_map Mod2 { };\ - modifier_map Mod4 { , , , };\ - modifier_map Mod5 { , };\ -};\ -\ -};\ -"; diff --git a/crates/cursor-move-webapp/src/utils/mod.rs b/crates/cursor-move-webapp/src/utils/mod.rs new file mode 100644 index 0000000..cd13774 --- /dev/null +++ b/crates/cursor-move-webapp/src/utils/mod.rs @@ -0,0 +1 @@ +pub mod mouse_filter_buffer; diff --git a/crates/cursor-move-webapp/src/utils/mouse_filter_buffer.rs b/crates/cursor-move-webapp/src/utils/mouse_filter_buffer.rs new file mode 100644 index 0000000..da39fc6 --- /dev/null +++ b/crates/cursor-move-webapp/src/utils/mouse_filter_buffer.rs @@ -0,0 +1,80 @@ +use std::collections::VecDeque; + +use dioxus_html::geometry::{ + ElementSpace, + euclid::{Point2D, Vector2D}, +}; +use wasmtimer::std::SystemTime; + +pub struct MouseFilterBufferEntry { + pub position: Point2D, + pub time: SystemTime, +} + +pub struct MouseFilterBuffer { + buffer: VecDeque, +} + +impl MouseFilterBuffer { + pub fn new( + size: usize, + initial: Point2D, + initial_timestamp: SystemTime, + ) -> Self { + let mut buffer = VecDeque::with_capacity(size); + buffer.push_back(MouseFilterBufferEntry { + position: initial, + time: initial_timestamp, + }); + Self { buffer } + } + + pub fn push( + &mut self, + point: Point2D, + time: SystemTime, + ) { + if self.buffer.len() == self.buffer.capacity() { + self.buffer.pop_front(); + } + self.buffer.push_back(MouseFilterBufferEntry { + position: point, + time, + }); + } + + pub fn back(&self) -> &MouseFilterBufferEntry { + self.buffer + .back() + .expect("Mouse filter buffer may never have less than one element") + } + + pub fn average_velocity_since( + &self, + start_time: SystemTime, + ) -> Vector2D { + let mut total_distance = Vector2D::zero(); + + let mut i = self.buffer.iter(); + + let mut last = if let Some(it) = i.find(|it| it.time >= start_time) { + it + } else { + return Vector2D::zero(); + }; + let start_time = last.time; + let mut last_time = last.time; + + for point in i { + total_distance += (point.position - last.position); + last = point; + last_time = point.time; + } + + if total_distance == Vector2D::zero() { + return Vector2D::zero(); + } + + total_distance / (last_time.duration_since(start_time).unwrap().as_secs_f64()) + } +} diff --git a/crates/cursor-move-webapp/src/views/home.rs b/crates/cursor-move-webapp/src/views/home.rs index 51edcaa..07651f7 100644 --- a/crates/cursor-move-webapp/src/views/home.rs +++ b/crates/cursor-move-webapp/src/views/home.rs @@ -1,4 +1,4 @@ -use crate::components::MouseArea; +use crate::components::{Controls, MouseArea}; use dioxus::prelude::*; /// The Home page component that will be rendered when the current route is `[Route::Home]` @@ -10,7 +10,7 @@ pub fn Home() -> Element { rsx! { div { class: Styles::container, - MouseArea { } + Controls { } } } } From 6d466c65a440324e0f362d7ca8ad4a856fdf977b Mon Sep 17 00:00:00 2001 From: Mona Mayrhofer Date: Tue, 3 Mar 2026 17:50:31 +0100 Subject: [PATCH 3/4] mouse speed multiplier --- crates/cursor-move-webapp/src/components/mouse_area.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/crates/cursor-move-webapp/src/components/mouse_area.rs b/crates/cursor-move-webapp/src/components/mouse_area.rs index e684f41..642d339 100644 --- a/crates/cursor-move-webapp/src/components/mouse_area.rs +++ b/crates/cursor-move-webapp/src/components/mouse_area.rs @@ -20,6 +20,8 @@ const FLING_START_THRESHOLD_VELOCITY: f64 = 500.0; const FLING_STOP_THRESHOLD_VELOCITY: f64 = 100.0; const FLING_DAMPENING: f64 = 0.98; +const CURSOR_SPEED_MULTIPLIER: f64 = 1.5; + pub struct PointerRegistryData { initial_position: Point2D, @@ -61,8 +63,8 @@ pub fn MouseArea(onevent: EventHandler) -> Element { if registry.pointers.len() == 1 { onevent.call(ClientEvent::MouseMove { - dx: delta.x, - dy: delta.y, + dx: delta.x * CURSOR_SPEED_MULTIPLIER, + dy: delta.y * CURSOR_SPEED_MULTIPLIER, }); } else if registry.pointers.len() == 2 { onevent.call(ClientEvent::MouseScroll { @@ -145,8 +147,8 @@ pub fn MouseArea(onevent: EventHandler) -> Element { None } else { onevent.call(ClientEvent::MouseMove { - dx: flinger.velocity.x * delta_seconds, - dy: flinger.velocity.y * delta_seconds, + dx: flinger.velocity.x * delta_seconds * CURSOR_SPEED_MULTIPLIER, + dy: flinger.velocity.y * delta_seconds * CURSOR_SPEED_MULTIPLIER, }); //tracing::info!("Fling: {:?}", flinger.velocity); From 579869f2f07ffc770fad826ae90f70f85dbb368a Mon Sep 17 00:00:00 2001 From: Mona Mayrhofer Date: Tue, 3 Mar 2026 18:08:02 +0100 Subject: [PATCH 4/4] cleanups --- .../bpq48947cigxsm1y1qzz3jxgka63a2dd-source | 1 + .../d8j9587fki8g877fjwm5a1l29f29xckm-source | 1 + .../pg23i5nvj8wg12bb657b2r4s5kixjqic-source | 1 - .../zgbjmrhgvd8a42nyi1jck6v98gzvvql0-source | 1 - ...e-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa | 2 +- ...5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc | 18 +- Cargo.lock | 2646 +---------------- Cargo.toml | 26 +- crates/cursor-move-webapp/Cargo.toml | 16 +- .../src/components/controls.rs | 5 +- .../src/components/keyboard_area.rs | 2 +- .../src/components/mouse_area.rs | 6 +- .../src/server/input_proxy_service.rs | 7 +- .../cursor-move-webapp/src/server/keymap.rs | 3 + .../src/utils/mouse_filter_buffer.rs | 6 +- crates/cursor-move-webapp/src/views/home.rs | 2 +- crates/cursor-mover-app/Cargo.toml | 18 - crates/cursor-mover-app/README.md | 1 - crates/cursor-mover-app/src/main.rs | 133 - deny.toml | 31 +- flake.nix | 13 +- 21 files changed, 168 insertions(+), 2771 deletions(-) create mode 120000 .direnv/flake-inputs/bpq48947cigxsm1y1qzz3jxgka63a2dd-source create mode 120000 .direnv/flake-inputs/d8j9587fki8g877fjwm5a1l29f29xckm-source delete mode 120000 .direnv/flake-inputs/pg23i5nvj8wg12bb657b2r4s5kixjqic-source delete mode 120000 .direnv/flake-inputs/zgbjmrhgvd8a42nyi1jck6v98gzvvql0-source delete mode 100644 crates/cursor-mover-app/Cargo.toml delete mode 100644 crates/cursor-mover-app/README.md delete mode 100644 crates/cursor-mover-app/src/main.rs diff --git a/.direnv/flake-inputs/bpq48947cigxsm1y1qzz3jxgka63a2dd-source b/.direnv/flake-inputs/bpq48947cigxsm1y1qzz3jxgka63a2dd-source new file mode 120000 index 0000000..2508b26 --- /dev/null +++ b/.direnv/flake-inputs/bpq48947cigxsm1y1qzz3jxgka63a2dd-source @@ -0,0 +1 @@ +/nix/store/bpq48947cigxsm1y1qzz3jxgka63a2dd-source \ No newline at end of file diff --git a/.direnv/flake-inputs/d8j9587fki8g877fjwm5a1l29f29xckm-source b/.direnv/flake-inputs/d8j9587fki8g877fjwm5a1l29f29xckm-source new file mode 120000 index 0000000..668a264 --- /dev/null +++ b/.direnv/flake-inputs/d8j9587fki8g877fjwm5a1l29f29xckm-source @@ -0,0 +1 @@ +/nix/store/d8j9587fki8g877fjwm5a1l29f29xckm-source \ No newline at end of file diff --git a/.direnv/flake-inputs/pg23i5nvj8wg12bb657b2r4s5kixjqic-source b/.direnv/flake-inputs/pg23i5nvj8wg12bb657b2r4s5kixjqic-source deleted file mode 120000 index 1d1d25b..0000000 --- a/.direnv/flake-inputs/pg23i5nvj8wg12bb657b2r4s5kixjqic-source +++ /dev/null @@ -1 +0,0 @@ -/nix/store/pg23i5nvj8wg12bb657b2r4s5kixjqic-source \ No newline at end of file diff --git a/.direnv/flake-inputs/zgbjmrhgvd8a42nyi1jck6v98gzvvql0-source b/.direnv/flake-inputs/zgbjmrhgvd8a42nyi1jck6v98gzvvql0-source deleted file mode 120000 index 2590ae8..0000000 --- a/.direnv/flake-inputs/zgbjmrhgvd8a42nyi1jck6v98gzvvql0-source +++ /dev/null @@ -1 +0,0 @@ -/nix/store/zgbjmrhgvd8a42nyi1jck6v98gzvvql0-source \ No newline at end of file diff --git a/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa b/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa index aa8f82b..563cf90 120000 --- a/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa +++ b/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa @@ -1 +1 @@ -/nix/store/xa13w7i8cjcs7bhc21lczj9qyi40ay3s-my-project-env \ No newline at end of file +/nix/store/4kycd6brixc98xkpd97bz3yx8ln96f08-my-project-env \ No newline at end of file diff --git a/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc b/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc index 3714305..cd32ac5 100644 --- a/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc +++ b/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc @@ -18,7 +18,7 @@ DEVENV_DOTFILE='/home/nionidh/projects/rust-tomfoolery/cursor-mover-app/.devenv' export DEVENV_DOTFILE DEVENV_FLAKE_SHELL='default' export DEVENV_FLAKE_SHELL -DEVENV_PROFILE='/nix/store/3niz0g2hddnbba4bcql8s8arc6mmna5m-devenv-profile' +DEVENV_PROFILE='/nix/store/mpwh8x3hcqkkqcl8aah6c28m54mfdiw0-devenv-profile' export DEVENV_PROFILE DEVENV_ROOT='/home/nionidh/projects/rust-tomfoolery/cursor-mover-app' export DEVENV_ROOT @@ -53,7 +53,7 @@ NIX_CC='/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0' export NIX_CC NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1' export NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu -NIX_CFLAGS_COMPILE=' -frandom-seed=xa13w7i8cj -isystem /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/include -isystem /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev/include -isystem /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/include -isystem /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev/include' +NIX_CFLAGS_COMPILE=' -frandom-seed=4kycd6brix -isystem /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/include -isystem /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev/include -isystem /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/include -isystem /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev/include' export NIX_CFLAGS_COMPILE NIX_ENFORCE_NO_NATIVE='1' export NIX_ENFORCE_NO_NATIVE @@ -76,7 +76,7 @@ OLDPWD='' export OLDPWD OPTERR='1' OSTYPE='linux-gnu' -PATH='/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0/bin:/nix/store/f53d7gw5jh2yc1rv62kp670gnqq3vwwz-checkall/bin:/nix/store/py79xv22ipf2ycg4qks55wwai9g4w2qg-dioxus-cli-0.7.3/bin:/nix/store/9dpg06rzbppmxi5q8rms8zyybz56sa6r-cargo-expand-1.0.119/bin:/nix/store/fl02yv3ax1qf1xkq64ik8qz5bjxyyd71-cargo-deny-0.19.0/bin:/nix/store/hadf76x1xknx2w6ydp05gzl2w3j40hqy-cargo-nextest-0.9.124/bin:/nix/store/s4rgqv7brrcq2jm8m00dyair22knq10s-typos-1.42.3/bin:/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/bin:/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/bin:/nix/store/m05d7wi0zxg35937jbp6rp7zsvbb5qv4-rust-analyzer-nightly-a96b6a9b887008bae01839543f9ca8e1f67f4ebe/bin:/nix/store/8njkmn9yfcka8yid251wk109n7a6sz1y-wasm-bindgen-cli-0.2.114/bin:/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/bin:/nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2/bin:/nix/store/c2p7haf4zzkbrir9zs662r68c5dmylbq-patchelf-0.15.2/bin:/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0/bin:/nix/store/mjf8jlq9grydcdvyw6hb063x5c34g5gf-gcc-15.2.0/bin:/nix/store/0bdqq2z98kg2hfn3k60if6pb5fd5p10h-glibc-2.42-47-bin/bin:/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin:/nix/store/i6ppbrlpp6yki8qvka7nyv091xa8dchx-binutils-wrapper-2.44/bin:/nix/store/47mn80zqpygykqailwzw8zlag4cgl75q-binutils-2.44/bin:/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin:/nix/store/16wfacfgap3chf7mcjnd8dwi85dj4qqi-findutils-4.10.0/bin:/nix/store/3p87h6dn5i87i3iq9364imzbqgwvkg2p-diffutils-3.12/bin:/nix/store/ryz8kcrm2bxpccllfqlb7qldsfnqp5c2-gnused-4.9/bin:/nix/store/02vv0r262agf9j5n2y1gmbjvdf12zkl0-gnugrep-3.12/bin:/nix/store/2xq9rayckw8zq26k274xxlikn77jn60j-gawk-5.3.2/bin:/nix/store/qyg62bc2xnpwz0fa9prqxvvk00zj4g9q-gnutar-1.35/bin:/nix/store/84yyzmxs7mb8nhkvcfv9n1l9irpb6mnq-gzip-1.14/bin:/nix/store/90yw24gqmwph4xjp4mqhpx1y1gcrvqla-bzip2-1.0.8-bin/bin:/nix/store/vbah5c4rzy1q1hbqhginyxjhj8d4dj8j-gnumake-4.4.1/bin:/nix/store/f15k3dpilmiyv6zgpib289rnjykgr1r4-bash-5.3p9/bin:/nix/store/wwij6563c6wbg4kzgjhng7vlhf7api19-patch-2.8/bin:/nix/store/zys6d102zp171wpwcs08g632886w2qxs-xz-5.8.2-bin/bin:/nix/store/nyy0bvgjwd98x7ih8pl6pr79qjljgsf7-file-5.45/bin' +PATH='/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0/bin:/nix/store/czivij0a8n2z7al3d11m97l4p7x417ak-checkall/bin:/nix/store/py79xv22ipf2ycg4qks55wwai9g4w2qg-dioxus-cli-0.7.3/bin:/nix/store/9dpg06rzbppmxi5q8rms8zyybz56sa6r-cargo-expand-1.0.119/bin:/nix/store/fl02yv3ax1qf1xkq64ik8qz5bjxyyd71-cargo-deny-0.19.0/bin:/nix/store/hadf76x1xknx2w6ydp05gzl2w3j40hqy-cargo-nextest-0.9.124/bin:/nix/store/s4rgqv7brrcq2jm8m00dyair22knq10s-typos-1.42.3/bin:/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/bin:/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/bin:/nix/store/m05d7wi0zxg35937jbp6rp7zsvbb5qv4-rust-analyzer-nightly-a96b6a9b887008bae01839543f9ca8e1f67f4ebe/bin:/nix/store/8njkmn9yfcka8yid251wk109n7a6sz1y-wasm-bindgen-cli-0.2.114/bin:/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/bin:/nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2/bin:/nix/store/c2p7haf4zzkbrir9zs662r68c5dmylbq-patchelf-0.15.2/bin:/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0/bin:/nix/store/mjf8jlq9grydcdvyw6hb063x5c34g5gf-gcc-15.2.0/bin:/nix/store/0bdqq2z98kg2hfn3k60if6pb5fd5p10h-glibc-2.42-47-bin/bin:/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin:/nix/store/i6ppbrlpp6yki8qvka7nyv091xa8dchx-binutils-wrapper-2.44/bin:/nix/store/47mn80zqpygykqailwzw8zlag4cgl75q-binutils-2.44/bin:/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin:/nix/store/16wfacfgap3chf7mcjnd8dwi85dj4qqi-findutils-4.10.0/bin:/nix/store/3p87h6dn5i87i3iq9364imzbqgwvkg2p-diffutils-3.12/bin:/nix/store/ryz8kcrm2bxpccllfqlb7qldsfnqp5c2-gnused-4.9/bin:/nix/store/02vv0r262agf9j5n2y1gmbjvdf12zkl0-gnugrep-3.12/bin:/nix/store/2xq9rayckw8zq26k274xxlikn77jn60j-gawk-5.3.2/bin:/nix/store/qyg62bc2xnpwz0fa9prqxvvk00zj4g9q-gnutar-1.35/bin:/nix/store/84yyzmxs7mb8nhkvcfv9n1l9irpb6mnq-gzip-1.14/bin:/nix/store/90yw24gqmwph4xjp4mqhpx1y1gcrvqla-bzip2-1.0.8-bin/bin:/nix/store/vbah5c4rzy1q1hbqhginyxjhj8d4dj8j-gnumake-4.4.1/bin:/nix/store/f15k3dpilmiyv6zgpib289rnjykgr1r4-bash-5.3p9/bin:/nix/store/wwij6563c6wbg4kzgjhng7vlhf7api19-patch-2.8/bin:/nix/store/zys6d102zp171wpwcs08g632886w2qxs-xz-5.8.2-bin/bin:/nix/store/nyy0bvgjwd98x7ih8pl6pr79qjljgsf7-file-5.45/bin' export PATH PC_CONFIG_FILES='/nix/store/f90qf91rzv18zpk3y4yf5saigawqw9nm-process-compose.yaml' export PC_CONFIG_FILES @@ -162,7 +162,7 @@ mesonFlags='' export mesonFlags name='my-project-env' export name -nativeBuildInputs='/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0 /nix/store/f53d7gw5jh2yc1rv62kp670gnqq3vwwz-checkall /nix/store/py79xv22ipf2ycg4qks55wwai9g4w2qg-dioxus-cli-0.7.3 /nix/store/9dpg06rzbppmxi5q8rms8zyybz56sa6r-cargo-expand-1.0.119 /nix/store/fl02yv3ax1qf1xkq64ik8qz5bjxyyd71-cargo-deny-0.19.0 /nix/store/hadf76x1xknx2w6ydp05gzl2w3j40hqy-cargo-nextest-0.9.124 /nix/store/s4rgqv7brrcq2jm8m00dyair22knq10s-typos-1.42.3 /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125 /nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed /nix/store/m05d7wi0zxg35937jbp6rp7zsvbb5qv4-rust-analyzer-nightly-a96b6a9b887008bae01839543f9ca8e1f67f4ebe /nix/store/8njkmn9yfcka8yid251wk109n7a6sz1y-wasm-bindgen-cli-0.2.114 /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev /nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2' +nativeBuildInputs='/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0 /nix/store/czivij0a8n2z7al3d11m97l4p7x417ak-checkall /nix/store/py79xv22ipf2ycg4qks55wwai9g4w2qg-dioxus-cli-0.7.3 /nix/store/9dpg06rzbppmxi5q8rms8zyybz56sa6r-cargo-expand-1.0.119 /nix/store/fl02yv3ax1qf1xkq64ik8qz5bjxyyd71-cargo-deny-0.19.0 /nix/store/hadf76x1xknx2w6ydp05gzl2w3j40hqy-cargo-nextest-0.9.124 /nix/store/s4rgqv7brrcq2jm8m00dyair22knq10s-typos-1.42.3 /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125 /nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed /nix/store/m05d7wi0zxg35937jbp6rp7zsvbb5qv4-rust-analyzer-nightly-a96b6a9b887008bae01839543f9ca8e1f67f4ebe /nix/store/8njkmn9yfcka8yid251wk109n7a6sz1y-wasm-bindgen-cli-0.2.114 /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev /nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2' export nativeBuildInputs out='/home/nionidh/projects/rust-tomfoolery/cursor-mover-app/outputs/out' export out @@ -183,7 +183,7 @@ phases='buildPhase' export phases pkg='/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0' declare -a pkgsBuildBuild=() -declare -a pkgsBuildHost=('/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0' '/nix/store/f53d7gw5jh2yc1rv62kp670gnqq3vwwz-checkall' '/nix/store/py79xv22ipf2ycg4qks55wwai9g4w2qg-dioxus-cli-0.7.3' '/nix/store/9dpg06rzbppmxi5q8rms8zyybz56sa6r-cargo-expand-1.0.119' '/nix/store/fl02yv3ax1qf1xkq64ik8qz5bjxyyd71-cargo-deny-0.19.0' '/nix/store/hadf76x1xknx2w6ydp05gzl2w3j40hqy-cargo-nextest-0.9.124' '/nix/store/s4rgqv7brrcq2jm8m00dyair22knq10s-typos-1.42.3' '/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125' '/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed' '/nix/store/m05d7wi0zxg35937jbp6rp7zsvbb5qv4-rust-analyzer-nightly-a96b6a9b887008bae01839543f9ca8e1f67f4ebe' '/nix/store/8njkmn9yfcka8yid251wk109n7a6sz1y-wasm-bindgen-cli-0.2.114' '/nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev' '/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0' '/nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2' '/nix/store/c2p7haf4zzkbrir9zs662r68c5dmylbq-patchelf-0.15.2' '/nix/store/y03z7y8cgdck7vk8qpim30vps4d22gzv-update-autotools-gnu-config-scripts-hook' '/nix/store/0y5xmdb7qfvimjwbq7ibg1xdgkgjwqng-no-broken-symlinks.sh' '/nix/store/cv1d7p48379km6a85h4zp6kr86brh32q-audit-tmpdir.sh' '/nix/store/85clx3b0xkdf58jn161iy80y5223ilbi-compress-man-pages.sh' '/nix/store/p3l1a5y7nllfyrjn2krlwgcc3z0cd3fq-make-symlinks-relative.sh' '/nix/store/5yzw0vhkyszf2d179m0qfkgxmp5wjjx4-move-docs.sh' '/nix/store/fyaryjvghbkpfnsyw97hb3lyb37s1pd6-move-lib64.sh' '/nix/store/kd4xwxjpjxi71jkm6ka0np72if9rm3y0-move-sbin.sh' '/nix/store/pag6l61paj1dc9sv15l7bm5c17xn5kyk-move-systemd-user-units.sh' '/nix/store/cmzya9irvxzlkh7lfy6i82gbp0saxqj3-multiple-outputs.sh' '/nix/store/x8c40nfigps493a07sdr2pm5s9j1cdc0-patch-shebangs.sh' '/nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh' '/nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh' '/nix/store/z7k98578dfzi6l3hsvbivzm7hfqlk0zc-set-source-date-epoch-to-latest.sh' '/nix/store/pilsssjjdxvdphlg2h19p0bfx5q0jzkn-strip.sh' '/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0' '/nix/store/i6ppbrlpp6yki8qvka7nyv091xa8dchx-binutils-wrapper-2.44' ) +declare -a pkgsBuildHost=('/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0' '/nix/store/czivij0a8n2z7al3d11m97l4p7x417ak-checkall' '/nix/store/py79xv22ipf2ycg4qks55wwai9g4w2qg-dioxus-cli-0.7.3' '/nix/store/9dpg06rzbppmxi5q8rms8zyybz56sa6r-cargo-expand-1.0.119' '/nix/store/fl02yv3ax1qf1xkq64ik8qz5bjxyyd71-cargo-deny-0.19.0' '/nix/store/hadf76x1xknx2w6ydp05gzl2w3j40hqy-cargo-nextest-0.9.124' '/nix/store/s4rgqv7brrcq2jm8m00dyair22knq10s-typos-1.42.3' '/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125' '/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed' '/nix/store/m05d7wi0zxg35937jbp6rp7zsvbb5qv4-rust-analyzer-nightly-a96b6a9b887008bae01839543f9ca8e1f67f4ebe' '/nix/store/8njkmn9yfcka8yid251wk109n7a6sz1y-wasm-bindgen-cli-0.2.114' '/nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev' '/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0' '/nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2' '/nix/store/c2p7haf4zzkbrir9zs662r68c5dmylbq-patchelf-0.15.2' '/nix/store/y03z7y8cgdck7vk8qpim30vps4d22gzv-update-autotools-gnu-config-scripts-hook' '/nix/store/0y5xmdb7qfvimjwbq7ibg1xdgkgjwqng-no-broken-symlinks.sh' '/nix/store/cv1d7p48379km6a85h4zp6kr86brh32q-audit-tmpdir.sh' '/nix/store/85clx3b0xkdf58jn161iy80y5223ilbi-compress-man-pages.sh' '/nix/store/p3l1a5y7nllfyrjn2krlwgcc3z0cd3fq-make-symlinks-relative.sh' '/nix/store/5yzw0vhkyszf2d179m0qfkgxmp5wjjx4-move-docs.sh' '/nix/store/fyaryjvghbkpfnsyw97hb3lyb37s1pd6-move-lib64.sh' '/nix/store/kd4xwxjpjxi71jkm6ka0np72if9rm3y0-move-sbin.sh' '/nix/store/pag6l61paj1dc9sv15l7bm5c17xn5kyk-move-systemd-user-units.sh' '/nix/store/cmzya9irvxzlkh7lfy6i82gbp0saxqj3-multiple-outputs.sh' '/nix/store/x8c40nfigps493a07sdr2pm5s9j1cdc0-patch-shebangs.sh' '/nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh' '/nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh' '/nix/store/z7k98578dfzi6l3hsvbivzm7hfqlk0zc-set-source-date-epoch-to-latest.sh' '/nix/store/pilsssjjdxvdphlg2h19p0bfx5q0jzkn-strip.sh' '/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0' '/nix/store/i6ppbrlpp6yki8qvka7nyv091xa8dchx-binutils-wrapper-2.44' ) declare -a pkgsBuildTarget=() declare -a pkgsHostHost=() declare -a pkgsHostTarget=() @@ -231,9 +231,9 @@ if [ ! type -p direnv &>/dev/null && -f .envrc ]; then fi mkdir -p "$DEVENV_STATE" -if [ ! -L "$DEVENV_DOTFILE/profile" ] || [ "$(/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin/readlink $DEVENV_DOTFILE/profile)" != "/nix/store/3niz0g2hddnbba4bcql8s8arc6mmna5m-devenv-profile" ] +if [ ! -L "$DEVENV_DOTFILE/profile" ] || [ "$(/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin/readlink $DEVENV_DOTFILE/profile)" != "/nix/store/mpwh8x3hcqkkqcl8aah6c28m54mfdiw0-devenv-profile" ] then - ln -snf /nix/store/3niz0g2hddnbba4bcql8s8arc6mmna5m-devenv-profile "$DEVENV_DOTFILE/profile" + ln -snf /nix/store/mpwh8x3hcqkkqcl8aah6c28m54mfdiw0-devenv-profile "$DEVENV_DOTFILE/profile" fi unset HOST_PATH NIX_BUILD_CORES __structuredAttrs buildInputs buildPhase builder depsBuildBuild depsBuildBuildPropagated depsBuildTarget depsBuildTargetPropagated depsHostHost depsHostHostPropagated depsTargetTarget depsTargetTargetPropagated dontAddDisableDepTrack doCheck doInstallCheck nativeBuildInputs out outputs patches phases preferLocalBuild propagatedBuildInputs propagatedNativeBuildInputs shell shellHook stdenv strictDeps @@ -241,10 +241,10 @@ mkdir -p /tmp/devenv-b51d30d ln -snf /tmp/devenv-b51d30d /home/nionidh/projects/rust-tomfoolery/cursor-mover-app/.devenv/run -export PATH=/nix/store/qgm0a9f2cxfsf6v0d4b5riy5x54w3zib-devenv-flake-compat/bin:$PATH +export PATH=/nix/store/f7qg5ng20s1mi9438padw0iy5gx3pci1-devenv-flake-compat/bin:$PATH if [ -z "${DEVENV_SKIP_TASKS:-}" ]; then - /nix/store/bkl9r14hgr0qy850wkdj1bgs8884i46r-devenv-tasks-2.0.0/bin/devenv-tasks run devenv:enterShell --mode all --cache-dir /home/nionidh/projects/rust-tomfoolery/cursor-mover-app/.devenv --runtime-dir /tmp/devenv-b51d30d || exit $? + /nix/store/2a3cn42zhsg4yckjvy9yp5qh62xy0qx3-devenv-tasks-2.0.0/bin/devenv-tasks run devenv:enterShell --mode all --cache-dir /home/nionidh/projects/rust-tomfoolery/cursor-mover-app/.devenv --runtime-dir /tmp/devenv-b51d30d || exit $? if [ -f "$DEVENV_DOTFILE/load-exports" ]; then source "$DEVENV_DOTFILE/load-exports" fi diff --git a/Cargo.lock b/Cargo.lock index 031c856..fbe4a06 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,12 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "adler2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" - [[package]] name = "aho-corasick" version = "1.1.4" @@ -63,7 +57,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -74,7 +68,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -93,29 +87,6 @@ dependencies = [ "tungstenite 0.27.0", ] -[[package]] -name = "atk" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" -dependencies = [ - "atk-sys", - "glib", - "libc", -] - -[[package]] -name = "atk-sys" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - [[package]] name = "atomic-waker" version = "1.1.2" @@ -216,7 +187,7 @@ checksum = "604fde5e028fea851ce1d8570bbdc034bec850d157f7569d10f347d06808c05c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -231,34 +202,6 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "bindgen" -version = "0.63.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36d860121800b2a9a94f9b5604b332d5cffb234ce17609ea479d723dbc9d3885" -dependencies = [ - "bitflags 1.3.2", - "cexpr", - "clang-sys", - "lazy_static", - "lazycell", - "log", - "peeking_take_while", - "proc-macro2", - "quote", - "regex", - "rustc-hash 1.1.0", - "shlex", - "syn 1.0.109", - "which", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "bitflags" version = "2.11.0" @@ -268,12 +211,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - [[package]] name = "block-buffer" version = "0.10.4" @@ -283,15 +220,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "block2" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" -dependencies = [ - "objc2", -] - [[package]] name = "bumpalo" version = "3.20.2" @@ -313,31 +241,6 @@ dependencies = [ "serde", ] -[[package]] -name = "cairo-rs" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" -dependencies = [ - "bitflags 2.11.0", - "cairo-sys-rs", - "glib", - "libc", - "once_cell", - "thiserror 1.0.69", -] - -[[package]] -name = "cairo-sys-rs" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - [[package]] name = "cc" version = "1.2.56" @@ -354,15 +257,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" -[[package]] -name = "cexpr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom", -] - [[package]] name = "cfb" version = "0.7.3" @@ -374,16 +268,6 @@ dependencies = [ "uuid", ] -[[package]] -name = "cfg-expr" -version = "0.15.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" -dependencies = [ - "smallvec", - "target-lexicon", -] - [[package]] name = "cfg-if" version = "1.0.4" @@ -416,7 +300,7 @@ dependencies = [ "js-sys", "num-traits", "wasm-bindgen", - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -446,46 +330,6 @@ dependencies = [ "half", ] -[[package]] -name = "clang-sys" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" -dependencies = [ - "glob", - "libc", - "libloading 0.8.9", -] - -[[package]] -name = "cocoa" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad36507aeb7e16159dfe68db81ccc27571c3ccd4b76fb2fb72fc59e7a4b1b64c" -dependencies = [ - "bitflags 2.11.0", - "block", - "cocoa-foundation", - "core-foundation 0.10.1", - "core-graphics", - "foreign-types 0.5.0", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81411967c50ee9a1fc11365f8c585f863a22a9697c89239c452292c40ba79b0d" -dependencies = [ - "bitflags 2.11.0", - "block", - "core-foundation 0.10.1", - "core-graphics-types", - "objc", -] - [[package]] name = "combine" version = "4.6.7" @@ -524,7 +368,7 @@ checksum = "4f160aad86b4343e8d4e261fee9965c3005b2fd6bc117d172ab65948779e4acf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -535,7 +379,7 @@ checksum = "42571ed01eb46d2e1adcf99c8ca576f081e46f2623d13500eba70d1d99a4c439" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -573,12 +417,6 @@ dependencies = [ "charset", ] -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - [[package]] name = "convert_case" version = "0.8.0" @@ -636,46 +474,12 @@ dependencies = [ "libc", ] -[[package]] -name = "core-foundation" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "core-foundation-sys" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "core-graphics" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" -dependencies = [ - "bitflags 2.11.0", - "core-foundation 0.10.1", - "core-graphics-types", - "foreign-types 0.5.0", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" -dependencies = [ - "bitflags 2.11.0", - "core-foundation 0.10.1", - "libc", -] - [[package]] name = "cpufeatures" version = "0.2.17" @@ -685,24 +489,6 @@ dependencies = [ "libc", ] -[[package]] -name = "crc32fast" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -725,33 +511,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "cssparser" -version = "0.29.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa", - "matches", - "phf 0.10.1", - "proc-macro2", - "quote", - "smallvec", - "syn 1.0.109", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" -dependencies = [ - "quote", - "syn 2.0.117", -] - [[package]] name = "cursor-move-webapp" version = "0.1.0" @@ -759,7 +518,7 @@ dependencies = [ "dioxus", "dioxus-html", "memfile", - "rustix 1.1.4", + "rustix", "serde", "tokio", "wasmtimer", @@ -767,16 +526,6 @@ dependencies = [ "wayland-protocols", "wayland-protocols-misc", "wayland-protocols-wlr", - "xkb", -] - -[[package]] -name = "cursor-mover-app" -version = "0.1.0" -dependencies = [ - "tokio", - "wayland-client", - "wayland-protocols-wlr", ] [[package]] @@ -799,7 +548,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -810,7 +559,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -842,19 +591,6 @@ dependencies = [ "powerfmt", ] -[[package]] -name = "derive_more" -version = "0.99.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" -dependencies = [ - "convert_case 0.4.0", - "proc-macro2", - "quote", - "rustc_version", - "syn 2.0.117", -] - [[package]] name = "derive_more" version = "2.1.1" @@ -874,7 +610,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.117", + "syn", "unicode-xid", ] @@ -900,7 +636,6 @@ dependencies = [ "dioxus-config-macros", "dioxus-core", "dioxus-core-macro", - "dioxus-desktop", "dioxus-devtools", "dioxus-document", "dioxus-fullstack", @@ -1000,7 +735,7 @@ dependencies = [ "dioxus-rsx", "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -1009,61 +744,6 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfc4b8cdc440a55c17355542fc2089d97949bba674255d84cac77805e1db8c9f" -[[package]] -name = "dioxus-desktop" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e6ec66749d1556636c5b4f661495565c155a7f78a46d4d007d7478c6bdc288c" -dependencies = [ - "async-trait", - "base64", - "bytes", - "cocoa", - "core-foundation 0.10.1", - "dioxus-asset-resolver", - "dioxus-cli-config", - "dioxus-core", - "dioxus-devtools", - "dioxus-document", - "dioxus-history", - "dioxus-hooks", - "dioxus-html", - "dioxus-interpreter-js", - "dioxus-signals", - "dunce", - "futures-channel", - "futures-util", - "generational-box", - "global-hotkey", - "infer", - "jni", - "lazy-js-bundle", - "libc", - "muda", - "ndk", - "ndk-context", - "ndk-sys", - "objc", - "objc_id", - "percent-encoding", - "rand 0.9.2", - "rfd", - "rustc-hash 2.1.1", - "serde", - "serde_json", - "signal-hook", - "slab", - "subtle", - "tao", - "thiserror 2.0.18", - "tokio", - "tracing", - "tray-icon", - "tungstenite 0.27.0", - "webbrowser", - "wry", -] - [[package]] name = "dioxus-devtools" version = "0.7.3" @@ -1132,7 +812,7 @@ dependencies = [ "const-str", "const_format", "content_disposition", - "derive_more 2.1.1", + "derive_more", "dioxus-asset-resolver", "dioxus-cli-config", "dioxus-core", @@ -1217,7 +897,7 @@ dependencies = [ "convert_case 0.8.0", "proc-macro2", "quote", - "syn 2.0.117", + "syn", "xxhash-rust", ] @@ -1283,7 +963,7 @@ dependencies = [ "convert_case 0.8.0", "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -1298,7 +978,6 @@ dependencies = [ "js-sys", "lazy-js-bundle", "rustc-hash 2.1.1", - "serde", "sledgehammer_bindgen", "sledgehammer_utils", "wasm-bindgen", @@ -1379,7 +1058,7 @@ dependencies = [ "quote", "sha2", "slab", - "syn 2.0.117", + "syn", ] [[package]] @@ -1392,7 +1071,7 @@ dependencies = [ "proc-macro2-diagnostics", "quote", "rustversion", - "syn 2.0.117", + "syn", ] [[package]] @@ -1502,7 +1181,7 @@ dependencies = [ "convert_case 0.8.0", "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -1539,45 +1218,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "dirs" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.61.2", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dispatch2" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" -dependencies = [ - "bitflags 2.11.0", - "block2", - "libc", - "objc2", -] - [[package]] name = "displaydoc" version = "0.2.5" @@ -1586,30 +1226,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", -] - -[[package]] -name = "dlopen2" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4" -dependencies = [ - "dlopen2_derive", - "libc", - "once_cell", - "winapi", -] - -[[package]] -name = "dlopen2_derive" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -1627,39 +1244,12 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" -[[package]] -name = "dpi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" - -[[package]] -name = "dtoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" - -[[package]] -name = "dtoa-short" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" -dependencies = [ - "dtoa", -] - [[package]] name = "dunce" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - [[package]] name = "encoding_rs" version = "0.8.35" @@ -1687,7 +1277,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -1716,107 +1306,24 @@ dependencies = [ "serde", ] -[[package]] -name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - -[[package]] -name = "fdeflate" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" -dependencies = [ - "simd-adler32", -] - -[[package]] -name = "field-offset" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" -dependencies = [ - "memoffset", - "rustc_version", -] - [[package]] name = "find-msvc-tools" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" -[[package]] -name = "flate2" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "foldhash" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared 0.1.1", -] - -[[package]] -name = "foreign-types" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" -dependencies = [ - "foreign-types-macros", - "foreign-types-shared 0.3.1", -] - -[[package]] -name = "foreign-types-macros" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "foreign-types-shared" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" - [[package]] name = "form_urlencoded" version = "1.2.2" @@ -1826,16 +1333,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - [[package]] name = "futures" version = "0.3.32" @@ -1892,7 +1389,7 @@ checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -1924,100 +1421,6 @@ dependencies = [ "slab", ] -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "gdk" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" -dependencies = [ - "cairo-rs", - "gdk-pixbuf", - "gdk-sys", - "gio", - "glib", - "libc", - "pango", -] - -[[package]] -name = "gdk-pixbuf" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" -dependencies = [ - "gdk-pixbuf-sys", - "gio", - "glib", - "libc", - "once_cell", -] - -[[package]] -name = "gdk-pixbuf-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gdk-sys" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" -dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gdkwayland-sys" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" -dependencies = [ - "gdk-sys", - "glib-sys", - "gobject-sys", - "libc", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gdkx11-sys" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" -dependencies = [ - "gdk-sys", - "glib-sys", - "libc", - "system-deps", - "x11", -] - [[package]] name = "generational-box" version = "0.7.3" @@ -2038,27 +1441,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "gethostname" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" -dependencies = [ - "rustix 1.1.4", - "windows-link 0.2.1", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - [[package]] name = "getrandom" version = "0.2.17" @@ -2068,7 +1450,7 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] @@ -2086,121 +1468,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "getrandom" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" -dependencies = [ - "cfg-if", - "libc", - "r-efi", - "wasip2", - "wasip3", -] - -[[package]] -name = "gio" -version = "0.18.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "gio-sys", - "glib", - "libc", - "once_cell", - "pin-project-lite", - "smallvec", - "thiserror 1.0.69", -] - -[[package]] -name = "gio-sys" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", - "winapi", -] - -[[package]] -name = "glib" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" -dependencies = [ - "bitflags 2.11.0", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "memchr", - "once_cell", - "smallvec", - "thiserror 1.0.69", -] - -[[package]] -name = "glib-macros" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" -dependencies = [ - "heck 0.4.1", - "proc-macro-crate 2.0.2", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "glib-sys" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" -dependencies = [ - "libc", - "system-deps", -] - -[[package]] -name = "glob" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" - -[[package]] -name = "global-hotkey" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9247516746aa8e53411a0db9b62b0e24efbcf6a76e0ba73e5a91b512ddabed7" -dependencies = [ - "crossbeam-channel", - "keyboard-types", - "objc2", - "objc2-app-kit", - "once_cell", - "thiserror 2.0.18", - "windows-sys 0.59.0", - "x11rb", - "xkeysym", -] - [[package]] name = "gloo-net" version = "0.6.0" @@ -2247,69 +1514,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "gobject-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gtk" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" -dependencies = [ - "atk", - "cairo-rs", - "field-offset", - "futures-channel", - "gdk", - "gdk-pixbuf", - "gio", - "glib", - "gtk-sys", - "gtk3-macros", - "libc", - "pango", - "pkg-config", -] - -[[package]] -name = "gtk-sys" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" -dependencies = [ - "atk-sys", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "system-deps", -] - -[[package]] -name = "gtk3-macros" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "h2" version = "0.4.13" @@ -2346,15 +1550,6 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash 0.1.5", -] - [[package]] name = "hashbrown" version = "0.16.1" @@ -2363,7 +1558,7 @@ checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", - "foldhash 0.2.0", + "foldhash", ] [[package]] @@ -2390,39 +1585,6 @@ dependencies = [ "http", ] -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "home" -version = "0.5.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "html5ever" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b7410cae13cbc75623c98ac4cbfd1f0bedddf3227afc24f370cf0f50a44a11c" -dependencies = [ - "log", - "mac", - "markup5ever", - "match_token", -] - [[package]] name = "http" version = "1.4.0" @@ -2552,7 +1714,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.62.2", + "windows-core", ] [[package]] @@ -2645,12 +1807,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "ident_case" version = "1.0.1" @@ -2686,8 +1842,6 @@ checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown 0.16.1", - "serde", - "serde_core", ] [[package]] @@ -2730,29 +1884,6 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" -[[package]] -name = "javascriptcore-rs" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" -dependencies = [ - "bitflags 1.3.2", - "glib", - "javascriptcore-rs-sys", -] - -[[package]] -name = "javascriptcore-rs-sys" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - [[package]] name = "jni" version = "0.21.1" @@ -2791,21 +1922,8 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.11.0", + "bitflags", "serde", - "unicode-segmentation", -] - -[[package]] -name = "kuchikiki" -version = "0.8.8-speedreader" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2" -dependencies = [ - "cssparser", - "html5ever", - "indexmap", - "selectors", ] [[package]] @@ -2820,58 +1938,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - -[[package]] -name = "libappindicator" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" -dependencies = [ - "glib", - "gtk", - "gtk-sys", - "libappindicator-sys", - "log", -] - -[[package]] -name = "libappindicator-sys" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" -dependencies = [ - "gtk-sys", - "libloading 0.7.4", - "once_cell", -] - [[package]] name = "libc" version = "0.2.182" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" -[[package]] -name = "libloading" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" -dependencies = [ - "cfg-if", - "winapi", -] - [[package]] name = "libloading" version = "0.8.9" @@ -2879,44 +1951,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-link 0.2.1", + "windows-link", ] -[[package]] -name = "libredox" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" -dependencies = [ - "bitflags 2.11.0", - "libc", -] - -[[package]] -name = "libxdo" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00333b8756a3d28e78def82067a377de7fa61b24909000aeaa2b446a948d14db" -dependencies = [ - "libxdo-sys", -] - -[[package]] -name = "libxdo-sys" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db23b9e7e2b7831bbd8aac0bbeeeb7b68cbebc162b227e7052e8e55829a09212" -dependencies = [ - "libc", - "x11", -] - -[[package]] -name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - [[package]] name = "linux-raw-sys" version = "0.12.1" @@ -2971,12 +2008,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - [[package]] name = "macro-string" version = "0.1.4" @@ -2985,16 +2016,7 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", -] - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", + "syn", ] [[package]] @@ -3020,7 +2042,7 @@ dependencies = [ "dioxus-cli-config", "dioxus-core-types", "serde", - "winnow 0.7.14", + "winnow", ] [[package]] @@ -3034,32 +2056,7 @@ dependencies = [ "manganis-core", "proc-macro2", "quote", - "syn 2.0.117", -] - -[[package]] -name = "markup5ever" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18" -dependencies = [ - "log", - "phf 0.11.3", - "phf_codegen 0.11.3", - "string_cache", - "string_cache_codegen", - "tendril", -] - -[[package]] -name = "match_token" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -3071,12 +2068,6 @@ dependencies = [ "regex-automata", ] -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - [[package]] name = "matchit" version = "0.8.4" @@ -3095,7 +2086,7 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad38eb12aea514a0466ea40a80fd8cc83637065948eb4a426e4aa46261175227" dependencies = [ - "rustix 1.1.4", + "rustix", ] [[package]] @@ -3116,15 +2107,6 @@ dependencies = [ "libc", ] -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - [[package]] name = "mime" version = "0.3.17" @@ -3141,22 +2123,6 @@ dependencies = [ "unicase", ] -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", - "simd-adler32", -] - [[package]] name = "mio" version = "1.1.1" @@ -3164,31 +2130,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "windows-sys 0.61.2", ] -[[package]] -name = "muda" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a" -dependencies = [ - "crossbeam-channel", - "dpi", - "gtk", - "keyboard-types", - "libxdo", - "objc2", - "objc2-app-kit", - "objc2-core-foundation", - "objc2-foundation", - "once_cell", - "png", - "thiserror 2.0.18", - "windows-sys 0.60.2", -] - [[package]] name = "multer" version = "3.1.0" @@ -3206,35 +2151,18 @@ dependencies = [ "version_check", ] -[[package]] -name = "native-tls" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - [[package]] name = "ndk" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.11.0", + "bitflags", "jni-sys", "log", "ndk-sys", "num_enum", - "raw-window-handle 0.6.2", + "raw-window-handle", "thiserror 1.0.69", ] @@ -3253,28 +2181,6 @@ dependencies = [ "jni-sys", ] -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "num-conv" version = "0.2.0" @@ -3306,125 +2212,10 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ - "proc-macro-crate 3.4.0", + "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.117", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", -] - -[[package]] -name = "objc2" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" -dependencies = [ - "objc2-encode", - "objc2-exception-helper", -] - -[[package]] -name = "objc2-app-kit" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" -dependencies = [ - "bitflags 2.11.0", - "block2", - "objc2", - "objc2-core-foundation", - "objc2-foundation", -] - -[[package]] -name = "objc2-core-foundation" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" -dependencies = [ - "bitflags 2.11.0", - "dispatch2", - "objc2", -] - -[[package]] -name = "objc2-core-graphics" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" -dependencies = [ - "bitflags 2.11.0", - "objc2-core-foundation", -] - -[[package]] -name = "objc2-encode" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" - -[[package]] -name = "objc2-exception-helper" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" -dependencies = [ - "cc", -] - -[[package]] -name = "objc2-foundation" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" -dependencies = [ - "bitflags 2.11.0", - "block2", - "objc2", - "objc2-core-foundation", -] - -[[package]] -name = "objc2-ui-kit" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" -dependencies = [ - "bitflags 2.11.0", - "objc2", - "objc2-core-foundation", - "objc2-foundation", -] - -[[package]] -name = "objc2-web-kit" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" -dependencies = [ - "bitflags 2.11.0", - "block2", - "objc2", - "objc2-app-kit", - "objc2-core-foundation", - "objc2-foundation", -] - -[[package]] -name = "objc_id" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" -dependencies = [ - "objc", + "syn", ] [[package]] @@ -3433,81 +2224,6 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -[[package]] -name = "openssl" -version = "0.10.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" -dependencies = [ - "bitflags 2.11.0", - "cfg-if", - "foreign-types 0.3.2", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "openssl-probe" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" - -[[package]] -name = "openssl-sys" -version = "0.9.111" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "pango" -version = "0.18.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" -dependencies = [ - "gio", - "glib", - "libc", - "once_cell", - "pango-sys", -] - -[[package]] -name = "pango-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - [[package]] name = "parking_lot" version = "0.12.5" @@ -3528,141 +2244,15 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-link 0.2.1", + "windows-link", ] -[[package]] -name = "peeking_take_while" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" - [[package]] name = "percent-encoding" version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" -[[package]] -name = "phf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -dependencies = [ - "phf_shared 0.8.0", -] - -[[package]] -name = "phf" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" -dependencies = [ - "phf_macros", - "phf_shared 0.10.0", - "proc-macro-hack", -] - -[[package]] -name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_shared 0.11.3", -] - -[[package]] -name = "phf_codegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", -] - -[[package]] -name = "phf_codegen" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" -dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", -] - -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared 0.8.0", - "rand 0.7.3", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand 0.8.5", -] - -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared 0.11.3", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher 0.3.11", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher 0.3.11", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher 1.0.2", -] - [[package]] name = "pin-project" version = "1.1.11" @@ -3680,7 +2270,7 @@ checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -3701,25 +2291,6 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" -[[package]] -name = "png" -version = "0.17.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" -dependencies = [ - "bitflags 1.3.2", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", -] - -[[package]] -name = "pollster" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" - [[package]] name = "potential_utf" version = "0.1.4" @@ -3744,81 +2315,15 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn 2.0.117", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit 0.19.15", -] - -[[package]] -name = "proc-macro-crate" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" -dependencies = [ - "toml_datetime 0.6.3", - "toml_edit 0.20.2", -] - [[package]] name = "proc-macro-crate" version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit 0.23.10+spec-1.0.0", + "toml_edit", ] -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - [[package]] name = "proc-macro2" version = "1.0.106" @@ -3836,7 +2341,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", "version_check", ] @@ -3894,7 +2399,7 @@ dependencies = [ "bytes", "getrandom 0.3.4", "lru-slab", - "rand 0.9.2", + "rand", "ring", "rustc-hash 2.1.1", "rustls", @@ -3935,59 +2440,14 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", - "rand_pcg", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - [[package]] name = "rand" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.5", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", + "rand_chacha", + "rand_core", ] [[package]] @@ -3997,25 +2457,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.5", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.17", + "rand_core", ] [[package]] @@ -4027,30 +2469,6 @@ dependencies = [ "getrandom 0.3.4", ] -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "raw-window-handle" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" - [[package]] name = "raw-window-handle" version = "0.6.2" @@ -4063,30 +2481,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.0", -] - -[[package]] -name = "redox_users" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" -dependencies = [ - "getrandom 0.2.17", - "libredox", - "thiserror 2.0.18", -] - -[[package]] -name = "regex" -version = "1.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", + "bitflags", ] [[package]] @@ -4150,30 +2545,6 @@ dependencies = [ "webpki-roots", ] -[[package]] -name = "rfd" -version = "0.17.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20dafead71c16a34e1ff357ddefc8afc11e7d51d6d2b9fbd07eaa48e3e540220" -dependencies = [ - "block2", - "dispatch2", - "js-sys", - "libc", - "log", - "objc2", - "objc2-app-kit", - "objc2-core-foundation", - "objc2-foundation", - "percent-encoding", - "pollster", - "raw-window-handle 0.6.2", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "windows-sys 0.61.2", -] - [[package]] name = "ring" version = "0.17.14" @@ -4209,29 +2580,16 @@ dependencies = [ "semver", ] -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags 2.11.0", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", -] - [[package]] name = "rustix" version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.0", + "bitflags", "errno", "libc", - "linux-raw-sys 0.12.1", + "linux-raw-sys", "windows-sys 0.61.2", ] @@ -4291,62 +2649,12 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "schannel" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" -dependencies = [ - "windows-sys 0.61.2", -] - [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "security-framework" -version = "3.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" -dependencies = [ - "bitflags 2.11.0", - "core-foundation 0.10.1", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "selectors" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c37578180969d00692904465fb7f6b3d50b9a2b952b87c23d0e2e5cb5013416" -dependencies = [ - "bitflags 1.3.2", - "cssparser", - "derive_more 0.99.20", - "fxhash", - "log", - "phf 0.8.0", - "phf_codegen 0.8.0", - "precomputed-hash", - "servo_arc", - "smallvec", -] - [[package]] name = "semver" version = "1.0.27" @@ -4400,7 +2708,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -4446,16 +2754,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", -] - -[[package]] -name = "serde_spanned" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" -dependencies = [ - "serde", + "syn", ] [[package]] @@ -4470,16 +2769,6 @@ dependencies = [ "serde", ] -[[package]] -name = "servo_arc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52aa42f8fdf0fed91e5ce7f23d8138441002fa31dca008acf47e6fd4721f741" -dependencies = [ - "nodrop", - "stable_deref_trait", -] - [[package]] name = "sha1" version = "0.10.6" @@ -4517,44 +2806,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" -[[package]] -name = "signal-hook" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" -dependencies = [ - "libc", - "signal-hook-registry", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" -dependencies = [ - "errno", - "libc", -] - -[[package]] -name = "simd-adler32" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" - -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - -[[package]] -name = "siphasher" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" - [[package]] name = "slab" version = "0.4.12" @@ -4578,7 +2829,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb251b407f50028476a600541542b605bb864d35d9ee1de4f6cab45d88475e6d" dependencies = [ "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -4616,32 +2867,6 @@ dependencies = [ "windows-sys 0.60.2", ] -[[package]] -name = "soup3" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" -dependencies = [ - "futures-channel", - "gio", - "glib", - "libc", - "soup3-sys", -] - -[[package]] -name = "soup3-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - [[package]] name = "spin" version = "0.9.8" @@ -4654,31 +2879,6 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" -[[package]] -name = "string_cache" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" -dependencies = [ - "new_debug_unreachable", - "parking_lot", - "phf_shared 0.11.3", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" -dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", - "proc-macro2", - "quote", -] - [[package]] name = "subsecond" version = "0.7.3" @@ -4687,7 +2887,7 @@ checksum = "8438668e545834d795d04c4335aafc332ce046106521a29f0a5c6501de34187c" dependencies = [ "js-sys", "libc", - "libloading 0.8.9", + "libloading", "memfd", "memmap2", "serde", @@ -4713,17 +2913,6 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - [[package]] name = "syn" version = "2.0.117" @@ -4752,7 +2941,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -4761,8 +2950,8 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.11.0", - "core-foundation 0.9.4", + "bitflags", + "core-foundation", "system-configuration-sys", ] @@ -4776,101 +2965,6 @@ dependencies = [ "libc", ] -[[package]] -name = "system-deps" -version = "6.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" -dependencies = [ - "cfg-expr", - "heck 0.5.0", - "pkg-config", - "toml", - "version-compare", -] - -[[package]] -name = "tao" -version = "0.34.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7" -dependencies = [ - "bitflags 2.11.0", - "block2", - "core-foundation 0.10.1", - "core-graphics", - "crossbeam-channel", - "dispatch", - "dlopen2", - "dpi", - "gdkwayland-sys", - "gdkx11-sys", - "gtk", - "jni", - "lazy_static", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys", - "objc2", - "objc2-app-kit", - "objc2-foundation", - "once_cell", - "parking_lot", - "raw-window-handle 0.5.2", - "raw-window-handle 0.6.2", - "scopeguard", - "tao-macros", - "unicode-segmentation", - "url", - "windows", - "windows-core 0.61.2", - "windows-version", - "x11-dl", -] - -[[package]] -name = "tao-macros" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "target-lexicon" -version = "0.12.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" - -[[package]] -name = "tempfile" -version = "3.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82a72c767771b47409d2345987fda8628641887d5466101319899796367354a0" -dependencies = [ - "fastrand", - "getrandom 0.4.1", - "once_cell", - "rustix 1.1.4", - "windows-sys 0.61.2", -] - -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - [[package]] name = "thiserror" version = "1.0.69" @@ -4897,7 +2991,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -4908,7 +3002,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -4985,9 +3079,7 @@ dependencies = [ "bytes", "libc", "mio", - "parking_lot", "pin-project-lite", - "signal-hook-registry", "socket2", "tokio-macros", "windows-sys 0.61.2", @@ -5001,7 +3093,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -5065,27 +3157,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "toml" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime 0.6.3", - "toml_edit 0.20.2", -] - -[[package]] -name = "toml_datetime" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" -dependencies = [ - "serde", -] - [[package]] name = "toml_datetime" version = "0.7.5+spec-1.1.0" @@ -5095,30 +3166,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap", - "toml_datetime 0.6.3", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime 0.6.3", - "winnow 0.5.40", -] - [[package]] name = "toml_edit" version = "0.23.10+spec-1.0.0" @@ -5126,9 +3173,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ "indexmap", - "toml_datetime 0.7.5+spec-1.1.0", + "toml_datetime", "toml_parser", - "winnow 0.7.14", + "winnow", ] [[package]] @@ -5137,7 +3184,7 @@ version = "1.0.9+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" dependencies = [ - "winnow 0.7.14", + "winnow", ] [[package]] @@ -5162,7 +3209,7 @@ version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "bitflags 2.11.0", + "bitflags", "bytes", "futures-core", "futures-util", @@ -5216,7 +3263,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -5264,27 +3311,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "tray-icon" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e85aa143ceb072062fc4d6356c1b520a51d636e7bc8e77ec94be3608e5e80c" -dependencies = [ - "crossbeam-channel", - "dirs", - "libappindicator", - "muda", - "objc2", - "objc2-app-kit", - "objc2-core-foundation", - "objc2-core-graphics", - "objc2-foundation", - "once_cell", - "png", - "thiserror 2.0.18", - "windows-sys 0.60.2", -] - [[package]] name = "try-lock" version = "0.2.5" @@ -5302,9 +3328,7 @@ dependencies = [ "http", "httparse", "log", - "native-tls", - "rand 0.9.2", - "rustls", + "rand", "sha1", "thiserror 2.0.18", "utf-8", @@ -5321,7 +3345,7 @@ dependencies = [ "http", "httparse", "log", - "rand 0.9.2", + "rand", "sha1", "thiserror 2.0.18", "utf-8", @@ -5397,18 +3421,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version-compare" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" - [[package]] name = "version_check" version = "0.9.5" @@ -5453,15 +3465,9 @@ checksum = "59195a1db0e95b920366d949ba5e0d3fc0e70b67c09be15ce5abb790106b0571" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" @@ -5477,15 +3483,6 @@ dependencies = [ "wit-bindgen", ] -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen", -] - [[package]] name = "wasm-bindgen" version = "0.2.114" @@ -5532,7 +3529,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.117", + "syn", "wasm-bindgen-shared", ] @@ -5545,28 +3542,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - [[package]] name = "wasm-streams" version = "0.4.2" @@ -5580,18 +3555,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags 2.11.0", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - [[package]] name = "wasmtimer" version = "0.4.3" @@ -5614,7 +3577,7 @@ checksum = "fee64194ccd96bf648f42a65a7e589547096dfa702f7cadef84347b66ad164f9" dependencies = [ "cc", "downcast-rs", - "rustix 1.1.4", + "rustix", "smallvec", "wayland-sys", ] @@ -5625,8 +3588,8 @@ version = "0.31.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e6faa537fbb6c186cb9f1d41f2f811a4120d1b57ec61f50da451a0c5122bec" dependencies = [ - "bitflags 2.11.0", - "rustix 1.1.4", + "bitflags", + "rustix", "wayland-backend", "wayland-scanner", ] @@ -5637,7 +3600,7 @@ version = "0.32.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baeda9ffbcfc8cd6ddaade385eaf2393bd2115a69523c735f12242353c3df4f3" dependencies = [ - "bitflags 2.11.0", + "bitflags", "wayland-backend", "wayland-client", "wayland-scanner", @@ -5649,7 +3612,7 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "791c58fdeec5406aa37169dd815327d1e47f334219b523444bc26d70ceb4c34e" dependencies = [ - "bitflags 2.11.0", + "bitflags", "wayland-backend", "wayland-client", "wayland-protocols", @@ -5662,7 +3625,7 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9597cdf02cf0c34cd5823786dce6b5ae8598f05c2daf5621b6e178d4f7345f3" dependencies = [ - "bitflags 2.11.0", + "bitflags", "wayland-backend", "wayland-client", "wayland-protocols", @@ -5709,66 +3672,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webbrowser" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f00bb839c1cf1e3036066614cbdcd035ecf215206691ea646aa3c60a24f68f2" -dependencies = [ - "core-foundation 0.10.1", - "jni", - "log", - "ndk-context", - "objc2", - "objc2-foundation", - "url", - "web-sys", -] - -[[package]] -name = "webkit2gtk" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a" -dependencies = [ - "bitflags 1.3.2", - "cairo-rs", - "gdk", - "gdk-sys", - "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", - "gtk", - "gtk-sys", - "javascriptcore-rs", - "libc", - "once_cell", - "soup3", - "webkit2gtk-sys", -] - -[[package]] -name = "webkit2gtk-sys" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c" -dependencies = [ - "bitflags 1.3.2", - "cairo-sys-rs", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "gtk-sys", - "javascriptcore-rs-sys", - "libc", - "pkg-config", - "soup3-sys", - "system-deps", -] - [[package]] name = "webpki-roots" version = "1.0.6" @@ -5778,70 +3681,6 @@ dependencies = [ "rustls-pki-types", ] -[[package]] -name = "webview2-com" -version = "0.38.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7130243a7a5b33c54a444e54842e6a9e133de08b5ad7b5861cd8ed9a6a5bc96a" -dependencies = [ - "webview2-com-macros", - "webview2-com-sys", - "windows", - "windows-core 0.61.2", - "windows-implement", - "windows-interface", -] - -[[package]] -name = "webview2-com-macros" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "webview2-com-sys" -version = "0.38.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c" -dependencies = [ - "thiserror 2.0.18", - "windows", - "windows-core 0.61.2", -] - -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix 0.38.44", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - [[package]] name = "winapi-util" version = "0.1.11" @@ -5851,47 +3690,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.61.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" -dependencies = [ - "windows-collections", - "windows-core 0.61.2", - "windows-future", - "windows-link 0.1.3", - "windows-numerics", -] - -[[package]] -name = "windows-collections" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" -dependencies = [ - "windows-core 0.61.2", -] - -[[package]] -name = "windows-core" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link 0.1.3", - "windows-result 0.3.4", - "windows-strings 0.4.2", -] - [[package]] name = "windows-core" version = "0.62.2" @@ -5900,20 +3698,9 @@ checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", - "windows-link 0.2.1", - "windows-result 0.4.1", - "windows-strings 0.5.1", -] - -[[package]] -name = "windows-future" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" -dependencies = [ - "windows-core 0.61.2", - "windows-link 0.1.3", - "windows-threading", + "windows-link", + "windows-result", + "windows-strings", ] [[package]] @@ -5924,7 +3711,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -5935,49 +3722,24 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] -[[package]] -name = "windows-link" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" - [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" -[[package]] -name = "windows-numerics" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" -dependencies = [ - "windows-core 0.61.2", - "windows-link 0.1.3", -] - [[package]] name = "windows-registry" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" dependencies = [ - "windows-link 0.2.1", - "windows-result 0.4.1", - "windows-strings 0.5.1", -] - -[[package]] -name = "windows-result" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" -dependencies = [ - "windows-link 0.1.3", + "windows-link", + "windows-result", + "windows-strings", ] [[package]] @@ -5986,16 +3748,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link 0.2.1", -] - -[[package]] -name = "windows-strings" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" -dependencies = [ - "windows-link 0.1.3", + "windows-link", ] [[package]] @@ -6004,7 +3757,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -6025,15 +3778,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-sys" version = "0.60.2" @@ -6049,7 +3793,7 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-link 0.2.1", + "windows-link", ] [[package]] @@ -6089,7 +3833,7 @@ version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link 0.2.1", + "windows-link", "windows_aarch64_gnullvm 0.53.1", "windows_aarch64_msvc 0.53.1", "windows_i686_gnu 0.53.1", @@ -6100,24 +3844,6 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] -[[package]] -name = "windows-threading" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" -dependencies = [ - "windows-link 0.1.3", -] - -[[package]] -name = "windows-version" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" -dependencies = [ - "windows-link 0.2.1", -] - [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -6256,15 +3982,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - [[package]] name = "winnow" version = "0.7.14" @@ -6279,88 +3996,6 @@ name = "wit-bindgen" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck 0.5.0", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck 0.5.0", - "indexmap", - "prettyplease", - "syn 2.0.117", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn 2.0.117", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags 2.11.0", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] [[package]] name = "writeable" @@ -6368,115 +4003,6 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" -[[package]] -name = "wry" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728b7d4c8ec8d81cab295e0b5b8a4c263c0d41a785fb8f8c4df284e5411140a2" -dependencies = [ - "base64", - "block2", - "cookie", - "crossbeam-channel", - "dirs", - "dpi", - "dunce", - "gtk", - "html5ever", - "http", - "javascriptcore-rs", - "jni", - "kuchikiki", - "libc", - "ndk", - "objc2", - "objc2-app-kit", - "objc2-core-foundation", - "objc2-foundation", - "objc2-ui-kit", - "objc2-web-kit", - "once_cell", - "percent-encoding", - "raw-window-handle 0.6.2", - "sha2", - "soup3", - "tao-macros", - "thiserror 2.0.18", - "url", - "webkit2gtk", - "webkit2gtk-sys", - "webview2-com", - "windows", - "windows-core 0.61.2", - "windows-version", -] - -[[package]] -name = "x11" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" -dependencies = [ - "libc", - "pkg-config", -] - -[[package]] -name = "x11-dl" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" -dependencies = [ - "libc", - "once_cell", - "pkg-config", -] - -[[package]] -name = "x11rb" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" -dependencies = [ - "gethostname", - "rustix 1.1.4", - "x11rb-protocol", -] - -[[package]] -name = "x11rb-protocol" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" - -[[package]] -name = "xkb" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2819e26f5465d84288b45c72864c40d55ac0684daea1973494caa3b2cea2e0f" -dependencies = [ - "bitflags 1.3.2", - "libc", - "xkbcommon-sys", -] - -[[package]] -name = "xkbcommon-sys" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7dbb61bc8fd714a64f750e9c259952f079afe701256dd2118602c0ae15c90" -dependencies = [ - "bindgen", - "libc", - "pkg-config", -] - -[[package]] -name = "xkeysym" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" - [[package]] name = "xxhash-rust" version = "0.8.15" @@ -6502,7 +4028,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", "synstructure", ] @@ -6523,7 +4049,7 @@ checksum = "f65c489a7071a749c849713807783f70672b28094011623e200cb86dcb835953" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] @@ -6543,7 +4069,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", "synstructure", ] @@ -6583,7 +4109,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 37befb8..88750d3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,19 +1,21 @@ [workspace] -members = ["crates/cursor-mover-app" -, "crates/cursor-move-webapp"] +members = ["crates/cursor-move-webapp"] resolver = "2" [workspace.dependencies] the-lib = {path="crates/the-lib", version="0.0.0"} [workspace.lints.clippy] -all = "warn" -correctness = "deny" -suspicious = "warn" -complexity = "warn" -perf = "warn" -style = "warn" -pedantic = "warn" -restriction = "allow" -cargo = "warn" -nursery = "warn" +all = {level = "warn", priority = -1} +correctness = {level = "deny", priority = -1} +suspicious = {level = "warn", priority = -1} +complexity = {level = "warn", priority = -1} +perf = {level = "warn", priority = -1} +style = {level = "warn", priority = -1} +pedantic = {level = "warn", priority = -1} +restriction = {level = "allow", priority = -1} +cargo = {level = "warn", priority = -1} +nursery = {level = "warn", priority = -1} + +# cargo deny takes care of that +multiple-crate-versions = "allow" diff --git a/crates/cursor-move-webapp/Cargo.toml b/crates/cursor-move-webapp/Cargo.toml index d74a50f..3cb6933 100644 --- a/crates/cursor-move-webapp/Cargo.toml +++ b/crates/cursor-move-webapp/Cargo.toml @@ -3,6 +3,11 @@ name = "cursor-move-webapp" version = "0.1.0" authors = ["Mona Mayrhofer "] edition = "2024" +repository = "https://github.com/mona-mayrhofer/cursor-mover-app" +categories = ["tools"] +keywords = ["tools", "cursor", "remote"] +license = "EUPL-1.2" +description = "A web application for controlling your cursor and keyboard via a smartphone browser." # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -10,25 +15,25 @@ edition = "2024" dioxus = { version = "0.7.3", features = ["router", "fullstack", "logger"] } dioxus-html = { version = "0.7.3", features = ["serialize"] } serde = { version = "1.0.228", features = ["derive"] } +wasmtimer = "0.4.3" + wayland-client = { version = "0.31.12", optional = true } wayland-protocols-wlr = { version = "0.3.10", features = ["client"], optional = true } tokio = {version = "1.49.0", optional = true} -rustix = { version = "1.1.4", optional = true, features = ["time"] } +rustix = { version = "1.1.4", optional = true, features = ["time"], default-features = false } wayland-protocols-misc = { version = "0.3.10", features = ["client"], optional = true } wayland-protocols = { version = "0.32.10", features = ["client", "staging"], optional = true } -xkb = {version = "0.3.0", optional = true} memfile = {version = "0.3.2", optional = true} -wasmtimer = "0.4.3" [features] default = ["web"] # The feature that are only required for the web = ["dioxus/web"] build target should be optional and only enabled in the web = ["dioxus/web"] feature web = ["dioxus/web"] # The feature that are only required for the desktop = ["dioxus/desktop"] build target should be optional and only enabled in the desktop = ["dioxus/desktop"] feature -desktop = ["dioxus/desktop"] +#desktop = ["dioxus/desktop"] # The feature that are only required for the mobile = ["dioxus/mobile"] build target should be optional and only enabled in the mobile = ["dioxus/mobile"] feature -mobile = ["dioxus/mobile"] +#mobile = ["dioxus/mobile"] # The feature that are only required for the server = ["dioxus/server"] build target should be optional and only enabled in the server = ["dioxus/server"] feature server = ["dioxus/server", "dep:wayland-client", @@ -37,7 +42,6 @@ server = ["dioxus/server", "dep:wayland-protocols", "dep:tokio", "dep:rustix", - "dep:xkb", "dep:memfile" ] diff --git a/crates/cursor-move-webapp/src/components/controls.rs b/crates/cursor-move-webapp/src/components/controls.rs index 5dc812c..70083af 100644 --- a/crates/cursor-move-webapp/src/components/controls.rs +++ b/crates/cursor-move-webapp/src/components/controls.rs @@ -1,9 +1,6 @@ use dioxus::{ fullstack::{CborEncoding, WebSocketOptions, Websocket, extract::State, use_websocket}, - html::{ - geometry::{ElementSpace, euclid::Point2D}, - input_data::MouseButton, - }, + html::input_data::MouseButton, logger::tracing, prelude::*, }; diff --git a/crates/cursor-move-webapp/src/components/keyboard_area.rs b/crates/cursor-move-webapp/src/components/keyboard_area.rs index 885c39d..a9f4676 100644 --- a/crates/cursor-move-webapp/src/components/keyboard_area.rs +++ b/crates/cursor-move-webapp/src/components/keyboard_area.rs @@ -12,7 +12,7 @@ pub fn KeyboardArea(onevent: EventHandler) -> Element { let v = evt.value(); input_state.set(v.clone()); - onevent.call(ClientEvent::TextInputEvent { text: v }) + onevent.call(ClientEvent::TextInputEvent { text: v }); }); let key_press_handler = use_callback(move |evt: Event| { if input_state.read().is_empty() { diff --git a/crates/cursor-move-webapp/src/components/mouse_area.rs b/crates/cursor-move-webapp/src/components/mouse_area.rs index 642d339..13b12ae 100644 --- a/crates/cursor-move-webapp/src/components/mouse_area.rs +++ b/crates/cursor-move-webapp/src/components/mouse_area.rs @@ -1,8 +1,4 @@ -use std::{ - collections::{HashMap, VecDeque}, - ops::Sub, - time::Duration, -}; +use std::{collections::HashMap, ops::Sub, time::Duration}; use dioxus::{ html::{ diff --git a/crates/cursor-move-webapp/src/server/input_proxy_service.rs b/crates/cursor-move-webapp/src/server/input_proxy_service.rs index 9a77df1..0ff0d57 100644 --- a/crates/cursor-move-webapp/src/server/input_proxy_service.rs +++ b/crates/cursor-move-webapp/src/server/input_proxy_service.rs @@ -38,6 +38,7 @@ const BUTTON_RIGHT: u32 = 0x111; const BUTTON_MIDDLE: u32 = 0x112; // https://wayland.app/protocols/wayland#wl_keyboard:enum:keymap_format +#[expect(unused)] const NO_KEYMAP: u32 = 0; const XKB_V1: u32 = 1; @@ -233,8 +234,11 @@ enum InputProxyServiceState { keymap: Keymap, }, Running { + #[expect(unused)] seat: WlSeat, + #[expect(unused)] virtual_pointer_manager: ZwlrVirtualPointerManagerV1, + #[expect(unused)] virtual_keyboard_manager: ZwpVirtualKeyboardManagerV1, virtual_pointer: ZwlrVirtualPointerV1, @@ -282,7 +286,7 @@ impl InputProxyServiceState { } } - fn input_method_mut(&mut self) -> Option<&mut InputMethod> { + const fn input_method_mut(&mut self) -> Option<&mut InputMethod> { match self { Self::Running { input_method, .. } => Some(input_method), Self::Incomplete { .. } => None, @@ -480,7 +484,6 @@ impl Dispatch for InputProxyServiceState { _conn: &Connection, _qhandle: &QueueHandle, ) { - panic!(); tracing::warn!("Unknown event received from ZwpInputMethodV2"); } } diff --git a/crates/cursor-move-webapp/src/server/keymap.rs b/crates/cursor-move-webapp/src/server/keymap.rs index 93c6432..3af64d4 100644 --- a/crates/cursor-move-webapp/src/server/keymap.rs +++ b/crates/cursor-move-webapp/src/server/keymap.rs @@ -1,9 +1,12 @@ +#![expect(unused)] + use dioxus::logger::tracing; fn is_key_string(s: &str) -> bool { s.chars().all(|c| !c.is_control()) && s.chars().skip(1).all(|c| !c.is_ascii()) } +#[expect(clippy::too_many_lines)] pub fn web_key_to_linux_keycode(s: &str) -> Option { tracing::info!("Converting {s}"); match s { diff --git a/crates/cursor-move-webapp/src/utils/mouse_filter_buffer.rs b/crates/cursor-move-webapp/src/utils/mouse_filter_buffer.rs index da39fc6..be2af6a 100644 --- a/crates/cursor-move-webapp/src/utils/mouse_filter_buffer.rs +++ b/crates/cursor-move-webapp/src/utils/mouse_filter_buffer.rs @@ -57,16 +57,14 @@ impl MouseFilterBuffer { let mut i = self.buffer.iter(); - let mut last = if let Some(it) = i.find(|it| it.time >= start_time) { - it - } else { + let Some(mut last) = i.find(|it| it.time >= start_time) else { return Vector2D::zero(); }; let start_time = last.time; let mut last_time = last.time; for point in i { - total_distance += (point.position - last.position); + total_distance += point.position - last.position; last = point; last_time = point.time; } diff --git a/crates/cursor-move-webapp/src/views/home.rs b/crates/cursor-move-webapp/src/views/home.rs index 07651f7..73878ac 100644 --- a/crates/cursor-move-webapp/src/views/home.rs +++ b/crates/cursor-move-webapp/src/views/home.rs @@ -1,4 +1,4 @@ -use crate::components::{Controls, MouseArea}; +use crate::components::Controls; use dioxus::prelude::*; /// The Home page component that will be rendered when the current route is `[Route::Home]` diff --git a/crates/cursor-mover-app/Cargo.toml b/crates/cursor-mover-app/Cargo.toml deleted file mode 100644 index d8eb4c2..0000000 --- a/crates/cursor-mover-app/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "cursor-mover-app" -version = "0.1.0" -edition = "2024" -license = "EUPL-1.2" -description = "A web-application that lets you remotely control your cursor." -repository = "https://forgejo.monalith.xyz/Nionidh/cursor-mover-app" -keywords = ["web", "application", "cursor", "control"] -categories = ["web-programming"] -readme = "README.md" - -[dependencies] -tokio = { version = "1.49.0", features = ["full"] } -wayland-client = "0.31.12" -wayland-protocols-wlr = { version = "0.3.10", features = ["client"] } - -[lints] -workspace = true diff --git a/crates/cursor-mover-app/README.md b/crates/cursor-mover-app/README.md deleted file mode 100644 index 63e3699..0000000 --- a/crates/cursor-mover-app/README.md +++ /dev/null @@ -1 +0,0 @@ -The main application diff --git a/crates/cursor-mover-app/src/main.rs b/crates/cursor-mover-app/src/main.rs deleted file mode 100644 index cee2808..0000000 --- a/crates/cursor-mover-app/src/main.rs +++ /dev/null @@ -1,133 +0,0 @@ -use std::{ - alloc::System, - f64, - future::poll_fn, - time::{Duration, SystemTime, UNIX_EPOCH}, -}; - -use tokio::{ - select, - time::{self, Instant}, -}; -use wayland_client::{Connection, Dispatch, Proxy, QueueHandle, protocol::wl_registry}; -use wayland_protocols_wlr::virtual_pointer::v1::client::{ - zwlr_virtual_pointer_manager_v1::ZwlrVirtualPointerManagerV1, - zwlr_virtual_pointer_v1::ZwlrVirtualPointerV1, -}; - -#[derive(Default)] -struct AppData { - virtual_pointer: Option, -} - -impl Dispatch for AppData { - fn event( - state: &mut Self, - proxy: &ZwlrVirtualPointerV1, - event: ::Event, - data: &(), - conn: &Connection, - qhandle: &QueueHandle, - ) { - println!("VPointerData"); - } -} - -impl Dispatch for AppData { - fn event( - state: &mut Self, - proxy: &ZwlrVirtualPointerManagerV1, - event: ::Event, - data: &(), - conn: &Connection, - qhandle: &QueueHandle, - ) { - println!("ZwlrEvent") - } -} - -impl Dispatch for AppData { - fn event( - app_data: &mut Self, - registry: &wl_registry::WlRegistry, - event: wl_registry::Event, - _: &(), - _: &Connection, - queue_handle: &QueueHandle, - ) { - println!("WlRegistry Event"); - if let wl_registry::Event::Global { - name, - interface, - version, - } = event - && interface == "zwlr_virtual_pointer_manager_v1" - { - app_data.virtual_pointer.get_or_insert_with(|| { - let manager = registry.bind::( - name, - version, - queue_handle, - (), - ); - - let pointer = manager.create_virtual_pointer(None, queue_handle, ()); - - println!("Virtual pointer manager created"); - pointer - }); - } - } -} - -#[tokio::main] -async fn main() { - let connection = Connection::connect_to_env().unwrap(); - let display = connection.display(); - - let mut event_queue = connection.new_event_queue(); - let queue_handle = event_queue.handle(); - let _registry = display.get_registry(&queue_handle, ()); - println!("Advertized globals:"); - - let mut appdata = AppData::default(); - event_queue.roundtrip(&mut appdata).unwrap(); - - let mut interval = time::interval(Duration::from_millis(15)); - - let start = Instant::now(); - - loop { - if Instant::now().duration_since(start) > Duration::from_secs(5) { - break; - } - - select! { - poll = poll_fn(|cx| event_queue.poll_dispatch_pending(cx, &mut appdata)) => { - println!("Did the mash"); - }, - now = interval.tick() => { - if let Some(pointer) = appdata.virtual_pointer.as_mut() { - handle_pointer_motion(now, &pointer); - } - event_queue.flush().unwrap(); - }, - } - } -} - -pub fn handle_pointer_motion( - time: Instant, - pointer: &ZwlrVirtualPointerV1, -) { - let time = SystemTime::now() - .duration_since(UNIX_EPOCH) - .unwrap() - .as_millis(); - - let x = ((time as f64 / 1000.0 * f64::consts::PI).sin() * 10.0); - let y = ((time as f64 / 1000.0 * f64::consts::PI).cos() * 10.0); - - pointer.motion(time as u32, x, y); - pointer.frame(); -} diff --git a/deny.toml b/deny.toml index 5bd3fa6..20a6e7b 100644 --- a/deny.toml +++ b/deny.toml @@ -20,18 +20,21 @@ allow = [ "Unicode-3.0", #"0BSD", #"Apache-2.0 WITH LLVM-exception", - #"Apache-2.0", - # "BSD-2-Clause", - #"BSD-3-Clause", - #"BSL-1.0", - #"CC0-1.0", - #"ISC", + "Apache-2.0", + "BSD-2-Clause", + "BSD-3-Clause", + "BSL-1.0", + "CC0-1.0", + "ISC", # "MIT-0", "MIT", #"MPL-2.0", #"Unicode-3.0", "Unlicense", - #"Zlib", + "Zlib", + + #TODO Read up on that one + "CDLA-Permissive-2.0" ] exceptions = [ # { name = "unicode-ident", allow = ["Unicode-DFS-2016"] } @@ -42,6 +45,20 @@ multiple-versions = "warn" wildcards = "deny" # Certain crates that we do not want multiple versions of in the dependency tree deny = [] +skip = [ + { crate = "windows-sys", reason = "dioxus still depends on an old version" }, + + { crate = "tungstenite", reason = "dioxus internally depends on two versions" }, + { crate = "tokio-tungstenite", reason = "dioxus internally depends on two versions" }, + { crate = "thiserror-impl", reason = "dioxus internally depends on two versions" }, + { crate = "thiserror", reason = "dioxus internally depends on two versions" }, + { crate = "rustc-hash", reason = "dioxus internally depends on two versions" }, + { crate = "hashbrown", reason = "dioxus internally depends on two versions" }, + { crate = "getrandom", reason = "dioxus internally depends on two versions" }, + { crate = "convert_case", reason = "dioxus internally depends on two versions" }, + { crate = "const-serialize", reason = "dioxus internally depends on two versions" }, + { crate = "const-serialize-macro", reason = "dioxus internally depends on two versions" }, +] [sources] unknown-registry = "warn" diff --git a/flake.nix b/flake.nix index 4c8667d..73ceeda 100644 --- a/flake.nix +++ b/flake.nix @@ -45,11 +45,11 @@ perSystem = { - config, - self', + #config, + #self', inputs', pkgs, - system, + #system, ... }: { @@ -125,8 +125,11 @@ cargo clippy --workspace --all-targets --all-features -- -D warnings cargo deny check all -D warnings cargo fmt --all -- --check - cargo nextest run --workspace --all-targets --all-features --status-level all - cargo test + cargo nextest run --workspace --all-targets --all-features --status-level all --no-tests warn + + # TODO Doctests + + echo "==== checkall success ====" ''; # DO NOT ENABLE RUST because devenv messes up the ability # to build rust-src