├── src ├── imservice.h ├── popover.h ├── style.h ├── config.h.in ├── submission.h ├── actors │ ├── external │ │ ├── mod.rs │ │ ├── screensaver.rs │ │ └── debug.rs │ ├── mod.rs │ └── popover.rs ├── receiver.rs ├── outputs.h ├── wayland.h ├── lib.rs ├── panel.h ├── animation.rs ├── bin │ └── test_layout.rs ├── wayland.c ├── main.h ├── server-context-service.h ├── data │ └── mod.rs ├── dbus.h ├── xdg.rs ├── popover.c ├── action.rs └── imservice.c ├── debian ├── source │ └── format ├── squeekboard-devel.install ├── squeekboard.install ├── squeekboard.lintian-overrides ├── check_release.py ├── cargo │ └── config ├── rules └── control ├── po ├── POTFILES.in ├── meson.build ├── LINGUAS ├── ht.po ├── ko.po ├── zh_CN.po ├── eu.po ├── fa.po ├── oc.po ├── fur.po ├── ca.po ├── ka.po ├── he.po ├── tr.po ├── sv.po ├── pt.po ├── el.po ├── fi.po ├── hu.po ├── hr.po ├── cs.po ├── fr.po ├── it.po ├── ro.po ├── de.po ├── sr.po ├── pl.po ├── es.po ├── ru.po ├── nl.po ├── be.po ├── pt_BR.po ├── uk.po ├── hi.po ├── sl.po └── gl.po ├── .dir-locals.el ├── tests ├── layout2.yaml ├── layout_key3.yaml ├── layout3.yaml ├── layout.yaml ├── layout_key2.yaml ├── layout_key1.yaml ├── layout_margins.yaml ├── layout_position.yaml └── layout_erase.yaml ├── .gitignore ├── AUTHORS ├── Cargo.deps.online ├── data ├── icons │ ├── zwnj.svg │ ├── key-shift.svg │ └── key-enter.svg ├── keyboards │ ├── pin │ │ └── us.yaml │ ├── number │ │ └── us.yaml │ ├── il.yaml │ ├── ara_wide.yaml │ ├── ara.yaml │ ├── ch+de.yaml │ ├── bg.yaml │ ├── bg+phonetic.yaml │ ├── br.yaml │ ├── us_wide.yaml │ ├── us+colemak_wide.yaml │ ├── us.yaml │ ├── ge.yaml │ ├── us+colemak.yaml │ ├── ir.yaml │ ├── url │ │ └── us.yaml │ ├── th.yaml │ ├── email │ │ └── us.yaml │ ├── ir_wide.yaml │ ├── epo.yaml │ ├── de_wide.yaml │ ├── am+phonetic.yaml │ ├── am.yaml │ ├── hu.yaml │ ├── hu_wide.yaml │ ├── th_wide.yaml │ ├── de.yaml │ ├── ch+fr.yaml │ ├── es.yaml │ ├── es+cat.yaml │ ├── it.yaml │ ├── ru.yaml │ ├── ua.yaml │ └── dk.yaml ├── sm.puri.Squeekboard.desktop.in.in ├── squeekboard.gresources.xml ├── meson.build ├── common.css ├── style-Adwaita:dark.css ├── dbus │ └── sm.puri.OSK0.xml ├── popover.ui └── style.css ├── tools ├── style-check_source ├── style-check_build ├── squeekboard-restyled ├── meson.build ├── make_message └── yamlfmt ├── examples ├── test_layout.rs └── find_orphan_layouts.rs ├── doc ├── build.sh └── index.md ├── cargo.sh ├── Cargo.deps ├── Cargo.toml.in ├── Cargo.deps.newer ├── squeekboard.doap ├── protocols └── meson.build ├── eek ├── eek.h ├── eek.c ├── eek-keyboard.h ├── eek-gtk-keyboard.h └── eek-types.c ├── meson_options.txt ├── cargo_build.py ├── NEWS.md ├── dco.txt ├── eekboard └── eekboard-context-service.h └── README.md /src/imservice.h: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /debian/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (native) 2 | -------------------------------------------------------------------------------- /po/POTFILES.in: -------------------------------------------------------------------------------- 1 | data/popover.ui 2 | data/sm.puri.Squeekboard.desktop.in.in 3 | -------------------------------------------------------------------------------- /.dir-locals.el: -------------------------------------------------------------------------------- 1 | ((c-mode . ((c-basic-offset . 4) 2 | (indent-tabs-mode . nil)))) -------------------------------------------------------------------------------- /po/meson.build: -------------------------------------------------------------------------------- 1 | i18n = import('i18n') 2 | i18n.gettext('squeekboard', preset : 'glib') 3 | -------------------------------------------------------------------------------- /tests/layout2.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # missing views 3 | outlines: 4 | default: { width: 0, height: 0 } 5 | 6 | -------------------------------------------------------------------------------- /debian/squeekboard-devel.install: -------------------------------------------------------------------------------- 1 | usr/bin/squeekboard-test-layout /usr/bin 2 | usr/bin/squeekboard-entry /usr/bin 3 | -------------------------------------------------------------------------------- /src/popover.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | /// Popover state. 3 | /// Wrapped 4 | struct squeek_popover; 5 | 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | _build 2 | po/squeekboard.pot 3 | po/*.mo 4 | TAGS 5 | tags 6 | vgdump 7 | *.swp 8 | *~ 9 | \#*# 10 | .\#* 11 | -------------------------------------------------------------------------------- /debian/squeekboard.install: -------------------------------------------------------------------------------- 1 | tools/squeekboard-restyled usr/bin 2 | usr/bin/squeekboard /usr/bin 3 | usr/share/applications/ 4 | usr/share/locale/ 5 | -------------------------------------------------------------------------------- /src/style.h: -------------------------------------------------------------------------------- 1 | #ifndef __STYLE_H 2 | #define __STYLE_H 3 | #include "gtk/gtk.h" 4 | 5 | GtkCssProvider *squeek_load_style(void); 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /tests/layout_key3.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # punctuation 3 | views: 4 | base: 5 | - "か゚" # 2 codepoints 6 | outlines: 7 | default: { width: 0, height: 0 } 8 | 9 | -------------------------------------------------------------------------------- /tests/layout3.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # extra field 3 | views: 4 | base: 5 | - "test" 6 | outlines: 7 | default: { width: 0, height: 0 } 8 | 9 | bad_field: false 10 | -------------------------------------------------------------------------------- /tests/layout.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | views: 3 | base: 4 | - "test" 5 | outlines: 6 | default: { width: 0, height: 0 } 7 | 8 | buttons: 9 | test: 10 | label: "test" 11 | -------------------------------------------------------------------------------- /tests/layout_key2.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # punctuation 3 | views: 4 | base: 5 | - "å" 6 | outlines: 7 | default: { width: 0, height: 0 } 8 | 9 | buttons: 10 | å: 11 | label: "test" 12 | -------------------------------------------------------------------------------- /tests/layout_key1.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # punctuation 3 | views: 4 | base: 5 | - "." 6 | outlines: 7 | default: { width: 0, height: 0 } 8 | 9 | buttons: 10 | ".": 11 | label: "test" 12 | -------------------------------------------------------------------------------- /tests/layout_margins.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # Margins present 3 | margins: { top: 1, side: 2, bottom: 3 } 4 | views: 5 | base: 6 | - "test" 7 | outlines: 8 | default: { width: 1, height: 1 } 9 | 10 | -------------------------------------------------------------------------------- /tests/layout_position.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # Margins present 3 | margins: { top: 1, side: 2, bottom: 3 } 4 | views: 5 | base: 6 | - "test" 7 | outlines: 8 | default: { width: 1, height: 1 } 9 | 10 | -------------------------------------------------------------------------------- /tests/layout_erase.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # Erase only 3 | views: 4 | base: 5 | - "BackSpace" 6 | outlines: 7 | default: { width: 0, height: 0 } 8 | buttons: 9 | BackSpace: 10 | action: erase 11 | -------------------------------------------------------------------------------- /src/config.h.in: -------------------------------------------------------------------------------- 1 | /* 2 | * Autogenerated by the Meson build system. 3 | * Do not edit, your changes will be lost. 4 | */ 5 | 6 | #pragma once 7 | 8 | #mesondefine GETTEXT_PACKAGE 9 | 10 | #mesondefine LOCALEDIR 11 | -------------------------------------------------------------------------------- /debian/squeekboard.lintian-overrides: -------------------------------------------------------------------------------- 1 | # yaml-rust 0.4.3 shares some roots with libyaml, including the string which lintian checks, creating a false positive 2 | squeekboard binary: embedded-library usr/bin/squeekboard: libyaml 3 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | squeekboard is written by Dorota Czaplejewicz on behlf of Purism, SPC. 2 | eekboard was written by Daiki Ueno 3 | 4 | For more details, see the debian/copyright file. 5 | 6 | -------------------------------------------------------------------------------- /Cargo.deps.online: -------------------------------------------------------------------------------- 1 | # Dependencies which are only used with online, crates.io builds. 2 | [patch.crates-io] 3 | # Dependency was yanked, but gio 0.7 needs it. 4 | fragile = { git = "https://source.puri.sm/dorota.czaplejewicz/fragile.git", tag = "0.3.0" } 5 | -------------------------------------------------------------------------------- /data/icons/zwnj.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /po/LINGUAS: -------------------------------------------------------------------------------- 1 | be 2 | ca 3 | cs 4 | de 5 | el 6 | es 7 | eu 8 | fa 9 | fi 10 | fr 11 | fur 12 | gl 13 | he 14 | hi 15 | hr 16 | ht 17 | hu 18 | it 19 | ka 20 | ko 21 | nl 22 | oc 23 | pl 24 | pt 25 | pt_BR 26 | ro 27 | ru 28 | sl 29 | sr 30 | tr 31 | uk 32 | sv 33 | zh_CN 34 | -------------------------------------------------------------------------------- /tools/style-check_source: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | # Enforces style check for the project. 6 | THIS=$(realpath $0) 7 | TOOLS=$(dirname $THIS) 8 | cd $TOOLS/.. 9 | 10 | # The CI file seems to be touched regularly, and causing problems often, 11 | # unlike layout files. 12 | ./tools/yamlfmt ./.gitlab-ci.yml $1 13 | -------------------------------------------------------------------------------- /data/icons/key-shift.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /examples/test_layout.rs: -------------------------------------------------------------------------------- 1 | extern crate rs; 2 | 3 | use rs::tests::check_builtin_layout; 4 | use std::env; 5 | 6 | fn main() -> () { 7 | check_builtin_layout( 8 | env::args().nth(1).expect("No argument given").as_str(), 9 | env::args().nth(2).map(|s| s == "allow_missing_return").unwrap_or(false), 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /src/submission.h: -------------------------------------------------------------------------------- 1 | #ifndef __SUBMISSION_H 2 | #define __SUBMISSION_H 3 | 4 | #include "inttypes.h" 5 | 6 | #include "eek/eek-types.h" 7 | 8 | struct squeek_layout; 9 | struct submission; 10 | 11 | // Defined in Rust 12 | uint8_t submission_hint_available(struct submission *self); 13 | void submission_use_layout(struct submission *self, struct squeek_layout *layout, uint32_t time); 14 | #endif 15 | -------------------------------------------------------------------------------- /data/icons/key-enter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /debian/check_release.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | """Checks tag before release. 4 | Feed it the first changelog line, and then all available tags. 5 | """ 6 | 7 | import re, sys 8 | version = re.findall("\\((.*)\\)", input())[0] 9 | tag = 'v' + re.findall("([0-9]+\\.[0-9]+\\.[0-9]+).*", version)[0] 10 | if tag not in map(str.strip, sys.stdin.readlines()): 11 | raise Exception("Changelog's current version doesn't have a tag. Push the tag!") 12 | -------------------------------------------------------------------------------- /data/keyboards/pin/us.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | margins: { top: 4, side: 0, bottom: 4 } 3 | outlines: 4 | default: { width: 120, height: 52 } 5 | 6 | views: 7 | base: 8 | - "1 2 3" 9 | - "4 5 6" 10 | - "7 8 9" 11 | - "BackSpace 0 Return" 12 | 13 | buttons: 14 | BackSpace: 15 | icon: "edit-clear-symbolic" 16 | action: erase 17 | Return: 18 | icon: "key-enter" 19 | keysym: "Return" 20 | 21 | -------------------------------------------------------------------------------- /debian/cargo/config: -------------------------------------------------------------------------------- 1 | # When modifying this file, consider instead 2 | # to take advantage of the method that Cargo packagers use 3 | # to set up all the necessary stuff automatically: 4 | # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=907629#30 5 | 6 | [source.crates-io] 7 | registry = 'https://github.com/rust-lang/crates.io-index' 8 | replace-with = 'vendored-sources' 9 | 10 | [source.vendored-sources] 11 | directory = '/usr/share/cargo/registry' 12 | -------------------------------------------------------------------------------- /src/actors/external/mod.rs: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2022 Purism SPC 3 | * 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | /*! Contains actors with custom event loops, not based off of the event_loop module. */ 8 | 9 | pub mod debug; 10 | #[cfg(feature = "zbus_v1_5")] 11 | pub mod screensaver; 12 | 13 | /// The uninhabited type. Cannot be created or returned; means "will never return" as return type. Useful for infinite loops. 14 | enum Void {} -------------------------------------------------------------------------------- /data/sm.puri.Squeekboard.desktop.in.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Squeekboard 3 | GenericName=On Screen Keyboard 4 | Comment=An on screen virtual keyboard 5 | Exec=@bindir@/squeekboard 6 | Icon=input-keyboard-symbolic 7 | Terminal=false 8 | Type=Application 9 | NoDisplay=true 10 | Categories=GTK;Utility; 11 | OnlyShowIn=Phosh; 12 | X-Phosh-UsesFeedback=true 13 | X-GNOME-Autostart-Phase=Panel 14 | X-GNOME-Provides=inputmethod 15 | X-GNOME-Autostart-Notify=true 16 | X-GNOME-AutoRestart=true 17 | -------------------------------------------------------------------------------- /doc/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Builds the documentation and places in the selected directory, 4 | # or the working directory. 5 | 6 | set -e 7 | 8 | SCRIPT_PATH="$(realpath "$0")" 9 | DOCS_DIR="$(dirname "$SCRIPT_PATH")" 10 | 11 | TARGET_DIR="${1:-./}" 12 | 13 | SPHINX=sphinx-build 14 | 15 | if [ ! -d $DOCS_DIR/_static ]; then 16 | mkdir -p $DOCS_DIR/_static 17 | fi 18 | 19 | if ! which sphinx-build ; then 20 | SPHINX=sphinx-build-3 21 | fi 22 | $SPHINX -b html "${DOCS_DIR}" "${TARGET_DIR}" 23 | -------------------------------------------------------------------------------- /tools/style-check_build: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Enforces style check for the C parts of the project. 4 | 5 | if [ -z "$1" ]; then 6 | echo "Please pass build directory to check." 7 | exit 1 8 | fi 9 | 10 | cd "$1" 11 | 12 | clang-tidy --checks=-clang-diagnostic-missing-braces,readability-braces-around-statements, \ 13 | --warnings-as-errors=readability-braces-around-statements \ 14 | -extra-arg=-Wno-unknown-warning-option \ 15 | ../src/*.c ../eek/*.c ../eekboard/*.c 16 | -------------------------------------------------------------------------------- /src/receiver.rs: -------------------------------------------------------------------------------- 1 | /*! Defines the application-wide message bus for updating state.*/ 2 | 3 | use crate::main; 4 | 5 | pub mod c { 6 | use super::*; 7 | use crate::util::c::Wrapped; 8 | pub type State = Wrapped; 9 | } 10 | 11 | // The state receiver is an endpoint of a channel, so it's safely cloneable. 12 | // There's no need to keep it in a Rc. 13 | // The C version uses Wrapped with an underlying Rc, 14 | // because Wrapped is well-tested already. 15 | pub type State = main::EventLoop; -------------------------------------------------------------------------------- /tools/squeekboard-restyled: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | # Override default theme but allow selecting the replacement 5 | export GTK_THEME="Adwaita:dark" 6 | CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}" 7 | DIRS="${CONFIG_HOME} $(set -f; IFS=:; printf '%s\n' $XDG_CONFIG_DIRS)" 8 | for DIR in ${DIRS}; do 9 | if cat $DIR/squeekboard/gtk_theme 2> /dev/null; then 10 | export GTK_THEME="$(cat $DIR/squeekboard/gtk_theme 2> /dev/null)" 11 | break; 12 | fi; 13 | done; 14 | 15 | exec $(which squeekboard) 16 | -------------------------------------------------------------------------------- /cargo.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # This script manages Cargo operations 4 | # while keeping the artifact directory within the build tree 5 | # instead of the source tree 6 | 7 | set -e 8 | 9 | SCRIPT_PATH="$(realpath "$0")" 10 | SOURCE_DIR="$(dirname "$SCRIPT_PATH")" 11 | 12 | CARGO_TARGET_DIR="$(pwd)" 13 | export CARGO_TARGET_DIR 14 | 15 | cd "$SOURCE_DIR" 16 | 17 | # the 'run" command takes arguments at the end, 18 | # so --manifest-path must not be last 19 | CMD="$1" 20 | shift 21 | cargo "$CMD" --manifest-path "$CARGO_TARGET_DIR"/Cargo.toml "$@" 22 | 23 | -------------------------------------------------------------------------------- /data/squeekboard.gresources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | common.css 5 | style.css 6 | style-Adwaita:dark.css 7 | popover.ui 8 | icons/key-enter.svg 9 | icons/key-shift.svg 10 | icons/keyboard-mode-symbolic.svg 11 | icons/zwnj.svg 12 | 13 | 14 | -------------------------------------------------------------------------------- /tools/meson.build: -------------------------------------------------------------------------------- 1 | entry = configure_file( 2 | copy: true, 3 | input: 'entry.py', 4 | output: 'squeekboard-entry', 5 | install: true, 6 | install_dir: bindir, 7 | ) 8 | 9 | test_layout = custom_target('squeekboard-test-layout', 10 | build_by_default: true, 11 | # meson doesn't track all inputs, cargo does 12 | build_always_stale: true, 13 | output: ['squeekboard-test-layout'], 14 | console: true, 15 | command: [cargo_build, '--rename', 'test_layout', '@OUTPUT@', '--bin', 'test_layout'] 16 | + cargo_build_flags, 17 | install: true, 18 | install_dir: bindir, 19 | depends: cargo_deps, 20 | ) 21 | -------------------------------------------------------------------------------- /data/meson.build: -------------------------------------------------------------------------------- 1 | gnome = import('gnome') 2 | 3 | squeekboard_resources = gnome.compile_resources( 4 | 'squeekboard-resources', 5 | 'squeekboard.gresources.xml', 6 | 7 | c_name: 'squeekboard', 8 | ) 9 | 10 | desktopconf = configuration_data() 11 | desktopconf.set('bindir', bindir) 12 | 13 | desktop_file = 'sm.puri.Squeekboard.desktop' 14 | 15 | i18n.merge_file( 16 | input: configure_file( 17 | input: desktop_file + '.in.in', 18 | output: desktop_file + '.in', 19 | configuration: desktopconf 20 | ), 21 | output: desktop_file, 22 | po_dir: '../po', 23 | install: true, 24 | install_dir: desktopdir, 25 | type: 'desktop' 26 | ) 27 | -------------------------------------------------------------------------------- /src/outputs.h: -------------------------------------------------------------------------------- 1 | #ifndef __OUTPUTS_H 2 | #define __OUTPUTS_H 3 | 4 | #include "wayland-client-protocol.h" 5 | 6 | struct squeek_outputs; 7 | struct squeek_output_handle { 8 | struct wl_output *output; 9 | struct squeek_outputs *outputs; 10 | }; 11 | 12 | struct squeek_outputs *squeek_outputs_new(void); 13 | void squeek_outputs_free(struct squeek_outputs*); 14 | void squeek_outputs_register(struct squeek_outputs*, struct wl_output *output, uint32_t id); 15 | struct wl_output *squeek_outputs_try_unregister(struct squeek_outputs*, uint32_t id); 16 | struct squeek_output_handle squeek_outputs_get_current(struct squeek_outputs*); 17 | int32_t squeek_outputs_get_perceptual_width(struct squeek_outputs*, struct wl_output *output); 18 | #endif 19 | -------------------------------------------------------------------------------- /data/common.css: -------------------------------------------------------------------------------- 1 | /* Theme independent styles */ 2 | 3 | sq_view { 4 | font-family: cantarell, sans-serif; 5 | font-size: 1.5em; 6 | } 7 | 8 | /* Becomes readable with a special font */ 9 | sq_view.gr_polytonic { 10 | font-family: GFSDidotClassic, cantarell, sans-serif; 11 | font-size: 2em; 12 | } 13 | 14 | sq_button { 15 | border-radius: 4px; 16 | margin: 2px; 17 | } 18 | 19 | sq_view.wide sq_button { 20 | margin: 3px; 21 | } 22 | 23 | sq_button.latched, 24 | sq_button.locked { 25 | font-weight: bold; 26 | } 27 | 28 | sq_button.action { 29 | font-size: 0.75em; 30 | } 31 | 32 | sq_button.small { 33 | font-size: 0.5em; 34 | } 35 | 36 | sq_view.pin sq_button { 37 | border-radius: 0px; 38 | margin: 1px 1px 1px 1px; 39 | } -------------------------------------------------------------------------------- /data/style-Adwaita:dark.css: -------------------------------------------------------------------------------- 1 | /* Adwaita-dark style keyboard */ 2 | sq_view { 3 | background-color: rgba(0, 0, 0, 255); 4 | color: #ffffff; 5 | } 6 | 7 | sq_view sq_button { 8 | color: #deddda; 9 | background: #464448; 10 | } 11 | 12 | sq_button:active { 13 | background: #747077; 14 | } 15 | 16 | sq_button.altline, 17 | sq_button.special, 18 | sq_button.wide { 19 | background: #2b292f; 20 | } 21 | 22 | sq_button.latched { 23 | background: #ffffff; 24 | color: #2b292f; 25 | } 26 | 27 | sq_button.locked { 28 | background: #ffffff; 29 | color: #1c71d8; 30 | } 31 | 32 | #Return { 33 | background: #1c71d8; 34 | } 35 | 36 | #Return:active { 37 | background: #1c71d8; 38 | } 39 | 40 | @import url("resource:///sm/puri/squeekboard/common.css"); 41 | -------------------------------------------------------------------------------- /data/dbus/sm.puri.OSK0.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | Switch keyboard visibility 9 | 10 | 11 | 12 | 13 | 14 | Get keyboard visibility 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Cargo.deps: -------------------------------------------------------------------------------- 1 | # Dependencies which change based on build flags 2 | bitflags = "1.2.*" 3 | clap = { version = "2.33.*", default-features = false } 4 | zbus = "1.0.*" 5 | zvariant = "2.0.*" 6 | # Newer versions seem to confuse the version of Cargo on Debian Bullseye 7 | zvariant_derive = "2.0.*" 8 | 9 | [dependencies.cairo-rs] 10 | version = "0.7.*" 11 | 12 | [dependencies.cairo-sys-rs] 13 | version = "0.9" 14 | 15 | [dependencies.gdk] 16 | version = "0.11.*" 17 | 18 | [dependencies.gio] 19 | version = "0.7.*" 20 | features = ["v2_44"] 21 | 22 | [dependencies.glib] 23 | version = "0.8.*" 24 | features = ["v2_44"] 25 | 26 | [dependencies.glib-sys] 27 | version = "*" 28 | features = ["v2_44"] 29 | 30 | [dependencies.gtk] 31 | version = "0.7.*" 32 | features = ["v3_22"] 33 | 34 | [dependencies.gtk-sys] 35 | version = "0.9" 36 | features = ["v3_22"] -------------------------------------------------------------------------------- /src/wayland.h: -------------------------------------------------------------------------------- 1 | #ifndef WAYLAND_H 2 | #define WAYLAND_H 3 | 4 | #include 5 | 6 | #include "wlr-layer-shell-unstable-v1-client-protocol.h" 7 | #include "virtual-keyboard-unstable-v1-client-protocol.h" 8 | #include "input-method-unstable-v2-client-protocol.h" 9 | 10 | #include "outputs.h" 11 | 12 | struct squeek_wayland { 13 | // globals 14 | struct zwlr_layer_shell_v1 *layer_shell; 15 | struct zwp_virtual_keyboard_manager_v1 *virtual_keyboard_manager; 16 | struct zwp_input_method_manager_v2 *input_method_manager; 17 | struct squeek_outputs *outputs; 18 | struct wl_seat *seat; 19 | // objects 20 | struct zwp_input_method_v2 *input_method; 21 | struct zwp_virtual_keyboard_v1 *virtual_keyboard; 22 | }; 23 | 24 | 25 | extern struct squeek_wayland *squeek_wayland; 26 | 27 | #endif // WAYLAND_H 28 | -------------------------------------------------------------------------------- /data/popover.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Emoji 7 | layout 8 | emoji 9 | 10 | 11 | 12 | Terminal 13 | layout 14 | terminal 15 | 16 |
17 | 18 | Keyboard Settings 19 | settings 20 | 21 |
22 |
23 |
24 | -------------------------------------------------------------------------------- /Cargo.toml.in: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "rs" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [lib] 7 | name = "rs" 8 | path = "@path@/src/lib.rs" 9 | crate-type = ["staticlib", "rlib"] 10 | 11 | # Cargo can't do autodiscovery if Cargo.toml is not in the root. 12 | [[bin]] 13 | name = "test_layout" 14 | path = "@path@/src/bin/test_layout.rs" 15 | 16 | [[example]] 17 | name = "test_layout" 18 | path = "@path@/examples/test_layout.rs" 19 | 20 | [[example]] 21 | name = "find_orphan_layouts" 22 | path = "@path@/examples/find_orphan_layouts.rs" 23 | 24 | [features] 25 | glib_v0_14 = [] 26 | zbus_v1_5 = [] 27 | clap_v4 = [] 28 | 29 | # Dependencies which don't change based on build flags 30 | [dependencies] 31 | maplit = "1.0.*" 32 | serde = { version = "1.0.*", features = ["derive"] } 33 | serde_yaml = "0.8.*" 34 | xkbcommon = { version = "0.4.*", features = ["wayland"] } 35 | # Here is inserted the Cargo.deps file 36 | -------------------------------------------------------------------------------- /Cargo.deps.newer: -------------------------------------------------------------------------------- 1 | # Dependencies and tools which change based on build flags 2 | # For the newer-than-Byzantium config 3 | 4 | bitflags = "1.3.*" 5 | clap = { version = "4.*", features=["std"], default-features = false } 6 | zbus = "1.9.*" 7 | zvariant = "2.10.*" 8 | # Newer versions seem to confuse the version of Cargo on Debian Bullseye 9 | zvariant_derive = "2.10.*" 10 | 11 | [dependencies.cairo-rs] 12 | version = "0.14.*" 13 | 14 | [dependencies.cairo-sys-rs] 15 | version = "0.14.*" 16 | 17 | [dependencies.gdk] 18 | version = "0.14.*" 19 | 20 | [dependencies.gio] 21 | version = "0.14.*" 22 | features = ["v2_58"] 23 | 24 | [dependencies.glib] 25 | version = "0.14.*" 26 | features = ["v2_58"] 27 | 28 | [dependencies.glib-sys] 29 | version = "0.14.*" 30 | features = ["v2_58"] 31 | 32 | [dependencies.gtk] 33 | version = "0.14.*" 34 | features = ["v3_22"] 35 | 36 | [dependencies.gtk-sys] 37 | version = "0.14.*" 38 | features = ["v3_22"] 39 | -------------------------------------------------------------------------------- /squeekboard.doap: -------------------------------------------------------------------------------- 1 | 2 | 3 | squeekboard 4 | A virtual keyboard for Wayland 5 | An on-screen-keyboard input method for Wayland 6 | 7 | 8 | Linux 9 | 10 | 11 | 12 | Dorota Czaplejewicz 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /protocols/meson.build: -------------------------------------------------------------------------------- 1 | wayland_protos = dependency('wayland-protocols', version: '>=1.12') 2 | wl_protocol_dir = wayland_protos.get_pkgconfig_variable('pkgdatadir') 3 | 4 | wl_scanner = find_program('wayland-scanner') 5 | gen_scanner_client_header = generator(wl_scanner, 6 | output: '@BASENAME@-client-protocol.h', 7 | arguments: ['client-header', '@INPUT@', '@OUTPUT@']) 8 | gen_scanner_client_code = generator(wl_scanner, 9 | output: '@BASENAME@-protocol.c', 10 | arguments: ['private-code', '@INPUT@', '@OUTPUT@']) 11 | 12 | wl_protos = [ 13 | wl_protocol_dir + '/stable/xdg-shell/xdg-shell.xml', 14 | 'wlr-layer-shell-unstable-v1.xml', 15 | 'virtual-keyboard-unstable-v1.xml', 16 | 'input-method-unstable-v2.xml', 17 | 'text-input-unstable-v3.xml' 18 | ] 19 | wl_proto_sources = [] 20 | foreach proto: wl_protos 21 | wl_proto_sources += gen_scanner_client_header.process(proto) 22 | wl_proto_sources += gen_scanner_client_code.process(proto) 23 | endforeach 24 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | #[macro_use] 2 | extern crate bitflags; 3 | extern crate cairo; 4 | extern crate cairo_sys; 5 | extern crate gdk; 6 | extern crate gio; 7 | extern crate glib; 8 | extern crate glib_sys; 9 | extern crate gtk; 10 | extern crate gtk_sys; 11 | #[allow(unused_imports)] 12 | #[macro_use] // only for tests 13 | extern crate maplit; 14 | extern crate serde; 15 | extern crate xkbcommon; 16 | extern crate zbus; 17 | extern crate zvariant; 18 | 19 | #[cfg(test)] 20 | #[macro_use] 21 | mod assert_matches; 22 | #[macro_use] 23 | mod logging; 24 | 25 | mod action; 26 | pub mod actors; 27 | mod animation; 28 | pub mod data; 29 | mod drawing; 30 | mod event_loop; 31 | pub mod float_ord; 32 | pub mod imservice; 33 | mod keyboard; 34 | mod layout; 35 | mod locale; 36 | mod main; 37 | mod outputs; 38 | mod panel; 39 | mod popover; 40 | mod receiver; 41 | pub mod resources; 42 | mod state; 43 | mod style; 44 | mod submission; 45 | pub mod tests; 46 | pub mod util; 47 | mod vkeyboard; 48 | mod xdg; 49 | -------------------------------------------------------------------------------- /data/keyboards/number/us.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 37.46341, height: 52 } 4 | altline: { width: 48.39024, height: 52 } 5 | outline7: { width: 88.97561, height: 52 } 6 | spaceline: { width: 120.5853, height: 52 } 7 | 8 | views: 9 | base: 10 | - "1 2 3 parenleft parenright" 11 | - "4 5 6 numbersign asterisk" 12 | - "7 8 9 plus minus" 13 | - "BackSpace 0 space Return" 14 | 15 | buttons: 16 | BackSpace: 17 | outline: "altline" 18 | icon: "edit-clear-symbolic" 19 | action: erase 20 | space: 21 | outline: spaceline 22 | text: " " 23 | Return: 24 | outline: outline7 25 | icon: "key-enter" 26 | keysym: "Return" 27 | asterisk: 28 | text: "*" 29 | numbersign: 30 | text: "#" 31 | minus: 32 | text: "-" 33 | plus: 34 | text: "+" 35 | parenleft: 36 | text: "(" 37 | parenright: 38 | text: ")" 39 | 40 | -------------------------------------------------------------------------------- /doc/index.md: -------------------------------------------------------------------------------- 1 | Welcome to squeekboard's documentation! 2 | ======================================= 3 | 4 | Introduction 5 | ------------ 6 | 7 | Squeekboard is the on-screen keyboard for the Librem 5 phone. For information about building, look at the [README](README.md). 8 | 9 | Layouts 10 | ------- 11 | 12 | Squeekboard allows user-provided keyboard layouts. They can be created without recompiling the keyboard code. The [tutorial](tutorial.md) explains the process in detail. 13 | 14 | Layouts are created using a [text-based format, based on YAML](layouts.md). 15 | 16 | ### Views 17 | 18 | Squeekboard layouts are separated into *views* and use a *room metaphor* to [switch views](views.md). 19 | 20 | Contributions 21 | ------------- 22 | 23 | Anyone is free to modify *squeekboard*. See the [contributing document](hacking.md). 24 | 25 | ### Code documentation 26 | 27 | To expose the structure of Squeekboard in detail, there's a [code reference](https://world.pages.gitlab.gnome.org/Phosh/squeekboard/doc/rs/). 28 | -------------------------------------------------------------------------------- /src/panel.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "eek/layersurface.h" 4 | #include "src/layout.h" 5 | #include "src/main.h" 6 | #include "src/submission.h" 7 | 8 | // Stores the objects that the panel and its widget will refer to 9 | struct panel_manager { 10 | EekboardContextService *state; // unowned 11 | /// Needed for instantiating the widget 12 | struct squeek_state_manager *state_manager; // shared reference 13 | struct squeek_popover *popover; // shared reference 14 | struct submission *submission; // unowned 15 | 16 | // both memoized - doesn't have to be, but bugs happen: 17 | // https://gitlab.gnome.org/World/Phosh/squeekboard/-/issues/343 18 | PhoshLayerSurface *window; 19 | GtkWidget *widget; 20 | 21 | // Those should be held in Rust 22 | struct wl_output *current_output; 23 | }; 24 | 25 | struct panel_manager panel_manager_new(EekboardContextService *state, struct submission *submission, struct squeek_state_manager *state_manager, struct squeek_popover *popover); 26 | -------------------------------------------------------------------------------- /src/animation.rs: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020 Purism SPC 2 | * SPDX-License-Identifier: GPL-3.0+ 3 | */ 4 | 5 | /*! Animation details */ 6 | 7 | use std::time::Duration; 8 | 9 | use crate::imservice::ContentPurpose; 10 | use crate::layout::ArrangementKind; 11 | use crate::outputs::OutputId; 12 | use crate::panel::PixelSize; 13 | 14 | /// The keyboard should hide after this has elapsed to prevent flickering. 15 | pub const HIDING_TIMEOUT: Duration = Duration::from_millis(200); 16 | 17 | /// Description of parameters which influence panel contents 18 | #[derive(PartialEq, Clone, Debug)] 19 | pub struct Contents { 20 | pub name: String, 21 | pub kind: ArrangementKind, 22 | pub overlay_name: Option, 23 | pub purpose: ContentPurpose, 24 | } 25 | 26 | /// The outwardly visible state of visibility 27 | #[derive(PartialEq, Debug, Clone)] 28 | pub enum Outcome { 29 | Visible { 30 | output: OutputId, 31 | height: PixelSize, 32 | contents: Contents, 33 | }, 34 | Hidden, 35 | } 36 | -------------------------------------------------------------------------------- /eek/eek.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010-2011 Daiki Ueno 3 | * Copyright (C) 2010-2011 Red Hat, Inc. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public License 7 | * as published by the Free Software Foundation; either version 2 of 8 | * the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, but 11 | * WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 18 | * 02110-1301 USA 19 | */ 20 | #ifndef EEK_H 21 | #define EEK_H 1 22 | 23 | #define __EEK_H_INSIDE__ 1 24 | 25 | #include "eek-keyboard.h" 26 | 27 | void eek_init (void); 28 | 29 | #endif /* EEK_H */ 30 | -------------------------------------------------------------------------------- /meson_options.txt: -------------------------------------------------------------------------------- 1 | option('depdatadir', 2 | type : 'string', 3 | value : '', 4 | description : 'System data path. Will be searched for definitions instead of datadir when provided') 5 | 6 | option('tests', 7 | type: 'boolean', value: true, 8 | description: 'Whether to compile unit tests') 9 | 10 | option('find_orphans', 11 | type: 'boolean', value: false, 12 | description: 'Check if all present layout files are included in resources.') 13 | 14 | option('newer', 15 | type: 'boolean', value: false, 16 | description: 'Build with dependencies newer than those of Byzantium') 17 | 18 | option('online', 19 | type: 'boolean', value: true, 20 | description: 'Pull packages from the internet while building, as opposed to a local regstry.') 21 | 22 | option('reset_lock', 23 | type: 'boolean', value: false, 24 | description: 'Resets Cargo.lock to the one found in the source repo. Does not affect builds with online == false.') 25 | 26 | option('strict', 27 | type: 'boolean', value: true, 28 | description: 'Turn more warnings into errors') 29 | -------------------------------------------------------------------------------- /tools/make_message: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | """Extracts commit message for the last release from NEWS.md file. 4 | """ 5 | 6 | from itertools import dropwhile 7 | import sys 8 | 9 | with open('NEWS.md') as f: 10 | contents = f.readlines() 11 | 12 | if contents[0].startswith('## '): 13 | name = contents[0][3:] 14 | contents = contents[1:] 15 | elif contents[1].startswith('---'): 16 | name = contents[0] 17 | contents = contents[2:] 18 | else: 19 | raise ValueError("Can't find release name") 20 | name = name.strip() 21 | 22 | print("Release", name) 23 | # git wants a single newline between commit title and message body 24 | print() 25 | # meanwhile, markdown ignores newlines after a title 26 | contents = dropwhile(lambda x: x.strip() == '', contents) 27 | 28 | # Need to look up forward 29 | contents = list(contents) 30 | 31 | for line, nextline in zip(contents, contents[1:] + ['']): 32 | if nextline.startswith('---') or line.startswith('## '): 33 | break 34 | elif nextline.startswith('===') or line.startswith('# '): 35 | raise ValueError("Encountered title instead of release section") 36 | print(line.strip()) 37 | -------------------------------------------------------------------------------- /src/bin/test_layout.rs: -------------------------------------------------------------------------------- 1 | #[macro_use] 2 | extern crate clap; 3 | extern crate rs; 4 | 5 | use rs::tests::check_layout_file; 6 | 7 | fn main() -> () { 8 | #[cfg(feature = "clap_v4")] 9 | let matches = clap::Command::new("squeekboard-test-layout") 10 | .about("Test keyboard layout for errors. Returns OK or an error message containing further information.") 11 | .arg( 12 | clap::Arg::new("INPUT") 13 | .required(true) 14 | .help("Yaml keyboard layout file to test") 15 | ) 16 | .get_matches(); 17 | #[cfg(feature = "clap_v4")] 18 | let m = matches.get_one::("INPUT"); 19 | 20 | #[cfg(not(feature = "clap_v4"))] 21 | let matches = clap_app!(test_layout => 22 | (name: "squeekboard-test-layout") 23 | (about: "Test keyboard layout for errors. Returns OK or an error message containing further information.") 24 | (@arg INPUT: +required "Yaml keyboard layout file to test") 25 | ).get_matches(); 26 | #[cfg(not(feature = "clap_v4"))] 27 | let m = matches.value_of("INPUT"); 28 | 29 | if check_layout_file(m.unwrap()) == () { 30 | println!("Test result: OK"); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /tools/yamlfmt: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | """Checks YAML files for correct formatting. 4 | Usage: yamlfmt.py [--apply] file.yaml 5 | """ 6 | 7 | import io 8 | from ruamel.yaml import YAML 9 | import sys 10 | 11 | args = sys.argv[:] 12 | try: 13 | args.remove('--apply') 14 | want_apply = True 15 | except ValueError: 16 | want_apply = False 17 | 18 | path = args[1] 19 | 20 | def dump(yaml, yml): 21 | buf = io.BytesIO() 22 | yaml.dump(yml, buf) 23 | return buf.getvalue().decode('utf-8') 24 | 25 | with open(path) as f: 26 | contents = f.read() 27 | yaml = YAML() 28 | yaml.indent(offset=2, sequence=4) 29 | yml = yaml.load(contents) 30 | formatted = dump(yaml, yml) 31 | well_formatted = formatted == contents 32 | 33 | if not well_formatted: 34 | print('The yaml file is not correctly formatted:', path) 35 | if want_apply: 36 | print('Correcting', path) 37 | with open(path, 'w') as f: 38 | f.write(formatted) 39 | else: 40 | print('Please use the following correction:') 41 | print('----------corrected', path) 42 | print(formatted) 43 | print('----------end corrected', path) 44 | sys.exit(1) 45 | -------------------------------------------------------------------------------- /data/style.css: -------------------------------------------------------------------------------- 1 | /* Keyboard style */ 2 | sq_view { 3 | background-color: mix(@theme_base_color, @theme_fg_color, 0.1); 4 | box-shadow:inset 0 1px 0 0 mix(@borders, @theme_base_color, 0.8); 5 | } 6 | 7 | sq_button { 8 | color: @theme_fg_color; 9 | background: alpha(@theme_fg_color, 0.07); 10 | box-shadow: 0 1px 0 0 rgba(0,0,0,0.2); 11 | } 12 | 13 | sq_button:active { 14 | background: alpha(@theme_fg_color, 0.11); 15 | } 16 | 17 | sq_button.altline, 18 | sq_button.special { 19 | background: alpha(@theme_fg_color, 0.15); 20 | } 21 | 22 | sq_button.altline:active, 23 | sq_button.special:active { 24 | background: alpha(@theme_fg_color, 0.2); 25 | } 26 | 27 | sq_button.latched { 28 | background: alpha(@theme_fg_color, 0.2); 29 | color: alpha(@theme_fg_color, 0.8); 30 | } 31 | 32 | sq_button.locked { 33 | background: alpha(@theme_fg_color, 0.5); 34 | color: @theme_base_color; 35 | } 36 | 37 | #Return { 38 | background: @theme_selected_bg_color; 39 | color: @theme_selected_fg_color; 40 | } 41 | 42 | #Return:active { 43 | background: mix(@theme_selected_bg_color, black, 0.2); 44 | color: mix(@theme_selected_fg_color, black, 0.2); 45 | } 46 | 47 | @import url("resource:///sm/puri/squeekboard/common.css"); 48 | -------------------------------------------------------------------------------- /eek/eek.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2011 Daiki Ueno 3 | * Copyright (C) 2011 Red Hat, Inc. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public License 7 | * as published by the Free Software Foundation; either version 2 of 8 | * the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, but 11 | * WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 18 | * 02110-1301 USA 19 | */ 20 | 21 | /** 22 | * SECTION:eek 23 | * @title: Library Initialization 24 | */ 25 | 26 | #include "config.h" 27 | 28 | #include "eek.h" 29 | 30 | /** 31 | * eek_init: 32 | * 33 | * Initialize the Libeek library. This must be called before using 34 | * functions provided by Libeek. 35 | */ 36 | void 37 | eek_init (void) 38 | { 39 | /* void */ 40 | } 41 | -------------------------------------------------------------------------------- /src/actors/mod.rs: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2022 Purism SPC 2 | * SPDX-License-Identifier: GPL-3.0+ 3 | */ 4 | 5 | /*! Actors are parts of Squeekboard containing state independent from the main application state. 6 | 7 | Because main application state is meant to be immutable, 8 | it cannot be referenced directly by pieces of logic 9 | interacting with the environment. 10 | 11 | Such impure logic is split away (actor's logic) 12 | and combined with relevant pieces of state (actor state), 13 | thus preserving the purity (and sometimes simplicity) of the main state. 14 | 15 | Actors can communicate with the main state by sending it messages, 16 | and by receiving updates from it. 17 | */ 18 | 19 | // TODO: move crate::panel into crate::actors::panel. 20 | // Panel contains state and logic to protect the main state from getting flooded 21 | // with low-level wayland and gtk sizing events. 22 | 23 | pub mod external; 24 | pub mod popover; 25 | 26 | /// The implementing actor is able to receive and handle messages. 27 | /// Typically, it's the sending end of the channel, 28 | /// whose other end is inside an event loop. 29 | // TODO: implement for remaning actors and make the event loop refer to this. 30 | pub trait Destination { 31 | type Event; 32 | fn send(&self, event: Self::Event); 33 | } 34 | -------------------------------------------------------------------------------- /src/wayland.c: -------------------------------------------------------------------------------- 1 | #include "eek/eek-keyboard.h" 2 | 3 | #include "wayland.h" 4 | 5 | struct squeek_wayland *squeek_wayland = NULL; 6 | 7 | // The following functions only exist 8 | // to create linkable symbols out of inline functions, 9 | // because those are not directly callable from Rust 10 | 11 | void 12 | eek_virtual_keyboard_v1_key(struct zwp_virtual_keyboard_v1 *zwp_virtual_keyboard_v1, uint32_t time, uint32_t key, uint32_t state) { 13 | zwp_virtual_keyboard_v1_key(zwp_virtual_keyboard_v1, time, key, state); 14 | } 15 | 16 | 17 | void eek_virtual_keyboard_update_keymap(struct zwp_virtual_keyboard_v1 *zwp_virtual_keyboard_v1, struct keymap *keymap) { 18 | zwp_virtual_keyboard_v1_keymap(zwp_virtual_keyboard_v1, 19 | WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1, 20 | keymap->fd, keymap->fd_len); 21 | } 22 | 23 | void 24 | eek_virtual_keyboard_set_modifiers(struct zwp_virtual_keyboard_v1 *zwp_virtual_keyboard_v1, uint32_t mods_depressed) { 25 | zwp_virtual_keyboard_v1_modifiers(zwp_virtual_keyboard_v1, 26 | mods_depressed, 0, 0, 0); 27 | } 28 | 29 | int squeek_output_add_listener(struct wl_output *wl_output, 30 | const struct wl_output_listener *listener, void *data) { 31 | return wl_output_add_listener(wl_output, listener, data); 32 | } 33 | -------------------------------------------------------------------------------- /cargo_build.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | """This script manages Cargo builds 4 | while keeping the artifact directory within the build tree 5 | instead of the source tree. 6 | """ 7 | 8 | from pathlib import Path 9 | import shlex 10 | import subprocess 11 | import sys 12 | 13 | source_dir = Path(__file__).absolute().parent 14 | 15 | args = sys.argv[1:] 16 | binary_dir = "debug" 17 | 18 | if '--release' in args: 19 | binary_dir = "release" 20 | 21 | # The file produced by Cargo will have a special name 22 | try: 23 | i = args.index('--rename') 24 | except ValueError: 25 | filename = None 26 | else: 27 | args.pop(i) 28 | filename = args.pop(i) 29 | 30 | # The target destination of the produced file is a positional argument 31 | out_path = [arg for arg in args if not arg.startswith('--')] 32 | if out_path: 33 | out_path = out_path[0] 34 | i = args.index(out_path) 35 | args.pop(i) 36 | 37 | subprocess.run(['sh', "{}/cargo.sh".format(source_dir.as_posix()), 'build'] 38 | + args, 39 | check=True) 40 | 41 | if out_path: 42 | out_path = Path(out_path).absolute() 43 | out_basename = out_path.name 44 | filename = filename or out_basename 45 | subprocess.run(['cp', '-a', 46 | './{}/{}'.format(binary_dir, filename), 47 | out_path], 48 | check=True) 49 | 50 | -------------------------------------------------------------------------------- /po/ht.po: -------------------------------------------------------------------------------- 1 | # Squeekboard Haitian Creole Translation 2 | # Copyright (C) 2024 Purism 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Pierre Michel Augustin , 2024. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: \n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 10 | "issues\n" 11 | "POT-Creation-Date: 2024-01-11 05:05+0000\n" 12 | "PO-Revision-Date: 2024-01-11 10:40-0500\n" 13 | "Last-Translator: \n" 14 | "Language-Team: \n" 15 | "Language: ht\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "X-Generator: Poedit 3.0.1\n" 20 | 21 | #. translators: This is a emmoji keyboard layout 22 | #: data/popover.ui:6 23 | msgid "Emoji" 24 | msgstr "Emoji" 25 | 26 | #. translators: This is a terminal keyboard layout 27 | #: data/popover.ui:12 28 | msgid "Terminal" 29 | msgstr "Tèminal" 30 | 31 | #: data/popover.ui:18 32 | msgid "Keyboard Settings" 33 | msgstr "Paramèt Klavye yo" 34 | 35 | #: data/sm.puri.Squeekboard.desktop.in.in:3 36 | msgid "Squeekboard" 37 | msgstr "Squeekboard" 38 | 39 | #: data/sm.puri.Squeekboard.desktop.in.in:4 40 | msgid "On Screen Keyboard" 41 | msgstr "Sou Ekran Klavye" 42 | 43 | #: data/sm.puri.Squeekboard.desktop.in.in:5 44 | msgid "An on screen virtual keyboard" 45 | msgstr "Sou yon ekran klavye vityèl" 46 | -------------------------------------------------------------------------------- /src/main.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | /// This all wraps https://gtk-rs.org/gtk-rs-core/stable/latest/docs/glib/struct.MainContext.html#method.channel 3 | 4 | #include 5 | 6 | #include "input-method-unstable-v2-client-protocol.h" 7 | #include "virtual-keyboard-unstable-v1-client-protocol.h" 8 | 9 | #include "eek/eek-types.h" 10 | #include "dbus.h" 11 | #include "panel.h" 12 | #include "src/popover.h" 13 | 14 | 15 | struct receiver; 16 | 17 | /// Wrapped 18 | struct squeek_state_manager; 19 | 20 | struct submission; 21 | 22 | struct rsobjects { 23 | struct receiver *receiver; 24 | struct squeek_state_manager *state_manager; 25 | struct submission *submission; 26 | struct squeek_wayland *wayland; 27 | struct squeek_popover *popover; 28 | }; 29 | 30 | void register_ui_loop_handler(struct receiver *receiver, struct panel_manager *panel, struct squeek_popover *popover, EekboardContextService *hint_manager, DBusHandler *dbus_handler); 31 | 32 | struct rsobjects squeek_init(void); 33 | 34 | void squeek_state_send_force_visible(struct squeek_state_manager *state); 35 | void squeek_state_send_force_hidden(struct squeek_state_manager *state); 36 | 37 | void squeek_state_send_keyboard_present(struct squeek_state_manager *state, uint32_t keyboard_present); 38 | void squeek_state_send_layout_set(struct squeek_state_manager *state, char *name, char *layout, uint32_t timestamp); 39 | -------------------------------------------------------------------------------- /src/server-context-service.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010-2011 Daiki Ueno 3 | * Copyright (C) 2010-2011 Red Hat, Inc. 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #ifndef SERVER_CONTEXT_SERVICE_H 19 | #define SERVER_CONTEXT_SERVICE_H 1 20 | #include 21 | 22 | #include "main.h" 23 | 24 | G_BEGIN_DECLS 25 | 26 | #define SERVER_TYPE_CONTEXT_SERVICE (server_context_service_get_type()) 27 | 28 | /** Manages the lifecycle of the window displaying layouts. */ 29 | G_DECLARE_FINAL_TYPE (ServerContextService, server_context_service, SERVER, CONTEXT_SERVICE, GObject) 30 | 31 | ServerContextService *server_context_service_new(struct squeek_state_manager *state_manager); 32 | G_END_DECLS 33 | 34 | #endif /* SERVER_CONTEXT_SERVICE_H */ 35 | 36 | -------------------------------------------------------------------------------- /po/ko.po: -------------------------------------------------------------------------------- 1 | # Korean translation for squeekboard. 2 | # Copyright (C) 2022 squeekboard'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Moon Sungjoon , 2022. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: \n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 10 | "issues\n" 11 | "POT-Creation-Date: 2022-04-09 18:43+0000\n" 12 | "PO-Revision-Date: 2022-04-11 19:23+0900\n" 13 | "Last-Translator: Moon Sungjoon \n" 14 | "Language-Team: \n" 15 | "Language: ko\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=1; plural=0;\n" 20 | "X-Generator: Poedit 3.0.1\n" 21 | 22 | #. translators: This is a emmoji keyboard layout 23 | #: data/popover.ui:6 24 | msgid "Emoji" 25 | msgstr "이모지" 26 | 27 | #. translators: This is a terminal keyboard layout 28 | #: data/popover.ui:12 29 | msgid "Terminal" 30 | msgstr "터미널" 31 | 32 | #: data/popover.ui:18 33 | msgid "Keyboard Settings" 34 | msgstr "키보드 설정" 35 | 36 | #: data/sm.puri.Squeekboard.desktop.in.in:3 37 | msgid "Squeekboard" 38 | msgstr "스퀴크 보드" 39 | 40 | #: data/sm.puri.Squeekboard.desktop.in.in:4 41 | msgid "On Screen Keyboard" 42 | msgstr "화상 키보드" 43 | 44 | #: data/sm.puri.Squeekboard.desktop.in.in:5 45 | msgid "An on screen virtual keyboard" 46 | msgstr "가상 키보드" 47 | -------------------------------------------------------------------------------- /po/zh_CN.po: -------------------------------------------------------------------------------- 1 | # Chinese (China) translation for squeekboard. 2 | # Copyright (C) 2022 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Luke Luo <2164381336@qq.com>, 2022. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: squeekboard master\n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 10 | "issues\n" 11 | "POT-Creation-Date: 2022-04-21 07:28+0000\n" 12 | "PO-Revision-Date: 2022-04-23 20:30+0800\n" 13 | "Last-Translator: Luke Luo \n" 14 | "Language-Team: Chinese (China) \n" 15 | "Language: zh_CN\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "X-Generator: Poedit 3.0.1\n" 20 | 21 | #. translators: This is a emmoji keyboard layout 22 | #: data/popover.ui:6 23 | msgid "Emoji" 24 | msgstr "Emoji 表情" 25 | 26 | #. translators: This is a terminal keyboard layout 27 | #: data/popover.ui:12 28 | msgid "Terminal" 29 | msgstr "终端" 30 | 31 | #: data/popover.ui:18 32 | msgid "Keyboard Settings" 33 | msgstr "键盘设置" 34 | 35 | #: data/sm.puri.Squeekboard.desktop.in.in:3 36 | msgid "Squeekboard" 37 | msgstr "Squeekboard" 38 | 39 | #: data/sm.puri.Squeekboard.desktop.in.in:4 40 | msgid "On Screen Keyboard" 41 | msgstr "屏幕键盘" 42 | 43 | #: data/sm.puri.Squeekboard.desktop.in.in:5 44 | msgid "An on screen virtual keyboard" 45 | msgstr "一个虚拟屏幕键盘" 46 | -------------------------------------------------------------------------------- /po/eu.po: -------------------------------------------------------------------------------- 1 | # Basque translation for squeekboard. 2 | # Copyright (C) 2023 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Asier Sarasua Garmendia , 2023. 5 | # 6 | msgid "" 7 | msgstr "Project-Id-Version: squeekboard master\n" 8 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/issues\n" 9 | "POT-Creation-Date: 2023-02-26 09:13+0000\n" 10 | "PO-Revision-Date: 2023-03-06 09:13+0000\n" 11 | "Last-Translator: Asier Sarasua Garmendia \n" 12 | "Language-Team: Basque \n" 13 | "Language: eu\n" 14 | "MIME-Version: 1.0\n" 15 | "Content-Type: text/plain; charset=UTF-8\n" 16 | "Content-Transfer-Encoding: 8bit\n" 17 | 18 | #. translators: This is a emmoji keyboard layout 19 | #: data/popover.ui:6 20 | msgid "Emoji" 21 | msgstr "Emojia" 22 | 23 | #. translators: This is a terminal keyboard layout 24 | #: data/popover.ui:12 25 | msgid "Terminal" 26 | msgstr "Terminala" 27 | 28 | #: data/popover.ui:18 29 | msgid "Keyboard Settings" 30 | msgstr "Teklatuaren ezarpenak" 31 | 32 | #: data/sm.puri.Squeekboard.desktop.in.in:3 33 | msgid "Squeekboard" 34 | msgstr "Squeekboard" 35 | 36 | #: data/sm.puri.Squeekboard.desktop.in.in:4 37 | msgid "On Screen Keyboard" 38 | msgstr "Pantailako teklatua" 39 | 40 | #: data/sm.puri.Squeekboard.desktop.in.in:5 41 | msgid "An on screen virtual keyboard" 42 | msgstr "Gehitu pantailako teklatu birtuala" 43 | -------------------------------------------------------------------------------- /po/fa.po: -------------------------------------------------------------------------------- 1 | # Persian translation for squeekboard. 2 | # Copyright (C) 2022 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Danial Behzadi , 2022. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: squeekboard master\n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 10 | "issues\n" 11 | "POT-Creation-Date: 2021-12-26 15:15+0000\n" 12 | "PO-Revision-Date: 2022-01-11 18:01+0330\n" 13 | "Language-Team: Persian \n" 14 | "Language: fa\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Last-Translator: Danial Behzadi \n" 19 | "X-Generator: Poedit 3.0\n" 20 | 21 | #. translators: This is a emmoji keyboard layout 22 | #: data/popover.ui:6 23 | msgid "Emoji" 24 | msgstr "شکلک" 25 | 26 | #. translators: This is a terminal keyboard layout 27 | #: data/popover.ui:12 28 | msgid "Terminal" 29 | msgstr "پایانه" 30 | 31 | #: data/popover.ui:18 32 | msgid "Keyboard Settings" 33 | msgstr "تنظیمات صفحه‌کلید" 34 | 35 | #: data/sm.puri.Squeekboard.desktop.in.in:3 36 | msgid "Squeekboard" 37 | msgstr "اسکوییک‌برد" 38 | 39 | #: data/sm.puri.Squeekboard.desktop.in.in:4 40 | msgid "On Screen Keyboard" 41 | msgstr "صفحه‌کلید لمسی" 42 | 43 | #: data/sm.puri.Squeekboard.desktop.in.in:5 44 | msgid "An on screen virtual keyboard" 45 | msgstr "یک صفحهٔ کلید لمسی مجازی" 46 | -------------------------------------------------------------------------------- /po/oc.po: -------------------------------------------------------------------------------- 1 | # Occitan translation for squeekboard. 2 | # Copyright (C) 2022 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Quentin PAGÈS , 2022. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: squeekboard master\n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 10 | "issues\n" 11 | "POT-Creation-Date: 2022-04-17 06:24+0000\n" 12 | "PO-Revision-Date: 2022-04-17 09:17+0200\n" 13 | "Last-Translator: Quentin PAGÈS\n" 14 | "Language-Team: Occitan \n" 15 | "Language: oc\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "X-Generator: Poedit 3.0.1\n" 20 | 21 | #. translators: This is a emmoji keyboard layout 22 | #: data/popover.ui:6 23 | msgid "Emoji" 24 | msgstr "Emoji" 25 | 26 | #. translators: This is a terminal keyboard layout 27 | #: data/popover.ui:12 28 | msgid "Terminal" 29 | msgstr "Terminal" 30 | 31 | #: data/popover.ui:18 32 | msgid "Keyboard Settings" 33 | msgstr "Paramètres del clavièr" 34 | 35 | #: data/sm.puri.Squeekboard.desktop.in.in:3 36 | msgid "Squeekboard" 37 | msgstr "Squeekboard" 38 | 39 | #: data/sm.puri.Squeekboard.desktop.in.in:4 40 | msgid "On Screen Keyboard" 41 | msgstr "Clavièr visual" 42 | 43 | #: data/sm.puri.Squeekboard.desktop.in.in:5 44 | msgid "An on screen virtual keyboard" 45 | msgstr "Un clavièr virtual sus l’ecran" 46 | -------------------------------------------------------------------------------- /debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | 3 | export CARGO_HOME = $(CURDIR)/debian/cargo 4 | export DEB_BUILD_MAINT_OPTIONS = hardening=+all 5 | # the below avoids an FTBFS on mips64el with a GOT > 64kb 6 | DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH) 7 | ifeq ($(DEB_HOST_ARCH),mips64el) 8 | export RUSTFLAGS = -Ctarget-feature=+xgot 9 | endif 10 | 11 | # the below avoids an FTBFS on mips64el with a GOT > 64kb 12 | DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH) 13 | ifeq ($(DEB_HOST_ARCH),mips64el) 14 | xgot = -Ctarget-feature=+xgot 15 | else 16 | xgot = 17 | endif 18 | 19 | # Don't use paths that may change between builds. 20 | # No need to care about $HOME 21 | # because Cargo will not place any source in ~/.cargo. 22 | # The build directory is a subdirectory of the source directory, 23 | # so it doesn't need to be explicitly taken care of. 24 | export RUSTFLAGS = --remap-path-prefix=$(CURDIR)=/remap-pwd $(xgot) 25 | 26 | 27 | distrel := $(shell lsb_release --codename --short) 28 | ifneq (,$(filter $(distrel),bookworm)) 29 | newer = true 30 | else 31 | newer = false 32 | endif 33 | 34 | %: 35 | dh $@ --builddirectory=_build --buildsystem=meson 36 | 37 | # The Debian version of linked-hash-map doesn't provide any hash, 38 | # causing Cargo to refuse to build with a crates.io copy 39 | override_dh_auto_configure: 40 | [ ! -f Cargo.lock ] || rm Cargo.lock 41 | dh_auto_configure -- -Dnewer=$(newer) -Donline=false 42 | 43 | override_dh_autoreconf: 44 | -------------------------------------------------------------------------------- /po/fur.po: -------------------------------------------------------------------------------- 1 | # Friulian translation for squeekboard. 2 | # Copyright (C) 2021 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Fabio Tomat , 2021. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: squeekboard master\n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 10 | "issues\n" 11 | "POT-Creation-Date: 2021-12-22 13:33+0000\n" 12 | "PO-Revision-Date: 2021-12-22 15:06+0100\n" 13 | "Last-Translator: Fabio Tomat \n" 14 | "Language-Team: Friulian \n" 15 | "Language: fur\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "X-Generator: Poedit 3.0.1\n" 20 | 21 | #. translators: This is a emmoji keyboard layout 22 | #: data/popover.ui:6 23 | msgid "Emoji" 24 | msgstr "Emoji" 25 | 26 | #. translators: This is a terminal keyboard layout 27 | #: data/popover.ui:12 28 | msgid "Terminal" 29 | msgstr "Terminâl" 30 | 31 | #: data/popover.ui:18 32 | msgid "Keyboard Settings" 33 | msgstr "Impostazions tastiere" 34 | 35 | #: data/sm.puri.Squeekboard.desktop.in.in:3 36 | msgid "Squeekboard" 37 | msgstr "Squeekboard" 38 | 39 | #: data/sm.puri.Squeekboard.desktop.in.in:4 40 | msgid "On Screen Keyboard" 41 | msgstr "Tastiere a visôr" 42 | 43 | #: data/sm.puri.Squeekboard.desktop.in.in:5 44 | msgid "An on screen virtual keyboard" 45 | msgstr "Une tastiere virtuâl a visôr" 46 | -------------------------------------------------------------------------------- /po/ca.po: -------------------------------------------------------------------------------- 1 | # Catalan translation for squeekboard. 2 | # Copyright (C) 2022 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # maite , 2022. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: squeekboard master\n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 10 | "issues\n" 11 | "POT-Creation-Date: 2022-01-11 14:31+0000\n" 12 | "PO-Revision-Date: 2022-01-20 10:53+0100\n" 13 | "Last-Translator: maite guix \n" 14 | "Language-Team: Catalan \n" 15 | "Language: ca\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "X-Generator: Poedit 3.0.1\n" 20 | 21 | #. translators: This is a emmoji keyboard layout 22 | #: data/popover.ui:6 23 | msgid "Emoji" 24 | msgstr "Emoji" 25 | 26 | #. translators: This is a terminal keyboard layout 27 | #: data/popover.ui:12 28 | msgid "Terminal" 29 | msgstr "Terminal" 30 | 31 | #: data/popover.ui:18 32 | msgid "Keyboard Settings" 33 | msgstr "Configuració del teclat" 34 | 35 | #: data/sm.puri.Squeekboard.desktop.in.in:3 36 | msgid "Squeekboard" 37 | msgstr "Teclat virtual" 38 | 39 | #: data/sm.puri.Squeekboard.desktop.in.in:4 40 | msgid "On Screen Keyboard" 41 | msgstr "Teclat en pantalla" 42 | 43 | #: data/sm.puri.Squeekboard.desktop.in.in:5 44 | msgid "An on screen virtual keyboard" 45 | msgstr "Un teclat virtual en pantalla" 46 | -------------------------------------------------------------------------------- /po/ka.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: \n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 10 | "issues\n" 11 | "POT-Creation-Date: 2022-02-04 15:22+0000\n" 12 | "PO-Revision-Date: 2022-02-08 03:15+0100\n" 13 | "Last-Translator: Temuri Doghonadze \n" 14 | "Language-Team: \n" 15 | "Language: ka\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 20 | "X-Generator: Poedit 3.0.1\n" 21 | 22 | #. translators: This is a emmoji keyboard layout 23 | #: data/popover.ui:6 24 | msgid "Emoji" 25 | msgstr "ემოჯი" 26 | 27 | #. translators: This is a terminal keyboard layout 28 | #: data/popover.ui:12 29 | msgid "Terminal" 30 | msgstr "ტერმინალი" 31 | 32 | #: data/popover.ui:18 33 | msgid "Keyboard Settings" 34 | msgstr "კლავიატურის მორგება" 35 | 36 | #: data/sm.puri.Squeekboard.desktop.in.in:3 37 | msgid "Squeekboard" 38 | msgstr "Squeekboard" 39 | 40 | #: data/sm.puri.Squeekboard.desktop.in.in:4 41 | msgid "On Screen Keyboard" 42 | msgstr "ეკრანის კლავიატურა" 43 | 44 | #: data/sm.puri.Squeekboard.desktop.in.in:5 45 | msgid "An on screen virtual keyboard" 46 | msgstr "ეკრანზე ვირტუალური კლავიატურის ჩვენება" 47 | -------------------------------------------------------------------------------- /po/he.po: -------------------------------------------------------------------------------- 1 | # Hebrew translation for squeekboard. 2 | # Copyright (C) 2022 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Yosef Or Boczko , 2022. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: squeekboard master\n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 10 | "issues\n" 11 | "POT-Creation-Date: 2022-02-04 15:22+0000\n" 12 | "PO-Revision-Date: 2022-02-14 18:05+0200\n" 13 | "Last-Translator: Yosef Or Boczko \n" 14 | "Language-Team: Hebrew <>\n" 15 | "Language: he\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 20 | "X-Generator: Gtranslator 40.0\n" 21 | 22 | #. translators: This is a emmoji keyboard layout 23 | #: data/popover.ui:6 24 | msgid "Emoji" 25 | msgstr "רגשון" 26 | 27 | #. translators: This is a terminal keyboard layout 28 | #: data/popover.ui:12 29 | msgid "Terminal" 30 | msgstr "מסוף" 31 | 32 | #: data/popover.ui:18 33 | msgid "Keyboard Settings" 34 | msgstr "הגדרות מקלדת" 35 | 36 | #: data/sm.puri.Squeekboard.desktop.in.in:3 37 | msgid "Squeekboard" 38 | msgstr "Squeekboard" 39 | 40 | #: data/sm.puri.Squeekboard.desktop.in.in:4 41 | msgid "On Screen Keyboard" 42 | msgstr "מקלדת על המסך" 43 | 44 | #: data/sm.puri.Squeekboard.desktop.in.in:5 45 | msgid "An on screen virtual keyboard" 46 | msgstr "מקלדת מדומה על המסך" 47 | -------------------------------------------------------------------------------- /NEWS.md: -------------------------------------------------------------------------------- 1 | 1.24.0 2 | ------------------ 3 | 4 | Changes: 5 | - The emoji-layout has been replaced with a new one, which offers many more emojis to choose from. 6 | 7 | 1.23.0 8 | ------------------ 9 | 10 | New or updated translations: 11 | - Belarusian 12 | - Haitian Creole 13 | 14 | New layouts: 15 | - French Canadian (QWERTY + accented letters) 16 | - German terminal-layout 17 | - Spanish terminal-layout 18 | 19 | Changes: 20 | - Fixed Persian and Swiss layouts 21 | - Fixed various small style-issues in many layouts 22 | - Improved the US-terminal-layout 23 | 24 | 1.22.0 "Superposition" 25 | ------------------ 26 | 27 | New or updated translations: 28 | - Basque 29 | 30 | Changes: 31 | - fixed panel sizing when scaling 32 | - fixed panel sizing when rotating 33 | - fixed Dvorak terminal layout 34 | 35 | 1.21.0 "Expected value" 36 | ------------------ 37 | 38 | New or updated translations: 39 | - Hindi 40 | - Czech 41 | - German 42 | 43 | New layouts: 44 | - wide Swedish 45 | - Hungarian 46 | 47 | Changes: 48 | - use a custom font for gr+polytonic, where the default is unreadable 49 | - require newer Rust 50 | - fixed panel sizing when rotating 51 | - internal improvements. 52 | 53 | 1.20.0 "PID controller" 54 | ------------------ 55 | 56 | New translations: 57 | - Greek 58 | - Croatian 59 | 60 | New layouts: 61 | - US Dvorak terminal 62 | 63 | Improvements: 64 | - forcing the panel to hide now takes effect immediately 65 | - Squeekboard icon will present itself when other applications need to show it 66 | -------------------------------------------------------------------------------- /po/tr.po: -------------------------------------------------------------------------------- 1 | # Turkish translation for squeekboard. 2 | # Copyright (C) 2022 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Emin Tufan Çetin , 2022. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: squeekboard master\n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 10 | "issues\n" 11 | "POT-Creation-Date: 2022-03-16 00:57+0000\n" 12 | "PO-Revision-Date: 2022-03-19 12:33+0300\n" 13 | "Last-Translator: Emin Tufan Çetin \n" 14 | "Language-Team: Turkish \n" 15 | "Language: tr\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=1; plural=0;\n" 20 | "X-Generator: Poedit 2.4.3\n" 21 | 22 | #. translators: This is a emmoji keyboard layout 23 | #: data/popover.ui:6 24 | msgid "Emoji" 25 | msgstr "Emoji" 26 | 27 | #. translators: This is a terminal keyboard layout 28 | #: data/popover.ui:12 29 | msgid "Terminal" 30 | msgstr "Uçbirim" 31 | 32 | #: data/popover.ui:18 33 | msgid "Keyboard Settings" 34 | msgstr "Klavye Ayarları" 35 | 36 | #: data/sm.puri.Squeekboard.desktop.in.in:3 37 | msgid "Squeekboard" 38 | msgstr "Squeekboard" 39 | 40 | #: data/sm.puri.Squeekboard.desktop.in.in:4 41 | msgid "On Screen Keyboard" 42 | msgstr "Ekran Klavyesi" 43 | 44 | #: data/sm.puri.Squeekboard.desktop.in.in:5 45 | msgid "An on screen virtual keyboard" 46 | msgstr "Sanal ekran klavyesi" 47 | -------------------------------------------------------------------------------- /po/sv.po: -------------------------------------------------------------------------------- 1 | # Swedish translations for squeekboard package. 2 | # Copyright (C) 2021 THE squeekboard'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Automatically generated, 2021. 5 | # 6 | # Luna Jernberg , 2021. 7 | # 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: \n" 11 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 12 | "issues\n" 13 | "POT-Creation-Date: 2021-12-22 12:47+0000\n" 14 | "PO-Revision-Date: 2021-12-22 14:15+0100\n" 15 | "Language-Team: \n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "X-Generator: Poedit 3.0\n" 20 | "Last-Translator: \n" 21 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 22 | "Language: sv\n" 23 | 24 | #. translators: This is a emmoji keyboard layout 25 | #: data/popover.ui:6 26 | msgid "Emoji" 27 | msgstr "Emoji" 28 | 29 | #. translators: This is a terminal keyboard layout 30 | #: data/popover.ui:12 31 | msgid "Terminal" 32 | msgstr "Terminal" 33 | 34 | #: data/popover.ui:18 35 | msgid "Keyboard Settings" 36 | msgstr "Tangentbordsinställningar" 37 | 38 | #: data/sm.puri.Squeekboard.desktop.in.in:3 39 | msgid "Squeekboard" 40 | msgstr "Squeekboard" 41 | 42 | #: data/sm.puri.Squeekboard.desktop.in.in:4 43 | msgid "On Screen Keyboard" 44 | msgstr "Skärmtangentbord" 45 | 46 | #: data/sm.puri.Squeekboard.desktop.in.in:5 47 | msgid "An on screen virtual keyboard" 48 | msgstr "Ett virtuellt skärmtangentbord" 49 | -------------------------------------------------------------------------------- /po/pt.po: -------------------------------------------------------------------------------- 1 | # Portuguese translation for squeekboard. 2 | # Copyright (C) 2022 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Hugo Carvalho , 2022. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: squeekboard master\n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 10 | "issues\n" 11 | "POT-Creation-Date: 2022-02-26 10:49+0000\n" 12 | "PO-Revision-Date: 2022-02-26 18:27+0000\n" 13 | "Last-Translator: Hugo Carvalho \n" 14 | "Language-Team: Portuguese \n" 15 | "Language: pt\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 20 | "X-Generator: Poedit 3.0.1\n" 21 | 22 | #. translators: This is a emmoji keyboard layout 23 | #: data/popover.ui:6 24 | msgid "Emoji" 25 | msgstr "Emoji" 26 | 27 | #. translators: This is a terminal keyboard layout 28 | #: data/popover.ui:12 29 | msgid "Terminal" 30 | msgstr "Terminal" 31 | 32 | #: data/popover.ui:18 33 | msgid "Keyboard Settings" 34 | msgstr "Definições do teclado" 35 | 36 | #: data/sm.puri.Squeekboard.desktop.in.in:3 37 | msgid "Squeekboard" 38 | msgstr "Squeekboard" 39 | 40 | #: data/sm.puri.Squeekboard.desktop.in.in:4 41 | msgid "On Screen Keyboard" 42 | msgstr "Teclado no ecrã" 43 | 44 | #: data/sm.puri.Squeekboard.desktop.in.in:5 45 | msgid "An on screen virtual keyboard" 46 | msgstr "Um teclado virtual no ecrã" 47 | -------------------------------------------------------------------------------- /po/el.po: -------------------------------------------------------------------------------- 1 | # Greek translation for squeekboard. 2 | # Copyright (C) 2022 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Efstathios Iosifidis , 2022. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: squeekboard master\n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 10 | "issues\n" 11 | "POT-Creation-Date: 2022-07-11 06:54+0000\n" 12 | "PO-Revision-Date: 2022-07-11 23:11+0300\n" 13 | "Last-Translator: Efstathios Iosifidis \n" 14 | "Language-Team: Greek \n" 15 | "Language: el\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 20 | "X-Generator: Poedit 3.1\n" 21 | 22 | #. translators: This is a emmoji keyboard layout 23 | #: data/popover.ui:6 24 | msgid "Emoji" 25 | msgstr "Emoji" 26 | 27 | #. translators: This is a terminal keyboard layout 28 | #: data/popover.ui:12 29 | msgid "Terminal" 30 | msgstr "Τερματικό" 31 | 32 | #: data/popover.ui:18 33 | msgid "Keyboard Settings" 34 | msgstr "Ρυθμίσεις πληκτρολογίου" 35 | 36 | #: data/sm.puri.Squeekboard.desktop.in.in:3 37 | msgid "Squeekboard" 38 | msgstr "Squeekboard" 39 | 40 | #: data/sm.puri.Squeekboard.desktop.in.in:4 41 | msgid "On Screen Keyboard" 42 | msgstr "Πληκτρολόγιο οθόνης" 43 | 44 | #: data/sm.puri.Squeekboard.desktop.in.in:5 45 | msgid "An on screen virtual keyboard" 46 | msgstr "Εικονικό πληκτρολόγιο οθόνης" 47 | -------------------------------------------------------------------------------- /po/fi.po: -------------------------------------------------------------------------------- 1 | # Finnish translation for squeekboard. 2 | # Copyright (C) 2021 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Jiri Grönroos , 2021. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: squeekboard master\n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 10 | "issues\n" 11 | "POT-Creation-Date: 2021-12-25 13:55+0000\n" 12 | "PO-Revision-Date: 2021-12-26 17:15+0200\n" 13 | "Last-Translator: Jiri Grönroos \n" 14 | "Language-Team: Finnish \n" 15 | "Language: fi\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 20 | "X-Generator: Poedit 3.0.1\n" 21 | 22 | #. translators: This is a emmoji keyboard layout 23 | #: data/popover.ui:6 24 | msgid "Emoji" 25 | msgstr "Emoji" 26 | 27 | #. translators: This is a terminal keyboard layout 28 | #: data/popover.ui:12 29 | msgid "Terminal" 30 | msgstr "Pääte" 31 | 32 | #: data/popover.ui:18 33 | msgid "Keyboard Settings" 34 | msgstr "Näppäimistön asetukset" 35 | 36 | #: data/sm.puri.Squeekboard.desktop.in.in:3 37 | msgid "Squeekboard" 38 | msgstr "Squeekboard" 39 | 40 | #: data/sm.puri.Squeekboard.desktop.in.in:4 41 | msgid "On Screen Keyboard" 42 | msgstr "Näyttönäppäimistö" 43 | 44 | #: data/sm.puri.Squeekboard.desktop.in.in:5 45 | msgid "An on screen virtual keyboard" 46 | msgstr "Virtuaalinen näyttönäppäimistö" 47 | -------------------------------------------------------------------------------- /po/hu.po: -------------------------------------------------------------------------------- 1 | # Hungarian translation for squeekboard. 2 | # Copyright (C) 2022 Free Software Foundation, Inc. 3 | # This file is distributed under the same license as the squeekboard package. 4 | # 5 | # Balázs Úr , 2022. 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: squeekboard master\n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/issues" 10 | "\n" 11 | "POT-Creation-Date: 2022-03-12 12:04+0000\n" 12 | "PO-Revision-Date: 2022-03-16 01:55+0100\n" 13 | "Last-Translator: Balázs Úr \n" 14 | "Language-Team: Hungarian \n" 15 | "Language: hu\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 20 | "X-Generator: Lokalize 19.12.3\n" 21 | 22 | #. translators: This is a emmoji keyboard layout 23 | #: data/popover.ui:6 24 | msgid "Emoji" 25 | msgstr "Emodzsi" 26 | 27 | #. translators: This is a terminal keyboard layout 28 | #: data/popover.ui:12 29 | msgid "Terminal" 30 | msgstr "Terminál" 31 | 32 | #: data/popover.ui:18 33 | msgid "Keyboard Settings" 34 | msgstr "Billentyűzetbeállítások" 35 | 36 | #: data/sm.puri.Squeekboard.desktop.in.in:3 37 | msgid "Squeekboard" 38 | msgstr "Squeekboard" 39 | 40 | #: data/sm.puri.Squeekboard.desktop.in.in:4 41 | msgid "On Screen Keyboard" 42 | msgstr "Képernyő-billentyűzet" 43 | 44 | #: data/sm.puri.Squeekboard.desktop.in.in:5 45 | msgid "An on screen virtual keyboard" 46 | msgstr "Egy virtuális képernyő-billentyűzet" 47 | -------------------------------------------------------------------------------- /dco.txt: -------------------------------------------------------------------------------- 1 | Developer Certificate of Origin 2 | Version 1.1 3 | 4 | Copyright (C) 2004, 2006 The Linux Foundation and its contributors. 5 | 1 Letterman Drive 6 | Suite D4700 7 | San Francisco, CA, 94129 8 | 9 | Everyone is permitted to copy and distribute verbatim copies of this 10 | license document, but changing it is not allowed. 11 | 12 | 13 | Developer's Certificate of Origin 1.1 14 | 15 | By making a contribution to this project, I certify that: 16 | 17 | (a) The contribution was created in whole or in part by me and I 18 | have the right to submit it under the open source license 19 | indicated in the file; or 20 | 21 | (b) The contribution is based upon previous work that, to the best 22 | of my knowledge, is covered under an appropriate open source 23 | license and I have the right under that license to submit that 24 | work with modifications, whether created in whole or in part 25 | by me, under the same open source license (unless I am 26 | permitted to submit under a different license), as indicated 27 | in the file; or 28 | 29 | (c) The contribution was provided directly to me by some other 30 | person who certified (a), (b) or (c) and I have not modified 31 | it. 32 | 33 | (d) I understand and agree that this project and the contribution 34 | are public and that a record of the contribution (including all 35 | personal information I submit with it, including my sign-off) is 36 | maintained indefinitely and may be redistributed consistent with 37 | this project or the open source license(s) involved. 38 | 39 | 40 | -------------------------------------------------------------------------------- /po/hr.po: -------------------------------------------------------------------------------- 1 | # Croatian translation for squeekboard. 2 | # Copyright (C) 2022 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: squeekboard master\n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 10 | "issues\n" 11 | "POT-Creation-Date: 2022-07-11 20:12+0000\n" 12 | "PO-Revision-Date: 2022-08-31 09:49+0200\n" 13 | "Last-Translator: \n" 14 | "Language-Team: Croatian \n" 15 | "Language: hr\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 " 20 | "&& n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 21 | "X-Generator: Poedit 3.1.1\n" 22 | 23 | #. translators: This is a emmoji keyboard layout 24 | #: data/popover.ui:6 25 | msgid "Emoji" 26 | msgstr "Smajli" 27 | 28 | #. translators: This is a terminal keyboard layout 29 | #: data/popover.ui:12 30 | msgid "Terminal" 31 | msgstr "Terminal" 32 | 33 | #: data/popover.ui:18 34 | msgid "Keyboard Settings" 35 | msgstr "Postavke tipkovnice" 36 | 37 | #: data/sm.puri.Squeekboard.desktop.in.in:3 38 | msgid "Squeekboard" 39 | msgstr "Squeekboard" 40 | 41 | #: data/sm.puri.Squeekboard.desktop.in.in:4 42 | msgid "On Screen Keyboard" 43 | msgstr "Zaslonska tipkovnica" 44 | 45 | #: data/sm.puri.Squeekboard.desktop.in.in:5 46 | msgid "An on screen virtual keyboard" 47 | msgstr "Zaslonska virtualna tipkovnica" 48 | -------------------------------------------------------------------------------- /po/cs.po: -------------------------------------------------------------------------------- 1 | # Czech translation for squeekboard. 2 | # Copyright (C) 2022 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Daniel Rusek , 2022. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: squeekboard master\n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 10 | "issues\n" 11 | "POT-Creation-Date: 2022-10-16 12:08+0000\n" 12 | "PO-Revision-Date: 2022-10-18 23:36+0200\n" 13 | "Last-Translator: Daniel Rusek \n" 14 | "Language-Team: Czech \n" 15 | "Language: cs\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" 20 | "X-Generator: Poedit 3.1.1\n" 21 | 22 | #. translators: This is a emmoji keyboard layout 23 | #: data/popover.ui:6 24 | msgid "Emoji" 25 | msgstr "Emodži" 26 | 27 | #. translators: This is a terminal keyboard layout 28 | #: data/popover.ui:12 29 | msgid "Terminal" 30 | msgstr "Terminál" 31 | 32 | #: data/popover.ui:18 33 | msgid "Keyboard Settings" 34 | msgstr "Nastavení klávesnice" 35 | 36 | #: data/sm.puri.Squeekboard.desktop.in.in:3 37 | msgid "Squeekboard" 38 | msgstr "Squeekboard" 39 | 40 | #: data/sm.puri.Squeekboard.desktop.in.in:4 41 | msgid "On Screen Keyboard" 42 | msgstr "Klávesnice na obrazovce" 43 | 44 | #: data/sm.puri.Squeekboard.desktop.in.in:5 45 | msgid "An on screen virtual keyboard" 46 | msgstr "Přidat virtuální klávesnici na obrazovce" 47 | -------------------------------------------------------------------------------- /po/fr.po: -------------------------------------------------------------------------------- 1 | # French translation for squeekboard. 2 | # Copyright (C) 2022 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # FULL NAME , 2022. 5 | # Éloi Rivard , 2022. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: squeekboard master\n" 10 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 11 | "issues\n" 12 | "POT-Creation-Date: 2022-04-28 15:05+0000\n" 13 | "PO-Revision-Date: 2022-05-25 16:34+0200\n" 14 | "Last-Translator: Éloi Rivard \n" 15 | "Language-Team: French \n" 16 | "Language: fr\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 21 | "X-Generator: Gtranslator 40.0\n" 22 | 23 | #. translators: This is a emmoji keyboard layout 24 | #: data/popover.ui:6 25 | msgid "Emoji" 26 | msgstr "Emoji" 27 | 28 | #. translators: This is a terminal keyboard layout 29 | #: data/popover.ui:12 30 | msgid "Terminal" 31 | msgstr "Terminal" 32 | 33 | #: data/popover.ui:18 34 | msgid "Keyboard Settings" 35 | msgstr "Paramètres du clavier" 36 | 37 | #: data/sm.puri.Squeekboard.desktop.in.in:3 38 | msgid "Squeekboard" 39 | msgstr "Squeekboard" 40 | 41 | #: data/sm.puri.Squeekboard.desktop.in.in:4 42 | msgid "On Screen Keyboard" 43 | msgstr "Clavier virtuel" 44 | 45 | #: data/sm.puri.Squeekboard.desktop.in.in:5 46 | msgid "An on screen virtual keyboard" 47 | msgstr "Un clavier virtuel affiché à l’écran" 48 | -------------------------------------------------------------------------------- /po/it.po: -------------------------------------------------------------------------------- 1 | # Italian translation for squeekboard. 2 | # Copyright (C) 2021 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Vittorio , 2021. 5 | # Vittorio Monti , 2021. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: squeekboard master\n" 10 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 11 | "issues\n" 12 | "POT-Creation-Date: 2021-12-22 19:14+0000\n" 13 | "PO-Revision-Date: 2021-12-22 20:37+0100\n" 14 | "Last-Translator: Vittorio Monti \n" 15 | "Language-Team: Italian \n" 16 | "Language: it\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 21 | "X-Generator: Gtranslator 3.30.1\n" 22 | 23 | #. translators: This is a emmoji keyboard layout 24 | #: data/popover.ui:6 25 | msgid "Emoji" 26 | msgstr "Emoji" 27 | 28 | #. translators: This is a terminal keyboard layout 29 | #: data/popover.ui:12 30 | msgid "Terminal" 31 | msgstr "Terminale" 32 | 33 | #: data/popover.ui:18 34 | msgid "Keyboard Settings" 35 | msgstr "Impostazioni tastiera" 36 | 37 | #: data/sm.puri.Squeekboard.desktop.in.in:3 38 | msgid "Squeekboard" 39 | msgstr "Squeekboard" 40 | 41 | #: data/sm.puri.Squeekboard.desktop.in.in:4 42 | msgid "On Screen Keyboard" 43 | msgstr "Tastiera su schermo" 44 | 45 | #: data/sm.puri.Squeekboard.desktop.in.in:5 46 | msgid "An on screen virtual keyboard" 47 | msgstr "Una tastiera virtuale su schermo" 48 | -------------------------------------------------------------------------------- /po/ro.po: -------------------------------------------------------------------------------- 1 | # Romanian translation for squeekboard. 2 | # Copyright (C) 2021 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # libre , 2021. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: squeekboard master\n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 10 | "issues\n" 11 | "POT-Creation-Date: 2021-12-22 14:45+0000\n" 12 | "PO-Revision-Date: 2021-12-22 20:05+0100\n" 13 | "Last-Translator: libre \n" 14 | "Language-Team: Romanian \n" 15 | "Language: ro\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " 20 | "20)) ? 1 : 2);;\n" 21 | "X-Generator: Gtranslator 3.30.1\n" 22 | 23 | #. translators: This is a emmoji keyboard layout 24 | #: data/popover.ui:6 25 | msgid "Emoji" 26 | msgstr "Emoji" 27 | 28 | #. translators: This is a terminal keyboard layout 29 | #: data/popover.ui:12 30 | msgid "Terminal" 31 | msgstr "Terminal" 32 | 33 | #: data/popover.ui:18 34 | msgid "Keyboard Settings" 35 | msgstr "Opțiuni tastatură" 36 | 37 | #: data/sm.puri.Squeekboard.desktop.in.in:3 38 | msgid "Squeekboard" 39 | msgstr "Squeekboard" 40 | 41 | #: data/sm.puri.Squeekboard.desktop.in.in:4 42 | msgid "On Screen Keyboard" 43 | msgstr "Tastatură pe ecran" 44 | 45 | #: data/sm.puri.Squeekboard.desktop.in.in:5 46 | msgid "An on screen virtual keyboard" 47 | msgstr "O tastatură virtuală pe ecran" 48 | -------------------------------------------------------------------------------- /po/de.po: -------------------------------------------------------------------------------- 1 | # German translations for squeekboard package. 2 | # Copyright (C) 2021 THE squeekboard'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Automatically generated, 2021. 5 | # Jürgen Benvenuti , 2023. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: squeekboard\n" 10 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 11 | "issues\n" 12 | "POT-Creation-Date: 2022-10-16 12:08+0000\n" 13 | "PO-Revision-Date: 2023-01-14 11:45+0100\n" 14 | "Last-Translator: Jürgen Benvenuti \n" 15 | "Language-Team: German \n" 16 | "Language: de\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 21 | "X-Generator: Poedit 3.1.1\n" 22 | 23 | #. translators: This is a emmoji keyboard layout 24 | #: data/popover.ui:6 25 | msgid "Emoji" 26 | msgstr "Emoji" 27 | 28 | #. translators: This is a terminal keyboard layout 29 | #: data/popover.ui:12 30 | msgid "Terminal" 31 | msgstr "Terminal" 32 | 33 | #: data/popover.ui:18 34 | msgid "Keyboard Settings" 35 | msgstr "Tastatureinstellungen" 36 | 37 | #: data/sm.puri.Squeekboard.desktop.in.in:3 38 | msgid "Squeekboard" 39 | msgstr "Squeekboard" 40 | 41 | #: data/sm.puri.Squeekboard.desktop.in.in:4 42 | msgid "On Screen Keyboard" 43 | msgstr "Bildschirmtastatur" 44 | 45 | #: data/sm.puri.Squeekboard.desktop.in.in:5 46 | msgid "An on screen virtual keyboard" 47 | msgstr "Eine virtuelle Bildschirmtastatur" 48 | -------------------------------------------------------------------------------- /po/sr.po: -------------------------------------------------------------------------------- 1 | # Serbian translation for squeekboard. 2 | # Copyright © 2022 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Мирослав Николић , 2022. 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: squeekboard master\n" 8 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 9 | "issues\n" 10 | "POT-Creation-Date: 2022-03-08 10:15+0000\n" 11 | "PO-Revision-Date: 2022-03-12 13:00+0200\n" 12 | "Last-Translator: Мирослав Николић \n" 13 | "Language-Team: Serbian <(nothing)>\n" 14 | "Language: sr\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n" 19 | "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" 20 | 21 | #. translators: This is a emmoji keyboard layout 22 | #: data/popover.ui:6 23 | msgid "Emoji" 24 | msgstr "Емоџи" 25 | 26 | #. translators: This is a terminal keyboard layout 27 | #: data/popover.ui:12 28 | msgid "Terminal" 29 | msgstr "Терминал" 30 | 31 | #: data/popover.ui:18 32 | msgid "Keyboard Settings" 33 | msgstr "Поставке тастатуре" 34 | 35 | #: data/sm.puri.Squeekboard.desktop.in.in:3 36 | msgid "Squeekboard" 37 | msgstr "Сквик-табла" 38 | 39 | #: data/sm.puri.Squeekboard.desktop.in.in:4 40 | msgid "On Screen Keyboard" 41 | msgstr "Тастатура на екрану" 42 | 43 | #: data/sm.puri.Squeekboard.desktop.in.in:5 44 | msgid "An on screen virtual keyboard" 45 | msgstr "Виртуелна тастатура на екрану" 46 | -------------------------------------------------------------------------------- /po/pl.po: -------------------------------------------------------------------------------- 1 | # Polish translation for squeekboard. 2 | # Copyright © 2022 the squeekboard authors. 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Piotr Drąg , 2022. 5 | # Aviary.pl , 2022. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: squeekboard\n" 10 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 11 | "issues\n" 12 | "POT-Creation-Date: 2022-03-19 09:34+0000\n" 13 | "PO-Revision-Date: 2022-03-20 14:12+0100\n" 14 | "Last-Translator: Piotr Drąg \n" 15 | "Language-Team: Polish \n" 16 | "Language: pl\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " 21 | "|| n%100>=20) ? 1 : 2);\n" 22 | 23 | #. translators: This is a emmoji keyboard layout 24 | #: data/popover.ui:6 25 | msgid "Emoji" 26 | msgstr "Emoji" 27 | 28 | #. translators: This is a terminal keyboard layout 29 | #: data/popover.ui:12 30 | msgid "Terminal" 31 | msgstr "Terminal" 32 | 33 | #: data/popover.ui:18 34 | msgid "Keyboard Settings" 35 | msgstr "Ustawienia klawiatury" 36 | 37 | #: data/sm.puri.Squeekboard.desktop.in.in:3 38 | msgid "Squeekboard" 39 | msgstr "Squeekboard" 40 | 41 | #: data/sm.puri.Squeekboard.desktop.in.in:4 42 | msgid "On Screen Keyboard" 43 | msgstr "Klawiatura ekranowa" 44 | 45 | #: data/sm.puri.Squeekboard.desktop.in.in:5 46 | msgid "An on screen virtual keyboard" 47 | msgstr "Wirtualna klawiatura ekranowa" 48 | -------------------------------------------------------------------------------- /po/es.po: -------------------------------------------------------------------------------- 1 | # Spanish translation for squeekboard. 2 | # Copyright (C) 2022 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # FIRST AUTHOR , YEAR. 5 | # Pablo Correa Gómez , 2022. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: squeekboard master\n" 10 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 11 | "issues\n" 12 | "POT-Creation-Date: 2022-03-20 13:14+0000\n" 13 | "PO-Revision-Date: 2022-03-22 21:33+0100\n" 14 | "Last-Translator: Pablo Correa Gómez \n" 15 | "Language-Team: Spanish; Castilian \n" 16 | "Language: es\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=2; plural=(n != 1)\n" 21 | "X-Generator: Gtranslator 3.36.0\n" 22 | 23 | #. translators: This is a emmoji keyboard layout 24 | #: data/popover.ui:6 25 | msgid "Emoji" 26 | msgstr "Emoji" 27 | 28 | #. translators: This is a terminal keyboard layout 29 | #: data/popover.ui:12 30 | msgid "Terminal" 31 | msgstr "Terminal" 32 | 33 | #: data/popover.ui:18 34 | msgid "Keyboard Settings" 35 | msgstr "Ajustes de teclado" 36 | 37 | #: data/sm.puri.Squeekboard.desktop.in.in:3 38 | msgid "Squeekboard" 39 | msgstr "Squeekboard" 40 | 41 | #: data/sm.puri.Squeekboard.desktop.in.in:4 42 | msgid "On Screen Keyboard" 43 | msgstr "Teclado en pantala" 44 | 45 | #: data/sm.puri.Squeekboard.desktop.in.in:5 46 | msgid "An on screen virtual keyboard" 47 | msgstr "Un teclado virtual en pantalla" 48 | -------------------------------------------------------------------------------- /po/ru.po: -------------------------------------------------------------------------------- 1 | # Russian translation for squeekboard. 2 | # Copyright (C) 2022 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Aleksandr Melman , 2022. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: squeekboard master\n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 10 | "issues\n" 11 | "POT-Creation-Date: 2022-06-14 15:23+0000\n" 12 | "PO-Revision-Date: 2022-06-16 14:38+0300\n" 13 | "Last-Translator: Aleksandr Melman \n" 14 | "Language-Team: Russian \n" 15 | "Language: ru\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 " 20 | "&& n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 21 | "X-Generator: Poedit 3.0.1\n" 22 | 23 | #. translators: This is a emmoji keyboard layout 24 | #: data/popover.ui:6 25 | msgid "Emoji" 26 | msgstr "Эмодзи" 27 | 28 | #. translators: This is a terminal keyboard layout 29 | #: data/popover.ui:12 30 | msgid "Terminal" 31 | msgstr "Терминал" 32 | 33 | #: data/popover.ui:18 34 | msgid "Keyboard Settings" 35 | msgstr "Настройки клавиатуры" 36 | 37 | #: data/sm.puri.Squeekboard.desktop.in.in:3 38 | msgid "Squeekboard" 39 | msgstr "Squeekboard" 40 | 41 | #: data/sm.puri.Squeekboard.desktop.in.in:4 42 | msgid "On Screen Keyboard" 43 | msgstr "Экранная клавиатура" 44 | 45 | #: data/sm.puri.Squeekboard.desktop.in.in:5 46 | msgid "An on screen virtual keyboard" 47 | msgstr "Виртуальная клавиатура на экране" 48 | -------------------------------------------------------------------------------- /po/nl.po: -------------------------------------------------------------------------------- 1 | # Dutch translation for squeekboard. 2 | # Copyright (C) 2021 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Jan Jasper de Kroon , 2021. 5 | # Nathan Follens , 2021. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: squeekboard master\n" 10 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 11 | "issues\n" 12 | "POT-Creation-Date: 2021-12-23 15:18+0000\n" 13 | "PO-Revision-Date: 2021-12-25 14:04+0100\n" 14 | "Last-Translator: Nathan Follens \n" 15 | "Language-Team: Dutch \n" 16 | "Language: nl\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 21 | "X-Generator: Poedit 3.0.1\n" 22 | 23 | #. translators: This is a emmoji keyboard layout 24 | #: data/popover.ui:6 25 | msgid "Emoji" 26 | msgstr "Emoji" 27 | 28 | #. translators: This is a terminal keyboard layout 29 | #: data/popover.ui:12 30 | msgid "Terminal" 31 | msgstr "Terminal" 32 | 33 | #: data/popover.ui:18 34 | msgid "Keyboard Settings" 35 | msgstr "Toetsenbordinstellingen" 36 | 37 | # Dit is de naam van de applicatie 38 | #: data/sm.puri.Squeekboard.desktop.in.in:3 39 | msgid "Squeekboard" 40 | msgstr "Squeekboard" 41 | 42 | #: data/sm.puri.Squeekboard.desktop.in.in:4 43 | msgid "On Screen Keyboard" 44 | msgstr "Schermtoetsenbord" 45 | 46 | #: data/sm.puri.Squeekboard.desktop.in.in:5 47 | msgid "An on screen virtual keyboard" 48 | msgstr "Een virtueel schermtoetsenbord" 49 | -------------------------------------------------------------------------------- /po/be.po: -------------------------------------------------------------------------------- 1 | # Belarusian translation for squeekboard. 2 | # Copyright (C) 2023 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Yuras Shumovich , 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: squeekboard master\n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 10 | "issues\n" 11 | "POT-Creation-Date: 2023-04-02 17:10+0000\n" 12 | "PO-Revision-Date: 2023-09-14 14:44+0300\n" 13 | "Last-Translator: Yuras Shumovich \n" 14 | "Language-Team: Belarusian \n" 15 | "Language: be\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 " 20 | "&& n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 21 | "X-Generator: Poedit 3.3.2\n" 22 | 23 | #. translators: This is a emmoji keyboard layout 24 | #: data/popover.ui:6 25 | msgid "Emoji" 26 | msgstr "Эмодзі" 27 | 28 | #. translators: This is a terminal keyboard layout 29 | #: data/popover.ui:12 30 | msgid "Terminal" 31 | msgstr "Тэрмінал" 32 | 33 | #: data/popover.ui:18 34 | msgid "Keyboard Settings" 35 | msgstr "Налады клавіятуры" 36 | 37 | #: data/sm.puri.Squeekboard.desktop.in.in:3 38 | msgid "Squeekboard" 39 | msgstr "Squeekboard" 40 | 41 | #: data/sm.puri.Squeekboard.desktop.in.in:4 42 | msgid "On Screen Keyboard" 43 | msgstr "Экранная клавіятура" 44 | 45 | #: data/sm.puri.Squeekboard.desktop.in.in:5 46 | msgid "An on screen virtual keyboard" 47 | msgstr "Віртуальная экранная клавіятура" 48 | -------------------------------------------------------------------------------- /po/pt_BR.po: -------------------------------------------------------------------------------- 1 | # Brazilian Portuguese translation for squeekboard. 2 | # Copyright (C) 2021 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # Rafael Fontenelle , 2021. 5 | # Luís Fernando Stürmer da Rosa , 2021. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: squeekboard master\n" 10 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 11 | "issues\n" 12 | "POT-Creation-Date: 2021-12-22 12:39+0000\n" 13 | "PO-Revision-Date: 2022-01-30 12:34-0300\n" 14 | "Last-Translator: Luís Fernando Stürmer da Rosa \n" 15 | "Language-Team: Brazilian Portuguese \n" 16 | "Language: pt_BR\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 21 | "X-Generator: Poedit 3.0\n" 22 | 23 | #. translators: This is a emmoji keyboard layout 24 | #: data/popover.ui:6 25 | msgid "Emoji" 26 | msgstr "Emoji" 27 | 28 | #. translators: This is a terminal keyboard layout 29 | #: data/popover.ui:12 30 | msgid "Terminal" 31 | msgstr "Terminal" 32 | 33 | #: data/popover.ui:18 34 | msgid "Keyboard Settings" 35 | msgstr "Configurações do teclado" 36 | 37 | #: data/sm.puri.Squeekboard.desktop.in.in:3 38 | msgid "Squeekboard" 39 | msgstr "Squeekboard" 40 | 41 | #: data/sm.puri.Squeekboard.desktop.in.in:4 42 | msgid "On Screen Keyboard" 43 | msgstr "Teclado virtual" 44 | 45 | #: data/sm.puri.Squeekboard.desktop.in.in:5 46 | msgid "An on screen virtual keyboard" 47 | msgstr "Um teclado virtual" 48 | -------------------------------------------------------------------------------- /po/uk.po: -------------------------------------------------------------------------------- 1 | # Ukrainian translation for squeekboard. 2 | # Copyright (C) 2021 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # 5 | # Yuri Chornoivan , 2021. 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: squeekboard master\n" 9 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/issues\n" 10 | "POT-Creation-Date: 2021-12-22 10:36+0000\n" 11 | "PO-Revision-Date: 2021-12-22 14:46+0200\n" 12 | "Last-Translator: Yuri Chornoivan \n" 13 | "Language-Team: Ukrainian \n" 14 | "Language: uk\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" 19 | "X-Generator: Lokalize 20.12.0\n" 20 | 21 | #. translators: This is a emmoji keyboard layout 22 | #: data/popover.ui:6 23 | msgid "Emoji" 24 | msgstr "" 25 | "Емодзі" 26 | 27 | #. translators: This is a terminal keyboard layout 28 | #: data/popover.ui:12 29 | msgid "Terminal" 30 | msgstr "" 31 | "Термінал" 32 | 33 | #: data/popover.ui:18 34 | msgid "Keyboard Settings" 35 | msgstr "" 36 | "Параметри клавіатури" 37 | 38 | #: data/sm.puri.Squeekboard.desktop.in.in:3 39 | msgid "Squeekboard" 40 | msgstr "" 41 | "Squeekboard" 42 | 43 | #: data/sm.puri.Squeekboard.desktop.in.in:4 44 | msgid "On Screen Keyboard" 45 | msgstr "" 46 | "Екранна клавіатура" 47 | 48 | #: data/sm.puri.Squeekboard.desktop.in.in:5 49 | msgid "An on screen virtual keyboard" 50 | msgstr "" 51 | "Екранна віртуальна клавіатура" 52 | -------------------------------------------------------------------------------- /po/hi.po: -------------------------------------------------------------------------------- 1 | # Hindi translation for squeekboard. 2 | # Copyright (C) 2023 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # # Translators: 5 | # Hemish , 2023. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: squeekboard master\n" 10 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 11 | "issues\n" 12 | "POT-Creation-Date: 2023-01-31 11:38+0000\n" 13 | "PO-Revision-Date: 2023-02-02 23:11+0530\n" 14 | "Last-Translator: Hemish \n" 15 | "Language-Team: Hindi \n" 17 | "Language: hi\n" 18 | "MIME-Version: 1.0\n" 19 | "Content-Type: text/plain; charset=UTF-8\n" 20 | "Content-Transfer-Encoding: 8bit\n" 21 | "Plural-Forms: nplurals=2; plural=(n != 1)\n" 22 | "X-Generator: Gtranslator 42.0\n" 23 | "X-DL-Team: \n" 24 | "X-DL-Module: \n" 25 | "X-DL-Branch: \n" 26 | "X-DL-Domain: \n" 27 | 28 | #. translators: This is a emmoji keyboard layout 29 | #: data/popover.ui:6 30 | msgid "Emoji" 31 | msgstr "इमोजी" 32 | 33 | #. translators: This is a terminal keyboard layout 34 | #: data/popover.ui:12 35 | msgid "Terminal" 36 | msgstr "टर्मिनल" 37 | 38 | #: data/popover.ui:18 39 | msgid "Keyboard Settings" 40 | msgstr "कुंजीपट सेंटिग्स" 41 | 42 | #: data/sm.puri.Squeekboard.desktop.in.in:3 43 | msgid "Squeekboard" 44 | msgstr "स्क्वीकबोर्ड" 45 | 46 | #: data/sm.puri.Squeekboard.desktop.in.in:4 47 | msgid "On Screen Keyboard" 48 | msgstr "ऑनस्क्रीन कुंजीपट" 49 | 50 | #: data/sm.puri.Squeekboard.desktop.in.in:5 51 | msgid "An on screen virtual keyboard" 52 | msgstr "एक ऑनस्क्रीन वर्चुअल कुंजीपट" 53 | -------------------------------------------------------------------------------- /po/sl.po: -------------------------------------------------------------------------------- 1 | # Slovenian translation for squeekboard. 2 | # Copyright (C) 2021 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # 5 | # Matej Urbančič , 2021. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: squeekboard master\n" 10 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 11 | "issues\n" 12 | "POT-Creation-Date: 2021-12-22 19:14+0000\n" 13 | "PO-Revision-Date: 2021-12-23 16:17+0100\n" 14 | "Last-Translator: Matej Urbančič \n" 15 | "Language-Team: Slovenian GNOME Translation Team \n" 16 | "Language: sl_SI\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" 21 | "%100==4 ? 3 : 0);\n" 22 | "X-Poedit-SourceCharset: utf-8\n" 23 | "X-Generator: Poedit 3.0.1\n" 24 | 25 | #. translators: This is a emmoji keyboard layout 26 | #: data/popover.ui:6 27 | msgid "Emoji" 28 | msgstr "Izrazne ikone" 29 | 30 | #. translators: This is a terminal keyboard layout 31 | #: data/popover.ui:12 32 | msgid "Terminal" 33 | msgstr "Terminal" 34 | 35 | #: data/popover.ui:18 36 | msgid "Keyboard Settings" 37 | msgstr "Nastavitve tipkovnice" 38 | 39 | #: data/sm.puri.Squeekboard.desktop.in.in:3 40 | msgid "Squeekboard" 41 | msgstr "Cvilkovnica" 42 | 43 | #: data/sm.puri.Squeekboard.desktop.in.in:4 44 | msgid "On Screen Keyboard" 45 | msgstr "Zaslonska tipkovnica" 46 | 47 | #: data/sm.puri.Squeekboard.desktop.in.in:5 48 | msgid "An on screen virtual keyboard" 49 | msgstr "Navidezna zaslonska tipkovnica" 50 | -------------------------------------------------------------------------------- /src/actors/external/screensaver.rs: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2022 Purism SPC 3 | * 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | use crate::actors::Destination; 7 | use crate::actors::popover; 8 | use crate::logging; 9 | use std::thread; 10 | use zbus::{Connection, dbus_proxy}; 11 | 12 | use super::Void; 13 | 14 | 15 | #[dbus_proxy( 16 | interface = "org.freedesktop.ScreenSaver", 17 | default_service = "org.freedesktop.ScreenSaver", 18 | default_path = "/org/freedesktop/ScreenSaver" 19 | )] 20 | pub trait Manager { 21 | #[dbus_proxy(signal)] 22 | fn active_changed(&self, active: bool) -> fdo::Result<()>; 23 | } 24 | 25 | /// Listens to screensaver (screen lock) changes 26 | pub fn init(destination: popover::Destination) { 27 | thread::spawn(move || { 28 | if let Err(e) = start(destination) { 29 | log_print!( 30 | logging::Level::Surprise, 31 | "Could not track screensaver status, giving up: {:?}", 32 | e, 33 | ); 34 | } 35 | }); 36 | } 37 | 38 | fn start(destination: popover::Destination) -> Result { 39 | let conn = Connection::new_session()?; 40 | let manager = ManagerProxy::new(&conn)?; 41 | 42 | manager.connect_active_changed(move |m| { 43 | destination.send(popover::Event::ScreensaverActive(m)); 44 | Ok(()) 45 | })?; 46 | 47 | loop { 48 | match manager.next_signal() { 49 | Ok(None) => {} 50 | other => log_print!( 51 | logging::Level::Bug, 52 | "Encountered unhandled event: {:?}", 53 | other, 54 | ), 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /po/gl.po: -------------------------------------------------------------------------------- 1 | # Galician translation for squeekboard. 2 | # Copyright (C) 2022 squeekboard's COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the squeekboard package. 4 | # FIRST AUTHOR , YEAR. 5 | # Fran Diéguez , 2022. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: squeekboard master\n" 10 | "Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/Phosh/squeekboard/" 11 | "issues\n" 12 | "POT-Creation-Date: 2022-02-02 17:41+0000\n" 13 | "PO-Revision-Date: 2022-02-04 16:18+0100\n" 14 | "Last-Translator: Fran Diéguez \n" 15 | "Language-Team: Galician \n" 16 | "Language: gl\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "X-DL-Team: gl\n" 21 | "X-DL-Module: squeekboard\n" 22 | "X-DL-Branch: master\n" 23 | "X-DL-Domain: po\n" 24 | "X-DL-State: Translating\n" 25 | "Plural-Forms: nplurals=2; plural=(n != 1)\n" 26 | "X-Generator: Gtranslator 41.0\n" 27 | 28 | #. translators: This is a emmoji keyboard layout 29 | #: data/popover.ui:6 30 | msgid "Emoji" 31 | msgstr "Emoticono" 32 | 33 | #. translators: This is a terminal keyboard layout 34 | #: data/popover.ui:12 35 | msgid "Terminal" 36 | msgstr "Terminal" 37 | 38 | #: data/popover.ui:18 39 | msgid "Keyboard Settings" 40 | msgstr "Preferencias de teclado" 41 | 42 | #: data/sm.puri.Squeekboard.desktop.in.in:3 43 | msgid "Squeekboard" 44 | msgstr "Squeekboard" 45 | 46 | #: data/sm.puri.Squeekboard.desktop.in.in:4 47 | msgid "On Screen Keyboard" 48 | msgstr "Teclado en pantalla" 49 | 50 | #: data/sm.puri.Squeekboard.desktop.in.in:5 51 | msgid "An on screen virtual keyboard" 52 | msgstr "Un teclado en pantalla virtual" 53 | -------------------------------------------------------------------------------- /examples/find_orphan_layouts.rs: -------------------------------------------------------------------------------- 1 | /*! Tests if any layout files are not in use */ 2 | 3 | extern crate rs; 4 | 5 | use rs::resources; 6 | use std::env; 7 | use std::error::Error; 8 | use std::ffi::OsStr; 9 | use std::fs; 10 | use std::path::{Path, PathBuf}; 11 | 12 | enum Orphans { 13 | None, 14 | Present, 15 | } 16 | 17 | fn check(base: &Path, dir: &Path) -> Result> { 18 | let mut orphans = Orphans::None; 19 | for entry in fs::read_dir(dir)? { 20 | let entry = entry?; 21 | let path = entry.path(); 22 | 23 | if entry.file_type()?.is_dir() { 24 | check(base, &path)?; 25 | } else { 26 | if Some(OsStr::new("yaml")) == path.extension() { 27 | let resource_path = path 28 | .strip_prefix(base).unwrap() 29 | .with_extension(""); 30 | let resource_path = resource_path 31 | .to_str().unwrap(); 32 | let resource_path = resource_path 33 | .strip_prefix('/').unwrap_or(resource_path); 34 | if let None = resources::get_keyboard(resource_path) { 35 | println!("Data not registered in the resources file: {:?}", path); 36 | orphans = Orphans::Present; 37 | } 38 | } 39 | } 40 | } 41 | Ok(orphans) 42 | } 43 | 44 | fn main() -> () { 45 | let path = env::args().nth(1).expect("Provide a path"); 46 | let path = PathBuf::from(path); 47 | 48 | match check(&path, &path) { 49 | Err(e) => panic!("{:?}", e), 50 | Ok(Orphans::Present) => panic!("Unregistered files present. Check the tutorial in doc/tutorial.md"), 51 | _ => {}, 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /debian/control: -------------------------------------------------------------------------------- 1 | Source: squeekboard 2 | Section: x11 3 | Priority: optional 4 | Maintainer: Dorota Czaplejewicz 5 | Build-Depends: 6 | cargo, 7 | debhelper-compat (= 13), 8 | meson (>=0.51.0), 9 | ninja-build, 10 | pkg-config, 11 | libbsd-dev, 12 | libglib2.0-dev, 13 | libgnome-desktop-3-dev, 14 | libgtk-3-dev, 15 | libfeedback-dev, 16 | librust-bitflags-dev (>= 1.0), 17 | librust-clap-dev (>= 2.32), 18 | librust-gio+v2-58-dev, 19 | librust-glib+v2-58-dev, 20 | librust-glib-sys-dev, 21 | librust-gtk+v3-22-dev (>= 0.5), 22 | librust-gtk-sys-dev, 23 | librust-maplit-1-dev (>= 1.0), 24 | librust-serde-derive-1-dev (>= 1.0), 25 | librust-serde-yaml-0.8-dev (>= 0.8), 26 | librust-xkbcommon-0.4+wayland-dev (>= 0.4), 27 | librust-zbus-dev (>= 1.9), 28 | libwayland-dev (>= 1.16), 29 | lsb-release, 30 | python3, 31 | python3-ruamel.yaml, 32 | rustc, 33 | wayland-protocols (>= 1.14), 34 | Standards-Version: 4.1.3 35 | Homepage: https://gitlab.gnome.org/World/Phosh/squeekboard 36 | 37 | Package: squeekboard 38 | Architecture: linux-any 39 | Depends: 40 | # for Greek polytonic readability 41 | fonts-gfs-didot-classic, 42 | # for the Adwaita-dark theme 43 | gnome-themes-extra-data, 44 | ${shlibs:Depends}, 45 | ${misc:Depends}, 46 | Breaks: 47 | librem5-base (<< 24), 48 | Description: On-screen keyboard for Wayland 49 | Virtual keyboard supporting Wayland, built primarily for the Librem 5 phone. 50 | 51 | Package: squeekboard-devel 52 | Architecture: linux-any 53 | Depends: 54 | python3, 55 | python3-gi, 56 | ${shlibs:Depends}, 57 | ${misc:Depends}, 58 | Description: Resources for making Squeekboard layouts 59 | Tools for creating and testing Squeekboard layouts: 60 | . 61 | * squeekboard-entry 62 | * squeekboard-test-layout 63 | -------------------------------------------------------------------------------- /eek/eek-keyboard.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010-2011 Daiki Ueno 3 | * Copyright (C) 2010-2011 Red Hat, Inc. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public License 7 | * as published by the Free Software Foundation; either version 2 of 8 | * the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, but 11 | * WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 18 | * 02110-1301 USA 19 | */ 20 | 21 | #if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION) 22 | #error "Only can be included directly." 23 | #endif 24 | 25 | #ifndef EEK_KEYBOARD_H 26 | #define EEK_KEYBOARD_H 1 27 | 28 | #include 29 | #include 30 | #include "eek-types.h" 31 | #include "src/layout.h" 32 | 33 | G_BEGIN_DECLS 34 | 35 | /// Keymap container for Rust interoperability. 36 | struct keymap { 37 | uint32_t fd; // keymap formatted as XKB string 38 | size_t fd_len; // length of the data inside keymap_fd 39 | }; 40 | 41 | /// Keyboard info holder 42 | struct _Layout { 43 | char style_name[20]; // The name of the css class on layout 44 | struct squeek_layout *layout; // owned 45 | }; 46 | 47 | Layout* 48 | layout_new (char *style_name, struct squeek_layout *layout); 49 | void layout_free(Layout *self); 50 | 51 | G_END_DECLS 52 | #endif /* EEK_KEYBOARD_H */ 53 | -------------------------------------------------------------------------------- /src/data/mod.rs: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2020-2021 Purism SPC 2 | * SPDX-License-Identifier: GPL-3.0+ 3 | */ 4 | 5 | /*! Combined module for dealing with layout files */ 6 | 7 | pub mod loading; 8 | pub mod parsing; 9 | 10 | use std::io; 11 | use std::fmt; 12 | 13 | use crate::keyboard::FormattingError; 14 | 15 | /// Errors encountered loading the layout into yaml 16 | #[derive(Debug)] 17 | pub enum Error { 18 | Yaml(serde_yaml::Error), 19 | Io(io::Error), 20 | /// The file was missing. 21 | /// It's distinct from Io in order to make it matchable 22 | /// without calling io::Error::kind() 23 | Missing(io::Error), 24 | } 25 | 26 | impl fmt::Display for Error { 27 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 28 | match self { 29 | Error::Yaml(e) => write!(f, "YAML: {}", e), 30 | Error::Io(e) => write!(f, "IO: {}", e), 31 | Error::Missing(e) => write!(f, "Missing: {}", e), 32 | } 33 | } 34 | } 35 | 36 | impl From for Error { 37 | fn from(e: io::Error) -> Self { 38 | let kind = e.kind(); 39 | match kind { 40 | io::ErrorKind::NotFound => Error::Missing(e), 41 | _ => Error::Io(e), 42 | } 43 | } 44 | } 45 | 46 | 47 | #[derive(Debug)] 48 | pub enum LoadError { 49 | BadData(Error), 50 | MissingResource, 51 | BadResource(serde_yaml::Error), 52 | BadKeyMap(FormattingError), 53 | } 54 | 55 | impl fmt::Display for LoadError { 56 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 57 | use self::LoadError::*; 58 | match self { 59 | BadData(e) => write!(f, "Bad data: {}", e), 60 | MissingResource => write!(f, "Missing resource"), 61 | BadResource(e) => write!(f, "Bad resource: {}", e), 62 | BadKeyMap(e) => write!(f, "Bad key map: {}", e), 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/actors/external/debug.rs: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2022 Purism SPC 3 | * 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | use crate::main; 7 | use crate::state; 8 | 9 | use std::thread; 10 | use zbus::{Connection, ObjectServer, dbus_interface, fdo}; 11 | 12 | use super::Void; 13 | 14 | use std::convert::TryInto; 15 | 16 | 17 | /// Accepts commands controlling the debug mode 18 | struct Manager { 19 | sender: main::EventLoop, 20 | enabled: bool, 21 | } 22 | 23 | #[dbus_interface(name = "sm.puri.SqueekDebug")] 24 | impl Manager { 25 | #[dbus_interface(property, name = "Enabled")] 26 | fn get_enabled(&self) -> bool { 27 | self.enabled 28 | } 29 | #[dbus_interface(property, name = "Enabled")] 30 | fn set_enabled(&mut self, enabled: bool) { 31 | self.enabled = enabled; 32 | self.sender 33 | .send(state::Event::Debug( 34 | if enabled { Event::Enable } 35 | else { Event::Disable } 36 | )) 37 | .unwrap(); 38 | } 39 | } 40 | 41 | fn start(mgr: Manager) -> Result> { 42 | let connection = Connection::new_session()?; 43 | fdo::DBusProxy::new(&connection)?.request_name( 44 | "sm.puri.SqueekDebug", 45 | fdo::RequestNameFlags::ReplaceExisting.into(), 46 | )?; 47 | 48 | let mut object_server = ObjectServer::new(&connection); 49 | object_server.at(&"/sm/puri/SqueekDebug".try_into()?, mgr)?; 50 | 51 | loop { 52 | if let Err(err) = object_server.try_handle_next() { 53 | eprintln!("{}", err); 54 | } 55 | } 56 | } 57 | 58 | pub fn init(sender: main::EventLoop) { 59 | let mgr = Manager { 60 | sender, 61 | enabled: false, 62 | }; 63 | thread::spawn(move || { 64 | start(mgr).unwrap(); 65 | }); 66 | } 67 | 68 | #[derive(Debug, Clone, Copy)] 69 | pub enum Event { 70 | Enable, 71 | Disable, 72 | } 73 | -------------------------------------------------------------------------------- /src/dbus.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010-2011 Daiki Ueno 3 | * Copyright (C) 2010-2011 Red Hat, Inc. 4 | * Copyright (C) 2019-2020 Purism, SPC 5 | * 6 | * This program is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program. If not, see . 18 | */ 19 | #ifndef DBUS_H_ 20 | #define DBUS_H_ 1 21 | 22 | #include "sm.puri.OSK0.h" 23 | 24 | // From main.h 25 | struct squeek_state_manager; 26 | 27 | G_BEGIN_DECLS 28 | 29 | #define DBUS_SERVICE_PATH "/sm/puri/OSK0" 30 | #define DBUS_SERVICE_INTERFACE "sm.puri.OSK0" 31 | 32 | /// Two jobs: accept events, forwarding them to the visibility manager, 33 | /// and get updated from inside to show internal state. 34 | /// Updates are handled in the same loop as the UI. 35 | /// See main.rs 36 | typedef struct _DBusHandler 37 | { 38 | GDBusConnection *connection; 39 | SmPuriOSK0 *dbus_interface; 40 | GDBusNodeInfo *introspection_data; 41 | guint registration_id; 42 | char *object_path; 43 | 44 | /// Forward incoming events there 45 | struct squeek_state_manager *state_manager; // shared reference 46 | } DBusHandler; 47 | 48 | DBusHandler * dbus_handler_new (GDBusConnection *connection, 49 | const gchar *object_path, 50 | struct squeek_state_manager *state_manager); 51 | 52 | void dbus_handler_destroy(DBusHandler*); 53 | G_END_DECLS 54 | #endif /* DBUS_H_ */ 55 | -------------------------------------------------------------------------------- /src/xdg.rs: -------------------------------------------------------------------------------- 1 | /*! XDG directory handling. */ 2 | 3 | /* Based on dirs-sys https://github.com/soc/dirs-sys-rs 4 | * by "Simon Ochsenreither ", 5 | * Licensed under either of 6 | 7 | Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0) 8 | MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT) 9 | 10 | at your option. 11 | * 12 | * Based on dirs https://github.com/soc/dirs-rs 13 | * by "Simon Ochsenreither ", 14 | * Licensed under either of 15 | 16 | Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0) 17 | MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT) 18 | 19 | at your option. 20 | * 21 | * Based on xdg https://github.com/whitequark/rust-xdg 22 | * by "Ben Longbons ", 23 | * "whitequark ", 24 | rust-xdg is distributed under the terms of both the MIT license and the Apache License (Version 2.0). 25 | * 26 | * The above crates were used to get 27 | * a version without all the excessive dependencies. 28 | */ 29 | 30 | use std::env; 31 | use std::ffi::OsString; 32 | use std::path::{ Path, PathBuf }; 33 | 34 | 35 | fn is_absolute_path(path: OsString) -> Option { 36 | let path = PathBuf::from(path); 37 | if path.is_absolute() { 38 | Some(path) 39 | } else { 40 | None 41 | } 42 | } 43 | 44 | fn home_dir() -> Option { 45 | return env::var_os("HOME") 46 | .and_then(|h| if h.is_empty() { None } else { Some(h) }) 47 | .map(PathBuf::from); 48 | } 49 | 50 | fn data_dir() -> Option { 51 | env::var_os("XDG_DATA_HOME") 52 | .and_then(is_absolute_path) 53 | .or_else(|| home_dir().map(|h| h.join(".local/share"))) 54 | } 55 | 56 | /// Returns the path to the directory within the data dir 57 | pub fn data_path

