x11-misc/squeekboard: add package

squeekboard is the keyboard for phosh

Package-Manager: Portage-3.0.20, Repoman-3.0.3
Signed-off-by: Marco Scardovi <marco@scardovi.com>
This commit is contained in:
Marco Scardovi
2021-06-22 19:57:52 +02:00
parent b3499f2479
commit ac04184117
6 changed files with 819 additions and 0 deletions

View File

@@ -0,0 +1,45 @@
DIST atk-0.7.0.crate 43814 BLAKE2B dc1d569df7a53506b50d484f7d04240ec3179b3915abacc5790310fa0b03587df07cf3ec5ed9922a877eb2d82c1cf3eef937bace3e2cf1b30895be27131b80a3 SHA512 4369d48607d58cfde6fd1dbe006eca2ffbf0212750d991b0a534586e75496e9cb99636e2b916ae3e6c3cbc0aa3345bddf1b2e7d2561a9c16769646029be9041b
DIST atk-sys-0.9.1.crate 21064 BLAKE2B 752cd426951051af696413725189286f465433388dfa84efc2ef6963af6b387b56cee830fd595c39049f9721f4c9b3c51828c3d17c7362b85a6cf648e17e5dbb SHA512 a2eb083abfd585bb7bea6415c1b0a6981c1e071b11dbbd41442d5ab438219d13ab28bf957640616644fb11760d2371c929f379ab414b8b00b297f3af25680a92
DIST bitflags-1.2.1.crate 16745 BLAKE2B 0fa6d3ce44aad7616d5cd02aad8c1d0b0fed4022650eb43067c4a72e6fc88da05442674fa51826e4858a47c9de233e1ba2229820af094197cd11bb416ceffb2b SHA512 ad89b3798845e23737a620bba581c2ff1ff3e15bac12555c765e201d2c0b90ecea0cdbc5b5b1a3fa9858c385e8e041f8226f5acfae5bbbe9925643fff2bf3f0b
DIST cairo-rs-0.7.1.crate 45803 BLAKE2B f12439219c6df2d35464d2e20c7e5b9a2ab3a5c92a87fd93f491b4e483553d4b078ff787e0e502f58a97521918a9e0633ffdf765c9087edd257087c9c72ba870 SHA512 3a8825c352ebea72d7cfc947654e85e0395990c4572913858d71b6c7eabb60efec0a9e9fdebb409530aed5535edaec5fcfb0f77f1f2dd6794503feff2e384ba7
DIST cairo-sys-rs-0.9.2.crate 11650 BLAKE2B ac664b7976de57907ae543c1afc2fd8fe166b2a147e1be31d6f60aec0b08949bb53b9f59c16e02f33a299a225f8e8202c5d7ad744c6aa8c5f03ec421a773ff33 SHA512 cab877b76951212710c7e668093fda218ac9c7e1e26fcffc448d759a3f968a7faeeea347025189a1aee7579b15916c141d0d727f986bb7061183a695b52bf39b
DIST cc-1.0.68.crate 55936 BLAKE2B 9bbbeda78b8c3aca487e770cddbe11bf4686424bd33d023ad66e1fbdfc8dcbc17fd85c15905e0edbed8745202c01aea13d4f03a7f8f655e5806da152565419aa SHA512 faca9aa91488808f920f1d88422cc8a69790aa6dbd7bd2cc5d08a579d248faafd0fd675e8499e56aef6715398c278db1fa2079511d211d41aa65741de5d5ac8c
DIST clap-2.33.3.crate 201925 BLAKE2B bec9c866481c5b3fddeb314f68af9bce38fc421e42816182de3209e8ea3447b72cf033e6251eea27fe974eff8085b7d98cdd2911b5cc0ec6b4bf4c750deb8a25 SHA512 3eb0fd648e2e3f9e5ff69a5e6cf0d867304fe18523accd036f28a86de368e4774088a6936c108ccc045092c539fe7f7494ea96420ebf6b4bec16880cea84bedf
DIST dtoa-0.4.8.crate 16175 BLAKE2B 5fff15e66c2edeb9eb9da89c66389b3a9bbb891d75afc3bb7da4dcbe9cad9e50af318cc8cc01cc7e56730763e8ea8ceb33b9447d1a7fa52a8d0f0d2060a97522 SHA512 fe1701ba2c40988b92f5f4ef78a8c81718b140ff8ca2d04023b09a89440e6ddb53ef36d1ebd9dd3e948428b361ed6611bd24ec1a31b5010c220c555e1f0bf6b8
DIST fragile-0.3.0.crate 10203 BLAKE2B 3b04d4acc57f5a76a0d2625db8b0d643f2199e175110b47ee40fc82afd3d1d01c75d92e0d1ec798340a93afb939f215504a16346730955b475e321246ed8bc09 SHA512 5307919178a440abf932857162b66b7a1a769513820c55c6827e8031894029f2d84920773899e6ae39ba1d8a8c0da2816ce9af7007416ab4e0e2c115090d8a1c
DIST gdk-0.11.0.crate 83537 BLAKE2B d616ec093a3ab852d068760f55ed5b39c90389d2a2c320d6a041cda12f98d99e873a0d26803335c3bfadb8289f32f06b2d5a961c16cd18c0baf6e4d91138f607 SHA512 483bbc99f06b9cf23ea3aabd540138711868bbd95bafbac20fdcf56e8e445fb3c44b79ef5f3c43015a21288e19adf399f446f971cf3413498c7d80ac500a98e0
DIST gdk-pixbuf-0.7.0.crate 15011 BLAKE2B ee46401bd80b5b5f865d7bac2b1ec28e01db657e4e0716b585bc72faebc6bb0ca694811e487a4dcc67d2572fc1e49775382e79abbccc3d8f8caa2f5b5848e9cb SHA512 a413656b7c18acc030225b14134b1481902d19e1845ec73cf430921020dee7c99dd5e5469f60780aed2d3552d83792c6a193ddeba686324284eff2d78cc0b813
DIST gdk-pixbuf-sys-0.9.1.crate 8641 BLAKE2B 8cbeffd4acbdd38ba43b5b39a84e0d20d9ea0230115f09f8b0c0e95b405027fee1a65e452e2abd2485097036c9f5dca8e01069f51a5651199db9be50aef6087a SHA512 22ca779b0065289da0bbc024bbc23cabc5e2fc81f8ea781107a83e41504edcf42d3dcde7079b091f1070596566df1f2180d226dcab21d8c388d7505d0fb171a7
DIST gdk-sys-0.9.1.crate 59958 BLAKE2B 9e0c30d138b908ff56dfe9db5b0ed75a1ed14c9f3158df3b595346888cc40c08d8df8d204ab59fff8391a87396cf6c29a9881c8dfb5fdeb3e8d82bff76869961 SHA512 9064f3a0f9e1512ca1eeb5a0ca27234d908948f53b0c4d7d38aeb184ca83846812187fa485a35bb311f778e4d14e25ac0353cd3c4b8d5002fd03e9bce2f82dcd
DIST gio-0.7.0.crate 123602 BLAKE2B 6f1d4e5f1bcba83495c5c5181d7ac39b437c33ff016d26292763266a49aca4320e2db9ae8dd5c2a1036739a10c709133575e411bcc24f80eda7f294b3df2a61b SHA512 2d46776fc64b9d63fd8dbd485ea3fc80a49bb86ff945628c81f33f877243c747fadae3bbb6ce228ca3e96870655a57c4d2881ee1454da2e310a7ad83d4a0e952
DIST gio-sys-0.9.1.crate 70278 BLAKE2B 58e92398a7df7faf06c5f6ab0bdd1d5fa5e31dca2c578b3b0156dd710a9ad1e65a896441ac68e81aae245bcc98e6d8c964ad5cfd83efeea17594e8aca3e18124 SHA512 d254e9fc43d7e173491e8f39afb6314f9dc357576f1d278669dac9d95c487d4cc91a31a248ae11ca1800c397dc528f55844ef909d8da474c09ae69c291b75a02
DIST glib-0.8.2.crate 121579 BLAKE2B 34de3fc241b2dc40f5c57fb0474fba70b838babc7acbb57391dc5182f3f29f27be4585a2856f0ff99a9cebb7521689e094f8e7e494abbe78c863ce63c4fd3f39 SHA512 7b86a1581c30cd9de24d9f1bd915dc020679237b62cef34ef85e07a0aa9151e26b0356536281fc769aeb4788265310f5d6becd63ed503e0662a284f17228a0fd
DIST glib-sys-0.9.1.crate 49213 BLAKE2B b3e44c85bcb5ea059bc1c67ffd02cd1893f11a1b40401a224383a5e824580bc5a3fc3700b507aa00fa04d249c00ff15d4f529add549cc791ce7c364c96180077 SHA512 03a2f045399e7605830d5a8616380a55854aec25c9f97b2d9f994e94ba1d0eee3026022f2b7980b84f81bc5a617efa71ffe6b6f63fcb19ae117b39432cb6f5d9
DIST gobject-sys-0.9.1.crate 17741 BLAKE2B 1fcfd31fd63f03a80ed4656b8eab30deecb469f622da1da36448df1f9d4b7908d8627c52c1fd4a879a3e92ca1faf13c9e209df13084f97874fa0a0319f126d0c SHA512 4ba8006daa38f9311341bc1fe9a2fd0ccc6fbc69321fd615186f81d73e388e7368f994a4be0d82fd4c2c4761973ce4fdec978571fb8ac2bc268748dccb6a0522
DIST gtk-0.7.0.crate 499790 BLAKE2B ce5459f73c2ef5e9189e002bb9cbf659eaa1f10dcd8b7bb97613d9f30f6cf0736c712bb1ac1ad0205ab15aad97e3c368932dc47a9d16743dd8fc1f3cc024965c SHA512 e018b6f6807b5c06691f11cd942f665cb754c1cb7863498c1bd4f4bd539525349f1672e1dccb116a464134ff72641f8109d430d2a83898afbfa207442b840a46
DIST gtk-sys-0.9.2.crate 125577 BLAKE2B fb1ac82f8e6f49cdee5e49666b85d5b3ed578a526d2e74f0c0913d57b7fac113fb9f35a5ff840ca6a29c0b0d4549e5ce0dd84d54b9adb8ecaeea73ed3ff07738 SHA512 4e3c61289dfed69743332f7b7986a8a1a63ba0b62bfc6e673a8ca44c9b25db485aeb5a28bd69cb3f6984dae1f2de06035f3441b2d212296b13df742f13bae1c1
DIST lazy_static-1.4.0.crate 10443 BLAKE2B 25b2e61bbac48f0dcbc79c81d7bf01f2403d8269ecb6be3ea6147bd00f7a588df15a91f44dfc18ada19b21faa71de4637c7d493a8628cbecd0e547d74e616a23 SHA512 e124c0521ec7c950f3c4a066821918da7a9c6e711115d98009ae7c351928fdddead852e7596fea5937a9c30e4e4ce8eee7099b20248b5d6e3b2494b6a6d88cb8
DIST libc-0.2.97.crate 517712 BLAKE2B ad769579a8e89e9e0ea6a08b8fd82b69a3a299721d63b63efcb436b333021c097933565e86f4b66ffcce6a589718bed2aacb36b80a936dd3dda763b9c0c240d7 SHA512 9b94a43d7da1e419900f7a016d5eb958bc42a006e1bb621ab8e2be2167e91f05cee81144c25e81a85c1b1ea2a26ff88980a4cc292fd42db8b09c5c49bf5531ed
DIST linked-hash-map-0.5.4.crate 16166 BLAKE2B d6bfa091265355ae124885f76212c968f2a87af80f3d306c13223ab7fa1d6a449ffda8d042bdb887501d2ffd8adbc638f18cdfeefc16c39a1eb9f57b7c658bf0 SHA512 2938883357ec0e7d9c9fc5746063ae419c97250ddceeb8de3480c89e97e0a29d175cc9199bdb3ddf81cd5d6a2a1e319ee1644a7309eea96058221074cf87c0b6
DIST maplit-1.0.2.crate 8871 BLAKE2B 3cf975d35de2d2fbd50227a6d2c5e72227e99197b620c8f29be97bd3666ec162deeef0d9e6bd327a063f175201beeb73c4ed27272449b1df0b78238b2d36ca22 SHA512 917b5cf665e12b687035c895b60b2ae05622963f495f5693515fd24d56f49e95a06ffced68606d061bd20822c655100035930673fd4b0d4790168763b6961a9f
DIST memmap-0.7.0.crate 15214 BLAKE2B 44a5bde9b85b2c378fd4c6ebfaa322ef8d0076472d6c7322f7aa95b8aba3514fd5212b4429eb369d30d0327377e36c626de474ea5e1f764bd4fae595680a04f8 SHA512 3a7c7f963111c2afeaa0381aaa6a57f0f57600392693ee1807d54771bc058ea0f86ac6e8afbe858e45f9f17b685430bf256dba1126b8074ace3aafc07bc14bfa
DIST pango-0.7.0.crate 41066 BLAKE2B 5bb58db5a2221925784993eb110fe9e55db5f31b90a6c174d560266dafabe9e7115f3e482f3bd1fe173309889e0617003b11ed65866411412b7f2066306e324c SHA512 6bccd8f21b467877a36473220da34fa2f67657b3ae24577f03d77fdac0cbc69d68624809697645e16742f1a3a499ec0b36a9a3723ca33fd34fd665290246c27f
DIST pango-sys-0.9.1.crate 21273 BLAKE2B 62cc1f12c8a30710d3b56eeef89afc00c1c0153526818d3bc82636f1c3e13dfbd49812e54045b6dbf6f80205c036f58050d1bdc6425e165dfa87987bfccf1575 SHA512 4fd2f3f74497f134946b33a2822b054758c390c345ebd4375540a7adcc000fadf562d8e8ecb4fb05b3e5824982dc4156c450ee61f6b8a1315d5dd488124b10ac
DIST pkg-config-0.3.19.crate 15451 BLAKE2B dc23b5ef12719b4b3d2fc5c93c087399ba954a5e127be91b26619466d5d7422e71684d02905304dca65273d69b66338d94c0642e3810a14df845ef507ddc0bfb SHA512 42bc13c4e39c8f71690db527d815884acdfd2ccf5fbfea700c6ed60257e852cdcb1c443e7774409e51da53612b0ff0aa165554b99fd0cba973f94a8df52982d9
DIST proc-macro2-1.0.27.crate 38625 BLAKE2B a55e2404e3c7444c6da8aca6c0e7702b865ec56cfd2c20fec319e737fc83b00bbf505c15dadaa8740d5a6d07c089ed4854a173049b1be9872bba132ae7cbc8db SHA512 3227bcaa726e88bfdb1b4d1243a4eb216ad2394a7a3b4b258de342ac76a1ab1a39a07f28f3490e42e2c2034176bf0d84b1c1fcadba2444c0abcc5878b02f93a4
DIST quote-1.0.9.crate 25042 BLAKE2B 26ef31e89fd2f0cc21ff65f8072f30c7977ac634d2536cf9845a0894d6659f62a96cd0a6ee48f7706036c2c1b898ef8c9167bd62714ad0c9cba4fb02f30922af SHA512 dd6cdaea183b85400531ef01e56657edbec0d8f7c27898c1e591b72dff755fa5875b33ca320bd65be0e9aecfc6a61ec119a4bd1291e9f2057fca642ab5b198c8
DIST regex-1.3.9.crate 236683 BLAKE2B 29bd39b138a8168015bb7a6b36bb5f7f9918b7c00bca28a720f3dffd5b805d3374a6648a04792585e85922e099faf547e5d02aeb23008b7802424351633ea23a SHA512 425713d3eeb4132d4056e6c1a08bc2fa5032b9971987c531b5707a9b5670ae15f037bd68921f1545580801957d1ea283eff87e533477364c7f76823800202f74
DIST regex-syntax-0.6.25.crate 293293 BLAKE2B d5ca0dbc26b03c6a1818026f9a69cd226ec934e7c64094d0ebe843052b648617ffae7aa3a074f8da46d03c46996d8b547d8916576342000bd9711089b3e57d73 SHA512 a3d31f82aadc6be1796f76c03152ff24f37fe42d6ce27fb98e2f55ab102f86502bc37ccd563f6e0eba61aab20d002184c618517b678b3b93cb8f0497cc046ca5
DIST serde-1.0.126.crate 75138 BLAKE2B 51f37473483da8a05670a213f02e119173e4c97a49313cf855ff3e547bb0969fcd84ccb7d1554e7c1761b388ac5cd917cd7e680e3ac23d2504412f75401c0937 SHA512 f22ec92b2eaed0819610ae2c4471eb12aa3a4209f5fbfe829c2329010813837d11ffc02d7809335df6a978cf7944095fae79c7593324dfd49becc7633dd626ed
DIST serde_derive-1.0.126.crate 54189 BLAKE2B fa3ca8ef2e7d9bd29e682ac7df066bab05301c2b92dc8f12d254a7e8b29e8d8a83d5405def3050db00f7e396fdd14f18cfac7918a5218d4b6822463c7c0f5c5d SHA512 e3c430b82def037d2f1dcc96ff7dc075636c81ab8f12e07ba09d232bc8224204c7b0cddc994c1ec98400e50340e03d6bad0dfa624b4d869e5f29d72b293d30bf
DIST serde_yaml-0.8.17.crate 40805 BLAKE2B 8f70ed3efa5afa1f8f45b2c107463799269d745705ac2b90e8ce69c090f4f52721d49723dc48967bdbab30efe853c661631063fe16bc3ceaed4d0158f90ffbcb SHA512 3e7a4baa156ca1d9655a76fbaccd2d87b6929165972f6390316c9d4d55fc9815827e3c4bbb8a1c594f048dcc9c3fd6f4c55370df27f6257dbc28e2066274a7c1
DIST squeekboard-1.14.0.tar.gz 172736 BLAKE2B 91400b87cc4a13a26b2af9a5a7793c72b903f143aeceb22057763bb75062bac759a26abf7a86fc5832457c390043c5fc5cea7ee51a0323b053e66778cdac01b2 SHA512 7caeae42a3870dcd6b4bda438215219f2fc249f33d57a203ed8987107dd327f1559d6ac9e2c4cf86beafb1cb2203101f7540a9d5cad5a5b7f5ef790d3d8f92eb
DIST syn-1.0.73.crate 232706 BLAKE2B c580f9ab914c54e731c8503c9b9d577d05032edb6bd12d7a183a3c0e3532fcf24196479a9ee40d09cb7e09ba6d94add36e338331affc2625058ce54419621ee4 SHA512 b37beb1b6d483cfdbc44d806af9955cdf52c4b0d5f918782019b089d06e107c7e23ced343a3bece20235a24752783795ebba8e603b61a6302e82ee7027843d8b
DIST textwrap-0.11.0.crate 17322 BLAKE2B 257428908342774593bbd3528fcdae710712ff54e8a711393a24356d8ba0e16e466a4b20c05f942c48ca76b3b5b5aaa90ec202f782cad892caa8b71ccf124da6 SHA512 f5c0fe4f28ff1a3a0931e8e235b5157a45f67967985bcc752418c5ec3481fca44a8ae4800088889b37e8cd0533f53d3c456d5ffd19b767b3f83a87b49a2e209a
DIST unicode-width-0.1.8.crate 16732 BLAKE2B 5aa7b87eef1322e4151a3fcf981ade311b8fa030527d7561815950e58d3f15156163dfe34da6a708c37dccc3f7652bf7fc2cd899fe8bb0118b67c4113ff3a2d2 SHA512 0abba6da6981a2451e01d93bbd47652c46eb6fb07cc0214f33259fb29945bfd5ee2b302e883ddca8f68e921635f222701b7310e7da2a5e225f854980d1e474b0
DIST unicode-xid-0.2.2.crate 14955 BLAKE2B 6c6da49ac08dbd8b3248272224d6bff96b9cd1f36029b1937a58a0b929c3a48326053305ed49e73edd70f572f5abbc4817cedc899c69e3457805ad056669f6af SHA512 92ffd0dd34e3ca235ecf110b38c447d3ec1faa23d76c112457f28d432f92fa6b5f428bc5e1bfd278f361f55426dd96e19ecb0d3eff6cf250892f069c52bd89a8
DIST winapi-0.3.9.crate 1200382 BLAKE2B cb5799749ccd935ea2d7068d953cecf19f543d9db7dc16ad4584bb7005373ada34937a3ced7225544d8bc765da599911c7a3190efefb3a25b7c1bb7123b4f673 SHA512 ff8b7b78065f3d8999ec03c725a0460ebc059771bf071c7a3df3f0ecd733edf3b0a2450024d4e24e1aedddaecd9038ce1376c0d8bbf45132068cf45cf4a53a97
DIST winapi-i686-pc-windows-gnu-0.4.0.crate 2918815 BLAKE2B 4d357e4d30f9552972170d65b9a5358b69c46a3e772fe05efc22f3d4ffc1caeeaad7aacdc7abd503a7ad0545f8bd7d22bf351dcb6df76f812fa4d45c34d65df0 SHA512 a672ccefd0730a8166fef1d4e39f9034d9ae426a3f5e28d1f4169fa5c5790767693f281d890e7804773b34acdb0ae1febac33cde8c50c0044a5a6152c7209ec2
DIST winapi-x86_64-pc-windows-gnu-0.4.0.crate 2947998 BLAKE2B 2ad1ea8b5fa07d544e910ccba043ae925269b76b26c9da356305b34b86741dd8b9aff0b9ffe3d562db4fcd7d7c46a11ce9e3168b782b1d89ae6881742b7ede82 SHA512 4a654af6a5d649dc87e00497245096b35a2894ae66f155cb62389902c3b93ddcc5cf7d0d8b9dd97b291d2d80bc686af2298e80abef6ac69883f4a54e79712513
DIST xkbcommon-0.4.0.crate 57500 BLAKE2B 16f1dddb82ff216088af9724ed4dc83469625e2c40e1ffed18b10b544f4e1dd8a7cc3570f5650407040adf09fc767e6d6c8474d838a3054ec11fa25d422eb321 SHA512 968dba8b059de25219cab2416aaa696cd937013cdbad33e77007f1ba64ff0d393dc6c6ba9ac9991292837a1e69af99fedbeeb46b8320b1d3906e8cb7a24ec372
DIST yaml-rust-0.4.5.crate 47783 BLAKE2B 3e888c5cc7afb43eaf3aaab2b6f47b86df164a66eb54d4e166b965cc84b1e06cd17bd992a0d6ee175d9a73a76e2b44a13167246383ed054afcf3cc1710b309cb SHA512 7621dc8dfd5e7d4a7a8805b2a7e8319b63b852367655f2359d4e3e8fec6c4fad52d75c46ce1161e4c674eac0780b757ce9d34e664e304d8d2beec7afa0363ea0

