Merge remote-tracking branch 'upstream/master' into text_input_enable
This commit is contained in:
@ -45,6 +45,7 @@ build_deb:
|
|||||||
paths:
|
paths:
|
||||||
- "*.deb"
|
- "*.deb"
|
||||||
script:
|
script:
|
||||||
|
- rm -f ../*.deb
|
||||||
- apt-get -y build-dep .
|
- apt-get -y build-dep .
|
||||||
- apt-get -y install devscripts
|
- apt-get -y install devscripts
|
||||||
- debuild -i -us -uc -b
|
- debuild -i -us -uc -b
|
||||||
@ -59,6 +60,7 @@ build_deb:arm64:
|
|||||||
paths:
|
paths:
|
||||||
- "*.deb"
|
- "*.deb"
|
||||||
script:
|
script:
|
||||||
|
- rm -f ../*.deb
|
||||||
- apt-get -y build-dep .
|
- apt-get -y build-dep .
|
||||||
- apt-get -y install devscripts
|
- apt-get -y install devscripts
|
||||||
- debuild -i -us -uc -b
|
- debuild -i -us -uc -b
|
||||||
|
|||||||
136
Cargo.lock
generated
136
Cargo.lock
generated
@ -5,7 +5,7 @@ name = "aho-corasick"
|
|||||||
version = "0.7.6"
|
version = "0.7.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -23,16 +23,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "atty"
|
name = "atty"
|
||||||
version = "0.2.13"
|
version = "0.2.14"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -50,7 +51,7 @@ dependencies = [
|
|||||||
"glib 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -61,14 +62,14 @@ dependencies = [
|
|||||||
"glib 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.0.45"
|
version = "1.0.50"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -77,7 +78,7 @@ version = "2.32.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
|
"atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -110,7 +111,7 @@ dependencies = [
|
|||||||
"glib 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pango 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pango 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -125,7 +126,7 @@ dependencies = [
|
|||||||
"glib 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -136,8 +137,8 @@ dependencies = [
|
|||||||
"gio-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gio-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -150,9 +151,9 @@ dependencies = [
|
|||||||
"gio-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gio-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pango-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pango-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -167,7 +168,7 @@ dependencies = [
|
|||||||
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -177,8 +178,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -190,7 +191,7 @@ dependencies = [
|
|||||||
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -198,8 +199,8 @@ name = "glib-sys"
|
|||||||
version = "0.7.0"
|
version = "0.7.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -208,8 +209,8 @@ version = "0.7.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -220,7 +221,7 @@ dependencies = [
|
|||||||
"bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"cairo-rs 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"cairo-rs 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"cairo-sys-rs 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"cairo-sys-rs 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)",
|
"cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gdk 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gdk 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gdk-pixbuf 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gdk-pixbuf 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gdk-pixbuf-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gdk-pixbuf-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -232,7 +233,7 @@ dependencies = [
|
|||||||
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gtk-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gtk-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pango 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pango 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -248,9 +249,17 @@ dependencies = [
|
|||||||
"gio-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gio-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pango-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pango-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hermit-abi"
|
||||||
|
version = "0.1.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -260,7 +269,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.62"
|
version = "0.2.66"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -275,7 +284,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memchr"
|
name = "memchr"
|
||||||
version = "2.2.1"
|
version = "2.3.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -283,7 +292,7 @@ name = "memmap"
|
|||||||
version = "0.7.0"
|
version = "0.7.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -297,7 +306,7 @@ dependencies = [
|
|||||||
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pango-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pango-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -308,18 +317,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pkg-config"
|
name = "pkg-config"
|
||||||
version = "0.3.16"
|
version = "0.3.17"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.4"
|
version = "1.0.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -330,7 +339,7 @@ name = "quote"
|
|||||||
version = "1.0.2"
|
version = "1.0.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -339,15 +348,15 @@ version = "1.1.9"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
"regex-syntax 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"utf8-ranges 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"utf8-ranges 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex-syntax"
|
name = "regex-syntax"
|
||||||
version = "0.6.12"
|
version = "0.6.13"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -366,37 +375,37 @@ dependencies = [
|
|||||||
"gtk-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"gtk-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"regex 1.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
"regex 1.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_yaml 0.8.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"xkbcommon 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"xkbcommon 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.101"
|
version = "1.0.104"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.101"
|
version = "1.0.104"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"syn 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_yaml"
|
name = "serde_yaml"
|
||||||
version = "0.8.9"
|
version = "0.8.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -407,10 +416,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.5"
|
version = "1.0.13"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
@ -475,7 +484,7 @@ name = "xkbcommon"
|
|||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -491,11 +500,11 @@ dependencies = [
|
|||||||
"checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d"
|
"checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d"
|
||||||
"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
|
"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
|
||||||
"checksum atk-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c7017e53393e713212aed7aea336b6553be4927f58c37070a56c2fe3d107e489"
|
"checksum atk-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c7017e53393e713212aed7aea336b6553be4927f58c37070a56c2fe3d107e489"
|
||||||
"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
|
"checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
|
||||||
"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
|
"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
|
||||||
"checksum cairo-rs 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dd940f0d609699e343ef71c4af5f66423afbf30d666f796dabd8fd15229cf5b6"
|
"checksum cairo-rs 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dd940f0d609699e343ef71c4af5f66423afbf30d666f796dabd8fd15229cf5b6"
|
||||||
"checksum cairo-sys-rs 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d25596627380be4381247dba06c69ad05ca21b3b065bd9827e416882ac41dcd2"
|
"checksum cairo-sys-rs 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d25596627380be4381247dba06c69ad05ca21b3b065bd9827e416882ac41dcd2"
|
||||||
"checksum cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)" = "4fc9a35e1f4290eb9e5fc54ba6cf40671ed2a2514c3eeb2b2a908dda2ea5a1be"
|
"checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd"
|
||||||
"checksum clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b957d88f4b6a63b9d70d5f454ac8011819c6efa7727858f458ab71c756ce2d3e"
|
"checksum clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b957d88f4b6a63b9d70d5f454ac8011819c6efa7727858f458ab71c756ce2d3e"
|
||||||
"checksum dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ea57b42383d091c85abcc2706240b94ab2a8fa1fc81c10ff23c4de06e2a90b5e"
|
"checksum dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ea57b42383d091c85abcc2706240b94ab2a8fa1fc81c10ff23c4de06e2a90b5e"
|
||||||
"checksum fragile 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f8140122fa0d5dcb9fc8627cfce2b37cc1500f752636d46ea28bc26785c2f9"
|
"checksum fragile 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f8140122fa0d5dcb9fc8627cfce2b37cc1500f752636d46ea28bc26785c2f9"
|
||||||
@ -510,24 +519,25 @@ dependencies = [
|
|||||||
"checksum gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08475e4a08f27e6e2287005950114735ed61cec2cb8c1187682a5aec8c69b715"
|
"checksum gobject-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08475e4a08f27e6e2287005950114735ed61cec2cb8c1187682a5aec8c69b715"
|
||||||
"checksum gtk 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "56a6b30f194f09a17bb7ffa95c3ecdb405abd3b75ff981f831b1f6d18fe115ff"
|
"checksum gtk 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "56a6b30f194f09a17bb7ffa95c3ecdb405abd3b75ff981f831b1f6d18fe115ff"
|
||||||
"checksum gtk-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d487d333a4b87072e6bf9f2e55befa0ebef01b9496c2e263c0f4a1ff3d6c04b1"
|
"checksum gtk-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d487d333a4b87072e6bf9f2e55befa0ebef01b9496c2e263c0f4a1ff3d6c04b1"
|
||||||
|
"checksum hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eff2656d88f158ce120947499e971d743c05dbcbed62e5bd2f38f1698bbc3772"
|
||||||
"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||||
"checksum libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba"
|
"checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558"
|
||||||
"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83"
|
"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83"
|
||||||
"checksum maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
|
"checksum maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
|
||||||
"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
|
"checksum memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3197e20c7edb283f87c071ddfc7a2cca8f8e0b888c242959846a6fce03c72223"
|
||||||
"checksum memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b"
|
"checksum memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b"
|
||||||
"checksum pango 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4c2cb169402a3eb1ba034a7cc7d95b8b1c106e9be5ba4be79a5a93dc1a2795f4"
|
"checksum pango 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4c2cb169402a3eb1ba034a7cc7d95b8b1c106e9be5ba4be79a5a93dc1a2795f4"
|
||||||
"checksum pango-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d6eb49268e69dd0c1da5d3001a61aac08e2e9d2bfbe4ae4b19b9963c998f6453"
|
"checksum pango-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d6eb49268e69dd0c1da5d3001a61aac08e2e9d2bfbe4ae4b19b9963c998f6453"
|
||||||
"checksum pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)" = "72d5370d90f49f70bd033c3d75e87fc529fbfff9d6f7cccef07d6170079d91ea"
|
"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677"
|
||||||
"checksum proc-macro2 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "afdc77cc74ec70ed262262942ebb7dac3d479e9e5cfa2da1841c0806f6cdabcc"
|
"checksum proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "0319972dcae462681daf4da1adeeaa066e3ebd29c69be96c6abb1259d2ee2bcc"
|
||||||
"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
|
"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
|
||||||
"checksum regex 1.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "d9d8297cc20bbb6184f8b45ff61c8ee6a9ac56c156cec8e38c3e5084773c44ad"
|
"checksum regex 1.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "d9d8297cc20bbb6184f8b45ff61c8ee6a9ac56c156cec8e38c3e5084773c44ad"
|
||||||
"checksum regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716"
|
"checksum regex-syntax 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "e734e891f5b408a29efbf8309e656876276f49ab6a6ac208600b4419bd893d90"
|
||||||
"checksum serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)" = "9796c9b7ba2ffe7a9ce53c2287dfc48080f4b2b362fcc245a259b3a7201119dd"
|
"checksum serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449"
|
||||||
"checksum serde_derive 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)" = "4b133a43a1ecd55d4086bd5b4dc6c1751c68b1bfbeba7a5040442022c7e7c02e"
|
"checksum serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64"
|
||||||
"checksum serde_yaml 0.8.9 (registry+https://github.com/rust-lang/crates.io-index)" = "38b08a9a90e5260fe01c6480ec7c811606df6d3a660415808c3c3fa8ed95b582"
|
"checksum serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)" = "691b17f19fc1ec9d94ec0b5864859290dff279dbd7b03f017afda54eb36c3c35"
|
||||||
"checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550"
|
"checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550"
|
||||||
"checksum syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf"
|
"checksum syn 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1e4ff033220a41d1a57d8125eab57bf5263783dfdcc18688b1dacc6ce9651ef8"
|
||||||
"checksum textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6"
|
"checksum textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6"
|
||||||
"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
|
"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
|
||||||
"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
|
"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
|
||||||
|
|||||||
25
debian/changelog
vendored
25
debian/changelog
vendored
@ -1,4 +1,27 @@
|
|||||||
squeekboard (1.6.0) UNRELEASED; urgency=medium
|
squeekboard (1.8.0) amber-phone; urgency=medium
|
||||||
|
|
||||||
|
[ Dorota Czaplejewicz ]
|
||||||
|
* translations: Use gnome-desktop's xkb info database for layout names
|
||||||
|
* translations: Make the code cleaner
|
||||||
|
* overlay: Add terminal
|
||||||
|
* eek-layout: Remove unused
|
||||||
|
* pre-release: Update deps
|
||||||
|
|
||||||
|
-- Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm> Tue, 14 Jan 2020 13:55:00 +0000
|
||||||
|
|
||||||
|
squeekboard (1.7.0) amber-phone; urgency=medium
|
||||||
|
|
||||||
|
* New terminal layout appearing on terminal input hint
|
||||||
|
|
||||||
|
-- Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm> Wed, 08 Jan 2020 11:53:07 +0000
|
||||||
|
|
||||||
|
squeekboard (1.7.0) amber-phone; urgency=medium
|
||||||
|
|
||||||
|
* New terminal layout appearing on terminal input hint
|
||||||
|
|
||||||
|
-- Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm> Wed, 08 Jan 2020 11:53:07 +0000
|
||||||
|
|
||||||
|
squeekboard (1.6.0) amber-phone; urgency=medium
|
||||||
|
|
||||||
[ Dorota Czaplejewicz ]
|
[ Dorota Czaplejewicz ]
|
||||||
* tools: Move entry.py
|
* tools: Move entry.py
|
||||||
|
|||||||
1
debian/control
vendored
1
debian/control
vendored
@ -9,6 +9,7 @@ Build-Depends:
|
|||||||
ninja-build,
|
ninja-build,
|
||||||
pkg-config,
|
pkg-config,
|
||||||
libglib2.0-dev,
|
libglib2.0-dev,
|
||||||
|
libgnome-desktop-3-dev,
|
||||||
libgtk-3-dev,
|
libgtk-3-dev,
|
||||||
libcroco3-dev,
|
libcroco3-dev,
|
||||||
librust-bitflags-1-dev (>= 1.0),
|
librust-bitflags-1-dev (>= 1.0),
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
project(
|
project(
|
||||||
'squeekboard',
|
'squeekboard',
|
||||||
'c', 'rust',
|
'c', 'rust',
|
||||||
version: '1.6.0',
|
version: '1.8.0',
|
||||||
license: 'GPLv3',
|
license: 'GPLv3',
|
||||||
meson_version: '>=0.51.0',
|
meson_version: '>=0.51.0',
|
||||||
default_options: [
|
default_options: [
|
||||||
|
|||||||
112
src/data.rs
112
src/data.rs
@ -22,7 +22,7 @@ use ::keyboard::{
|
|||||||
};
|
};
|
||||||
use ::layout;
|
use ::layout;
|
||||||
use ::layout::ArrangementKind;
|
use ::layout::ArrangementKind;
|
||||||
use ::logging::PrintWarnings;
|
use ::logging;
|
||||||
use ::resources;
|
use ::resources;
|
||||||
use ::util::c::as_str;
|
use ::util::c::as_str;
|
||||||
use ::util::hash_map_map;
|
use ::util::hash_map_map;
|
||||||
@ -32,7 +32,7 @@ use ::xdg;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use std::io::BufReader;
|
use std::io::BufReader;
|
||||||
use std::iter::FromIterator;
|
use std::iter::FromIterator;
|
||||||
use ::logging::WarningHandler;
|
use ::logging::Warn;
|
||||||
|
|
||||||
/// Gathers stuff defined in C or called by C
|
/// Gathers stuff defined in C or called by C
|
||||||
pub mod c {
|
pub mod c {
|
||||||
@ -158,7 +158,7 @@ fn list_layout_sources(
|
|||||||
fn load_layout_data(source: DataSource)
|
fn load_layout_data(source: DataSource)
|
||||||
-> Result<::layout::LayoutData, LoadError>
|
-> Result<::layout::LayoutData, LoadError>
|
||||||
{
|
{
|
||||||
let handler = PrintWarnings{};
|
let handler = logging::Print {};
|
||||||
match source {
|
match source {
|
||||||
DataSource::File(path) => {
|
DataSource::File(path) => {
|
||||||
Layout::from_file(path.clone())
|
Layout::from_file(path.clone())
|
||||||
@ -191,11 +191,13 @@ fn load_layout_data_with_fallback(
|
|||||||
(
|
(
|
||||||
LoadError::BadData(Error::Missing(e)),
|
LoadError::BadData(Error::Missing(e)),
|
||||||
DataSource::File(file)
|
DataSource::File(file)
|
||||||
) => eprintln!( // TODO: print in debug logging level
|
) => log_print!(
|
||||||
|
logging::Level::Debug,
|
||||||
"Tried file {:?}, but it's missing: {}",
|
"Tried file {:?}, but it's missing: {}",
|
||||||
file, e
|
file, e
|
||||||
),
|
),
|
||||||
(e, source) => eprintln!(
|
(e, source) => log_print!(
|
||||||
|
logging::Level::Warning,
|
||||||
"Failed to load layout from {}: {}, skipping",
|
"Failed to load layout from {}: {}, skipping",
|
||||||
source, e
|
source, e
|
||||||
),
|
),
|
||||||
@ -334,7 +336,7 @@ impl Layout {
|
|||||||
serde_yaml::from_reader(infile).map_err(Error::Yaml)
|
serde_yaml::from_reader(infile).map_err(Error::Yaml)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn build<H: WarningHandler>(self, mut warning_handler: H)
|
pub fn build<H: logging::Handler>(self, mut warning_handler: H)
|
||||||
-> (Result<::layout::LayoutData, FormattingError>, H)
|
-> (Result<::layout::LayoutData, FormattingError>, H)
|
||||||
{
|
{
|
||||||
let button_names = self.views.values()
|
let button_names = self.views.values()
|
||||||
@ -472,7 +474,7 @@ impl Layout {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_action<H: WarningHandler>(
|
fn create_action<H: logging::Handler>(
|
||||||
button_info: &HashMap<String, ButtonMeta>,
|
button_info: &HashMap<String, ButtonMeta>,
|
||||||
name: &str,
|
name: &str,
|
||||||
view_names: Vec<&String>,
|
view_names: Vec<&String>,
|
||||||
@ -502,15 +504,18 @@ fn create_action<H: WarningHandler>(
|
|||||||
(None, None, Some(text)) => SubmitData::Text(text.clone()),
|
(None, None, Some(text)) => SubmitData::Text(text.clone()),
|
||||||
(None, None, None) => SubmitData::Text(name.into()),
|
(None, None, None) => SubmitData::Text(name.into()),
|
||||||
_ => {
|
_ => {
|
||||||
warning_handler.handle(&format!(
|
warning_handler.handle(
|
||||||
"Button {} has more than one of (action, keysym, text)",
|
logging::Level::Warning,
|
||||||
name
|
&format!(
|
||||||
));
|
"Button {} has more than one of (action, keysym, text)",
|
||||||
|
name,
|
||||||
|
),
|
||||||
|
);
|
||||||
SubmitData::Text("".into())
|
SubmitData::Text("".into())
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
fn filter_view_name<H: WarningHandler>(
|
fn filter_view_name<H: logging::Handler>(
|
||||||
button_name: &str,
|
button_name: &str,
|
||||||
view_name: String,
|
view_name: String,
|
||||||
view_names: &Vec<&String>,
|
view_names: &Vec<&String>,
|
||||||
@ -519,10 +524,13 @@ fn create_action<H: WarningHandler>(
|
|||||||
if view_names.contains(&&view_name) {
|
if view_names.contains(&&view_name) {
|
||||||
view_name
|
view_name
|
||||||
} else {
|
} else {
|
||||||
warning_handler.handle(&format!("Button {} switches to missing view {}",
|
warning_handler.handle(
|
||||||
button_name,
|
logging::Level::Warning,
|
||||||
view_name,
|
&format!("Button {} switches to missing view {}",
|
||||||
));
|
button_name,
|
||||||
|
view_name,
|
||||||
|
),
|
||||||
|
);
|
||||||
"base".into()
|
"base".into()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -562,27 +570,24 @@ fn create_action<H: WarningHandler>(
|
|||||||
match keysym_valid(keysym.as_str()) {
|
match keysym_valid(keysym.as_str()) {
|
||||||
true => keysym.clone(),
|
true => keysym.clone(),
|
||||||
false => {
|
false => {
|
||||||
warning_handler.handle(&format!(
|
warning_handler.handle(
|
||||||
"Keysym name invalid: {}",
|
logging::Level::Warning,
|
||||||
keysym,
|
&format!(
|
||||||
));
|
"Keysym name invalid: {}",
|
||||||
|
keysym,
|
||||||
|
),
|
||||||
|
);
|
||||||
"space".into() // placeholder
|
"space".into() // placeholder
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
)),
|
)),
|
||||||
},
|
},
|
||||||
SubmitData::Text(text) => ::action::Action::Submit {
|
SubmitData::Text(text) => ::action::Action::Submit {
|
||||||
text: {
|
text: CString::new(text.clone()).or_warn(
|
||||||
CString::new(text.clone())
|
warning_handler,
|
||||||
.map_err(|e| {
|
logging::Problem::Warning,
|
||||||
warning_handler.handle(&format!(
|
&format!("Text {} contains problems", text),
|
||||||
"Text {} contains problems: {:?}",
|
),
|
||||||
text,
|
|
||||||
e
|
|
||||||
));
|
|
||||||
e
|
|
||||||
}).ok()
|
|
||||||
},
|
|
||||||
keys: text.chars().map(|codepoint| {
|
keys: text.chars().map(|codepoint| {
|
||||||
let codepoint_string = codepoint.to_string();
|
let codepoint_string = codepoint.to_string();
|
||||||
::action::KeySym(match keysym_valid(codepoint_string.as_str()) {
|
::action::KeySym(match keysym_valid(codepoint_string.as_str()) {
|
||||||
@ -596,7 +601,7 @@ fn create_action<H: WarningHandler>(
|
|||||||
|
|
||||||
/// TODO: Since this will receive user-provided data,
|
/// TODO: Since this will receive user-provided data,
|
||||||
/// all .expect() on them should be turned into soft fails
|
/// all .expect() on them should be turned into soft fails
|
||||||
fn create_button<H: WarningHandler>(
|
fn create_button<H: logging::Handler>(
|
||||||
button_info: &HashMap<String, ButtonMeta>,
|
button_info: &HashMap<String, ButtonMeta>,
|
||||||
outlines: &HashMap<String, Outline>,
|
outlines: &HashMap<String, Outline>,
|
||||||
name: &str,
|
name: &str,
|
||||||
@ -620,14 +625,11 @@ fn create_button<H: WarningHandler>(
|
|||||||
} else if let Some(text) = &button_meta.text {
|
} else if let Some(text) = &button_meta.text {
|
||||||
::layout::Label::Text(
|
::layout::Label::Text(
|
||||||
CString::new(text.as_str())
|
CString::new(text.as_str())
|
||||||
.unwrap_or_else(|e| {
|
.or_warn(
|
||||||
warning_handler.handle(&format!(
|
warning_handler,
|
||||||
"Text {} is invalid: {}",
|
logging::Problem::Warning,
|
||||||
text,
|
&format!("Text {} is invalid", text),
|
||||||
e,
|
).unwrap_or_else(|| CString::new("").unwrap())
|
||||||
));
|
|
||||||
CString::new("").unwrap()
|
|
||||||
})
|
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
::layout::Label::Text(cname.clone())
|
::layout::Label::Text(cname.clone())
|
||||||
@ -638,7 +640,10 @@ fn create_button<H: WarningHandler>(
|
|||||||
if outlines.contains_key(outline) {
|
if outlines.contains_key(outline) {
|
||||||
outline.clone()
|
outline.clone()
|
||||||
} else {
|
} else {
|
||||||
warning_handler.handle(&format!("Outline named {} does not exist! Using default for button {}", outline, name));
|
warning_handler.handle(
|
||||||
|
logging::Level::Warning,
|
||||||
|
&format!("Outline named {} does not exist! Using default for button {}", outline, name)
|
||||||
|
);
|
||||||
"default".into()
|
"default".into()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -647,12 +652,11 @@ fn create_button<H: WarningHandler>(
|
|||||||
|
|
||||||
let outline = outlines.get(&outline_name)
|
let outline = outlines.get(&outline_name)
|
||||||
.map(|outline| (*outline).clone())
|
.map(|outline| (*outline).clone())
|
||||||
.unwrap_or_else(|| {
|
.or_warn(
|
||||||
warning_handler.handle(
|
warning_handler,
|
||||||
&format!("No default outline defined! Using 1x1!")
|
logging::Problem::Warning,
|
||||||
);
|
"No default outline defined! Using 1x1!",
|
||||||
Outline { width: 1f64, height: 1f64 }
|
).unwrap_or(Outline { width: 1f64, height: 1f64 });
|
||||||
});
|
|
||||||
|
|
||||||
layout::Button {
|
layout::Button {
|
||||||
name: cname,
|
name: cname,
|
||||||
@ -672,7 +676,7 @@ mod tests {
|
|||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
use std::error::Error as ErrorTrait;
|
use std::error::Error as ErrorTrait;
|
||||||
use ::logging::PanicWarn;
|
use ::logging::ProblemPanic;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_parse_path() {
|
fn test_parse_path() {
|
||||||
@ -742,7 +746,7 @@ mod tests {
|
|||||||
fn test_layout_punctuation() {
|
fn test_layout_punctuation() {
|
||||||
let out = Layout::from_file(PathBuf::from("tests/layout_key1.yaml"))
|
let out = Layout::from_file(PathBuf::from("tests/layout_key1.yaml"))
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.build(PanicWarn).0
|
.build(ProblemPanic).0
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
out.views["base"]
|
out.views["base"]
|
||||||
@ -757,7 +761,7 @@ mod tests {
|
|||||||
fn test_layout_unicode() {
|
fn test_layout_unicode() {
|
||||||
let out = Layout::from_file(PathBuf::from("tests/layout_key2.yaml"))
|
let out = Layout::from_file(PathBuf::from("tests/layout_key2.yaml"))
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.build(PanicWarn).0
|
.build(ProblemPanic).0
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
out.views["base"]
|
out.views["base"]
|
||||||
@ -773,7 +777,7 @@ mod tests {
|
|||||||
fn test_layout_unicode_multi() {
|
fn test_layout_unicode_multi() {
|
||||||
let out = Layout::from_file(PathBuf::from("tests/layout_key3.yaml"))
|
let out = Layout::from_file(PathBuf::from("tests/layout_key3.yaml"))
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.build(PanicWarn).0
|
.build(ProblemPanic).0
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
out.views["base"]
|
out.views["base"]
|
||||||
@ -788,7 +792,7 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn parsing_fallback() {
|
fn parsing_fallback() {
|
||||||
assert!(Layout::from_resource(FALLBACK_LAYOUT_NAME)
|
assert!(Layout::from_resource(FALLBACK_LAYOUT_NAME)
|
||||||
.map(|layout| layout.build(PanicWarn).0.unwrap())
|
.map(|layout| layout.build(ProblemPanic).0.unwrap())
|
||||||
.is_ok()
|
.is_ok()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -836,7 +840,7 @@ mod tests {
|
|||||||
},
|
},
|
||||||
".",
|
".",
|
||||||
Vec::new(),
|
Vec::new(),
|
||||||
&mut PanicWarn,
|
&mut ProblemPanic,
|
||||||
),
|
),
|
||||||
::action::Action::Submit {
|
::action::Action::Submit {
|
||||||
text: Some(CString::new(".").unwrap()),
|
text: Some(CString::new(".").unwrap()),
|
||||||
@ -849,7 +853,7 @@ mod tests {
|
|||||||
fn test_layout_margins() {
|
fn test_layout_margins() {
|
||||||
let out = Layout::from_file(PathBuf::from("tests/layout_margins.yaml"))
|
let out = Layout::from_file(PathBuf::from("tests/layout_margins.yaml"))
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.build(PanicWarn).0
|
.build(ProblemPanic).0
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
out.margins,
|
out.margins,
|
||||||
|
|||||||
@ -5,13 +5,16 @@
|
|||||||
|
|
||||||
use std::boxed::Box;
|
use std::boxed::Box;
|
||||||
use std::ffi::CString;
|
use std::ffi::CString;
|
||||||
|
use std::fmt;
|
||||||
use std::num::Wrapping;
|
use std::num::Wrapping;
|
||||||
use std::string::String;
|
use std::string::String;
|
||||||
|
|
||||||
|
use ::logging;
|
||||||
use ::util::c::into_cstring;
|
use ::util::c::into_cstring;
|
||||||
|
|
||||||
// Traits
|
// Traits
|
||||||
use std::convert::TryFrom;
|
use std::convert::TryFrom;
|
||||||
|
use ::logging::Warn;
|
||||||
|
|
||||||
|
|
||||||
/// Gathers stuff defined in C or called by C
|
/// Gathers stuff defined in C or called by C
|
||||||
@ -95,16 +98,20 @@ pub mod c {
|
|||||||
let imservice = check_imservice(imservice, im).unwrap();
|
let imservice = check_imservice(imservice, im).unwrap();
|
||||||
imservice.pending = IMProtocolState {
|
imservice.pending = IMProtocolState {
|
||||||
content_hint: {
|
content_hint: {
|
||||||
ContentHint::from_bits(hint).unwrap_or_else(|| {
|
ContentHint::from_bits(hint)
|
||||||
eprintln!("Warning: received invalid hint flags");
|
.or_print(
|
||||||
ContentHint::NONE
|
logging::Problem::Warning,
|
||||||
})
|
"Received invalid hint flags",
|
||||||
|
)
|
||||||
|
.unwrap_or(ContentHint::NONE)
|
||||||
},
|
},
|
||||||
content_purpose: {
|
content_purpose: {
|
||||||
ContentPurpose::try_from(purpose).unwrap_or_else(|_e| {
|
ContentPurpose::try_from(purpose)
|
||||||
eprintln!("Warning: Received invalid purpose value");
|
.or_print(
|
||||||
ContentPurpose::Normal
|
logging::Problem::Warning,
|
||||||
})
|
"Received invalid purpose value",
|
||||||
|
)
|
||||||
|
.unwrap_or(ContentPurpose::Normal)
|
||||||
},
|
},
|
||||||
..imservice.pending.clone()
|
..imservice.pending.clone()
|
||||||
};
|
};
|
||||||
@ -119,10 +126,12 @@ pub mod c {
|
|||||||
let imservice = check_imservice(imservice, im).unwrap();
|
let imservice = check_imservice(imservice, im).unwrap();
|
||||||
imservice.pending = IMProtocolState {
|
imservice.pending = IMProtocolState {
|
||||||
text_change_cause: {
|
text_change_cause: {
|
||||||
ChangeCause::try_from(cause).unwrap_or_else(|_e| {
|
ChangeCause::try_from(cause)
|
||||||
eprintln!("Warning: received invalid cause value");
|
.or_print(
|
||||||
ChangeCause::InputMethod
|
logging::Problem::Warning,
|
||||||
})
|
"Received invalid cause value",
|
||||||
|
)
|
||||||
|
.unwrap_or(ChangeCause::InputMethod)
|
||||||
},
|
},
|
||||||
..imservice.pending.clone()
|
..imservice.pending.clone()
|
||||||
};
|
};
|
||||||
@ -250,10 +259,17 @@ pub enum ContentPurpose {
|
|||||||
Terminal = 13,
|
Terminal = 13,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Utilities from ::logging need a printable error type
|
||||||
|
pub struct UnrecognizedValue;
|
||||||
|
|
||||||
|
impl fmt::Display for UnrecognizedValue {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
write!(f, "Unrecognized value")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl TryFrom<u32> for ContentPurpose {
|
impl TryFrom<u32> for ContentPurpose {
|
||||||
// There's only one way to fail: number not in protocol,
|
type Error = UnrecognizedValue;
|
||||||
// so no special error type is needed
|
|
||||||
type Error = ();
|
|
||||||
fn try_from(num: u32) -> Result<Self, Self::Error> {
|
fn try_from(num: u32) -> Result<Self, Self::Error> {
|
||||||
use self::ContentPurpose::*;
|
use self::ContentPurpose::*;
|
||||||
match num {
|
match num {
|
||||||
@ -271,7 +287,7 @@ impl TryFrom<u32> for ContentPurpose {
|
|||||||
11 => Ok(Time),
|
11 => Ok(Time),
|
||||||
12 => Ok(Datetime),
|
12 => Ok(Datetime),
|
||||||
13 => Ok(Terminal),
|
13 => Ok(Terminal),
|
||||||
_ => Err(()),
|
_ => Err(UnrecognizedValue),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -284,14 +300,12 @@ pub enum ChangeCause {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl TryFrom<u32> for ChangeCause {
|
impl TryFrom<u32> for ChangeCause {
|
||||||
// There's only one way to fail: number not in protocol,
|
type Error = UnrecognizedValue;
|
||||||
// so no special error type is needed
|
|
||||||
type Error = ();
|
|
||||||
fn try_from(num: u32) -> Result<Self, Self::Error> {
|
fn try_from(num: u32) -> Result<Self, Self::Error> {
|
||||||
match num {
|
match num {
|
||||||
0 => Ok(ChangeCause::InputMethod),
|
0 => Ok(ChangeCause::InputMethod),
|
||||||
1 => Ok(ChangeCause::Other),
|
1 => Ok(ChangeCause::Other),
|
||||||
_ => Err(())
|
_ => Err(UnrecognizedValue)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,6 +9,7 @@ use std::rc::Rc;
|
|||||||
use std::string::FromUtf8Error;
|
use std::string::FromUtf8Error;
|
||||||
|
|
||||||
use ::action::Action;
|
use ::action::Action;
|
||||||
|
use ::logging;
|
||||||
|
|
||||||
// Traits
|
// Traits
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
@ -129,7 +130,12 @@ pub fn generate_keymap(
|
|||||||
for (name, state) in keystates.iter() {
|
for (name, state) in keystates.iter() {
|
||||||
match &state.action {
|
match &state.action {
|
||||||
Action::Submit { text: _, keys } => {
|
Action::Submit { text: _, keys } => {
|
||||||
if let 0 = keys.len() { eprintln!("Key {} has no keysyms", name); };
|
if let 0 = keys.len() {
|
||||||
|
log_print!(
|
||||||
|
logging::Level::Warning,
|
||||||
|
"Key {} has no keysyms", name,
|
||||||
|
);
|
||||||
|
};
|
||||||
for (named_keysym, keycode) in keys.iter().zip(&state.keycodes) {
|
for (named_keysym, keycode) in keys.iter().zip(&state.keycodes) {
|
||||||
write!(
|
write!(
|
||||||
buf,
|
buf,
|
||||||
|
|||||||
@ -20,17 +20,21 @@
|
|||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::collections::{ HashMap, HashSet };
|
use std::collections::{ HashMap, HashSet };
|
||||||
use std::ffi::CString;
|
use std::ffi::CString;
|
||||||
|
use std::fmt;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use std::vec::Vec;
|
use std::vec::Vec;
|
||||||
|
|
||||||
use ::action::Action;
|
use ::action::Action;
|
||||||
use ::drawing;
|
use ::drawing;
|
||||||
use ::keyboard::{ KeyState, PressType };
|
use ::keyboard::{ KeyState, PressType };
|
||||||
|
use ::logging;
|
||||||
use ::manager;
|
use ::manager;
|
||||||
use ::submission::{ Submission, Timestamp };
|
use ::submission::{ Submission, Timestamp };
|
||||||
use ::util::find_max_double;
|
use ::util::find_max_double;
|
||||||
|
|
||||||
|
// Traits
|
||||||
use std::borrow::Borrow;
|
use std::borrow::Borrow;
|
||||||
|
use ::logging::Warn;
|
||||||
|
|
||||||
/// Gathers stuff defined in C or called by C
|
/// Gathers stuff defined in C or called by C
|
||||||
pub mod c {
|
pub mod c {
|
||||||
@ -628,6 +632,12 @@ pub struct LayoutData {
|
|||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
struct NoSuchView;
|
struct NoSuchView;
|
||||||
|
|
||||||
|
impl fmt::Display for NoSuchView {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
write!(f, "No such view")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Unfortunately, changes are not atomic due to mutability :(
|
// Unfortunately, changes are not atomic due to mutability :(
|
||||||
// An error will not be recoverable
|
// An error will not be recoverable
|
||||||
// The usage of &mut on Rc<RefCell<KeyState>> doesn't mean anything special.
|
// The usage of &mut on Rc<RefCell<KeyState>> doesn't mean anything special.
|
||||||
@ -793,9 +803,10 @@ mod seat {
|
|||||||
|
|
||||||
fn try_set_view(layout: &mut Layout, view_name: String) {
|
fn try_set_view(layout: &mut Layout, view_name: String) {
|
||||||
layout.set_view(view_name.clone())
|
layout.set_view(view_name.clone())
|
||||||
.map_err(|e|
|
.or_print(
|
||||||
eprintln!("Bad view {} ({:?}), ignoring", view_name, e)
|
logging::Problem::Bug,
|
||||||
).ok();
|
&format!("Bad view {}, ignoring", view_name),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A vessel holding an obligation to switch view.
|
/// A vessel holding an obligation to switch view.
|
||||||
@ -837,9 +848,10 @@ mod seat {
|
|||||||
Action::LockView { lock: _, unlock: view } => {
|
Action::LockView { lock: _, unlock: view } => {
|
||||||
new_view = Some(view.clone());
|
new_view = Some(view.clone());
|
||||||
},
|
},
|
||||||
a => eprintln!(
|
a => log_print!(
|
||||||
"BUG: action {:?} was found inside locked keys",
|
logging::Level::Bug,
|
||||||
a
|
"Non-locking action {:?} was found inside locked keys",
|
||||||
|
a,
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
key.locked = false;
|
key.locked = false;
|
||||||
@ -858,7 +870,10 @@ mod seat {
|
|||||||
rckey: &Rc<RefCell<KeyState>>,
|
rckey: &Rc<RefCell<KeyState>>,
|
||||||
) {
|
) {
|
||||||
if !layout.pressed_keys.insert(::util::Pointer(rckey.clone())) {
|
if !layout.pressed_keys.insert(::util::Pointer(rckey.clone())) {
|
||||||
eprintln!("Warning: key {:?} was already pressed", rckey);
|
log_print!(
|
||||||
|
logging::Level::Bug,
|
||||||
|
"Key {:?} was already pressed", rckey,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
let mut key = rckey.borrow_mut();
|
let mut key = rckey.borrow_mut();
|
||||||
submission.handle_press(&key, KeyState::get_id(rckey), time);
|
submission.handle_press(&key, KeyState::get_id(rckey), time);
|
||||||
@ -936,7 +951,10 @@ mod seat {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Action::SetModifier(_) => eprintln!("Modifiers unsupported"),
|
Action::SetModifier(_) => log_print!(
|
||||||
|
logging::Level::Bug,
|
||||||
|
"Modifiers unsupported",
|
||||||
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
let pointer = ::util::Pointer(rckey.clone());
|
let pointer = ::util::Pointer(rckey.clone());
|
||||||
|
|||||||
@ -15,6 +15,9 @@ extern crate regex;
|
|||||||
extern crate serde;
|
extern crate serde;
|
||||||
extern crate xkbcommon;
|
extern crate xkbcommon;
|
||||||
|
|
||||||
|
#[macro_use]
|
||||||
|
mod logging;
|
||||||
|
|
||||||
mod action;
|
mod action;
|
||||||
pub mod data;
|
pub mod data;
|
||||||
mod drawing;
|
mod drawing;
|
||||||
@ -24,7 +27,6 @@ mod keyboard;
|
|||||||
mod layout;
|
mod layout;
|
||||||
mod locale;
|
mod locale;
|
||||||
mod locale_config;
|
mod locale_config;
|
||||||
mod logging;
|
|
||||||
mod manager;
|
mod manager;
|
||||||
mod outputs;
|
mod outputs;
|
||||||
mod popover;
|
mod popover;
|
||||||
|
|||||||
@ -1,24 +1,106 @@
|
|||||||
/*! Locale-specific functions */
|
/*! Locale-specific functions.
|
||||||
|
*
|
||||||
|
* This file is intended as a library:
|
||||||
|
* it must pass errors upwards
|
||||||
|
* and panicking is allowed only when
|
||||||
|
* this code encounters an internal inconsistency.
|
||||||
|
*/
|
||||||
|
|
||||||
use std::cmp;
|
use std::cmp;
|
||||||
use std::ffi::CString;
|
use std::ffi::{ CStr, CString };
|
||||||
|
use std::fmt;
|
||||||
|
use std::os::raw::c_char;
|
||||||
|
use std::ptr;
|
||||||
|
use std::str::Utf8Error;
|
||||||
|
|
||||||
mod c {
|
mod c {
|
||||||
use std::os::raw::c_char;
|
use super::*;
|
||||||
|
use std::os::raw::c_void;
|
||||||
|
|
||||||
#[allow(non_camel_case_types)]
|
#[allow(non_camel_case_types)]
|
||||||
pub type c_int = i32;
|
pub type c_int = i32;
|
||||||
|
|
||||||
|
#[derive(Clone, Copy)]
|
||||||
|
#[repr(C)]
|
||||||
|
pub struct GnomeXkbInfo(*const c_void);
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
extern "C" {
|
extern "C" {
|
||||||
// from libc
|
// from libc
|
||||||
pub fn strcoll(cs: *const c_char, ct: *const c_char) -> c_int;
|
pub fn strcoll(cs: *const c_char, ct: *const c_char) -> c_int;
|
||||||
|
// from gnome-desktop3
|
||||||
|
pub fn gnome_xkb_info_new() -> GnomeXkbInfo;
|
||||||
|
pub fn gnome_xkb_info_get_layout_info (
|
||||||
|
info: GnomeXkbInfo,
|
||||||
|
id: *const c_char,
|
||||||
|
display_name: *mut *const c_char,
|
||||||
|
short_name: *const *const c_char,
|
||||||
|
xkb_layout: *const *const c_char,
|
||||||
|
xkb_variant: *const *const c_char
|
||||||
|
) -> c_int;
|
||||||
|
pub fn g_object_unref(o: GnomeXkbInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum Error {
|
||||||
|
StringConversion(Utf8Error),
|
||||||
|
NoInfo,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for Error {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
fmt::Debug::fmt(&self, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct XkbInfo(c::GnomeXkbInfo);
|
||||||
|
|
||||||
|
impl XkbInfo {
|
||||||
|
pub fn new() -> XkbInfo {
|
||||||
|
XkbInfo(unsafe { c::gnome_xkb_info_new() })
|
||||||
|
}
|
||||||
|
pub fn get_display_name(&self, id: &str) -> Result<String, Error> {
|
||||||
|
let id = cstring_safe(id);
|
||||||
|
let id_ref = id.as_ptr();
|
||||||
|
let mut display_name: *const c_char = ptr::null();
|
||||||
|
let found = unsafe {
|
||||||
|
c::gnome_xkb_info_get_layout_info(
|
||||||
|
self.0,
|
||||||
|
id_ref,
|
||||||
|
&mut display_name as *mut *const c_char,
|
||||||
|
ptr::null(), ptr::null(), ptr::null(),
|
||||||
|
)
|
||||||
|
};
|
||||||
|
if found != 0 && !display_name.is_null() {
|
||||||
|
let display_name = unsafe { CStr::from_ptr(display_name) };
|
||||||
|
display_name.to_str()
|
||||||
|
.map(str::to_string)
|
||||||
|
.map_err(Error::StringConversion)
|
||||||
|
} else {
|
||||||
|
Err(Error::NoInfo)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Drop for XkbInfo {
|
||||||
|
fn drop(&mut self) {
|
||||||
|
unsafe { c::g_object_unref(self.0) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq)]
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
pub struct Translation<'a>(pub &'a str);
|
pub struct Translation<'a>(pub &'a str);
|
||||||
|
|
||||||
|
impl<'a> Translation<'a> {
|
||||||
|
pub fn to_owned(&'a self) -> OwnedTranslation {
|
||||||
|
OwnedTranslation(self.0.to_owned())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
|
pub struct OwnedTranslation(pub String);
|
||||||
|
|
||||||
fn cstring_safe(s: &str) -> CString {
|
fn cstring_safe(s: &str) -> CString {
|
||||||
CString::new(s)
|
CString::new(s)
|
||||||
.unwrap_or(CString::new("").unwrap())
|
.unwrap_or(CString::new("").unwrap())
|
||||||
|
|||||||
135
src/logging.rs
135
src/logging.rs
@ -26,13 +26,15 @@
|
|||||||
* 4. logging to an immutable destination type
|
* 4. logging to an immutable destination type
|
||||||
*
|
*
|
||||||
* Same as above, except it can be parallelized.
|
* Same as above, except it can be parallelized.
|
||||||
|
* Logs being outputs, they get returned
|
||||||
|
* instead of being misleadingly passed back through arguments.
|
||||||
* It seems more difficult to pass the logger around,
|
* It seems more difficult to pass the logger around,
|
||||||
* but this may be a solved problem from the area of functional programming.
|
* but this may be a solved problem from the area of functional programming.
|
||||||
*
|
*
|
||||||
* This library generally aims at the approach in 3.
|
* This library generally aims at the approach in 3.
|
||||||
* */
|
* */
|
||||||
|
|
||||||
use std::error::Error;
|
use std::fmt::Display;
|
||||||
|
|
||||||
/// Levels are not in order.
|
/// Levels are not in order.
|
||||||
pub enum Level {
|
pub enum Level {
|
||||||
@ -66,45 +68,134 @@ pub enum Level {
|
|||||||
Debug,
|
Debug,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sugar for logging errors in results.
|
impl Level {
|
||||||
/// Approach 2.
|
fn as_str(&self) -> &'static str {
|
||||||
pub trait Warn {
|
match self {
|
||||||
type Value;
|
Level::Panic => "Panic",
|
||||||
fn ok_warn(self, msg: &str) -> Option<Self::Value>;
|
Level::Bug => "Bug",
|
||||||
|
Level::Error => "Error",
|
||||||
|
Level::Warning => "Warning",
|
||||||
|
Level::Surprise => "Surprise",
|
||||||
|
Level::Info => "Info",
|
||||||
|
Level::Debug => "Debug",
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T, E: Error> Warn for Result<T, E> {
|
impl From<Problem> for Level {
|
||||||
|
fn from(problem: Problem) -> Level {
|
||||||
|
use self::Level::*;
|
||||||
|
match problem {
|
||||||
|
Problem::Panic => Panic,
|
||||||
|
Problem::Bug => Bug,
|
||||||
|
Problem::Error => Error,
|
||||||
|
Problem::Warning => Warning,
|
||||||
|
Problem::Surprise => Surprise,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Only levels which indicate problems
|
||||||
|
/// To use with `Result::Err` handlers,
|
||||||
|
/// which are needed only when something went off the optimal path.
|
||||||
|
/// A separate type ensures that `Err`
|
||||||
|
/// can't end up misclassified as a benign event like `Info`.
|
||||||
|
pub enum Problem {
|
||||||
|
Panic,
|
||||||
|
Bug,
|
||||||
|
Error,
|
||||||
|
Warning,
|
||||||
|
Surprise,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Sugar for approach 2
|
||||||
|
// TODO: avoid, deprecate.
|
||||||
|
// Handler instances should be long lived, not one per call.
|
||||||
|
macro_rules! log_print {
|
||||||
|
($level:expr, $($arg:tt)*) => (::logging::print($level, &format!($($arg)*)))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Approach 2
|
||||||
|
pub fn print(level: Level, message: &str) {
|
||||||
|
Print{}.handle(level, message)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Sugar for logging errors in results.
|
||||||
|
pub trait Warn where Self: Sized {
|
||||||
|
type Value;
|
||||||
|
/// Approach 2.
|
||||||
|
fn or_print(self, level: Problem, message: &str) -> Option<Self::Value> {
|
||||||
|
self.or_warn(&mut Print {}, level.into(), message)
|
||||||
|
}
|
||||||
|
/// Approach 3.
|
||||||
|
fn or_warn<H: Handler>(
|
||||||
|
self,
|
||||||
|
handler: &mut H,
|
||||||
|
level: Problem,
|
||||||
|
message: &str,
|
||||||
|
) -> Option<Self::Value>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T, E: Display> Warn for Result<T, E> {
|
||||||
type Value = T;
|
type Value = T;
|
||||||
fn ok_warn(self, msg: &str) -> Option<T> {
|
fn or_warn<H: Handler>(
|
||||||
|
self,
|
||||||
|
handler: &mut H,
|
||||||
|
level: Problem,
|
||||||
|
message: &str,
|
||||||
|
) -> Option<T> {
|
||||||
self.map_err(|e| {
|
self.map_err(|e| {
|
||||||
eprintln!("{}: {}", msg, e);
|
handler.handle(level.into(), &format!("{}: {}", message, e));
|
||||||
e
|
e
|
||||||
}).ok()
|
}).ok()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T> Warn for Option<T> {
|
||||||
|
type Value = T;
|
||||||
|
fn or_warn<H: Handler>(
|
||||||
|
self,
|
||||||
|
handler: &mut H,
|
||||||
|
level: Problem,
|
||||||
|
message: &str,
|
||||||
|
) -> Option<T> {
|
||||||
|
self.or_else(|| {
|
||||||
|
handler.handle(level.into(), message);
|
||||||
|
None
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A mutable handler for text warnings.
|
/// A mutable handler for text warnings.
|
||||||
/// Approach 3.
|
/// Approach 3.
|
||||||
pub trait WarningHandler {
|
pub trait Handler {
|
||||||
/// Handle a warning
|
/// Handle a log message
|
||||||
fn handle(&mut self, warning: &str);
|
fn handle(&mut self, level: Level, message: &str);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Prints warnings to stderr
|
/// Prints info to stdout, everything else to stderr
|
||||||
pub struct PrintWarnings;
|
pub struct Print;
|
||||||
|
|
||||||
impl WarningHandler for PrintWarnings {
|
impl Handler for Print {
|
||||||
fn handle(&mut self, warning: &str) {
|
fn handle(&mut self, level: Level, message: &str) {
|
||||||
eprintln!("{}", warning);
|
match level {
|
||||||
|
Level::Info => println!("Info: {}", message),
|
||||||
|
l => eprintln!("{}: {}", l.as_str(), message),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Warning handler that will panic at any warning.
|
/// Warning handler that will panic
|
||||||
|
/// at any warning, error, surprise, bug, or panic.
|
||||||
/// Don't use except in tests
|
/// Don't use except in tests
|
||||||
pub struct PanicWarn;
|
pub struct ProblemPanic;
|
||||||
|
|
||||||
impl WarningHandler for PanicWarn {
|
impl Handler for ProblemPanic {
|
||||||
fn handle(&mut self, warning: &str) {
|
fn handle(&mut self, level: Level, message: &str) {
|
||||||
panic!("{}", warning);
|
use self::Level::*;
|
||||||
|
match level {
|
||||||
|
Panic | Bug | Error | Warning | Surprise => panic!("{}", message),
|
||||||
|
l => Print{}.handle(l, message),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,6 +36,7 @@ cc = meson.get_compiler('c')
|
|||||||
deps = [
|
deps = [
|
||||||
# dependency('glib-2.0', version: '>=2.26.0'),
|
# dependency('glib-2.0', version: '>=2.26.0'),
|
||||||
dependency('gio-2.0', version: '>=2.26.0'),
|
dependency('gio-2.0', version: '>=2.26.0'),
|
||||||
|
dependency('gnome-desktop-3.0', version: '>=3.0'),
|
||||||
dependency('gtk+-3.0', version: '>=3.0'),
|
dependency('gtk+-3.0', version: '>=3.0'),
|
||||||
dependency('libcroco-0.6'),
|
dependency('libcroco-0.6'),
|
||||||
dependency('wayland-client', version: '>=1.14'),
|
dependency('wayland-client', version: '>=1.14'),
|
||||||
|
|||||||
@ -1,7 +1,10 @@
|
|||||||
/*! Managing Wayland outputs */
|
/*! Managing Wayland outputs */
|
||||||
|
|
||||||
use std::vec::Vec;
|
use std::vec::Vec;
|
||||||
|
use ::logging;
|
||||||
|
|
||||||
|
// traits
|
||||||
|
use ::logging::Warn;
|
||||||
|
|
||||||
/// Gathers stuff defined in C or called by C
|
/// Gathers stuff defined in C or called by C
|
||||||
pub mod c {
|
pub mod c {
|
||||||
@ -113,14 +116,11 @@ pub mod c {
|
|||||||
_make: *const c_char, _model: *const c_char,
|
_make: *const c_char, _model: *const c_char,
|
||||||
transform: i32,
|
transform: i32,
|
||||||
) {
|
) {
|
||||||
let transform = Transform::from_u32(transform as u32).unwrap_or_else(
|
let transform = Transform::from_u32(transform as u32)
|
||||||
|| {
|
.or_print(
|
||||||
eprintln!(
|
logging::Problem::Warning,
|
||||||
"Warning: received invalid wl_output.transform value"
|
"Received invalid wl_output.transform value",
|
||||||
);
|
).unwrap_or(Transform::Normal);
|
||||||
Transform::Normal
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
let outputs = outputs.clone_ref();
|
let outputs = outputs.clone_ref();
|
||||||
let mut collection = outputs.borrow_mut();
|
let mut collection = outputs.borrow_mut();
|
||||||
@ -129,7 +129,10 @@ pub mod c {
|
|||||||
.map(|o| &mut o.pending);
|
.map(|o| &mut o.pending);
|
||||||
match output_state {
|
match output_state {
|
||||||
Some(state) => { state.transform = Some(transform) },
|
Some(state) => { state.transform = Some(transform) },
|
||||||
None => eprintln!("Wayland error: Got mode on unknown output"),
|
None => log_print!(
|
||||||
|
logging::Level::Warning,
|
||||||
|
"Got geometry on unknown output",
|
||||||
|
),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -141,10 +144,12 @@ pub mod c {
|
|||||||
height: i32,
|
height: i32,
|
||||||
_refresh: i32,
|
_refresh: i32,
|
||||||
) {
|
) {
|
||||||
let flags = Mode::from_bits(flags).unwrap_or_else(|| {
|
let flags = Mode::from_bits(flags)
|
||||||
eprintln!("Warning: received invalid wl_output.mode flags");
|
.or_print(
|
||||||
Mode::NONE
|
logging::Problem::Warning,
|
||||||
});
|
"Received invalid wl_output.mode flags",
|
||||||
|
).unwrap_or(Mode::NONE);
|
||||||
|
|
||||||
let outputs = outputs.clone_ref();
|
let outputs = outputs.clone_ref();
|
||||||
let mut collection = outputs.borrow_mut();
|
let mut collection = outputs.borrow_mut();
|
||||||
let output_state: Option<&mut OutputState>
|
let output_state: Option<&mut OutputState>
|
||||||
@ -156,7 +161,10 @@ pub mod c {
|
|||||||
state.current_mode = Some(super::Mode { width, height});
|
state.current_mode = Some(super::Mode { width, height});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
None => eprintln!("Wayland error: Got mode on unknown output"),
|
None => log_print!(
|
||||||
|
logging::Level::Warning,
|
||||||
|
"Got mode on unknown output",
|
||||||
|
),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,7 +177,10 @@ pub mod c {
|
|||||||
let output = find_output_mut(&mut collection, wl_output);
|
let output = find_output_mut(&mut collection, wl_output);
|
||||||
match output {
|
match output {
|
||||||
Some(output) => { output.current = output.pending.clone(); }
|
Some(output) => { output.current = output.pending.clone(); }
|
||||||
None => eprintln!("Wayland error: Got done on unknown output"),
|
None => log_print!(
|
||||||
|
logging::Level::Warning,
|
||||||
|
"Got done on unknown output",
|
||||||
|
),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,7 +196,10 @@ pub mod c {
|
|||||||
.map(|o| &mut o.pending);
|
.map(|o| &mut o.pending);
|
||||||
match output_state {
|
match output_state {
|
||||||
Some(state) => { state.scale = factor; }
|
Some(state) => { state.scale = factor; }
|
||||||
None => eprintln!("Wayland error: Got done on unknown output"),
|
None => log_print!(
|
||||||
|
logging::Level::Warning,
|
||||||
|
"Got scale on unknown output",
|
||||||
|
),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -258,7 +272,10 @@ pub mod c {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
_ => {
|
_ => {
|
||||||
eprintln!("Not enough info registered on output");
|
log_print!(
|
||||||
|
logging::Level::Surprise,
|
||||||
|
"Not enough info received on output",
|
||||||
|
);
|
||||||
0
|
0
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
132
src/popover.rs
132
src/popover.rs
@ -4,8 +4,10 @@ use gio;
|
|||||||
use gtk;
|
use gtk;
|
||||||
use std::ffi::CString;
|
use std::ffi::CString;
|
||||||
use ::layout::c::{ Bounds, EekGtkKeyboard };
|
use ::layout::c::{ Bounds, EekGtkKeyboard };
|
||||||
use ::locale::{ Translation, compare_current_locale };
|
use ::locale;
|
||||||
|
use ::locale::{ OwnedTranslation, Translation, compare_current_locale };
|
||||||
use ::locale_config::system_locale;
|
use ::locale_config::system_locale;
|
||||||
|
use ::logging;
|
||||||
use ::manager;
|
use ::manager;
|
||||||
use ::resources;
|
use ::resources;
|
||||||
|
|
||||||
@ -17,6 +19,7 @@ use glib::variant::ToVariant;
|
|||||||
use gtk::PopoverExt;
|
use gtk::PopoverExt;
|
||||||
use gtk::WidgetExt;
|
use gtk::WidgetExt;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
use ::logging::Warn;
|
||||||
|
|
||||||
mod variants {
|
mod variants {
|
||||||
use glib;
|
use glib;
|
||||||
@ -94,7 +97,7 @@ mod variants {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn make_menu_builder(inputs: Vec<(&str, Translation)>) -> gtk::Builder {
|
fn make_menu_builder(inputs: Vec<(&str, OwnedTranslation)>) -> gtk::Builder {
|
||||||
let mut xml: Vec<u8> = Vec::new();
|
let mut xml: Vec<u8> = Vec::new();
|
||||||
writeln!(
|
writeln!(
|
||||||
xml,
|
xml,
|
||||||
@ -194,6 +197,81 @@ fn get_current_layout(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Translates all provided layout names according to current locale,
|
||||||
|
/// for the purpose of display (i.e. errors will be caught and reported)
|
||||||
|
fn translate_layout_names(layouts: &Vec<LayoutId>) -> Vec<OwnedTranslation> {
|
||||||
|
// This procedure is rather ugly...
|
||||||
|
// Xkb lookup *must not* be applied to non-system layouts,
|
||||||
|
// so both translators can't be merged into one lookup table,
|
||||||
|
// therefore must be done in two steps.
|
||||||
|
// `XkbInfo` being temporary also means
|
||||||
|
// that its return values must be copied,
|
||||||
|
// forcing the use of `OwnedTranslation`.
|
||||||
|
enum Status {
|
||||||
|
/// xkb names should get all translated here
|
||||||
|
Translated(OwnedTranslation),
|
||||||
|
/// Builtin names need builtin translations
|
||||||
|
Remaining(String),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attempt to take all xkb names from gnome-desktop's xkb info.
|
||||||
|
let xkb_translator = locale::XkbInfo::new();
|
||||||
|
|
||||||
|
let translated_names = layouts.iter()
|
||||||
|
.map(|id| match id {
|
||||||
|
LayoutId::System { name, kind: _ } => {
|
||||||
|
xkb_translator.get_display_name(name)
|
||||||
|
.map(|s| Status::Translated(OwnedTranslation(s)))
|
||||||
|
.or_print(
|
||||||
|
logging::Problem::Surprise,
|
||||||
|
&format!("No display name for xkb layout {}", name),
|
||||||
|
).unwrap_or_else(|| Status::Remaining(name.clone()))
|
||||||
|
},
|
||||||
|
LayoutId::Local(name) => Status::Remaining(name.clone()),
|
||||||
|
});
|
||||||
|
|
||||||
|
// Non-xkb layouts and weird xkb layouts
|
||||||
|
// still need to be looked up in the internal database.
|
||||||
|
let builtin_translations = system_locale()
|
||||||
|
.map(|locale|
|
||||||
|
locale.tags_for("messages")
|
||||||
|
.next().unwrap() // guaranteed to exist
|
||||||
|
.as_ref()
|
||||||
|
.to_owned()
|
||||||
|
)
|
||||||
|
.or_print(logging::Problem::Surprise, "No locale detected")
|
||||||
|
.and_then(|lang| {
|
||||||
|
resources::get_layout_names(lang.as_str())
|
||||||
|
.or_print(
|
||||||
|
logging::Problem::Surprise,
|
||||||
|
&format!("No translations for locale {}", lang),
|
||||||
|
)
|
||||||
|
});
|
||||||
|
|
||||||
|
match builtin_translations {
|
||||||
|
Some(translations) => {
|
||||||
|
translated_names
|
||||||
|
.map(|status| match status {
|
||||||
|
Status::Remaining(name) => {
|
||||||
|
translations.get(name.as_str())
|
||||||
|
.unwrap_or(&Translation(name.as_str()))
|
||||||
|
.to_owned()
|
||||||
|
},
|
||||||
|
Status::Translated(t) => t,
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
},
|
||||||
|
None => {
|
||||||
|
translated_names
|
||||||
|
.map(|status| match status {
|
||||||
|
Status::Remaining(name) => OwnedTranslation(name),
|
||||||
|
Status::Translated(t) => t,
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn show(
|
pub fn show(
|
||||||
window: EekGtkKeyboard,
|
window: EekGtkKeyboard,
|
||||||
position: Bounds,
|
position: Bounds,
|
||||||
@ -218,46 +296,21 @@ pub fn show(
|
|||||||
.chain(overlay_layouts)
|
.chain(overlay_layouts)
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let translations = system_locale()
|
let translated_names = translate_layout_names(&all_layouts);
|
||||||
.map(|locale|
|
|
||||||
locale.tags_for("messages")
|
|
||||||
.next().unwrap() // guaranteed to exist
|
|
||||||
.as_ref()
|
|
||||||
.to_owned()
|
|
||||||
)
|
|
||||||
.and_then(|lang| resources::get_layout_names(lang.as_str()));
|
|
||||||
|
|
||||||
let translated_names = all_layouts.iter()
|
|
||||||
.map(LayoutId::get_name);
|
|
||||||
let translated_names: Vec<Translation> = match translations {
|
|
||||||
Some(translations) => {
|
|
||||||
translated_names
|
|
||||||
.map(move |name| {
|
|
||||||
translations.get(name)
|
|
||||||
.map(|translation| translation.clone())
|
|
||||||
.unwrap_or(Translation(name))
|
|
||||||
})
|
|
||||||
.collect()
|
|
||||||
},
|
|
||||||
None => {
|
|
||||||
translated_names.map(|name| Translation(name))
|
|
||||||
.collect()
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
// sorted collection of human and machine names
|
// sorted collection of human and machine names
|
||||||
let mut human_names: Vec<(Translation, LayoutId)> = translated_names
|
let mut human_names: Vec<(OwnedTranslation, LayoutId)> = translated_names
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.zip(all_layouts.clone().into_iter())
|
.zip(all_layouts.clone().into_iter())
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
human_names.sort_unstable_by(|(tr_a, _), (tr_b, _)| {
|
human_names.sort_unstable_by(|(tr_a, _), (tr_b, _)| {
|
||||||
compare_current_locale(tr_a.0, tr_b.0)
|
compare_current_locale(&tr_a.0, &tr_b.0)
|
||||||
});
|
});
|
||||||
|
|
||||||
// GVariant doesn't natively support `enum`s,
|
// GVariant doesn't natively support `enum`s,
|
||||||
// so the `choices` vector will serve as a lookup table.
|
// so the `choices` vector will serve as a lookup table.
|
||||||
let choices_with_translations: Vec<(String, (Translation, LayoutId))>
|
let choices_with_translations: Vec<(String, (OwnedTranslation, LayoutId))>
|
||||||
= human_names.into_iter()
|
= human_names.into_iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.map(|(i, human_entry)| {(
|
.map(|(i, human_entry)| {(
|
||||||
@ -268,7 +321,7 @@ pub fn show(
|
|||||||
|
|
||||||
let builder = make_menu_builder(
|
let builder = make_menu_builder(
|
||||||
choices_with_translations.iter()
|
choices_with_translations.iter()
|
||||||
.map(|(id, (translation, _))| (id.as_str(), translation.clone()))
|
.map(|(id, (translation, _))| (id.as_str(), (*translation).clone()))
|
||||||
.collect()
|
.collect()
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -308,10 +361,10 @@ pub fn show(
|
|||||||
match state {
|
match state {
|
||||||
Some(v) => {
|
Some(v) => {
|
||||||
v.get::<String>()
|
v.get::<String>()
|
||||||
.or_else(|| {
|
.or_print(
|
||||||
eprintln!("Variant is not string: {:?}", v);
|
logging::Problem::Bug,
|
||||||
None
|
&format!("Variant is not string: {:?}", v)
|
||||||
})
|
)
|
||||||
.map(|state| {
|
.map(|state| {
|
||||||
let (_id, layout) = choices.iter()
|
let (_id, layout) = choices.iter()
|
||||||
.find(
|
.find(
|
||||||
@ -323,7 +376,10 @@ pub fn show(
|
|||||||
)
|
)
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
None => eprintln!("No variant selected"),
|
None => log_print!(
|
||||||
|
logging::Level::Debug,
|
||||||
|
"No variant selected",
|
||||||
|
),
|
||||||
};
|
};
|
||||||
menu_inner.popdown();
|
menu_inner.popdown();
|
||||||
});
|
});
|
||||||
|
|||||||
@ -11,6 +11,7 @@ use std::iter::FromIterator;
|
|||||||
// and what a convenience layout. "_wide" is not a layout,
|
// and what a convenience layout. "_wide" is not a layout,
|
||||||
// neither is "number"
|
// neither is "number"
|
||||||
const KEYBOARDS: &[(*const str, *const str)] = &[
|
const KEYBOARDS: &[(*const str, *const str)] = &[
|
||||||
|
// layouts
|
||||||
("us", include_str!("../data/keyboards/us.yaml")),
|
("us", include_str!("../data/keyboards/us.yaml")),
|
||||||
("us_wide", include_str!("../data/keyboards/us_wide.yaml")),
|
("us_wide", include_str!("../data/keyboards/us_wide.yaml")),
|
||||||
("de", include_str!("../data/keyboards/de.yaml")),
|
("de", include_str!("../data/keyboards/de.yaml")),
|
||||||
@ -24,6 +25,7 @@ const KEYBOARDS: &[(*const str, *const str)] = &[
|
|||||||
("no", include_str!("../data/keyboards/no.yaml")),
|
("no", include_str!("../data/keyboards/no.yaml")),
|
||||||
("number", include_str!("../data/keyboards/number.yaml")),
|
("number", include_str!("../data/keyboards/number.yaml")),
|
||||||
("se", include_str!("../data/keyboards/se.yaml")),
|
("se", include_str!("../data/keyboards/se.yaml")),
|
||||||
|
// layout+overlay
|
||||||
("terminal", include_str!("../data/keyboards/terminal.yaml")),
|
("terminal", include_str!("../data/keyboards/terminal.yaml")),
|
||||||
// Overlays
|
// Overlays
|
||||||
("emoji", include_str!("../data/keyboards/emoji.yaml")),
|
("emoji", include_str!("../data/keyboards/emoji.yaml")),
|
||||||
@ -44,7 +46,8 @@ pub fn get_keyboard(needle: &str) -> Option<&'static str> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const OVERLAY_NAMES: &[*const str] = &[
|
const OVERLAY_NAMES: &[*const str] = &[
|
||||||
"emoji"
|
"emoji",
|
||||||
|
"terminal",
|
||||||
];
|
];
|
||||||
|
|
||||||
pub fn get_overlays() -> Vec<&'static str> {
|
pub fn get_overlays() -> Vec<&'static str> {
|
||||||
|
|||||||
@ -67,9 +67,11 @@ on_name_lost (GDBusConnection *connection,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
// TODO: could conceivable continue working
|
// TODO: could conceivable continue working
|
||||||
|
// if intrnal changes stop sending dbus changes
|
||||||
(void)connection;
|
(void)connection;
|
||||||
(void)name;
|
(void)name;
|
||||||
(void)user_data;
|
(void)user_data;
|
||||||
|
g_error("DBus unavailable, unclear how to continue.");
|
||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
13
src/style.rs
13
src/style.rs
@ -16,9 +16,10 @@
|
|||||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.Free
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.Free
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*! CSS data loading */
|
/*! CSS data loading. */
|
||||||
|
|
||||||
use std::env;
|
use std::env;
|
||||||
|
use ::logging;
|
||||||
|
|
||||||
use glib::object::ObjectExt;
|
use glib::object::ObjectExt;
|
||||||
use logging::Warn;
|
use logging::Warn;
|
||||||
@ -83,7 +84,11 @@ fn get_theme_name(settings: >k::Settings) -> GtkTheme {
|
|||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
match &e {
|
match &e {
|
||||||
env::VarError::NotPresent => {},
|
env::VarError::NotPresent => {},
|
||||||
e => eprintln!("GTK_THEME variable invalid: {}", e),
|
// maybe TODO: forward this warning?
|
||||||
|
e => log_print!(
|
||||||
|
logging::Level::Surprise,
|
||||||
|
"GTK_THEME variable invalid: {}", e,
|
||||||
|
),
|
||||||
};
|
};
|
||||||
e
|
e
|
||||||
}).ok();
|
}).ok();
|
||||||
@ -93,13 +98,13 @@ fn get_theme_name(settings: >k::Settings) -> GtkTheme {
|
|||||||
None => GtkTheme {
|
None => GtkTheme {
|
||||||
name: {
|
name: {
|
||||||
settings.get_property("gtk-theme-name")
|
settings.get_property("gtk-theme-name")
|
||||||
.ok_warn("No theme name")
|
.or_print(logging::Problem::Surprise, "No theme name")
|
||||||
.and_then(|value| value.get::<String>())
|
.and_then(|value| value.get::<String>())
|
||||||
.unwrap_or(DEFAULT_THEME_NAME.into())
|
.unwrap_or(DEFAULT_THEME_NAME.into())
|
||||||
},
|
},
|
||||||
variant: {
|
variant: {
|
||||||
settings.get_property("gtk-application-prefer-dark-theme")
|
settings.get_property("gtk-application-prefer-dark-theme")
|
||||||
.ok_warn("No settings key")
|
.or_print(logging::Problem::Surprise, "No settings key")
|
||||||
.and_then(|value| value.get::<bool>())
|
.and_then(|value| value.get::<bool>())
|
||||||
.and_then(|dark_preferred| match dark_preferred {
|
.and_then(|dark_preferred| match dark_preferred {
|
||||||
true => Some("dark".into()),
|
true => Some("dark".into()),
|
||||||
|
|||||||
19
src/tests.rs
19
src/tests.rs
@ -1,17 +1,22 @@
|
|||||||
/*! Testing functionality */
|
/*! Testing functionality */
|
||||||
|
|
||||||
use ::data::Layout;
|
use ::data::Layout;
|
||||||
|
use ::logging;
|
||||||
use xkbcommon::xkb;
|
use xkbcommon::xkb;
|
||||||
|
|
||||||
use ::logging::WarningHandler;
|
|
||||||
|
|
||||||
|
|
||||||
pub struct CountAndPrint(u32);
|
pub struct CountAndPrint(u32);
|
||||||
|
|
||||||
impl WarningHandler for CountAndPrint {
|
impl logging::Handler for CountAndPrint {
|
||||||
fn handle(&mut self, warning: &str) {
|
fn handle(&mut self, level: logging::Level, warning: &str) {
|
||||||
self.0 = self.0 + 1;
|
use logging::Level::*;
|
||||||
println!("{}", warning);
|
match level {
|
||||||
|
Panic | Bug | Error | Warning | Surprise => {
|
||||||
|
self.0 += 1;
|
||||||
|
},
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
logging::Print{}.handle(level, warning)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,7 +39,7 @@ fn check_layout(layout: Layout) {
|
|||||||
let (layout, handler) = layout.build(handler);
|
let (layout, handler) = layout.build(handler);
|
||||||
|
|
||||||
if handler.0 > 0 {
|
if handler.0 > 0 {
|
||||||
println!("{} mistakes in layout", handler.0)
|
println!("{} problems while parsing layout", handler.0)
|
||||||
}
|
}
|
||||||
|
|
||||||
let layout = layout.expect("layout broken");
|
let layout = layout.expect("layout broken");
|
||||||
|
|||||||
@ -190,6 +190,11 @@ impl<T> Borrow<Rc<T>> for Pointer<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub trait WarningHandler {
|
||||||
|
/// Handle a warning
|
||||||
|
fn handle(&mut self, warning: &str);
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|||||||
Reference in New Issue
Block a user