(path: P) -> Option 58 | where P: AsRef 59 | { 60 | data_dir().map(|dir| { 61 | dir.join(path.as_ref()) 62 | }) 63 | } 64 | -------------------------------------------------------------------------------- /eek/eek-gtk-keyboard.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010-2011 Daiki Ueno 3 | * Copyright (C) 2010-2011 Red Hat, Inc. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public License 7 | * as published by the Free Software Foundation; either version 2 of 8 | * the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, but 11 | * WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 18 | * 02110-1301 USA 19 | */ 20 | 21 | #if !defined(__EEK_H_INSIDE__) && !defined(EEK_COMPILATION) 22 | #error "Only can be included directly." 23 | #endif 24 | 25 | #ifndef EEK_GTK_KEYBOARD_H 26 | #define EEK_GTK_KEYBOARD_H 1 27 | 28 | #include 29 | #include 30 | 31 | #include "eek/eek-renderer.h" 32 | #include "eek/eek-types.h" 33 | #include "src/main.h" 34 | #include "src/popover.h" 35 | 36 | struct submission; 37 | struct squeek_layout_state; 38 | 39 | G_BEGIN_DECLS 40 | #define EEK_TYPE_GTK_KEYBOARD (eek_gtk_keyboard_get_type()) 41 | G_DECLARE_DERIVABLE_TYPE (EekGtkKeyboard, eek_gtk_keyboard, EEK, GTK_KEYBOARD, GtkDrawingArea) 42 | 43 | struct _EekGtkKeyboardClass 44 | { 45 | /*< private >*/ 46 | GtkDrawingAreaClass parent_class; 47 | 48 | /*< private >*/ 49 | /* padding */ 50 | gpointer pdummy[24]; 51 | }; 52 | 53 | GtkWidget *eek_gtk_keyboard_new (EekboardContextService *eekservice, struct submission *submission, struct squeek_state_manager *state_manager, struct squeek_popover *popover); 54 | void eek_gtk_keyboard_emit_feedback (EekGtkKeyboard *self); 55 | 56 | G_END_DECLS 57 | #endif /* EEK_GTK_KEYBOARD_H */ 58 | -------------------------------------------------------------------------------- /src/popover.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | static void 4 | call_dbus_cb (GDBusProxy *proxy, 5 | GAsyncResult *res, 6 | gpointer user_data) 7 | { 8 | g_autoptr (GError) err = NULL; 9 | g_autoptr (GVariant) output = NULL; 10 | 11 | output = g_dbus_proxy_call_finish (proxy, res, &err); 12 | if (err) { 13 | g_warning ("Can't open panel %s", err->message); 14 | } 15 | g_object_unref (proxy); 16 | } 17 | 18 | static void 19 | create_dbus_proxy_cb (GObject *source_object, GAsyncResult *res, char *panel) 20 | { 21 | GDBusProxy *proxy; 22 | g_autoptr (GError) err = NULL; 23 | GVariantBuilder builder; 24 | GVariant *params[3]; 25 | GVariant *array[1]; 26 | 27 | proxy = g_dbus_proxy_new_for_bus_finish (res, &err); 28 | 29 | if (err != NULL) { 30 | g_warning ("Can't open panel %s: %s", panel, err->message); 31 | g_free (panel); 32 | return; 33 | } 34 | 35 | g_variant_builder_init (&builder, G_VARIANT_TYPE ("av")); 36 | g_variant_builder_add (&builder, "v", g_variant_new_string ("")); 37 | 38 | array[0] = g_variant_new ("v", g_variant_new ("(sav)", panel, &builder)); 39 | 40 | params[0] = g_variant_new_string ("launch-panel"); 41 | params[1] = g_variant_new_array (G_VARIANT_TYPE ("v"), array, 1); 42 | params[2] = g_variant_new_array (G_VARIANT_TYPE ("{sv}"), NULL, 0); 43 | 44 | g_dbus_proxy_call (proxy, 45 | "Activate", 46 | g_variant_new_tuple (params, 3), 47 | G_DBUS_CALL_FLAGS_NONE, 48 | -1, 49 | NULL, 50 | (GAsyncReadyCallback) call_dbus_cb, 51 | NULL); 52 | 53 | g_free (panel); 54 | } 55 | 56 | void 57 | popover_open_settings_panel (char *panel) 58 | { 59 | g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION, 60 | G_DBUS_PROXY_FLAGS_NONE, 61 | NULL, 62 | "org.gnome.Settings", 63 | "/org/gnome/Settings", 64 | "org.gtk.Actions", 65 | NULL, 66 | (GAsyncReadyCallback) create_dbus_proxy_cb, 67 | g_strdup (panel)); 68 | 69 | } 70 | -------------------------------------------------------------------------------- /data/keyboards/il.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 40, height: 60 } 4 | altline: { width: 56, height: 60 } 5 | wide: { width: 62, height: 60 } 6 | spaceline: { width: 142, height: 60 } 7 | special: { width: 44, height: 60 } 8 | 9 | views: 10 | base: 11 | - "' - ק ר א ט ו ן ם פ" 12 | - "ש ד ג כ ע י ח ל ך ף" 13 | - "ז ס ב ה נ מ צ ת ץ BackSpace" 14 | - "show_numbers comma preferences space period Return" 15 | numbers: 16 | - "1 2 3 4 5 6 7 8 9 0" 17 | - "@ # ₪ % & - _ + ( )" 18 | - "show_symbols , \" ' colon ; ! ? BackSpace" 19 | - "show_letters preferences space period Return" 20 | symbols: 21 | - "~ ` | · √ π τ ÷ × ¶" 22 | - "© ® £ € $ ^ ° * { }" 23 | - "show_numbers_from_symbols \\ / < > = [ ] BackSpace" 24 | - "show_letters preferences space period Return" 25 | 26 | buttons: 27 | BackSpace: 28 | outline: "default" 29 | icon: "edit-clear-symbolic" 30 | action: erase 31 | comma: 32 | outline: "special" 33 | text: "," 34 | 35 | preferences: 36 | action: show_prefs 37 | outline: "special" 38 | icon: "keyboard-mode-symbolic" 39 | show_numbers: 40 | action: 41 | set_view: "numbers" 42 | outline: "wide" 43 | label: "123" 44 | show_numbers_from_symbols: 45 | action: 46 | set_view: "numbers" 47 | outline: "altline" 48 | label: "123" 49 | show_letters: 50 | action: 51 | set_view: "base" 52 | outline: "wide" 53 | label: "ABC" 54 | show_symbols: 55 | action: 56 | set_view: "symbols" 57 | outline: "altline" 58 | label: "*/=" 59 | period: 60 | outline: "special" 61 | text: "." 62 | space: 63 | outline: "spaceline" 64 | text: " " 65 | Return: 66 | outline: "wide" 67 | icon: "key-enter" 68 | keysym: "Return" 69 | colon: 70 | text: ":" 71 | 72 | -------------------------------------------------------------------------------- /eek/eek-types.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010-2011 Daiki Ueno 3 | * Copyright (C) 2010-2011 Red Hat, Inc. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public License 7 | * as published by the Free Software Foundation; either version 2 of 8 | * the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, but 11 | * WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 18 | * 02110-1301 USA 19 | */ 20 | 21 | /** 22 | * SECTION:eek-types 23 | * @title: Miscellaneous Types 24 | * @short_description: Miscellaneous types used in Libeek 25 | */ 26 | 27 | #include "config.h" 28 | 29 | #include 30 | #include 31 | 32 | #include "eek-types.h" 33 | 34 | /* EekPoint */ 35 | G_DEFINE_BOXED_TYPE(EekPoint, eek_point, eek_point_copy, eek_point_free); 36 | 37 | EekPoint * 38 | eek_point_copy (const EekPoint *point) 39 | { 40 | return g_slice_dup (EekPoint, point); 41 | } 42 | 43 | void 44 | eek_point_free (EekPoint *point) 45 | { 46 | g_slice_free (EekPoint, point); 47 | } 48 | 49 | void 50 | eek_point_rotate (EekPoint *point, gint angle) 51 | { 52 | gdouble r, phi; 53 | 54 | phi = atan2 (point->y, point->x); 55 | r = sqrt (point->x * point->x + point->y * point->y); 56 | phi += angle * M_PI / 180; 57 | point->x = r * cos (phi); 58 | point->y = r * sin (phi); 59 | } 60 | 61 | /* EekBounds */ 62 | G_DEFINE_BOXED_TYPE(EekBounds, eek_bounds, eek_bounds_copy, eek_bounds_free); 63 | 64 | EekBounds * 65 | eek_bounds_copy (const EekBounds *bounds) 66 | { 67 | return g_slice_dup (EekBounds, bounds); 68 | } 69 | 70 | void 71 | eek_bounds_free (EekBounds *bounds) 72 | { 73 | g_slice_free (EekBounds, bounds); 74 | } 75 | -------------------------------------------------------------------------------- /data/keyboards/ara_wide.yaml: -------------------------------------------------------------------------------- 1 | # Maintained by: Khaled Eldoheiri 2 | --- 3 | outlines: 4 | default: { width: 49, height: 42 } 5 | altline: { width: 73.5, height: 42 } 6 | wide: { width: 108, height: 42 } 7 | spaceline: { width: 324, height: 42 } 8 | special: { width: 49, height: 42 } 9 | 10 | views: 11 | base: 12 | - "ذ ض ص ث ق ف غ ع خ ح ج" 13 | - "ش س ي ب ل ا ت ن م ك ط" 14 | - "Shift_L ء ؤ ر ة و ز ظ د BackSpace" 15 | - "show_numbers preferences space . Return" 16 | extra: 17 | - "ذ ض ص ث ق لإ إ ع خ ح ج" 18 | - "ش س ى ب لأ أ ت ن م ك ط" 19 | - "Shift_L ئ لآ لا ه آ ز ظ د BackSpace" 20 | - "show_numbers preferences space . Return" 21 | numbers: 22 | - "1 2 3 4 5 6 7 8 9 0" 23 | - "@ # € % & - _ + ( )" 24 | - "show_symbols ، \" ' : ؛ ! ؟ BackSpace" 25 | - "show_letters preferences space . Return" 26 | symbols: 27 | - "~ ` | · √ π τ ÷ × ¶" 28 | - "© ® £ € ¥ ^ ° * { }" 29 | - "show_numbers \\ / < > = [ ] BackSpace" 30 | - "show_letters preferences space . Return" 31 | 32 | buttons: 33 | Shift_L: 34 | action: 35 | locking: 36 | lock_view: "extra" 37 | unlock_view: "base" 38 | outline: "altline" 39 | icon: "key-shift" 40 | BackSpace: 41 | outline: "altline" 42 | icon: "edit-clear-symbolic" 43 | action: "erase" 44 | preferences: 45 | action: "show_prefs" 46 | outline: "special" 47 | icon: "keyboard-mode-symbolic" 48 | show_numbers: 49 | action: 50 | set_view: "numbers" 51 | outline: "altline" 52 | label: "123" 53 | show_letters: 54 | action: 55 | set_view: "base" 56 | outline: "altline" 57 | label: "ض" 58 | show_symbols: 59 | action: 60 | set_view: "symbols" 61 | outline: "altline" 62 | label: "*/=" 63 | space: 64 | outline: "spaceline" 65 | label: " " 66 | text: " " 67 | Return: 68 | outline: "altline" 69 | icon: "key-enter" 70 | keysym: "Return" 71 | -------------------------------------------------------------------------------- /data/keyboards/ara.yaml: -------------------------------------------------------------------------------- 1 | # Maintained by: Khaled Eldoheiri 2 | --- 3 | outlines: 4 | default: { width: 32.66, height: 52 } 5 | altline: { width: 48.99, height: 52 } 6 | wide: { width: 62, height: 52 } 7 | spaceline: { width: 195.96, height: 52 } 8 | special: { width: 35.66, height: 52 } 9 | 10 | views: 11 | base: 12 | - "ذ ض ص ث ق ف غ ع خ ح ج" 13 | - "ش س ي ب ل ا ت ن م ك ط" 14 | - "Shift_L ء ؤ ر ة و ز ظ د BackSpace" 15 | - "show_numbers preferences space . Return" 16 | extra: 17 | - "ذ ض ص ث ق لإ إ ع خ ح ج" 18 | - "ش س ى ب لأ أ ت ن م ك ط" 19 | - "Shift_L ئ لآ لا ه آ ز ظ د BackSpace" 20 | - "show_numbers preferences space . Return" 21 | numbers: 22 | - "1 2 3 4 5 6 7 8 9 0" 23 | - "@ # € % & - _ + ( )" 24 | - "show_symbols ، \" ' : ؛ ! ؟ BackSpace" 25 | - "show_letters preferences space . Return" 26 | symbols: 27 | - "~ ` | · √ π τ ÷ × ¶" 28 | - "© ® £ € ¥ ^ ° * { }" 29 | - "show_numbers \\ / < > = [ ] BackSpace" 30 | - "show_letters preferences space . Return" 31 | 32 | buttons: 33 | Shift_L: 34 | action: 35 | locking: 36 | lock_view: "extra" 37 | unlock_view: "base" 38 | outline: "altline" 39 | icon: "key-shift" 40 | BackSpace: 41 | outline: "altline" 42 | icon: "edit-clear-symbolic" 43 | action: "erase" 44 | preferences: 45 | action: "show_prefs" 46 | outline: "special" 47 | icon: "keyboard-mode-symbolic" 48 | show_numbers: 49 | action: 50 | set_view: "numbers" 51 | outline: "altline" 52 | label: "123" 53 | show_letters: 54 | action: 55 | set_view: "base" 56 | outline: "altline" 57 | label: "ض" 58 | show_symbols: 59 | action: 60 | set_view: "symbols" 61 | outline: "altline" 62 | label: "*/=" 63 | space: 64 | outline: "spaceline" 65 | label: " " 66 | text: " " 67 | Return: 68 | outline: "altline" 69 | icon: "key-enter" 70 | keysym: "Return" 71 | -------------------------------------------------------------------------------- /eekboard/eekboard-context-service.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010-2011 Daiki Ueno 3 | * Copyright (C) 2010-2011 Red Hat, Inc. 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #if !defined(__EEKBOARD_SERVICE_H_INSIDE__) && !defined(EEKBOARD_COMPILATION) 19 | #error "Only can be included directly." 20 | #endif 21 | 22 | #ifndef EEKBOARD_CONTEXT_SERVICE_H 23 | #define EEKBOARD_CONTEXT_SERVICE_H 1 24 | 25 | #include "src/submission.h" 26 | #include "src/layout.h" 27 | #include "src/main.h" 28 | 29 | #include "virtual-keyboard-unstable-v1-client-protocol.h" 30 | #include "text-input-unstable-v3-client-protocol.h" 31 | 32 | G_BEGIN_DECLS 33 | 34 | #define EEKBOARD_CONTEXT_SERVICE_PATH "/org/fedorahosted/Eekboard/Context_%d" 35 | #define EEKBOARD_CONTEXT_SERVICE_INTERFACE "org.fedorahosted.Eekboard.Context" 36 | 37 | #define EEKBOARD_TYPE_CONTEXT_SERVICE (eekboard_context_service_get_type()) 38 | 39 | G_DECLARE_FINAL_TYPE(EekboardContextService, eekboard_context_service, EEKBOARD, CONTEXT_SERVICE, GObject) 40 | 41 | EekboardContextService *eekboard_context_service_new(struct squeek_state_manager *state_manager); 42 | void eekboard_context_service_set_submission(EekboardContextService *context, struct submission *submission); 43 | void eekboard_context_service_destroy (EekboardContextService *context); 44 | Layout *eekboard_context_service_get_keyboard(EekboardContextService *context); 45 | 46 | void eekboard_context_service_set_keymap(EekboardContextService *context, 47 | const Layout *keyboard); 48 | 49 | G_END_DECLS 50 | #endif /* EEKBOARD_CONTEXT_SERVICE_H */ 51 | -------------------------------------------------------------------------------- /data/keyboards/ch+de.yaml: -------------------------------------------------------------------------------- 1 | # Maintained by Patrick Jörg . No Copyright, enjoy! 2 | 3 | --- 4 | outlines: 5 | default: { width: 35.33, height: 52 } 6 | altline: { width: 48, height: 52 } 7 | wide: { width: 59, height: 52 } 8 | spaceline: { width: 70, height: 52 } 9 | special: { width: 28, height: 52 } 10 | 11 | views: 12 | base: 13 | - "q w e r t z u i o p ü" 14 | - "a s d f g h j k l ö ä" 15 | - "Shift_L y x c v b n m BackSpace" 16 | - "show_numbers ? ! preferences ' space , . Return" 17 | upper: 18 | - "Q W E R T Z U I O P Ü" 19 | - "A S D F G H J K L Ö Ä" 20 | - "Shift_L Y X C V B N M BackSpace" 21 | - "show_numbers - _ preferences \" space , . Return" 22 | numbers: 23 | - "1 2 3 4 5 6 7 8 9 0" 24 | - "@ * + - = ( ) ~ < >" 25 | - "show_symbols # & / \\ √ ; : BackSpace" 26 | - "show_letters ? ! preferences _ space , . Return" 27 | symbols: 28 | - "€ $ £ ¥ % | § µ [ ]" 29 | - "© ® § ` ^ { } · ¡ ¿" 30 | - "show_numbers « » ÷ × “ ” „ BackSpace" 31 | - "show_letters preferences - space , . Return" 32 | 33 | buttons: 34 | Shift_L: 35 | action: 36 | locking: 37 | lock_view: "upper" 38 | unlock_view: "base" 39 | outline: "altline" 40 | icon: "key-shift" 41 | BackSpace: 42 | outline: "altline" 43 | icon: "edit-clear-symbolic" 44 | action: erase 45 | preferences: 46 | action: "show_prefs" 47 | outline: "special" 48 | icon: "keyboard-mode-symbolic" 49 | show_numbers: 50 | action: 51 | set_view: "numbers" 52 | outline: "altline" 53 | label: "123" 54 | show_letters: 55 | action: 56 | set_view: "base" 57 | outline: "altline" 58 | label: "ABC" 59 | show_symbols: 60 | action: 61 | set_view: "symbols" 62 | outline: "altline" 63 | label: "*/=" 64 | space: 65 | outline: "spaceline" 66 | label: " " 67 | text: " " 68 | Return: 69 | outline: "wide" 70 | icon: "key-enter" 71 | keysym: "Return" 72 | "\"": 73 | keysym: "quotedbl" 74 | -------------------------------------------------------------------------------- /data/keyboards/bg.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 32.72, height: 52 } 4 | altline: { width: 47, height: 52 } 5 | wide: { width: 49.09, height: 52 } 6 | spaceline: { width: 185, height: 52 } 7 | special: { width: 44, height: 52 } 8 | 9 | views: 10 | base: 11 | - "у е и ш щ к с д з ц б" 12 | - "ь я а о ж г т н в м ч" 13 | - "Shift_L ю й ъ ф х п р л BackSpace" 14 | - "show_numbers preferences space . Return" 15 | upper: 16 | - "У Е И Ш Щ К С Д З Ц Б" 17 | - "Ь Я А О Ж Г Т Н В М Ч" 18 | - "Shift_L Ю Й Ъ Ф Х П Р Л BackSpace" 19 | - "show_numbers preferences space , Return" 20 | numbers: 21 | - "1 2 3 4 5 6 7 8 9 0" 22 | - "@ # € % & - _ + ( )" 23 | - "show_symbols , \" ' colon ; ! ? ѝ BackSpace" 24 | - "show_letters preferences space Return" 25 | symbols: 26 | - "~ ` | · √ π τ ÷ × ¶" 27 | - "© ® £ $ ¥ ^ ° * { }" 28 | - "show_numbers_from_symbols \\ / < > = [ ] BackSpace" 29 | - "show_letters preferences space Return" 30 | 31 | 32 | buttons: 33 | Shift_L: 34 | action: 35 | locking: 36 | lock_view: "upper" 37 | unlock_view: "base" 38 | outline: "altline" 39 | icon: "key-shift" 40 | BackSpace: 41 | outline: "altline" 42 | icon: "edit-clear-symbolic" 43 | action: erase 44 | preferences: 45 | action: "show_prefs" 46 | outline: "special" 47 | icon: "keyboard-mode-symbolic" 48 | show_numbers: 49 | action: 50 | set_view: "numbers" 51 | outline: "wide" 52 | label: "123" 53 | show_numbers_from_symbols: 54 | action: 55 | set_view: "numbers" 56 | outline: "altline" 57 | label: "123" 58 | show_letters: 59 | action: 60 | set_view: "base" 61 | outline: "wide" 62 | label: "ABC" 63 | show_symbols: 64 | action: 65 | set_view: "symbols" 66 | outline: "altline" 67 | label: "*/=" 68 | space: 69 | outline: "spaceline" 70 | text: " " 71 | Return: 72 | outline: "wide" 73 | icon: "key-enter" 74 | keysym: "Return" 75 | colon: 76 | text: ":" 77 | "\"": 78 | keysym: "quotedbl" 79 | -------------------------------------------------------------------------------- /data/keyboards/bg+phonetic.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 32.72, height: 52 } 4 | altline: { width: 47, height: 52 } 5 | wide: { width: 49.09, height: 52 } 6 | spaceline: { width: 185, height: 52 } 7 | special: { width: 44, height: 52 } 8 | 9 | views: 10 | base: 11 | - "я в е р т ъ у и о п ю" 12 | - "а с д ф г х й к л ш щ" 13 | - "Shift_L з ь ц ж б н м ч BackSpace" 14 | - "show_numbers preferences space . Return" 15 | upper: 16 | - "Я В Е Р Т Ъ У И О П Ю" 17 | - "А С Д Ф Г Х Й К Л Ш Щ" 18 | - "Shift_L З Ь Ц Ж Б Н М Ч BackSpace" 19 | - "show_numbers preferences space , Return" 20 | numbers: 21 | - "1 2 3 4 5 6 7 8 9 0" 22 | - "@ # € % & - _ + ( )" 23 | - "show_symbols , \" ' colon ; ! ? BackSpace" 24 | - "show_letters preferences space Return" 25 | symbols: 26 | - "~ ` | · √ π τ ÷ × ¶" 27 | - "© ® £ $ ¥ ^ ° * { }" 28 | - "show_numbers_from_symbols \\ / < > = [ ] BackSpace" 29 | - "show_letters preferences space Return" 30 | 31 | 32 | buttons: 33 | Shift_L: 34 | action: 35 | locking: 36 | lock_view: "upper" 37 | unlock_view: "base" 38 | outline: "altline" 39 | icon: "key-shift" 40 | BackSpace: 41 | outline: "altline" 42 | icon: "edit-clear-symbolic" 43 | action: erase 44 | preferences: 45 | action: "show_prefs" 46 | outline: "special" 47 | icon: "keyboard-mode-symbolic" 48 | show_numbers: 49 | action: 50 | set_view: "numbers" 51 | outline: "wide" 52 | label: "123" 53 | show_numbers_from_symbols: 54 | action: 55 | set_view: "numbers" 56 | outline: "altline" 57 | label: "123" 58 | show_letters: 59 | action: 60 | set_view: "base" 61 | outline: "wide" 62 | label: "ABC" 63 | show_symbols: 64 | action: 65 | set_view: "symbols" 66 | outline: "altline" 67 | label: "*/=" 68 | space: 69 | outline: "spaceline" 70 | text: " " 71 | Return: 72 | outline: "wide" 73 | icon: "key-enter" 74 | keysym: "Return" 75 | colon: 76 | text: ":" 77 | "\"": 78 | keysym: "quotedbl" 79 | -------------------------------------------------------------------------------- /data/keyboards/br.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 35.33, height: 52 } 4 | altline: { width: 52.67, height: 52 } 5 | wide: { width: 62, height: 52 } 6 | spaceline: { width: 142, height: 52 } 7 | special: { width: 44, height: 52 } 8 | 9 | views: 10 | base: 11 | - "q w e r t y u i o p" 12 | - "a s d f g h j k l ç" 13 | - "Shift_L z x c v b n m BackSpace" 14 | - "show_numbers preferences space , Return" 15 | upper: 16 | - "Q W E R T Y U I O P" 17 | - "A S D F G H J K L Ç" 18 | - "Shift_L Z X C V B N M BackSpace" 19 | - "show_numbers preferences space period Return" 20 | numbers: 21 | - "1 2 3 4 5 6 7 8 9 0" 22 | - "à À á Á ã à â  é É" 23 | - "show_symbols ê Ê í Í ó Ó ô Ô" 24 | - "show_letters õ Õ ú Ú ü Ü period BackSpace" 25 | symbols: 26 | - "@ # $ % - + ÷ × = ≠" 27 | - "( ) § & < > / * { }" 28 | - "show_numbers_from_symbols º \" ' colon ; ! ? BackSpace" 29 | - "show_letters preferences space period Return" 30 | 31 | buttons: 32 | Shift_L: 33 | action: 34 | locking: 35 | lock_view: "upper" 36 | unlock_view: "base" 37 | outline: "altline" 38 | icon: "key-shift" 39 | BackSpace: 40 | outline: "altline" 41 | icon: "edit-clear-symbolic" 42 | action: erase 43 | preferences: 44 | action: show_prefs 45 | outline: "special" 46 | icon: "keyboard-mode-symbolic" 47 | show_numbers: 48 | action: 49 | set_view: "numbers" 50 | outline: "wide" 51 | label: "1ã" 52 | show_numbers_from_symbols: 53 | action: 54 | set_view: "numbers" 55 | outline: "altline" 56 | label: "1ã" 57 | show_letters: 58 | action: 59 | set_view: "base" 60 | outline: "wide" 61 | label: "ABC" 62 | show_symbols: 63 | action: 64 | set_view: "symbols" 65 | outline: "altline" 66 | label: "*/=" 67 | period: 68 | outline: "special" 69 | text: "." 70 | space: 71 | outline: "spaceline" 72 | text: " " 73 | Return: 74 | outline: "wide" 75 | icon: "key-enter" 76 | keysym: "Return" 77 | colon: 78 | text: ":" 79 | -------------------------------------------------------------------------------- /data/keyboards/us_wide.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 54, height: 42 } 4 | altline: { width: 81, height: 42 } 5 | wide: { width: 108, height: 42 } 6 | spaceline: { width: 216, height: 42 } 7 | special: { width: 54, height: 42 } 8 | 9 | views: 10 | base: 11 | - "q w e r t y u i o p" 12 | - "a s d f g h j k l" 13 | - "Shift_L z x c v b n m BackSpace" 14 | - "show_numbers preferences space . Return" 15 | upper: 16 | - "Q W E R T Y U I O P" 17 | - "A S D F G H J K L" 18 | - "Shift_L Z X C V B N M BackSpace" 19 | - "show_numbers preferences space . Return" 20 | numbers: 21 | - "1 2 3 4 5 6 7 8 9 0" 22 | - "@ # $ % & - _ + ( )" 23 | - "show_symbols , \" ' colon ; ! ? BackSpace" 24 | - "show_letters preferences space . Return" 25 | symbols: 26 | - "~ ` | · √ π τ ÷ × ¶" 27 | - "© ® £ € ¥ ^ ° * { }" 28 | - "show_numbers_from_symbols \\ / < > = [ ] BackSpace" 29 | - "show_letters preferences space . Return" 30 | 31 | buttons: 32 | Shift_L: 33 | action: 34 | locking: 35 | lock_view: "upper" 36 | unlock_view: "base" 37 | outline: "altline" 38 | icon: "key-shift" 39 | BackSpace: 40 | outline: "altline" 41 | icon: "edit-clear-symbolic" 42 | action: "erase" 43 | preferences: 44 | action: "show_prefs" 45 | outline: "special" 46 | icon: "keyboard-mode-symbolic" 47 | show_numbers: 48 | action: 49 | set_view: "numbers" 50 | outline: "wide" 51 | label: "123" 52 | show_numbers_from_symbols: 53 | action: 54 | set_view: "numbers" 55 | outline: "altline" 56 | label: "123" 57 | show_letters: 58 | action: 59 | set_view: "base" 60 | outline: "wide" 61 | label: "ABC" 62 | show_symbols: 63 | action: 64 | set_view: "symbols" 65 | outline: "altline" 66 | label: "*/=" 67 | ".": 68 | outline: "special" 69 | text: "." 70 | space: 71 | outline: "spaceline" 72 | text: " " 73 | Return: 74 | outline: "wide" 75 | icon: "key-enter" 76 | keysym: "Return" 77 | colon: 78 | text: ":" 79 | -------------------------------------------------------------------------------- /data/keyboards/us+colemak_wide.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 54, height: 42 } 4 | altline: { width: 81, height: 42 } 5 | wide: { width: 108, height: 42 } 6 | spaceline: { width: 216, height: 42 } 7 | special: { width: 54, height: 42 } 8 | 9 | views: 10 | base: 11 | - "q w f p g j l u y" 12 | - "a r s t d h n e i o" 13 | - "Shift_L z x c v b k m BackSpace" 14 | - "show_numbers preferences space . Return" 15 | upper: 16 | - "Q W F P G J L U Y" 17 | - "A R S T D H N E I O" 18 | - "Shift_L Z X C V B K M BackSpace" 19 | - "show_numbers preferences space . Return" 20 | numbers: 21 | - "1 2 3 4 5 6 7 8 9 0" 22 | - "@ # $ % & - _ + ( )" 23 | - "show_symbols , \" ' colon ; ! ? BackSpace" 24 | - "show_letters preferences space . Return" 25 | symbols: 26 | - "~ ` | · √ π τ ÷ × ¶" 27 | - "© ® £ € ¥ ^ ° * { }" 28 | - "show_numbers_from_symbols \\ / < > = [ ] BackSpace" 29 | - "show_letters preferences space . Return" 30 | 31 | buttons: 32 | Shift_L: 33 | action: 34 | locking: 35 | lock_view: "upper" 36 | unlock_view: "base" 37 | outline: "altline" 38 | icon: "key-shift" 39 | BackSpace: 40 | outline: "altline" 41 | icon: "edit-clear-symbolic" 42 | action: "erase" 43 | preferences: 44 | action: "show_prefs" 45 | outline: "special" 46 | icon: "keyboard-mode-symbolic" 47 | show_numbers: 48 | action: 49 | set_view: "numbers" 50 | outline: "wide" 51 | label: "123" 52 | show_numbers_from_symbols: 53 | action: 54 | set_view: "numbers" 55 | outline: "altline" 56 | label: "123" 57 | show_letters: 58 | action: 59 | set_view: "base" 60 | outline: "wide" 61 | label: "ABC" 62 | show_symbols: 63 | action: 64 | set_view: "symbols" 65 | outline: "altline" 66 | label: "*/=" 67 | ".": 68 | outline: "special" 69 | text: "." 70 | space: 71 | outline: "spaceline" 72 | text: " " 73 | Return: 74 | outline: "wide" 75 | icon: "key-enter" 76 | keysym: "Return" 77 | colon: 78 | text: ":" 79 | -------------------------------------------------------------------------------- /data/keyboards/us.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 35.33, height: 52 } 4 | altline: { width: 52.67, height: 52 } 5 | wide: { width: 62, height: 52 } 6 | spaceline: { width: 142, height: 52 } 7 | special: { width: 44, height: 52 } 8 | 9 | views: 10 | base: 11 | - "q w e r t y u i o p" 12 | - "a s d f g h j k l" 13 | - "Shift_L z x c v b n m BackSpace" 14 | - "show_numbers preferences space period Return" 15 | upper: 16 | - "Q W E R T Y U I O P" 17 | - "A S D F G H J K L" 18 | - "Shift_L Z X C V B N M BackSpace" 19 | - "show_numbers preferences space period Return" 20 | numbers: 21 | - "1 2 3 4 5 6 7 8 9 0" 22 | - "@ # $ % & - _ + ( )" 23 | - "show_symbols , \" ' colon ; ! ? BackSpace" 24 | - "show_letters preferences space period Return" 25 | symbols: 26 | - "~ ` | · √ π τ ÷ × ¶" 27 | - "© ® £ € ¥ ^ ° * { }" 28 | - "show_numbers_from_symbols \\ / < > = [ ] BackSpace" 29 | - "show_letters preferences space period Return" 30 | 31 | buttons: 32 | Shift_L: 33 | action: 34 | locking: 35 | lock_view: "upper" 36 | unlock_view: "base" 37 | outline: "altline" 38 | icon: "key-shift" 39 | BackSpace: 40 | outline: "altline" 41 | icon: "edit-clear-symbolic" 42 | action: erase 43 | preferences: 44 | action: show_prefs 45 | outline: "special" 46 | icon: "keyboard-mode-symbolic" 47 | show_numbers: 48 | action: 49 | set_view: "numbers" 50 | outline: "wide" 51 | label: "123" 52 | show_numbers_from_symbols: 53 | action: 54 | set_view: "numbers" 55 | outline: "altline" 56 | label: "123" 57 | show_letters: 58 | action: 59 | set_view: "base" 60 | outline: "wide" 61 | label: "ABC" 62 | show_symbols: 63 | action: 64 | set_view: "symbols" 65 | outline: "altline" 66 | label: "*/=" 67 | period: 68 | outline: "special" 69 | text: "." 70 | space: 71 | outline: "spaceline" 72 | text: " " 73 | Return: 74 | outline: "wide" 75 | icon: "key-enter" 76 | keysym: "Return" 77 | colon: 78 | text: ":" 79 | -------------------------------------------------------------------------------- /src/actors/popover.rs: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2022 Purism SPC 2 | * SPDX-License-Identifier: GPL-3.0+ 3 | */ 4 | 5 | /*! The popover is opened directly by the GTK surface, 6 | without bouncing click events off the main state. 7 | Then it must accurately show which layout has been selected. 8 | It can get the system layout directly from gsettings on open, 9 | but it cannot get the user-selected overlay, because it's stored in state. 10 | 11 | To solve this, overlay will be cached in the popover actor, 12 | and updated by main state every time it changes. 13 | */ 14 | use crate::logging; 15 | use std::borrow::BorrowMut; 16 | use std::sync::{Arc, Mutex}; 17 | 18 | pub mod c { 19 | use super::*; 20 | use crate::util::c::ArcWrapped; 21 | /// The mutable instance of state. 22 | /// Thread-safe because this actor does not get its own event loop, 23 | /// and therefore can't have a channel to receive messages, 24 | /// so instead messages will be passed directly to the mutexed actor. 25 | pub type Actor = ArcWrapped; 26 | } 27 | 28 | pub type Destination = Arc>; 29 | 30 | #[derive(Debug)] 31 | pub enum Event { 32 | Overlay(Option), 33 | ScreensaverActive(bool), 34 | } 35 | 36 | impl super::Destination for Destination { 37 | type Event = Event; 38 | fn send(&self, event: Self::Event) { 39 | let actor = self.lock(); 40 | match actor { 41 | Ok(mut actor) => { 42 | let actor = actor.borrow_mut(); 43 | **actor = actor.clone().handle_event(event); 44 | }, 45 | Err(e) => log_print!( 46 | logging::Level::Bug, 47 | "Cannot lock popover state: {:?}", 48 | e, 49 | ), 50 | } 51 | } 52 | } 53 | 54 | #[derive(Clone, Debug)] 55 | pub struct State { 56 | pub overlay: Option, 57 | /// Settings button active 58 | pub settings_active: bool, 59 | } 60 | 61 | impl State { 62 | pub fn new(settings_active: bool) -> Self { 63 | Self { 64 | overlay: None, 65 | settings_active, 66 | } 67 | } 68 | 69 | fn handle_event(mut self, event: Event) -> Self { 70 | match event { 71 | Event::Overlay(overlay) => { self.overlay = overlay; }, 72 | Event::ScreensaverActive(lock_active) => { self.settings_active = !lock_active; }, 73 | }; 74 | self 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /data/keyboards/ge.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 35.33, height: 52 } 4 | altline: { width: 52.67, height: 52 } 5 | wide: { width: 62, height: 52 } 6 | spaceline: { width: 142, height: 52 } 7 | special: { width: 44, height: 52 } 8 | 9 | views: 10 | base: 11 | - "ქ წ ე რ ტ ყ უ ი ო პ" 12 | - "ა ს დ ფ გ ჰ ჯ კ ლ" 13 | - "Shift_L ზ ხ ც ვ ბ ნ მ BackSpace" 14 | - "show_numbers preferences space period Return" 15 | upper: 16 | - "ქ ჭ ე ღ თ ყ უ ი ო პ" 17 | - "ა შ დ ფ გ ჰ ჟ კ ლ" 18 | - "Shift_L ძ ხ ჩ ვ ბ ნ მ BackSpace" 19 | - "show_numbers preferences space period Return" 20 | numbers: 21 | - "1 2 3 4 5 6 7 8 9 0" 22 | - "! @ # $ % ^ & * ( )" 23 | - "show_symbols - ' \" colon ; , ? BackSpace" 24 | - "show_letters preferences space period Return" 25 | symbols: 26 | - "+ ⨯ ÷ = / _ € £ ¥ ₾" 27 | - "~ ` | · √ π τ ° { }" 28 | - "show_numbers_from_symbols \\ / < > = [ ] BackSpace" 29 | - "show_letters preferences space period Return" 30 | 31 | buttons: 32 | Shift_L: 33 | action: 34 | locking: 35 | lock_view: "upper" 36 | unlock_view: "base" 37 | outline: "altline" 38 | icon: "key-shift" 39 | BackSpace: 40 | outline: "altline" 41 | icon: "edit-clear-symbolic" 42 | action: "erase" 43 | preferences: 44 | action: "show_prefs" 45 | outline: "special" 46 | icon: "keyboard-mode-symbolic" 47 | show_numbers: 48 | action: 49 | set_view: "numbers" 50 | outline: "wide" 51 | label: "123" 52 | show_numbers_from_symbols: 53 | action: 54 | set_view: "numbers" 55 | outline: "altline" 56 | label: "123" 57 | show_letters: 58 | action: 59 | set_view: "base" 60 | outline: "wide" 61 | label: "ABC" 62 | show_symbols: 63 | action: 64 | set_view: "symbols" 65 | outline: "altline" 66 | label: "*/=" 67 | period: 68 | outline: "special" 69 | text: "." 70 | space: 71 | outline: "spaceline" 72 | text: " " 73 | Return: 74 | outline: "wide" 75 | icon: "key-enter" 76 | keysym: "Return" 77 | colon: 78 | text: ":" 79 | -------------------------------------------------------------------------------- /data/keyboards/us+colemak.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 35.33, height: 52 } 4 | altline: { width: 52.67, height: 52 } 5 | wide: { width: 62, height: 52 } 6 | spaceline: { width: 142, height: 52 } 7 | special: { width: 44, height: 52 } 8 | 9 | views: 10 | base: 11 | - "q w f p g j l u y" 12 | - "a r s t d h n e i o" 13 | - "Shift_L z x c v b k m BackSpace" 14 | - "show_numbers preferences space period Return" 15 | upper: 16 | - "Q W F P G J L U Y" 17 | - "A R S T D H N E I O" 18 | - "Shift_L Z X C V B K M BackSpace" 19 | - "show_numbers preferences space period Return" 20 | numbers: 21 | - "1 2 3 4 5 6 7 8 9 0" 22 | - "@ # $ % & - _ + ( )" 23 | - "show_symbols , \" ' colon ; ! ? BackSpace" 24 | - "show_letters preferences space period Return" 25 | symbols: 26 | - "~ ` | · √ π τ ÷ × ¶" 27 | - "© ® £ € ¥ ^ ° * { }" 28 | - "show_numbers_from_symbols \\ / < > = [ ] BackSpace" 29 | - "show_letters preferences space period Return" 30 | 31 | buttons: 32 | Shift_L: 33 | action: 34 | locking: 35 | lock_view: "upper" 36 | unlock_view: "base" 37 | outline: "altline" 38 | icon: "key-shift" 39 | BackSpace: 40 | outline: "altline" 41 | icon: "edit-clear-symbolic" 42 | action: erase 43 | preferences: 44 | action: show_prefs 45 | outline: "special" 46 | icon: "keyboard-mode-symbolic" 47 | show_numbers: 48 | action: 49 | set_view: "numbers" 50 | outline: "wide" 51 | label: "123" 52 | show_numbers_from_symbols: 53 | action: 54 | set_view: "numbers" 55 | outline: "altline" 56 | label: "123" 57 | show_letters: 58 | action: 59 | set_view: "base" 60 | outline: "wide" 61 | label: "ABC" 62 | show_symbols: 63 | action: 64 | set_view: "symbols" 65 | outline: "altline" 66 | label: "*/=" 67 | period: 68 | outline: "special" 69 | text: "." 70 | space: 71 | outline: "spaceline" 72 | text: " " 73 | Return: 74 | outline: "wide" 75 | icon: "key-enter" 76 | keysym: "Return" 77 | colon: 78 | text: ":" 79 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | *squeekboard* - a Wayland on-screen keyboard 2 | ======================================== 3 | 4 | *Squeekboard* is a keyboard-shaped input method supporting Wayland, built primarily for the *Librem 5* phone. 5 | 6 | It squeaks because some Rust got inside. 7 | 8 | Features 9 | -------- 10 | 11 | ### Present 12 | 13 | - GTK3 14 | - Custom keyboard layouts defined in yaml 15 | - Input purpose dependent keyboard layouts 16 | - DBus interface to show and hide 17 | - Use Wayland input method protocol to submit text 18 | - Use Wayland virtual keyboard protocol 19 | 20 | ### TODO 21 | 22 | - Text prediction/correction 23 | - Use preedit 24 | - Submit actions like "next field" using a future Wayland protocol 25 | - Pick up DBus interface files from /usr/share 26 | 27 | Creating layouts 28 | ------------------- 29 | 30 | If you want to work on layouts, check out the [guide](doc/tutorial.md). 31 | 32 | Building 33 | -------- 34 | 35 | ### Dependencies 36 | 37 | See `.gitlab-ci.yml` or run `apt-get build-dep .` 38 | 39 | ### Build from git repo 40 | 41 | ```bash 42 | $ git clone https://gitlab.gnome.org/World/Phosh/squeekboard.git 43 | $ cd squeekboard 44 | $ mkdir _build 45 | $ meson _build/ 46 | $ cd _build 47 | $ ninja 48 | ``` 49 | 50 | To run tests use `ninja test`. To install squeekboard run `ninja install`. 51 | 52 | Running 53 | ------- 54 | 55 | ```bash 56 | $ phoc # if no compatible Wayland compositor is running yet 57 | $ cd ../build/ 58 | $ src/squeekboard 59 | ``` 60 | 61 | Squeekboard's panel will appear whenever a compatible application requests an input method. Click a text field in any GTK application, like `python3 ./tools/entry.py`. 62 | 63 | Squeekboard honors the gnome "screen-keyboard-enabled" setting. Either enable this through gnome-settings under accessibility or run: 64 | 65 | ```bash 66 | $ gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled true 67 | ``` 68 | 69 | Alternatively, force panel visibility manually with: 70 | 71 | ```bash 72 | busctl call --user sm.puri.OSK0 /sm/puri/OSK0 sm.puri.OSK0 SetVisible b true 73 | ``` 74 | 75 | ### What the compositor has to support 76 | 77 | A compatible compositor has to support the protocols: 78 | 79 | - layer-shell 80 | - virtual-keyboard-v1 81 | 82 | It's strongly recommended to support: 83 | 84 | - input-method-v2 85 | 86 | Developing 87 | ---------- 88 | 89 | See [`doc/hacking.md`](doc/hacking.md) for this copy, or the [official documentation](https://world.pages.gitlab.gnome.org/Phosh/squeekboard) for the current release. 90 | -------------------------------------------------------------------------------- /data/keyboards/ir.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 35.33, height: 52 } 4 | altline: { width: 52.67, height: 52 } 5 | wide: { width: 62, height: 52 } 6 | spaceline: { width: 142, height: 52 } 7 | special: { width: 44, height: 52 } 8 | 9 | views: 10 | base: 11 | - "ض ص ث ق ف غ ع ه خ ح ج" 12 | - "ش س ی ب ل ا ت ن م ک گ" 13 | - "Shift_L ظ ط ز ر ذ د پ و BackSpace" 14 | - "show_numbers preferences space zwnj period Return" 15 | upper: 16 | - " ْ ٌ ٍ ً ُ ِ َ ّ # @ چ" 17 | - "_ ئ ي إ أ آ ة » « : ؛" 18 | - "Shift_L ك ٓ ژ ٔ ء > < ؟ BackSpace" 19 | - "show_numbers preferences space ! ، Return" 20 | numbers: 21 | - "۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۰ |" 22 | - "… ٬ ٫ ﷼ ٪ ، * ) ( − ـ" 23 | - "show_symbols + - × ÷ = ^ % / BackSpace" 24 | - "show_letters preferences space period Return" 25 | symbols: 26 | - "& ` | · • % π τ ÷ × ¶" 27 | - "© ® £ € ¥ ^ ° * { }" 28 | - "show_numbers_from_symbols \\ / < > = [ ] BackSpace" 29 | - "show_letters preferences space period Return" 30 | 31 | buttons: 32 | Shift_L: 33 | action: 34 | locking: 35 | lock_view: "upper" 36 | unlock_view: "base" 37 | outline: "altline" 38 | icon: "key-shift" 39 | BackSpace: 40 | outline: "altline" 41 | icon: "edit-clear-symbolic" 42 | action: erase 43 | preferences: 44 | action: show_prefs 45 | outline: "special" 46 | icon: "keyboard-mode-symbolic" 47 | show_numbers: 48 | action: 49 | set_view: "numbers" 50 | outline: "wide" 51 | label: "۱۲۳" 52 | show_numbers_from_symbols: 53 | action: 54 | set_view: "numbers" 55 | outline: "altline" 56 | label: "۱۲۳" 57 | show_letters: 58 | action: 59 | set_view: "base" 60 | outline: "wide" 61 | label: "ا‌ب‌پ" 62 | show_symbols: 63 | action: 64 | set_view: "symbols" 65 | outline: "altline" 66 | label: "*/=" 67 | period: 68 | outline: "special" 69 | text: "." 70 | space: 71 | outline: "spaceline" 72 | text: " " 73 | Return: 74 | outline: "wide" 75 | icon: "key-enter" 76 | keysym: "Return" 77 | zwnj: 78 | icon: "zwnj" 79 | text: "‌" 80 | colon: 81 | text: ":" 82 | -------------------------------------------------------------------------------- /data/keyboards/url/us.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 35.33, height: 52 } 4 | altline: { width: 52.67, height: 52 } 5 | wide: { width: 62, height: 52 } 6 | spaceline: { width: 106.67, height: 52 } 7 | special: { width: 44, height: 52 } 8 | 9 | views: 10 | base: 11 | - "q w e r t y u i o p" 12 | - "a s d f g h j k l" 13 | - "Shift_L z x c v b n m BackSpace" 14 | - "show_numbers preferences space slash period Return" 15 | upper: 16 | - "Q W E R T Y U I O P" 17 | - "A S D F G H J K L" 18 | - "Shift_L Z X C V B N M BackSpace" 19 | - "show_numbers preferences space slash period Return" 20 | numbers: 21 | - "1 2 3 4 5 6 7 8 9 0" 22 | - "@ # $ % & - _ + ( )" 23 | - "show_symbols , \" ' colon ; ! ? BackSpace" 24 | - "show_letters preferences space slash period Return" 25 | symbols: 26 | - "~ ` | · √ π τ ÷ × ¶" 27 | - "© ® £ € ¥ ^ ° * { }" 28 | - "show_numbers_from_symbols \\ / < > = [ ] BackSpace" 29 | - "show_letters preferences space slash period Return" 30 | 31 | buttons: 32 | Shift_L: 33 | action: 34 | locking: 35 | lock_view: "upper" 36 | unlock_view: "base" 37 | outline: "altline" 38 | icon: "key-shift" 39 | BackSpace: 40 | outline: "altline" 41 | icon: "edit-clear-symbolic" 42 | action: erase 43 | preferences: 44 | action: show_prefs 45 | outline: "special" 46 | icon: "keyboard-mode-symbolic" 47 | show_numbers: 48 | action: 49 | set_view: "numbers" 50 | outline: "wide" 51 | label: "123" 52 | show_numbers_from_symbols: 53 | action: 54 | set_view: "numbers" 55 | outline: "altline" 56 | label: "123" 57 | show_letters: 58 | action: 59 | set_view: "base" 60 | outline: "wide" 61 | label: "ABC" 62 | show_symbols: 63 | action: 64 | set_view: "symbols" 65 | outline: "altline" 66 | label: "*/=" 67 | period: 68 | outline: "special" 69 | text: "." 70 | slash: 71 | outline: "special" 72 | text: "/" 73 | space: 74 | outline: "spaceline" 75 | text: " " 76 | Return: 77 | outline: "wide" 78 | icon: "key-enter" 79 | keysym: "Return" 80 | colon: 81 | text: ":" 82 | -------------------------------------------------------------------------------- /data/keyboards/th.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 35.33, height: 52 } 4 | altline: { width: 52.67, height: 52 } 5 | wide: { width: 62, height: 52 } 6 | spaceline: { width: 142, height: 52 } 7 | special: { width: 44, height: 52 } 8 | 9 | views: 10 | base: 11 | - "ๅ / _ ภ ถ ุ ึ ค ต จ ข ช" 12 | - "ๆ ไ ำ พ ะ ั ี ร น ย บ ล" 13 | - "ฟ ห ก ด เ ้ ่ า ส ว ง ฃ" 14 | - "Shift_L ผ ป แ อ ิ ื ท ม ใ ฝ BackSpace" 15 | - "show_numbers preferences space period Return" 16 | upper: 17 | - "+ ๑ ๒ ๓ ๔ ู ฿ ๕ ๖ ๗ ๘ ๙" 18 | - "๐ \" ฎ ฑ ธ ํ ๊ ณ ฯ ญ ฐ ," 19 | - "ฤ ฆ ฏ โ ฌ ็ ๋ ษ ศ ซ . ฅ" 20 | - "Shift_L ( ) ฉ ฮ ฺ ์ ? ฒ ฬ ฦ BackSpace" 21 | - "show_numbers preferences space period Return" 22 | numbers: 23 | - "1 2 3 4 5 6 7 8 9 0" 24 | - "@ # $ % & - _ + ( )" 25 | - "show_symbols , \" ' colon ; ! ? BackSpace" 26 | - "show_letters preferences space period Return" 27 | symbols: 28 | - "~ ` | · √ π τ ÷ × ¶" 29 | - "© ® £ € ¥ ^ ° * { }" 30 | - "show_numbers_from_symbols \\ / < > = [ ] BackSpace" 31 | - "show_letters preferences space period Return" 32 | 33 | buttons: 34 | Shift_L: 35 | action: 36 | locking: 37 | lock_view: "upper" 38 | unlock_view: "base" 39 | outline: "altline" 40 | icon: "key-shift" 41 | BackSpace: 42 | outline: "altline" 43 | icon: "edit-clear-symbolic" 44 | action: erase 45 | preferences: 46 | action: show_prefs 47 | outline: "special" 48 | icon: "keyboard-mode-symbolic" 49 | show_numbers: 50 | action: 51 | set_view: "numbers" 52 | outline: "wide" 53 | label: "123" 54 | show_numbers_from_symbols: 55 | action: 56 | set_view: "numbers" 57 | outline: "altline" 58 | label: "123" 59 | show_letters: 60 | action: 61 | set_view: "base" 62 | outline: "wide" 63 | label: "กขค" 64 | show_symbols: 65 | action: 66 | set_view: "symbols" 67 | outline: "altline" 68 | label: "*/=" 69 | period: 70 | outline: "special" 71 | text: "." 72 | space: 73 | outline: "spaceline" 74 | text: " " 75 | Return: 76 | outline: "wide" 77 | icon: "key-enter" 78 | keysym: "Return" 79 | colon: 80 | text: ":" 81 | -------------------------------------------------------------------------------- /data/keyboards/email/us.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 35.33, height: 52 } 4 | altline: { width: 52.67, height: 52 } 5 | wide: { width: 62, height: 52 } 6 | spaceline: { width: 106.67, height: 52 } 7 | special: { width: 44, height: 52 } 8 | large: { width: 44, height: 52 } 9 | 10 | views: 11 | base: 12 | - "q w e r t y u i o p" 13 | - "a s d f g h j k l" 14 | - "Shift_L z x c v b n m BackSpace" 15 | - "show_numbers preferences space at period Return" 16 | upper: 17 | - "Q W E R T Y U I O P" 18 | - "A S D F G H J K L" 19 | - "Shift_L Z X C V B N M BackSpace" 20 | - "show_numbers preferences space at period Return" 21 | numbers: 22 | - "1 2 3 4 5 6 7 8 9 0" 23 | - "@ # $ % & - _ + ( )" 24 | - "show_symbols , \" ' colon ; ! ? BackSpace" 25 | - "show_letters preferences space at period Return" 26 | symbols: 27 | - "~ ` | · √ π τ ÷ × ¶" 28 | - "© ® £ € ¥ ^ ° * { }" 29 | - "show_numbers_from_symbols \\ / < > = [ ] BackSpace" 30 | - "show_letters preferences space at period Return" 31 | 32 | buttons: 33 | Shift_L: 34 | action: 35 | locking: 36 | lock_view: "upper" 37 | unlock_view: "base" 38 | outline: "altline" 39 | icon: "key-shift" 40 | BackSpace: 41 | outline: "altline" 42 | icon: "edit-clear-symbolic" 43 | action: erase 44 | at: 45 | outline: "large" 46 | text: "@" 47 | preferences: 48 | action: "show_prefs" 49 | outline: "special" 50 | icon: "keyboard-mode-symbolic" 51 | show_numbers: 52 | action: 53 | set_view: "numbers" 54 | outline: "wide" 55 | label: "123" 56 | show_numbers_from_symbols: 57 | action: 58 | set_view: "numbers" 59 | outline: "altline" 60 | label: "123" 61 | show_letters: 62 | action: 63 | set_view: "base" 64 | outline: "wide" 65 | label: "ABC" 66 | show_symbols: 67 | action: 68 | set_view: "symbols" 69 | outline: "altline" 70 | label: "*/=" 71 | period: 72 | outline: "large" 73 | text: "." 74 | space: 75 | outline: "spaceline" 76 | text: " " 77 | Return: 78 | outline: "wide" 79 | icon: "key-enter" 80 | keysym: "Return" 81 | colon: 82 | text: ":" 83 | -------------------------------------------------------------------------------- /data/keyboards/ir_wide.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 54, height: 42 } 4 | altline: { width: 81, height: 42 } 5 | wide: { width: 108, height: 42 } 6 | spaceline: { width: 216, height: 42 } 7 | special: { width: 54, height: 42 } 8 | 9 | views: 10 | base: 11 | - "ض ص ث ق ف غ ع ه خ ح ج چ \\" 12 | - "ش س ی ب ل ا ت ن م ک گ" 13 | - "Shift_L ظ ط ز ر ذ د پ و ، / BackSpace" 14 | - "show_numbers preferences space zwnj ؟ ! period Return" 15 | upper: 16 | - " ْ ٌ ٍ ً ُ ِ َ ّ ] [ @ # _" 17 | - "ؤ ئ ي إ أ آ ة » « : ؛" 18 | - "Shift_L ك ٓ ژ ٰ ‌ ٔ ء > < ؟ BackSpace" 19 | - "show_numbers preferences space ، ؟ ! period Return" 20 | numbers: 21 | - "۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۰ | =" 22 | - "… ٬ ٫ ﷼ ٪ ، * ) ( − _" 23 | - "show_symbols + - × ÷ = ^ % / BackSpace" 24 | - "show_letters preferences space ، ؟ ! period Return" 25 | symbols: 26 | - "& ` | · • % π τ ÷ × ¶" 27 | - "© ® £ € ¥ ^ ° * { }" 28 | - "show_numbers_from_symbols \\ / < > = [ ] BackSpace" 29 | - "show_letters preferences space ، ؟ ! period Return" 30 | 31 | buttons: 32 | Shift_L: 33 | action: 34 | locking: 35 | lock_view: "upper" 36 | unlock_view: "base" 37 | outline: "altline" 38 | icon: "key-shift" 39 | BackSpace: 40 | outline: "altline" 41 | icon: "edit-clear-symbolic" 42 | action: "erase" 43 | preferences: 44 | action: "show_prefs" 45 | outline: "special" 46 | icon: "keyboard-mode-symbolic" 47 | show_numbers: 48 | action: 49 | set_view: "numbers" 50 | outline: "wide" 51 | label: "۱۲۳" 52 | show_numbers_from_symbols: 53 | action: 54 | set_view: "numbers" 55 | outline: "altline" 56 | label: "۱۲۳" 57 | show_letters: 58 | action: 59 | set_view: "base" 60 | outline: "wide" 61 | label: "ا‌ب‌پ" 62 | show_symbols: 63 | action: 64 | set_view: "symbols" 65 | outline: "altline" 66 | label: "*/=" 67 | period: 68 | outline: "special" 69 | text: "." 70 | space: 71 | outline: "spaceline" 72 | text: " " 73 | Return: 74 | outline: "wide" 75 | icon: "key-enter" 76 | keysym: "Return" 77 | zwnj: 78 | icon: "zwnj" 79 | text: "‌" 80 | colon: 81 | text: ":" 82 | -------------------------------------------------------------------------------- /data/keyboards/epo.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 35.33, height: 52 } 4 | altline: { width: 52.67, height: 52 } 5 | wide: { width: 62, height: 52 } 6 | spaceline: { width: 99.67, height: 52 } 7 | special: { width: 35.33, height: 52 } 8 | 9 | views: 10 | base: 11 | - "q w e r t y u i o p" 12 | - "a s d f g h j k l" 13 | - "Shift_L z x c v b n m BackSpace" 14 | - "show_numbers show_eschars preferences space , . Return" 15 | upper: 16 | - "Q W E R T Y U I O P" 17 | - "A S D F G H J K L" 18 | - "Shift_L Z X C V B N M BackSpace" 19 | - "show_numbers show_eschars preferences space ! ? Return" 20 | numbers: 21 | - "1 2 3 4 5 6 7 8 9 0" 22 | - "@ # $ % & - _ + ( )" 23 | - "show_symbols , \" ' : ; ! ? BackSpace" 24 | - "show_letters preferences space . Return" 25 | symbols: 26 | - "~ ` | · √ π τ ÷ × ¶" 27 | - "© ® £ € ¥ ^ ° * { }" 28 | - "show_numbers_from_symbols \\ / < > = [ ] BackSpace" 29 | - "show_letters preferences space . Return" 30 | eschars: 31 | - "ĉ ĝ ĥ ĵ ŝ ŭ ?" 32 | - "Ĉ Ĝ Ĥ Ĵ Ŝ Ŭ !" 33 | - "show_numbers ' - 🐊 💚 🌐 . BackSpace" 34 | - "show_letters show_eschars preferences space „ “ Return" 35 | 36 | buttons: 37 | Shift_L: 38 | action: 39 | locking: 40 | lock_view: "upper" 41 | unlock_view: "base" 42 | outline: "altline" 43 | icon: "key-shift" 44 | BackSpace: 45 | outline: "altline" 46 | icon: "edit-clear-symbolic" 47 | action: "erase" 48 | preferences: 49 | action: "show_prefs" 50 | outline: "special" 51 | icon: "keyboard-mode-symbolic" 52 | show_numbers: 53 | action: 54 | set_view: "numbers" 55 | outline: "altline" 56 | label: "123" 57 | show_letters: 58 | action: 59 | set_view: "base" 60 | outline: "altline" 61 | label: "ABC" 62 | show_symbols: 63 | action: 64 | set_view: "symbols" 65 | outline: "altline" 66 | label: "*/=" 67 | show_eschars: 68 | action: 69 | locking: 70 | lock_view: "eschars" 71 | unlock_view: "base" 72 | outline: "altline" 73 | label: "ŭŜ" 74 | space: 75 | outline: "spaceline" 76 | label: " " 77 | text: " " 78 | Return: 79 | outline: "altline" 80 | icon: "key-enter" 81 | keysym: "Return" 82 | -------------------------------------------------------------------------------- /data/keyboards/de_wide.yaml: -------------------------------------------------------------------------------- 1 | # Maintained by: Mark Müller 2 | --- 3 | outlines: 4 | default: { width: 48, height: 42 } 5 | altline: { width: 81, height: 42 } 6 | wide: { width: 108, height: 42 } 7 | spaceline: { width: 216, height: 42 } 8 | special: { width: 48, height: 42 } 9 | 10 | views: 11 | base: 12 | - "q w e r t z u i o p ü" 13 | - "a s d f g h j k l ö ä" 14 | - "Shift_L y x c v b n m BackSpace" 15 | - "show_numbers preferences space , . Return" 16 | upper: 17 | - "Q W E R T Z U I O P Ü" 18 | - "A S D F G H J K L Ö Ä" 19 | - "Shift_L Y X C V B N M BackSpace" 20 | - "show_numbers preferences space ! ? Return" 21 | numbers: 22 | - "1 2 3 4 5 6 7 8 9 0" 23 | - "@ # % & - _ + ( ) ß" 24 | - "show_symbols ; \" ' : = < > BackSpace" 25 | - "show_letters preferences space , . Return" 26 | symbols: 27 | - "~ ` ´ · © ® ÷ × ¶" 28 | - "€ £ $ ¥ ^ ° * { } |" 29 | - "show_numbers \\ / § π τ [ ] BackSpace" 30 | - "show_letters preferences space , . Return" 31 | eschars: 32 | - "ä è é ö ü Ä È É Ö Ü" 33 | - "à â ê î ô À Â È Î Ô" 34 | - "show_numbers « » ç Ç æ œ ß BackSpace" 35 | - "show_letters preferences space „ “ Return" 36 | 37 | buttons: 38 | Shift_L: 39 | action: 40 | locking: 41 | lock_view: "upper" 42 | unlock_view: "base" 43 | outline: "altline" 44 | icon: "key-shift" 45 | BackSpace: 46 | outline: "altline" 47 | icon: "edit-clear-symbolic" 48 | action: "erase" 49 | preferences: 50 | action: "show_prefs" 51 | outline: "special" 52 | icon: "keyboard-mode-symbolic" 53 | show_numbers: 54 | action: 55 | set_view: "numbers" 56 | outline: "altline" 57 | label: "123" 58 | show_letters: 59 | action: 60 | set_view: "base" 61 | outline: "altline" 62 | label: "ABC" 63 | show_symbols: 64 | action: 65 | set_view: "symbols" 66 | outline: "altline" 67 | label: "*/=" 68 | show_eschars: 69 | action: 70 | locking: 71 | lock_view: "eschars" 72 | unlock_view: "base" 73 | outline: "altline" 74 | label: "Ää" 75 | space: 76 | outline: "spaceline" 77 | text: " " 78 | Return: 79 | outline: "altline" 80 | icon: "key-enter" 81 | keysym: "Return" 82 | -------------------------------------------------------------------------------- /data/keyboards/am+phonetic.yaml: -------------------------------------------------------------------------------- 1 | # Armenian layout created by Norayr Chilingarian 2 | # Yerevan 3 | # Oct 2021 4 | --- 5 | outlines: 6 | default: { width: 35.33, height: 52 } 7 | altline: { width: 52.67, height: 52 } 8 | wide: { width: 32, height: 32 } 9 | spaceline: { width: 142, height: 52 } 10 | special: { width: 44, height: 52 } 11 | 12 | views: 13 | base: 14 | - "՝ է թ փ ձ ջ ւ և ռ չ ճ ֊ ժ" 15 | - "ք ո ե ր տ ը ւ ի օ պ խ ծ շ" 16 | - "ա ս դ ֆ գ հ յ կ լ ․" 17 | - "Shift_L զ ղ ց վ բ ն մ ՛ BackSpace" 18 | - "show_numbers preferences space period Return" 19 | upper: 20 | - "՝ Է Թ Փ Ձ Ջ Ւ և Ռ Չ Ճ — Ժ" 21 | - "Ք Ո Ե Ր Տ Ը Ւ Ի Օ Պ Խ Ծ Շ" 22 | - "Ա Ս Դ Ֆ Գ Հ Յ Կ Լ ։" 23 | - "Shift_L Զ Ղ Ց Վ Բ Ն Մ ՞ BackSpace" 24 | - "show_numbers preferences space period Return" 25 | numbers: 26 | - "show_symbols , \" ' colon ; ! ? BackSpace" 27 | - "ﬓ ﬔ ﬕ ﬖ ﬗ ՟ և" 28 | - "1 2 3 4 5 6 7 8 9 0" 29 | - "show_letters preferences space period Return" 30 | symbols: 31 | - "show_numbers_from_symbols \\ % < > = [ ] BackSpace" 32 | - "* # $ / & - _ + ( )" 33 | - "© ® £ € ¥ ^ ° @ { }" 34 | - "~ ` | · √ π τ ÷ × ¶" 35 | - "show_letters preferences space period Return" 36 | 37 | buttons: 38 | Shift_L: 39 | action: 40 | locking: 41 | lock_view: "upper" 42 | unlock_view: "base" 43 | outline: "altline" 44 | icon: "key-shift" 45 | BackSpace: 46 | outline: "altline" 47 | icon: "edit-clear-symbolic" 48 | action: "erase" 49 | preferences: 50 | action: "show_prefs" 51 | outline: "special" 52 | icon: "keyboard-mode-symbolic" 53 | show_numbers: 54 | action: 55 | set_view: "numbers" 56 | outline: "wide" 57 | label: "123" 58 | show_numbers_from_symbols: 59 | action: 60 | set_view: "numbers" 61 | outline: "altline" 62 | label: "123" 63 | show_letters: 64 | action: 65 | set_view: "base" 66 | outline: "wide" 67 | label: "ԱԲԳ" 68 | show_symbols: 69 | action: 70 | set_view: "symbols" 71 | outline: "altline" 72 | label: "*/=" 73 | period: 74 | outline: "special" 75 | text: "." 76 | space: 77 | outline: "spaceline" 78 | text: " " 79 | Return: 80 | outline: "wide" 81 | icon: "key-enter" 82 | keysym: "Return" 83 | colon: 84 | text: ":" 85 | -------------------------------------------------------------------------------- /data/keyboards/am.yaml: -------------------------------------------------------------------------------- 1 | # Armenian layout created by Norayr Chilingarian 2 | # Yerevan 3 | # Oct 2021 4 | --- 5 | outlines: 6 | default: { width: 35.33, height: 52 } 7 | altline: { width: 52.67, height: 52 } 8 | wide: { width: 32, height: 32 } 9 | spaceline: { width: 142, height: 52 } 10 | special: { width: 44, height: 52 } 11 | 12 | views: 13 | base: 14 | - "՝ ֆ ձ ֊ , ։ ՞ ․ ՛ ) օ է ղ" 15 | - "ճ փ բ ս մ ո ւ կ ը թ ծ ց »" 16 | - "ջ վ գ ե ա ն ի տ հ պ ր" 17 | - "Shift_L ժ դ չ յ զ լ ք խ շ ռ BackSpace" 18 | - "show_numbers preferences space period Return" 19 | upper: 20 | - "՜ Ֆ Ձ — $ … ՟ և ՚ ( Օ Է Ղ" 21 | - "Ճ Փ Բ Ս Մ Ո Ւ Կ Ը Թ Ծ Ց «" 22 | - "Ջ Վ Գ Ե Ա Ն Ի Տ Հ Պ Պ Ր" 23 | - "Shift_L Ժ Դ Չ Յ Զ Լ Ք Խ Շ Ռ BackSpace" 24 | - "show_numbers preferences space period Return" 25 | numbers: 26 | - "show_symbols , \" ' colon ; ! ? BackSpace" 27 | - "ﬓ ﬔ ﬕ ﬖ ﬗ ՟ և" 28 | - "1 2 3 4 5 6 7 8 9 0" 29 | - "show_letters preferences space period Return" 30 | symbols: 31 | - "show_numbers_from_symbols \\ % < > = [ ] BackSpace" 32 | - "* # $ / & - _ + ( )" 33 | - "© ® £ € ¥ ^ ° @ { }" 34 | - "~ ` | · √ π τ ÷ × ¶" 35 | - "show_letters preferences space period Return" 36 | 37 | buttons: 38 | Shift_L: 39 | action: 40 | locking: 41 | lock_view: "upper" 42 | unlock_view: "base" 43 | outline: "altline" 44 | icon: "key-shift" 45 | BackSpace: 46 | outline: "altline" 47 | icon: "edit-clear-symbolic" 48 | action: "erase" 49 | preferences: 50 | action: "show_prefs" 51 | outline: "special" 52 | icon: "keyboard-mode-symbolic" 53 | show_numbers: 54 | action: 55 | set_view: "numbers" 56 | outline: "wide" 57 | label: "123" 58 | show_numbers_from_symbols: 59 | action: 60 | set_view: "numbers" 61 | outline: "altline" 62 | label: "123" 63 | show_letters: 64 | action: 65 | set_view: "base" 66 | outline: "wide" 67 | label: "ԱԲԳ" 68 | show_symbols: 69 | action: 70 | set_view: "symbols" 71 | outline: "altline" 72 | label: "*/=" 73 | period: 74 | outline: "special" 75 | text: "." 76 | space: 77 | outline: "spaceline" 78 | text: " " 79 | Return: 80 | outline: "wide" 81 | icon: "key-enter" 82 | keysym: "Return" 83 | colon: 84 | text: ":" 85 | -------------------------------------------------------------------------------- /data/keyboards/hu.yaml: -------------------------------------------------------------------------------- 1 | # Maintained by: soyer 2 | --- 3 | outlines: 4 | default: { width: 35.33, height: 52 } 5 | altline: { width: 52.67, height: 52 } 6 | wide: { width: 62, height: 52 } 7 | spaceline: { width: 99.67, height: 52 } 8 | special: { width: 35.33, height: 52 } 9 | 10 | views: 11 | base: 12 | - "q w e r t z u i o p" 13 | - "a s d f g h j k l" 14 | - "Shift_L y x c v b n m BackSpace" 15 | - "show_numbers show_eschars preferences space , . - Return" 16 | upper: 17 | - "Q W E R T Z U I O P" 18 | - "A S D F G H J K L" 19 | - "Shift_L Y X C V B N M BackSpace" 20 | - "show_numbers show_eschars preferences space ? : ! Return" 21 | numbers: 22 | - "1 2 3 4 5 6 7 8 9 0" 23 | - "@ # € % & - _ + ( )" 24 | - "show_symbols ; \" ' : = < > BackSpace" 25 | - "show_letters show_eschars preferences space , . - Return" 26 | symbols: 27 | - "~ ` ´ | · √ µ ÷ × ¶" 28 | - "© ® £ $ ¥ ^ ° * { }" 29 | - "show_numbers \\ / § π τ [ ] BackSpace" 30 | - "show_letters show_eschars preferences space , . - Return" 31 | eschars: 32 | - "ö ü ó Ö Ü Ó" 33 | - "í ő ú Í Ő Ú" 34 | - "show_numbers é á ű É Á Ű BackSpace" 35 | - "show_letters show_eschars preferences space „ “ Return" 36 | 37 | buttons: 38 | Shift_L: 39 | action: 40 | locking: 41 | lock_view: "upper" 42 | unlock_view: "base" 43 | outline: "altline" 44 | icon: "key-shift" 45 | BackSpace: 46 | outline: "altline" 47 | icon: "edit-clear-symbolic" 48 | action: "erase" 49 | preferences: 50 | action: "show_prefs" 51 | outline: "special" 52 | icon: "keyboard-mode-symbolic" 53 | show_numbers: 54 | action: 55 | set_view: "numbers" 56 | outline: "altline" 57 | label: "123" 58 | show_letters: 59 | action: 60 | set_view: "base" 61 | outline: "altline" 62 | label: "ABC" 63 | show_symbols: 64 | action: 65 | set_view: "symbols" 66 | outline: "altline" 67 | label: "*/=" 68 | show_eschars: 69 | action: 70 | locking: 71 | lock_view: "eschars" 72 | unlock_view: "base" 73 | outline: "altline" 74 | label: "éá" 75 | space: 76 | outline: "spaceline" 77 | label: " " 78 | text: " " 79 | Return: 80 | outline: "altline" 81 | icon: "key-enter" 82 | keysym: "Return" 83 | -------------------------------------------------------------------------------- /data/keyboards/hu_wide.yaml: -------------------------------------------------------------------------------- 1 | # Maintained by: soyer 2 | --- 3 | outlines: 4 | default: { width: 48, height: 42 } 5 | altline: { width: 81, height: 42 } 6 | wide: { width: 108, height: 42 } 7 | spaceline: { width: 216, height: 42 } 8 | special: { width: 48, height: 42 } 9 | 10 | views: 11 | base: 12 | - "q w e r t z u i o p ő ú" 13 | - "a s d f g h j k l é á ű" 14 | - "Shift_L í y x c v b n m BackSpace" 15 | - "show_numbers show_eschars preferences space , . - Return" 16 | upper: 17 | - "Q W E R T Z U I O P Ő Ú" 18 | - "A S D F G H J K L É Á Ű" 19 | - "Shift_L Í Y X C V B N M BackSpace" 20 | - "show_numbers show_eschars preferences space ? : ! Return" 21 | numbers: 22 | - "1 2 3 4 5 6 7 8 9 0" 23 | - "@ # € % & - _ + ( )" 24 | - "show_symbols ; \" ' : = < > BackSpace" 25 | - "show_letters show_eschars preferences space , . - Return" 26 | symbols: 27 | - "~ ` ´ | · √ µ ÷ × ¶" 28 | - "© ® £ $ ¥ ^ ° * { }" 29 | - "show_numbers \\ / § π τ [ ] BackSpace" 30 | - "show_letters show_eschars preferences space , . - Return" 31 | eschars: 32 | - "ö ü ó Ö Ü Ó" 33 | - "í ő ú Í Ő Ú" 34 | - "show_numbers é á ű É Á Ű BackSpace" 35 | - "show_letters show_eschars preferences space „ “ Return" 36 | 37 | buttons: 38 | Shift_L: 39 | action: 40 | locking: 41 | lock_view: "upper" 42 | unlock_view: "base" 43 | outline: "altline" 44 | icon: "key-shift" 45 | BackSpace: 46 | outline: "altline" 47 | icon: "edit-clear-symbolic" 48 | action: "erase" 49 | preferences: 50 | action: "show_prefs" 51 | outline: "special" 52 | icon: "keyboard-mode-symbolic" 53 | show_numbers: 54 | action: 55 | set_view: "numbers" 56 | outline: "altline" 57 | label: "123" 58 | show_letters: 59 | action: 60 | set_view: "base" 61 | outline: "altline" 62 | label: "ABC" 63 | show_symbols: 64 | action: 65 | set_view: "symbols" 66 | outline: "altline" 67 | label: "*/=" 68 | show_eschars: 69 | action: 70 | locking: 71 | lock_view: "eschars" 72 | unlock_view: "base" 73 | outline: "altline" 74 | label: "éá" 75 | space: 76 | outline: "spaceline" 77 | label: " " 78 | text: " " 79 | Return: 80 | outline: "altline" 81 | icon: "key-enter" 82 | keysym: "Return" 83 | -------------------------------------------------------------------------------- /data/keyboards/th_wide.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 75, height: 56 } 4 | altline: { width: 75, height: 56 } 5 | wide: { width: 135, height: 56 } 6 | spaceline: { width: 450, height: 56 } 7 | spacelinesymbol: { width: 300, height: 56 } 8 | special: { width: 90, height: 56 } 9 | 10 | views: 11 | base: 12 | - "ๅ / _ ภ ถ ุ ึ ค ต จ ข ช" 13 | - "ๆ ไ ำ พ ะ ั ี ร น ย บ ล" 14 | - "ฟ ห ก ด เ ้ ่ า ส ว ง ฃ" 15 | - "Shift_L ผ ป แ อ ิ ื ท ม ใ ฝ BackSpace" 16 | - "show_numbers preferences space period Return" 17 | upper: 18 | - "+ ๑ ๒ ๓ ๔ ู ฿ ๕ ๖ ๗ ๘ ๙" 19 | - "๐ \" ฎ ฑ ธ ํ ๊ ณ ฯ ญ ฐ ," 20 | - "ฤ ฆ ฏ โ ฌ ็ ๋ ษ ศ ซ . ฅ" 21 | - "Shift_L ( ) ฉ ฮ ฺ ์ ? ฒ ฬ ฦ BackSpace" 22 | - "show_numbers preferences space period Return" 23 | numbers: 24 | - "1 2 3 4 5 6 7 8 9 0" 25 | - "@ # $ % & - _ + ( )" 26 | - "show_symbols , \" ' colon ; ! ? BackSpace" 27 | - "show_letters preferences spacesymbol period Return" 28 | symbols: 29 | - "~ ` | · √ π τ ÷ × ¶" 30 | - "© ® £ € ¥ ^ ° * { }" 31 | - "show_numbers_from_symbols \\ / < > = [ ] BackSpace" 32 | - "show_letters preferences spacesymbol period Return" 33 | 34 | buttons: 35 | Shift_L: 36 | action: 37 | locking: 38 | lock_view: "upper" 39 | unlock_view: "base" 40 | outline: "altline" 41 | icon: "key-shift" 42 | BackSpace: 43 | outline: "altline" 44 | icon: "edit-clear-symbolic" 45 | action: erase 46 | preferences: 47 | action: show_prefs 48 | outline: "special" 49 | icon: "keyboard-mode-symbolic" 50 | show_numbers: 51 | action: 52 | set_view: "numbers" 53 | outline: "wide" 54 | label: "123" 55 | show_numbers_from_symbols: 56 | action: 57 | set_view: "numbers" 58 | outline: "altline" 59 | label: "123" 60 | show_letters: 61 | action: 62 | set_view: "base" 63 | outline: "wide" 64 | label: "กขค" 65 | show_symbols: 66 | action: 67 | set_view: "symbols" 68 | outline: "altline" 69 | label: "*/=" 70 | period: 71 | outline: "special" 72 | text: "." 73 | space: 74 | outline: "spaceline" 75 | text: " " 76 | spacesymbol: 77 | outline: "spacelinesymbol" 78 | text: " " 79 | Return: 80 | outline: "wide" 81 | icon: "key-enter" 82 | keysym: "Return" 83 | colon: 84 | text: ":" 85 | -------------------------------------------------------------------------------- /data/keyboards/de.yaml: -------------------------------------------------------------------------------- 1 | # Maintained by: Mark Müller 2 | --- 3 | outlines: 4 | default: { width: 35.33, height: 52 } 5 | altline: { width: 52.67, height: 52 } 6 | wide: { width: 62, height: 52 } 7 | spaceline: { width: 99.67, height: 52 } 8 | special: { width: 35.33, height: 52 } 9 | 10 | views: 11 | base: 12 | - "q w e r t z u i o p" 13 | - "a s d f g h j k l" 14 | - "Shift_L y x c v b n m BackSpace" 15 | - "show_numbers show_eschars preferences space , . Return" 16 | upper: 17 | - "Q W E R T Z U I O P" 18 | - "A S D F G H J K L" 19 | - "Shift_L Y X C V B N M BackSpace" 20 | - "show_numbers show_eschars preferences space ! ? Return" 21 | numbers: 22 | - "1 2 3 4 5 6 7 8 9 0" 23 | - "@ # € % & - _ + ( )" 24 | - "show_symbols ; \" ' : = < > BackSpace" 25 | - "show_letters show_eschars preferences space , . Return" 26 | symbols: 27 | - "~ ` ´ | · √ µ ÷ × ¶" 28 | - "© ® £ $ ¥ ^ ° * { }" 29 | - "show_numbers \\ / § π τ [ ] BackSpace" 30 | - "show_letters show_eschars preferences space , . Return" 31 | eschars: 32 | - "ä è é ö ü Ä È É Ö Ü" 33 | - "à â ê î ô À Â È Î Ô" 34 | - "show_numbers « » ç Ç æ œ ß BackSpace" 35 | - "show_letters show_eschars preferences space „ “ Return" 36 | 37 | buttons: 38 | Shift_L: 39 | action: 40 | locking: 41 | lock_view: "upper" 42 | unlock_view: "base" 43 | outline: "altline" 44 | icon: "key-shift" 45 | BackSpace: 46 | outline: "altline" 47 | icon: "edit-clear-symbolic" 48 | action: "erase" 49 | preferences: 50 | action: "show_prefs" 51 | outline: "special" 52 | icon: "keyboard-mode-symbolic" 53 | show_numbers: 54 | action: 55 | set_view: "numbers" 56 | outline: "altline" 57 | label: "123" 58 | show_letters: 59 | action: 60 | set_view: "base" 61 | outline: "altline" 62 | label: "ABC" 63 | show_symbols: 64 | action: 65 | set_view: "symbols" 66 | outline: "altline" 67 | label: "*/=" 68 | show_eschars: 69 | action: 70 | locking: 71 | lock_view: "eschars" 72 | unlock_view: "base" 73 | outline: "altline" 74 | label: "Ää" 75 | space: 76 | outline: "spaceline" 77 | label: " " 78 | text: " " 79 | Return: 80 | outline: "altline" 81 | icon: "key-enter" 82 | keysym: "Return" 83 | -------------------------------------------------------------------------------- /src/action.rs: -------------------------------------------------------------------------------- 1 | /*! The symbol object, defining actions that the key can do when activated */ 2 | 3 | use std::ffi::CString; 4 | 5 | /// Name of the keysym 6 | #[derive(Debug, Clone, PartialEq)] 7 | pub struct KeySym(pub String); 8 | 9 | /// Use to switch views 10 | type View = String; 11 | 12 | /// Use to send modified keypresses 13 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] 14 | pub enum Modifier { 15 | /// Control and Alt are the only modifiers 16 | /// which doesn't interfere with levels, 17 | /// so it's simple to implement as levels are deprecated in squeekboard. 18 | Control, 19 | Alt, 20 | Mod4, 21 | } 22 | 23 | /// Action to perform on the keypress and, in reverse, on keyrelease 24 | #[derive(Debug, Clone, PartialEq)] 25 | pub enum Action { 26 | /// Switch to this view 27 | SetView(View), 28 | /// Switch to a view and latch 29 | LockView { 30 | lock: View, 31 | /// When unlocked by pressing it or emitting a key 32 | unlock: View, 33 | /// Whether key has a latched state 34 | /// that pops when another key is pressed. 35 | latches: bool, 36 | /// Should take on *locked* appearance whenever latch comes back to those views. 37 | looks_locked_from: Vec, 38 | }, 39 | /// Hold this modifier for as long as the button is pressed 40 | ApplyModifier(Modifier), 41 | /// Submit some text 42 | Submit { 43 | /// Text to submit with input-method. 44 | /// If None, then keys are to be submitted instead. 45 | text: Option, 46 | /// The key events this symbol submits when submitting text is not possible 47 | keys: Vec, 48 | }, 49 | /// Erase a position behind the cursor 50 | Erase, 51 | ShowPreferences, 52 | } 53 | 54 | impl Action { 55 | pub fn is_locked(&self, view_name: &str) -> bool { 56 | match self { 57 | Action::LockView { lock, unlock: _, latches: _, looks_locked_from: _ } => lock == view_name, 58 | _ => false, 59 | } 60 | } 61 | pub fn has_locked_appearance_from(&self, locked_view_name: &str) -> bool { 62 | match self { 63 | Action::LockView { lock: _, unlock: _, latches: _, looks_locked_from } => { 64 | looks_locked_from.iter() 65 | .find(|view| locked_view_name == view.as_str()) 66 | .is_some() 67 | }, 68 | _ => false, 69 | } 70 | } 71 | pub fn is_active(&self, view_name: &str) -> bool { 72 | match self { 73 | Action::SetView(view) => view == view_name, 74 | Action::LockView { lock, unlock: _, latches: _, looks_locked_from: _ } => lock == view_name, 75 | _ => false, 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /data/keyboards/ch+fr.yaml: -------------------------------------------------------------------------------- 1 | # Maintained by: Jordi Bossy . No Copyright, enjoy! 2 | --- 3 | outlines: 4 | default: { width: 35.33, height: 52 } 5 | altline: { width: 48, height: 52 } 6 | wide: { width: 59, height: 52 } 7 | spaceline: { width: 70, height: 52 } 8 | special: { width: 28, height: 52 } 9 | 10 | views: 11 | base: 12 | - "q w e r t z u i o p" 13 | - "a s d f g h j k l ?" 14 | - "Shift_L y x c v b n m BackSpace" 15 | - "show_numbers show_eschars preferences ' space , . Return" 16 | upper: 17 | - "Q W E R T Z U I O P" 18 | - "A S D F G H J K L !" 19 | - "Shift_L Y X C V B N M BackSpace" 20 | - "show_numbers show_eschars preferences \" space , . Return" 21 | numbers: 22 | - "1 2 3 4 5 6 7 8 9 0" 23 | - "@ * + - = ( ) ~ < >" 24 | - "show_symbols # & / \\ √ ; : BackSpace" 25 | - "show_letters show_eschars preferences _ space , . Return" 26 | symbols: 27 | - "€ $ £ ¥ % | § µ [ ]" 28 | - "© ® § ` ^ { } · ¡ ¿" 29 | - "show_numbers « » ÷ × “ ” „ BackSpace" 30 | - "show_letters show_eschars preferences - space , . Return" 31 | eschars: 32 | - "à â ç é è ê î ô ù û" 33 | - "À Â Ç É È Ê Î Ô Ù Û" 34 | - "show_numbers æ œ ä ë ï ö ü BackSpace" 35 | - "show_letters show_eschars preferences ñ Ñ space ° ß Return" 36 | 37 | buttons: 38 | Shift_L: 39 | action: 40 | locking: 41 | lock_view: "upper" 42 | unlock_view: "base" 43 | outline: "altline" 44 | icon: "key-shift" 45 | BackSpace: 46 | outline: "altline" 47 | icon: "edit-clear-symbolic" 48 | action: erase 49 | preferences: 50 | action: "show_prefs" 51 | outline: "special" 52 | icon: "keyboard-mode-symbolic" 53 | show_numbers: 54 | action: 55 | set_view: "numbers" 56 | outline: "altline" 57 | label: "123" 58 | show_letters: 59 | action: 60 | set_view: "base" 61 | outline: "altline" 62 | label: "ABC" 63 | show_symbols: 64 | action: 65 | set_view: "symbols" 66 | outline: "altline" 67 | label: "*/=" 68 | show_eschars: 69 | action: 70 | locking: 71 | lock_view: "eschars" 72 | unlock_view: "base" 73 | outline: "altline" 74 | label: "Ââ" 75 | space: 76 | outline: "spaceline" 77 | label: " " 78 | text: " " 79 | Return: 80 | outline: "wide" 81 | icon: "key-enter" 82 | keysym: "Return" 83 | "\"": 84 | keysym: "quotedbl" 85 | -------------------------------------------------------------------------------- /data/keyboards/es.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 35.33, height: 52 } 4 | altline: { width: 52.67, height: 52 } 5 | wide: { width: 62, height: 52 } 6 | spaceline: { width: 99.67, height: 52 } 7 | special: { width: 44, height: 52 } 8 | 9 | views: 10 | base: 11 | - "q w e r t y u i o p" 12 | - "a s d f g h j k l ñ" 13 | - "Shift_L z x c v b n m BackSpace" 14 | - "show_numbers show_eschars preferences space ? period Return" 15 | upper: 16 | - "Q W E R T Y U I O P" 17 | - "A S D F G H J K L Ñ" 18 | - "Shift_L Z X C V B N M BackSpace" 19 | - "show_numbers show_eschars preferences space ¿ period Return" 20 | numbers: 21 | - "1 2 3 4 5 6 7 8 9 0" 22 | - "@ # € % & - _ + ( )" 23 | - "show_symbols , \" ' colon ; ! = BackSpace" 24 | - "show_letters show_eschars preferences space ? period Return" 25 | symbols: 26 | - "~ ` | · √ π τ ÷ × ¶" 27 | - "© ® £ $ ¥ ^ ° * { }" 28 | - "show_numbers \\ / < > = [ ] BackSpace" 29 | - "show_letters show_eschars preferences space ? period Return" 30 | eschars: 31 | - "á é í ó ú Á É Í Ó Ú" 32 | - "à è ì ò ù À È Ì Ò Ù" 33 | - "show_numbers ü ç ï Ü Ç Ï ¡ BackSpace" 34 | - "show_letters show_eschars preferences space « » Return" 35 | 36 | buttons: 37 | Shift_L: 38 | action: 39 | locking: 40 | lock_view: "upper" 41 | unlock_view: "base" 42 | outline: "altline" 43 | icon: "key-shift" 44 | BackSpace: 45 | outline: "altline" 46 | icon: "edit-clear-symbolic" 47 | action: "erase" 48 | preferences: 49 | action: "show_prefs" 50 | outline: "default" 51 | icon: "keyboard-mode-symbolic" 52 | show_numbers: 53 | action: 54 | set_view: "numbers" 55 | outline: "altline" 56 | label: "123" 57 | show_letters: 58 | action: 59 | set_view: "base" 60 | outline: "altline" 61 | label: "ABC" 62 | show_symbols: 63 | action: 64 | set_view: "symbols" 65 | outline: "altline" 66 | label: "*/=" 67 | show_eschars: 68 | action: 69 | locking: 70 | lock_view: "eschars" 71 | unlock_view: "base" 72 | outline: "altline" 73 | label: "áÁ" 74 | 75 | period: 76 | outline: "default" 77 | text: "." 78 | space: 79 | outline: "spaceline" 80 | text: " " 81 | Return: 82 | outline: "altline" 83 | icon: "key-enter" 84 | keysym: "Return" 85 | colon: 86 | text: ":" 87 | 88 | -------------------------------------------------------------------------------- /data/keyboards/es+cat.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 35.33, height: 52 } 4 | altline: { width: 52.67, height: 52 } 5 | wide: { width: 62, height: 52 } 6 | spaceline: { width: 99.67, height: 52 } 7 | special: { width: 44, height: 52 } 8 | 9 | views: 10 | base: 11 | - "q w e r t y u i o p" 12 | - "a s d f g h j k l ç" 13 | - "Shift_L z x c v b n m BackSpace" 14 | - "show_numbers show_eschars preferences space ? period Return" 15 | upper: 16 | - "Q W E R T Y U I O P" 17 | - "A S D F G H J K L Ç" 18 | - "Shift_L Z X C V B N M BackSpace" 19 | - "show_numbers show_eschars preferences space ¿ period Return" 20 | numbers: 21 | - "1 2 3 4 5 6 7 8 9 0" 22 | - "@ # € % & - _ + ( )" 23 | - "show_symbols , \" ' colon ; ! = BackSpace" 24 | - "show_letters show_eschars preferences space ? period Return" 25 | symbols: 26 | - "~ ` | · √ π τ ÷ × ¶" 27 | - "© ® £ $ ¥ ^ ° * { }" 28 | - "show_numbers \\ / < > = [ ] BackSpace" 29 | - "show_letters show_eschars preferences space ? period Return" 30 | eschars: 31 | - "á é í ó ú Á É Í Ó Ú" 32 | - "à è ì ò ù À È Ì Ò Ù" 33 | - "show_numbers ü ç ï Ü Ç Ï ¡ BackSpace" 34 | - "show_letters show_eschars preferences space « » Return" 35 | 36 | buttons: 37 | Shift_L: 38 | action: 39 | locking: 40 | lock_view: "upper" 41 | unlock_view: "base" 42 | outline: "altline" 43 | icon: "key-shift" 44 | BackSpace: 45 | outline: "altline" 46 | icon: "edit-clear-symbolic" 47 | action: "erase" 48 | preferences: 49 | action: "show_prefs" 50 | outline: "default" 51 | icon: "keyboard-mode-symbolic" 52 | show_numbers: 53 | action: 54 | set_view: "numbers" 55 | outline: "altline" 56 | label: "123" 57 | show_letters: 58 | action: 59 | set_view: "base" 60 | outline: "altline" 61 | label: "ABC" 62 | show_symbols: 63 | action: 64 | set_view: "symbols" 65 | outline: "altline" 66 | label: "*/=" 67 | show_eschars: 68 | action: 69 | locking: 70 | lock_view: "eschars" 71 | unlock_view: "base" 72 | outline: "altline" 73 | label: "àÀ" 74 | 75 | period: 76 | outline: "default" 77 | text: "." 78 | space: 79 | outline: "spaceline" 80 | text: " " 81 | Return: 82 | outline: "altline" 83 | icon: "key-enter" 84 | keysym: "Return" 85 | colon: 86 | text: ":" 87 | 88 | -------------------------------------------------------------------------------- /data/keyboards/it.yaml: -------------------------------------------------------------------------------- 1 | # Italian layout created by Antonio Pandolfo 2 | # 03 october 2019 3 | --- 4 | outlines: 5 | default: { width: 35.33, height: 52 } 6 | altline: { width: 52.67, height: 52 } 7 | wide: { width: 62, height: 52 } 8 | spaceline: { width: 99.67, height: 52 } 9 | special: { width: 44, height: 52 } 10 | 11 | views: 12 | base: 13 | - "q w e r t y u i o p" 14 | - "a s d f g h j k l" 15 | - "Shift_L z x c v b n m BackSpace" 16 | - "show_numbers show_eschars preferences space , . Return" 17 | upper: 18 | - "Q W E R T Y U I O P" 19 | - "A S D F G H J K L" 20 | - "Shift_L Z X C V B N M BackSpace" 21 | - "show_numbers show_eschars preferences space ? . Return" 22 | numbers: 23 | - "1 2 3 4 5 6 7 8 9 0" 24 | - "@ # € % & - _ + ( )" 25 | - "show_symbols , \" ' : ; ! ? BackSpace" 26 | - "show_letters show_eschars preferences space ? . Return" 27 | symbols: 28 | - "~ ` | · √ π τ ÷ × ¶" 29 | - "© ® £ $ ¥ ^ ° * { }" 30 | - "show_numbers \\ / < > = [ ] BackSpace" 31 | - "show_letters show_eschars preferences space ? . Return" 32 | eschars: 33 | - "è é È É ù ú Ù Ú ò ó" 34 | - "à á À Á ì í Ì Í Ò Ó" 35 | - "show_numbers “ ” « » ≈ ≠ ‽ BackSpace" 36 | - "show_letters show_eschars preferences space , . Return" 37 | 38 | buttons: 39 | Shift_L: 40 | action: 41 | locking: 42 | lock_view: "upper" 43 | unlock_view: "base" 44 | outline: "altline" 45 | icon: "key-shift" 46 | BackSpace: 47 | outline: "altline" 48 | icon: "edit-clear-symbolic" 49 | action: "erase" 50 | preferences: 51 | action: "show_prefs" 52 | outline: "default" 53 | icon: "keyboard-mode-symbolic" 54 | show_numbers: 55 | action: 56 | set_view: "numbers" 57 | outline: "altline" 58 | label: "123" 59 | show_numbers_from_symbols: 60 | action: 61 | set_view: "numbers" 62 | outline: "altline" 63 | label: "123" 64 | show_letters: 65 | action: 66 | set_view: "base" 67 | outline: "altline" 68 | label: "ABC" 69 | show_symbols: 70 | action: 71 | set_view: "symbols" 72 | outline: "altline" 73 | label: "*/=" 74 | show_eschars: 75 | action: 76 | set_view: "eschars" 77 | outline: "altline" 78 | label: "àè" 79 | space: 80 | outline: "spaceline" 81 | label: " " 82 | text: " " 83 | Return: 84 | outline: "altline" 85 | icon: "key-enter" 86 | keysym: "Return" 87 | 88 | -------------------------------------------------------------------------------- /data/keyboards/ru.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 32, height: 52 } 4 | altline: { width: 32, height: 52 } 5 | wide: { width: 57, height: 52 } 6 | narrow: { width: 26, height: 52 } 7 | spaceline: { width: 107, height: 52 } 8 | fill: { width: 159, height: 52 } 9 | special: { width: 42, height: 52 } 10 | 11 | views: 12 | base: 13 | - "й ц у к е н г ш щ з х" 14 | - "ф ы в а п р о л д ж э" 15 | - "Shift_L я ч с м и т ь б ю BackSpace" 16 | - "show_numbers preferences ё space ъ period Return" 17 | upper: 18 | - "Й Ц У К Е Н Г Ш Щ З Х" 19 | - "Ф Ы В А П Р О Л Д Ж Э" 20 | - "Shift_L Я Ч С М И Т Ь Б Ю BackSpace" 21 | - "show_numbers preferences Ё space Ъ comma Return" 22 | numbers: 23 | - "1 2 3 4 5 6 7 8 9 0" 24 | - "@ # $ % & - _ + ( )" 25 | - "show_symbols , \" ' colon ; ! ? BackSpace" 26 | - "show_letters preferences space_fill period Return" 27 | symbols: 28 | - "~ ` | · √ π τ ÷ × ¶" 29 | - "© ® £ € ¥ ^ ° * { }" 30 | - "show_numbers_from_symbols \\ / < > = [ ] BackSpace" 31 | - "show_letters preferences space_fill period Return" 32 | 33 | buttons: 34 | Shift_L: 35 | action: 36 | locking: 37 | lock_view: "upper" 38 | unlock_view: "base" 39 | outline: "altline" 40 | icon: "key-shift" 41 | BackSpace: 42 | outline: "altline" 43 | icon: "edit-clear-symbolic" 44 | action: erase 45 | preferences: 46 | action: show_prefs 47 | outline: "special" 48 | icon: "keyboard-mode-symbolic" 49 | show_numbers: 50 | action: 51 | set_view: "numbers" 52 | outline: "wide" 53 | label: "123" 54 | show_numbers_from_symbols: 55 | action: 56 | set_view: "numbers" 57 | outline: "wide" 58 | label: "123" 59 | show_letters: 60 | action: 61 | set_view: "base" 62 | outline: "wide" 63 | label: "АБВ" 64 | show_symbols: 65 | action: 66 | set_view: "symbols" 67 | outline: "wide" 68 | label: "*/=" 69 | period: 70 | outline: "special" 71 | text: "." 72 | comma: 73 | outline: "special" 74 | text: "," 75 | space: 76 | outline: "spaceline" 77 | text: " " 78 | space_fill: 79 | outline: "fill" 80 | text: " " 81 | Return: 82 | outline: "wide" 83 | icon: "key-enter" 84 | keysym: "Return" 85 | colon: 86 | text: ":" 87 | ё: 88 | outline: "narrow" 89 | Ё: 90 | outline: "narrow" 91 | ъ: 92 | outline: "narrow" 93 | Ъ: 94 | outline: "narrow" 95 | -------------------------------------------------------------------------------- /data/keyboards/ua.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 32, height: 52 } 4 | altline: { width: 32, height: 52 } 5 | wide: { width: 57, height: 52 } 6 | narrow: { width: 26, height: 52 } 7 | spaceline: { width: 107, height: 52 } 8 | fill: { width: 159, height: 52 } 9 | special: { width: 42, height: 52 } 10 | 11 | views: 12 | base: 13 | - "й ц у к е н г ш щ з х" 14 | - "ф і в а п р о л д ж є" 15 | - "Shift_L я ч с м и т ь б ю BackSpace" 16 | - "show_numbers preferences ґ space ї period Return" 17 | upper: 18 | - "Й Ц У К Е Н Г Ш Щ З Х" 19 | - "Ф І В А П Р О Л Д Ж Є" 20 | - "Shift_L Я Ч С М И Т Ь Б Ю BackSpace" 21 | - "show_numbers preferences Ґ space Ї comma Return" 22 | numbers: 23 | - "1 2 3 4 5 6 7 8 9 0" 24 | - "@ # $ % & - _ + ( )" 25 | - "show_symbols , \" ' colon ; ! ? BackSpace" 26 | - "show_letters preferences space_fill period Return" 27 | symbols: 28 | - "~ ` | · √ π τ ÷ × ¶" 29 | - "© ® £ € ¥ ^ ° * { }" 30 | - "show_numbers_from_symbols \\ / < > = [ ] BackSpace" 31 | - "show_letters preferences space_fill period Return" 32 | 33 | buttons: 34 | Shift_L: 35 | action: 36 | locking: 37 | lock_view: "upper" 38 | unlock_view: "base" 39 | outline: "altline" 40 | icon: "key-shift" 41 | BackSpace: 42 | outline: "altline" 43 | icon: "edit-clear-symbolic" 44 | action: erase 45 | preferences: 46 | action: show_prefs 47 | outline: "special" 48 | icon: "keyboard-mode-symbolic" 49 | show_numbers: 50 | action: 51 | set_view: "numbers" 52 | outline: "wide" 53 | label: "123" 54 | show_numbers_from_symbols: 55 | action: 56 | set_view: "numbers" 57 | outline: "wide" 58 | label: "123" 59 | show_letters: 60 | action: 61 | set_view: "base" 62 | outline: "wide" 63 | label: "АБВ" 64 | show_symbols: 65 | action: 66 | set_view: "symbols" 67 | outline: "wide" 68 | label: "*/=" 69 | period: 70 | outline: "special" 71 | text: "." 72 | comma: 73 | outline: "special" 74 | text: "," 75 | space: 76 | outline: "spaceline" 77 | text: " " 78 | space_fill: 79 | outline: "fill" 80 | text: " " 81 | Return: 82 | outline: "wide" 83 | icon: "key-enter" 84 | keysym: "Return" 85 | colon: 86 | text: ":" 87 | ґ: 88 | outline: "narrow" 89 | Ґ: 90 | outline: "narrow" 91 | ї: 92 | outline: "narrow" 93 | Ї: 94 | outline: "narrow" 95 | -------------------------------------------------------------------------------- /src/imservice.c: -------------------------------------------------------------------------------- 1 | #include "input-method-unstable-v2-client-protocol.h" 2 | #include "virtual-keyboard-unstable-v1-client-protocol.h" 3 | 4 | #include "submission.h" 5 | 6 | struct imservice; 7 | 8 | void imservice_handle_input_method_activate(void *data, struct zwp_input_method_v2 *input_method); 9 | void imservice_handle_input_method_deactivate(void *data, struct zwp_input_method_v2 *input_method); 10 | void imservice_handle_surrounding_text(void *data, struct zwp_input_method_v2 *input_method, 11 | const char *text, uint32_t cursor, uint32_t anchor); 12 | void imservice_handle_done(void *data, struct zwp_input_method_v2 *input_method); 13 | void imservice_handle_content_type(void *data, struct zwp_input_method_v2 *input_method, uint32_t hint, uint32_t purpose); 14 | void imservice_handle_text_change_cause(void *data, struct zwp_input_method_v2 *input_method, uint32_t cause); 15 | void imservice_handle_unavailable(void *data, struct zwp_input_method_v2 *input_method); 16 | 17 | static const struct zwp_input_method_v2_listener input_method_listener = { 18 | .activate = imservice_handle_input_method_activate, 19 | .deactivate = imservice_handle_input_method_deactivate, 20 | .surrounding_text = imservice_handle_surrounding_text, 21 | .text_change_cause = imservice_handle_text_change_cause, 22 | .content_type = imservice_handle_content_type, 23 | .done = imservice_handle_done, 24 | .unavailable = imservice_handle_unavailable, 25 | }; 26 | 27 | /// Un-inlined 28 | struct zwp_input_method_v2 *imservice_manager_get_input_method(struct zwp_input_method_manager_v2 *manager, 29 | struct wl_seat *seat) { 30 | return zwp_input_method_manager_v2_get_input_method(manager, seat); 31 | } 32 | 33 | /// Un-inlined to let Rust link to it 34 | void imservice_connect_listeners(struct zwp_input_method_v2 *im, struct imservice* imservice) { 35 | zwp_input_method_v2_add_listener(im, &input_method_listener, imservice); 36 | } 37 | 38 | void 39 | eek_input_method_commit_string(struct zwp_input_method_v2 *zwp_input_method_v2, const char *text) 40 | { 41 | zwp_input_method_v2_commit_string(zwp_input_method_v2, text); 42 | } 43 | 44 | void 45 | eek_input_method_delete_surrounding_text(struct zwp_input_method_v2 *zwp_input_method_v2, uint32_t before_length, uint32_t after_length) { 46 | zwp_input_method_v2_delete_surrounding_text(zwp_input_method_v2, before_length, after_length); 47 | }; 48 | 49 | void 50 | eek_input_method_commit(struct zwp_input_method_v2 *zwp_input_method_v2, uint32_t serial) 51 | { 52 | zwp_input_method_v2_commit(zwp_input_method_v2, serial); 53 | } 54 | 55 | /// Declared explicitly because _destroy is inline, 56 | /// making it unavailable in Rust 57 | void imservice_destroy_im(struct zwp_input_method_v2 *im) { 58 | zwp_input_method_v2_destroy(im); 59 | } 60 | -------------------------------------------------------------------------------- /data/keyboards/dk.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | outlines: 3 | default: { width: 32, height: 52 } 4 | altline: { width: 48.39024, height: 52 } 5 | wide: { width: 62, height: 52 } 6 | spaceline: { width: 150.5853, height: 52 } 7 | 8 | views: 9 | base: 10 | - "q w e r t y u i o p å" 11 | - "a s d f g h j k l ø æ" 12 | - "Shift_L z x c v b n m BackSpace" 13 | - "show_numbers preferences space . Return" 14 | upper: 15 | - "Q W E R T Y U I O P Å" 16 | - "A S D F G H J K L Ø Æ" 17 | - "Shift_L Z X C V B N M BackSpace" 18 | - "show_numbers preferences space . Return" 19 | numbers: 20 | - "1 2 3 4 5 6 7 8 9 0" 21 | - "@ # $ % & - _ + ( )" 22 | - "show_symbols , \" ' : ; ! ? BackSpace" 23 | - "show_letters preferences space . Return" 24 | symbols: 25 | - "~ ` | U00B7 squareroot Greek_pi Greek_tau division multiply paragraph" 26 | - "copyright U00AE U00A3 EuroSign U00A5 asciicircum degree * { }" 27 | - "show_numbers \\ / < > = [ ] BackSpace" 28 | - "show_letters preferences space . Return" 29 | 30 | buttons: 31 | Shift_L: 32 | action: 33 | locking: 34 | lock_view: "upper" 35 | unlock_view: "base" 36 | outline: "altline" 37 | icon: "key-shift" 38 | BackSpace: 39 | outline: "altline" 40 | icon: "edit-clear-symbolic" 41 | action: erase 42 | preferences: 43 | action: "show_prefs" 44 | outline: "altline" 45 | icon: "keyboard-mode-symbolic" 46 | show_numbers: 47 | action: 48 | set_view: "numbers" 49 | outline: "altline" 50 | label: "123" 51 | show_letters: 52 | action: 53 | set_view: "base" 54 | outline: "altline" 55 | label: "ABC" 56 | show_symbols: 57 | action: 58 | set_view: "symbols" 59 | outline: "altline" 60 | label: "*/=" 61 | ".": 62 | outline: altline 63 | space: 64 | outline: spaceline 65 | text: " " 66 | Return: 67 | outline: "wide" 68 | icon: "key-enter" 69 | keysym: "Return" 70 | U00B7: 71 | text: "·" 72 | squareroot: 73 | text: "√" 74 | Greek_pi: 75 | text: "π" 76 | division: 77 | text: "÷" 78 | multiply: 79 | text: "×" 80 | paragraph: 81 | text: "¶" 82 | Greek_tau: 83 | text: "τ" 84 | copyright: 85 | text: "©" 86 | U00AE: 87 | text: "®" 88 | U00A3: 89 | text: "£" 90 | EuroSign: 91 | text: "€" 92 | U00A5: 93 | text: "¥" 94 | asciicircum: 95 | text: "^" 96 | degree: 97 | text: "°" 98 | --------------------------------------------------------------------------------