View File

@@ -0,0 +1,470 @@
From 93e4345e823dbb9d9ee187d1f5b32c6dd7dffdd3 Mon Sep 17 00:00:00 2001
From: Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm>
Date: Mon, 5 Apr 2021 08:17:07 +0000
Subject: [PATCH 1/2] layout: Take into account text purpose again
---
src/data.rs | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/src/data.rs b/src/data.rs
index e5aa3910..71711c3f 100644
--- a/src/data.rs
+++ b/src/data.rs
@@ -239,13 +239,18 @@ fn load_layout_data_with_fallback(
.map(PathBuf::from)
.or_else(|| xdg::data_path("squeekboard/keyboards"));
- log_print!(
- logging::Level::Debug,
- "load_layout_data_with_fallback() -> name:{}, purpose:{:?}, overlay:{}, layout_name:{}",
- name, purpose, overlay, &name
- );
+ let layout_purpose = match overlay {
+ "" => match purpose {
+ ContentPurpose::Number => "number",
+ ContentPurpose::Digits => "number",
+ ContentPurpose::Phone => "number",
+ ContentPurpose::Terminal => "terminal",
+ _ => "",
+ },
+ overlay => overlay,
+ };
- for (kind, source) in list_layout_sources(&name, kind, overlay, path) {
+ for (kind, source) in list_layout_sources(&name, kind, layout_purpose, path) {
let layout = load_layout_data(source.clone());
match layout {
Err(e) => match (e, source) {
--
GitLab
From 190876903281774bf0f304269ad7f047f44482b1 Mon Sep 17 00:00:00 2001
From: Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm>
Date: Mon, 5 Apr 2021 10:36:41 +0000
Subject: [PATCH 2/2] layouts: Make selection testable
From now on, all the parameters for loading layout are handled inside a single pure function, which makes them possible to test.
As a side benefit, the old preference order function composed of a mess of nested procedures is gone.
---
src/data.rs | 312 ++++++++++++++++++++++++++++++++++----------------
src/layout.rs | 2 +-
2 files changed, 212 insertions(+), 102 deletions(-)
diff --git a/src/data.rs b/src/data.rs
index 71711c3f..29cd4ba4 100644
--- a/src/data.rs
+++ b/src/data.rs
@@ -69,8 +69,12 @@ pub mod c {
let overlay_str = as_str(&overlay)
.expect("Bad overlay name")
.expect("Empty overlay name");
+ let overlay_str = match overlay_str {
+ "" => None,
+ other => Some(other),
+ };
- let (kind, layout) = load_layout_data_with_fallback(&name, type_, variant, &overlay_str);
+ let (kind, layout) = load_layout_data_with_fallback(&name, type_, variant, overlay_str);
let layout = ::layout::Layout::new(layout, kind);
Box::into_raw(Box::new(layout))
}
@@ -113,97 +117,156 @@ impl fmt::Display for DataSource {
}
}
-type LayoutSource = (ArrangementKind, DataSource);
-
-/// Lists possible sources, with 0 as the most preferred one
-/// Trying order: native lang of the right kind, native base,
-/// fallback lang of the right kind, fallback base
-/// The `purpose` argument is not ContentPurpose,
-/// but rather ContentPurpose and overlay in one.
-fn list_layout_sources(
- name: &str,
- kind: ArrangementKind,
- purpose: &str,
- keyboards_path: Option<PathBuf>,
-) -> Vec<LayoutSource> {
- // Just a simplification of often called code.
- let add_by_name = |
- mut ret: Vec<LayoutSource>,
- purpose: &str,
- name: &str,
- kind: &ArrangementKind,
- | -> Vec<LayoutSource> {
- let name = if purpose == "" { name.into() }
- else { format!("{}/{}", purpose, name) };
-
- if let Some(path) = keyboards_path.clone() {
- ret.push((
- kind.clone(),
- DataSource::File(
- path.join(name.clone())
- .with_extension("yaml")
- )
- ))
- }
-
- ret.push((
- kind.clone(),
- DataSource::Resource(name)
- ));
- ret
- };
-
- // Another grouping.
- let add_by_kind = |ret, purpose: &str, name: &str, kind| {
- let ret = match kind {
- &ArrangementKind::Base => ret,
- kind => add_by_name(
- ret,
- purpose,
- &name_with_arrangement(name.into(), kind),
- kind,
- ),
- };
-
- add_by_name(ret, purpose, name, &ArrangementKind::Base)
+/* All functions in this family carry around ArrangementKind,
+ * because it's not guaranteed to be preserved,
+ * and the resulting layout needs to know which version was loaded.
+ * See `squeek_layout_get_kind`.
+ * Possible TODO: since this is used only in styling,
+ * and makes the below code nastier than needed, maybe it should go.
+ */
+
+/// Returns ordered names treating `name` as the base name,
+/// ignoring any `+` inside.
+fn _get_arrangement_names(name: &str, arrangement: ArrangementKind)
+ -> Vec<(ArrangementKind, String)>
+{
+ let name_with_arrangement = match arrangement {
+ ArrangementKind::Base => name.into(),
+ ArrangementKind::Wide => format!("{}_wide", name),
};
-
- fn name_with_arrangement(
- name: String,
- kind: &ArrangementKind,
- ) -> String {
- match kind {
- ArrangementKind::Base => name,
- ArrangementKind::Wide => name + "_wide",
- }
+
+ let mut ret = Vec::new();
+ if name_with_arrangement != name {
+ ret.push((arrangement, name_with_arrangement));
}
+ ret.push((ArrangementKind::Base, name.into()));
+ ret
+}
- let ret = Vec::new();
-
- // Name as given takes priority.
- let ret = add_by_kind(ret, purpose, name, &kind);
-
- // Then try non-alternative name if applicable (`us` for `us+colemak`).
- let ret = {
+/// Returns names accounting for any `+` in the `name`,
+/// including the fallback to the default layout.
+fn get_preferred_names(name: &str, kind: ArrangementKind)
+ -> Vec<(ArrangementKind, String)>
+{
+ let mut ret = _get_arrangement_names(name, kind);
+
+ let base_name_preferences = {
let mut parts = name.splitn(2, '+');
match parts.next() {
Some(base) => {
- // The name is already equal to base, so it was already added.
- if base == name { ret }
- else {
- add_by_kind(ret, purpose, base, &kind)
+ // The name is already equal to base, so nothing to add
+ if base == name {
+ vec![]
+ } else {
+ _get_arrangement_names(base, kind)
}
},
// The layout's base name starts with a "+". Weird but OK.
None => {
log_print!(logging::Level::Surprise, "Base layout name is empty: {}", name);
- ret
+ vec![]
}
}
};
+
+ ret.extend(base_name_preferences.into_iter());
+ let fallback_names = _get_arrangement_names(FALLBACK_LAYOUT_NAME, kind);
+ ret.extend(fallback_names.into_iter());
+ ret
+}
+
+/// Includes the subdirectory before the forward slash.
+type LayoutPath = String;
+
+// This is only used inside iter_fallbacks_with_meta.
+// Placed at the top scope
+// because `use LayoutPurpose::*;`
+// complains about "not in scope" otherwise.
+// This seems to be a Rust 2015 edition problem.
+/// Helper for determining where to look up the layout.
+enum LayoutPurpose<'a> {
+ Default,
+ Special(&'a str),
+}
+
+/// Returns the directory string
+/// where the layout should be looked up, including the slash.
+fn get_directory_string(
+ content_purpose: ContentPurpose,
+ overlay: Option<&str>) -> String
+{
+ use self::LayoutPurpose::*;
+
+ let layout_purpose = match overlay {
+ None => match content_purpose {
+ ContentPurpose::Number => Special("number"),
+ ContentPurpose::Digits => Special("number"),
+ ContentPurpose::Phone => Special("number"),
+ ContentPurpose::Terminal => Special("terminal"),
+ _ => Default,
+ },
+ Some(overlay) => Special(overlay),
+ };
+
+ // For intuitiveness,
+ // default purpose layouts are stored in the root directory,
+ // as they correspond to typical text
+ // and are seen the most often.
+ match layout_purpose {
+ Default => "".into(),
+ Special(purpose) => format!("{}/", purpose),
+ }
+}
- add_by_kind(ret, purpose, FALLBACK_LAYOUT_NAME.into(), &kind)
+/// Returns an iterator over all fallback paths.
+fn to_layout_paths(
+ name_fallbacks: Vec<(ArrangementKind, String)>,
+ content_purpose: ContentPurpose,
+ overlay: Option<&str>,
+) -> impl Iterator<Item=(ArrangementKind, LayoutPath)> {
+ let prepend_directory = get_directory_string(content_purpose, overlay);
+
+ name_fallbacks.into_iter()
+ .map(move |(arrangement, name)|
+ (arrangement, format!("{}{}", prepend_directory, name))
+ )
+}
+type LayoutSource = (ArrangementKind, DataSource);
+
+fn to_layout_sources(
+ layout_paths: impl Iterator<Item=(ArrangementKind, LayoutPath)>,
+ filesystem_path: Option<PathBuf>,
+) -> impl Iterator<Item=LayoutSource> {
+ layout_paths.flat_map(move |(arrangement, layout_path)| {
+ let mut sources = Vec::new();
+ if let Some(path) = &filesystem_path {
+ sources.push((
+ arrangement,
+ DataSource::File(
+ path.join(&layout_path)
+ .with_extension("yaml")
+ )
+ ));
+ };
+ sources.push((arrangement, DataSource::Resource(layout_path.clone())));
+ sources.into_iter()
+ })
+}
+
+/// Returns possible sources, with first as the most preferred one.
+/// Trying order: native lang of the right kind, native base,
+/// fallback lang of the right kind, fallback base
+fn iter_layout_sources(
+ name: &str,
+ arrangement: ArrangementKind,
+ purpose: ContentPurpose,
+ ui_overlay: Option<&str>,
+ layout_storage: Option<PathBuf>,
+) -> impl Iterator<Item=LayoutSource> {
+ let names = get_preferred_names(name, arrangement);
+ let paths = to_layout_paths(names, purpose, ui_overlay);
+ to_layout_sources(paths, layout_storage)
}
fn load_layout_data(source: DataSource)
@@ -231,7 +294,7 @@ fn load_layout_data_with_fallback(
name: &str,
kind: ArrangementKind,
purpose: ContentPurpose,
- overlay: &str,
+ overlay: Option<&str>,
) -> (ArrangementKind, ::layout::LayoutData) {
// Build the path to the right keyboard layout subdirectory
@@ -239,18 +302,7 @@ fn load_layout_data_with_fallback(
.map(PathBuf::from)
.or_else(|| xdg::data_path("squeekboard/keyboards"));
- let layout_purpose = match overlay {
- "" => match purpose {
- ContentPurpose::Number => "number",
- ContentPurpose::Digits => "number",
- ContentPurpose::Phone => "number",
- ContentPurpose::Terminal => "terminal",
- _ => "",
- },
- overlay => overlay,
- };
-
- for (kind, source) in list_layout_sources(&name, kind, layout_purpose, path) {
+ for (kind, source) in iter_layout_sources(&name, kind, purpose, overlay, path) {
let layout = load_layout_data(source.clone());
match layout {
Err(e) => match (e, source) {
@@ -982,11 +1034,11 @@ mod tests {
/// First fallback should be to builtin, not to FALLBACK_LAYOUT_NAME
#[test]
- fn fallbacks_order() {
- let sources = list_layout_sources("nb", ArrangementKind::Base, "", None);
+ fn test_fallback_basic_builtin() {
+ let sources = iter_layout_sources("nb", ArrangementKind::Base, ContentPurpose::Normal, None, None);
assert_eq!(
- sources,
+ sources.collect::<Vec<_>>(),
vec!(
(ArrangementKind::Base, DataSource::Resource("nb".into())),
(
@@ -996,14 +1048,36 @@ mod tests {
)
);
}
+
+ /// Prefer loading from file system before builtin.
+ #[test]
+ fn test_preferences_order_path() {
+ let sources = iter_layout_sources("nb", ArrangementKind::Base, ContentPurpose::Normal, None, Some(".".into()));
+
+ assert_eq!(
+ sources.collect::<Vec<_>>(),
+ vec!(
+ (ArrangementKind::Base, DataSource::File("./nb.yaml".into())),
+ (ArrangementKind::Base, DataSource::Resource("nb".into())),
+ (
+ ArrangementKind::Base,
+ DataSource::File("./us.yaml".into())
+ ),
+ (
+ ArrangementKind::Base,
+ DataSource::Resource("us".into())
+ ),
+ )
+ );
+ }
/// If layout contains a "+", it should reach for what's in front of it too.
#[test]
- fn fallbacks_order_base() {
- let sources = list_layout_sources("nb+aliens", ArrangementKind::Base, "", None);
+ fn test_preferences_order_base() {
+ let sources = iter_layout_sources("nb+aliens", ArrangementKind::Base, ContentPurpose::Normal, None, None);
assert_eq!(
- sources,
+ sources.collect::<Vec<_>>(),
vec!(
(ArrangementKind::Base, DataSource::Resource("nb+aliens".into())),
(ArrangementKind::Base, DataSource::Resource("nb".into())),
@@ -1016,22 +1090,58 @@ mod tests {
}
#[test]
- fn fallbacks_terminal_order_base() {
- let sources = list_layout_sources("nb+aliens", ArrangementKind::Base, "terminal", None);
+ fn test_preferences_order_arrangement() {
+ let sources = iter_layout_sources("nb", ArrangementKind::Wide, ContentPurpose::Normal, None, None);
assert_eq!(
- sources,
+ sources.collect::<Vec<_>>(),
+ vec!(
+ (ArrangementKind::Wide, DataSource::Resource("nb_wide".into())),
+ (ArrangementKind::Base, DataSource::Resource("nb".into())),
+ (
+ ArrangementKind::Wide,
+ DataSource::Resource("us_wide".into())
+ ),
+ (
+ ArrangementKind::Base,
+ DataSource::Resource("us".into())
+ ),
+ )
+ );
+ }
+
+ #[test]
+ fn test_preferences_order_overlay() {
+ let sources = iter_layout_sources("nb", ArrangementKind::Base, ContentPurpose::Normal, Some("terminal"), None);
+
+ assert_eq!(
+ sources.collect::<Vec<_>>(),
vec!(
- (ArrangementKind::Base, DataSource::Resource("terminal/nb+aliens".into())),
(ArrangementKind::Base, DataSource::Resource("terminal/nb".into())),
(
ArrangementKind::Base,
- DataSource::Resource(format!("terminal/{}", FALLBACK_LAYOUT_NAME))
+ DataSource::Resource("terminal/us".into())
),
)
);
}
-
+
+ #[test]
+ fn test_preferences_order_hint() {
+ let sources = iter_layout_sources("nb", ArrangementKind::Base, ContentPurpose::Terminal, None, None);
+
+ assert_eq!(
+ sources.collect::<Vec<_>>(),
+ vec!(
+ (ArrangementKind::Base, DataSource::Resource("terminal/nb".into())),
+ (
+ ArrangementKind::Base,
+ DataSource::Resource("terminal/us".into())
+ ),
+ )
+ );
+ }
+
#[test]
fn unicode_keysym() {
let keysym = xkb::keysym_from_name(
diff --git a/src/layout.rs b/src/layout.rs
index 413795f0..0b8607b0 100644
--- a/src/layout.rs
+++ b/src/layout.rs
@@ -600,7 +600,7 @@ impl View {
}
/// The physical characteristic of layout for the purpose of styling
-#[derive(Clone, PartialEq, Debug)]
+#[derive(Clone, Copy, PartialEq, Debug)]
pub enum ArrangementKind {
Base = 0,
Wide = 1,
--
GitLab

View File

@@ -0,0 +1,38 @@
From 4fdce2802ad3ed8705c9629aa5622c89c70eabae Mon Sep 17 00:00:00 2001
From: Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm>
Date: Wed, 7 Apr 2021 15:26:18 +0000
Subject: [PATCH] layouts: Stop assuming that layout name always changes on
switch
Layout type switching outside of overlay was always done with gsettings in the middle, assuming that all clicks on languages in the popover result in a gsettings event. That's a bad assumption if there's only one xkb lang present.
This is a simple work around. A better solution would be to turn the entire system of layout switching into a central object that receives messages about changes that need to be applied, and then applies them.
---
src/popover.rs | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/src/popover.rs b/src/popover.rs
index 92103869..0d909b82 100644
--- a/src/popover.rs
+++ b/src/popover.rs
@@ -213,7 +213,16 @@ fn set_visible_layout(
layout_id: LayoutId,
) {
match layout_id {
- LayoutId::System { kind, name } => set_layout(kind, name),
+ LayoutId::System { kind, name } => {
+ unsafe {
+ use std::ptr;
+ manager::c::eekboard_context_service_set_overlay(
+ manager,
+ ptr::null(),
+ );
+ }
+ set_layout(kind, name);
+ }
LayoutId::Local(name) => {
let name = CString::new(name.as_str()).unwrap();
let name_ptr = name.as_ptr();
--
GitLab

View File

@@ -0,0 +1,157 @@
---
outlines:
default: { width: 50, height: 50 }
altline: { width: 70, height: 50 }
spaceline: { width: 160, height: 50 }
special: { width: 35.33, height: 50 }
action: { width: 85, height: 35 }
fkey: { width: 41, height: 50 }
views:
base:
- "1 2 3 4 5 6 7 8 9 0"
- "q w e r t y u i o p"
- "a s d f g h j k l"
- "Shift_L z x c v b n m BackSpace"
- "show_symbols show_eschars preferences space , . Return"
- "Ctrl Tab ↑ ↓ ← →"
upper:
- "! @ # $ % ^ & * ( )"
- "Q W E R T Y U I O P"
- "A S D F G H J K L"
- "Shift_L Z X C V B N M BackSpace"
- "show_symbols show_eschars preferences space < > Return"
- "Alt Esc PgUp PgDn Home End"
symbols:
- "~ ` ´ - _ + = ° © ®"
- "[ ] { } \\ | ÷ × √"
- "; : ' \" · € £ ¥"
- "Del / ? § π τ µ ¶ BackSpace"
- "show_letters show_eschars preferences space < > Return"
- "Ctrl Tab ↑ ↓ ← →"
eschars:
- "F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12"
- "ä è é ö ü Ä È É Ö Ü"
- "à â ê î ô À Â È Î Ô"
- "Del « » ç Ç æ œ ß BackSpace"
- "show_symbols show_eschars preferences space „ “ Return"
- "Alt Esc PgUp PgDn Home End"
buttons:
Shift_L:
action:
locking:
lock_view: "upper"
unlock_view: "base"
outline: "altline"
icon: "key-shift"
Ctrl:
modifier: "Control"
outline: "action"
label: "Ctrl"
Alt:
modifier: "Alt"
outline: "action"
label: "Alt"
BackSpace:
outline: "altline"
icon: "edit-clear-symbolic"
action: "erase"
preferences:
action: "show_prefs"
outline: "special"
icon: "keyboard-mode-symbolic"
show_letters:
action:
set_view: "base"
outline: "altline"
label: "abc"
show_symbols:
action:
set_view: "symbols"
outline: "altline"
label: "[{/"
show_eschars:
action:
locking:
lock_view: "eschars"
unlock_view: "base"
outline: "altline"
label: "func"
space:
outline: "spaceline"
label: " "
text: " "
Return:
outline: "altline"
icon: "key-enter"
keysym: "Return"
F1:
outline: "fkey"
keysym: "F1"
F2:
outline: "fkey"
keysym: "F2"
F3:
outline: "fkey"
keysym: "F3"
F4:
outline: "fkey"
keysym: "F4"
F5:
outline: "fkey"
keysym: "F5"
F6:
outline: "fkey"
keysym: "F6"
F7:
outline: "fkey"
keysym: "F7"
F8:
outline: "fkey"
keysym: "F8"
F9:
outline: "fkey"
keysym: "F9"
F10:
outline: "fkey"
keysym: "F10"
F11:
outline: "fkey"
keysym: "F11"
F12:
outline: "fkey"
keysym: "F12"
Esc:
outline: "action"
keysym: "Escape"
Home:
outline: "action"
keysym: "Home"
End:
outline: "action"
keysym: "End"
Del:
outline: "altline"
keysym: "Delete"
PgUp:
outline: "action"
keysym: "Page_Up"
PgDn:
outline: "action"
keysym: "Page_Down"
Tab:
outline: "action"
keysym: "Tab"
"↑":
outline: "action"
keysym: "Up"
"↓":
outline: "action"
keysym: "Down"
"←":
outline: "action"
keysym: "Left"
"→":
outline: "action"
keysym: "Right"

View File

@@ -0,0 +1,11 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
<email>marco@scardovi.com</email>
<name>Marco Scardovi</name>
</maintainer>
<upstream>
<remote-id type="github">atom/atom</remote-id>
</upstream>
</pkgmetadata>

View File

@@ -0,0 +1,98 @@
# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
CRATES="
atk-0.7.0
atk-sys-0.9.1
bitflags-1.2.1
cairo-rs-0.7.1
cairo-sys-rs-0.9.2
cc-1.0.68
clap-2.33.3
dtoa-0.4.8
fragile-0.3.0
gdk-0.11.0
gdk-pixbuf-0.7.0
gdk-pixbuf-sys-0.9.1
gdk-sys-0.9.1
gio-0.7.0
gio-sys-0.9.1
glib-0.8.2
glib-sys-0.9.1
gobject-sys-0.9.1
gtk-0.7.0
gtk-sys-0.9.2
lazy_static-1.4.0
libc-0.2.97
linked-hash-map-0.5.4
maplit-1.0.2
memmap-0.7.0
pango-0.7.0
pango-sys-0.9.1
pkg-config-0.3.19
proc-macro2-1.0.27
quote-1.0.9
regex-1.3.9
regex-syntax-0.6.25
serde-1.0.126
serde_derive-1.0.126
serde_yaml-0.8.17
syn-1.0.73
textwrap-0.11.0
unicode-width-0.1.8
unicode-xid-0.2.2
winapi-0.3.9
winapi-i686-pc-windows-gnu-0.4.0
winapi-x86_64-pc-windows-gnu-0.4.0
xkbcommon-0.4.0
yaml-rust-0.4.5
"
inherit cargo gnome2-utils meson xdg
MY_COMMIT="19630334b07d6d2949932cf05018925cb3ab9613"
DESCRIPTION="Virtual keyboard supporting Wayland, built primarily for the Librem 5 phone"
HOMEPAGE="https://source.puri.sm/Librem5/squeekboard"
SRC_URI="https://source.puri.sm/Librem5/squeekboard/-/archive/${MY_COMMIT}.tar.gz -> ${P}.tar.gz"
SRC_URI+=" $(cargo_crate_uris ${CRATES})"
LICENSE="GPL-3"
SLOT="0"
KEYWORDS="~amd64 ~arm64"
DEPEND="
${PYTHON_DEPS}
dev-libs/feedbackd
gnome-base/gnome-desktop
media-fonts/noto-emoji
x11-libs/gtk+:3
"
RDEPEND="${DEPEND}"
BDEPEND="
virtual/pkgconfig
dev-util/intltool
virtual/rust
dev-util/gtk-doc
"
S="${WORKDIR}/${PN}-${MY_COMMIT}"
QA_FLAGS_IGNORED="/usr/bin/squeekboard-test-layout"
src_install() {
meson_src_install
insinto /usr/bin
doins "${S}/tools/squeekboard-restyled"
}
pkg_postinst() {
xdg_pkg_postinst
gnome2_schemas_update
}
pkg_postrm() {
xdg_pkg_postrm
gnome2_schemas_update
}