Compare commits
	
		
			1 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 35bc163107 | 
							
								
								
									
										20
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										20
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							@ -54,15 +54,6 @@ name = "cc"
 | 
			
		||||
version = "1.0.45"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "dbus"
 | 
			
		||||
version = "0.6.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "libdbus-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "dtoa"
 | 
			
		||||
version = "0.4.4"
 | 
			
		||||
@ -241,14 +232,6 @@ name = "libc"
 | 
			
		||||
version = "0.2.62"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "libdbus-sys"
 | 
			
		||||
version = "0.2.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "linked-hash-map"
 | 
			
		||||
version = "0.5.2"
 | 
			
		||||
@ -341,7 +324,6 @@ name = "rs"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "dbus 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "gio 0.5.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)",
 | 
			
		||||
@ -454,7 +436,6 @@ dependencies = [
 | 
			
		||||
"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 cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)" = "4fc9a35e1f4290eb9e5fc54ba6cf40671ed2a2514c3eeb2b2a908dda2ea5a1be"
 | 
			
		||||
"checksum dbus 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "48b5f0f36f1eebe901b0e6bee369a77ed3396334bf3f09abd46454a576f71819"
 | 
			
		||||
"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 gdk 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bcc52c7244046df9d959df87289f1fc5cca23f9f850bab0c967963e2ecb83a96"
 | 
			
		||||
@ -470,7 +451,6 @@ dependencies = [
 | 
			
		||||
"checksum gtk-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d487d333a4b87072e6bf9f2e55befa0ebef01b9496c2e263c0f4a1ff3d6c04b1"
 | 
			
		||||
"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 libdbus-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc12a3bc971424edbbf7edaf6e5740483444db63aa8e23d3751ff12a30f306f0"
 | 
			
		||||
"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 memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,6 @@ version = "0.1.0"
 | 
			
		||||
 | 
			
		||||
[dependencies]
 | 
			
		||||
bitflags = "1.0.*"
 | 
			
		||||
dbus = "0.6.*"
 | 
			
		||||
maplit = "1.0.*"
 | 
			
		||||
regex = "1.1.*"
 | 
			
		||||
serde = { version = "1.0.*", features = ["derive"] }
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
								
							@ -1,3 +1,10 @@
 | 
			
		||||
squeekboard (1.3.1) amber-phone; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Update and fix layouts and languages
 | 
			
		||||
  * Make tests less likely to fail
 | 
			
		||||
 | 
			
		||||
 -- Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm>  Wed, 20 Nov 2019 22:10:48 +0000
 | 
			
		||||
 | 
			
		||||
squeekboard (1.3.0) amber-phone; urgency=medium
 | 
			
		||||
 | 
			
		||||
  * Language selection popup
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								debian/control
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								debian/control
									
									
									
									
										vendored
									
									
								
							@ -12,7 +12,6 @@ Build-Depends:
 | 
			
		||||
 libgtk-3-dev,
 | 
			
		||||
 libcroco3-dev,
 | 
			
		||||
 librust-bitflags-1-dev (>= 1.0),
 | 
			
		||||
 librust-dbus-0.6-dev (>= 0.6),
 | 
			
		||||
 librust-gio+v2-44-dev,
 | 
			
		||||
 librust-glib+v2-44-dev,
 | 
			
		||||
 librust-glib-sys-dev,
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
project(
 | 
			
		||||
    'squeekboard',
 | 
			
		||||
    'c', 'rust',
 | 
			
		||||
    version: '1.3.0',
 | 
			
		||||
    version: '1.3.1',
 | 
			
		||||
    license: 'GPLv3',
 | 
			
		||||
    meson_version: '>=0.51.0',
 | 
			
		||||
    default_options: [
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,5 @@
 | 
			
		||||
#[macro_use]
 | 
			
		||||
extern crate bitflags;
 | 
			
		||||
extern crate dbus;
 | 
			
		||||
extern crate gio;
 | 
			
		||||
extern crate glib;
 | 
			
		||||
extern crate glib_sys;
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,8 @@
 | 
			
		||||
/*! Locale detection and management.
 | 
			
		||||
 * Based on https://github.com/rust-locale/locale_config
 | 
			
		||||
 * 
 | 
			
		||||
 * Modified for dbus querying.
 | 
			
		||||
 * This version doesn't need lazy_static.
 | 
			
		||||
 * Ready for deletion/replacement once Debian starts packaging this,
 | 
			
		||||
 * although this version doesn't need lazy_static.
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (c) 2016–2019 Jan Hudec <bulb@ucw.cz>
 | 
			
		||||
   Copyright (c) 2016 A.J. Gardner <aaron.j.gardner@gmail.com>
 | 
			
		||||
@ -11,13 +11,10 @@
 | 
			
		||||
   Copyright (c) 2019, Sophie Tauchert <999eagle@999eagle.moe>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
use dbus::Connection;
 | 
			
		||||
use regex::Regex;
 | 
			
		||||
use std::borrow::Cow;
 | 
			
		||||
use std::env;
 | 
			
		||||
 | 
			
		||||
use dbus::stdintf::org_freedesktop_dbus::Properties;
 | 
			
		||||
 | 
			
		||||
/// Errors that may be returned by `locale_config`.
 | 
			
		||||
#[derive(Copy,Clone,Debug,PartialEq,Eq)]
 | 
			
		||||
pub enum Error {
 | 
			
		||||
@ -466,23 +463,19 @@ fn tag(s: &str) -> Result<LanguageRange> {
 | 
			
		||||
 | 
			
		||||
// TODO: Read /etc/locale.alias
 | 
			
		||||
fn tag_inv(s: &str) -> LanguageRange {
 | 
			
		||||
    tag(s).unwrap_or_else(|_e| LanguageRange::invariant())
 | 
			
		||||
    tag(s).unwrap_or(LanguageRange::invariant())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Returns the locale using Unix roles and the given lookup method.
 | 
			
		||||
// TODO: maybe don't drop all errors on the floor like that
 | 
			
		||||
fn unix_locale<'a, 'b, F, E>(get: F) -> Locale
 | 
			
		||||
    where F: Fn(&'a str) -> ::std::result::Result<String, E>
 | 
			
		||||
{
 | 
			
		||||
pub fn system_locale() -> Option<Locale> {
 | 
			
		||||
    // LC_ALL overrides everything
 | 
			
		||||
    if let Ok(all) = get("LC_ALL") {
 | 
			
		||||
    if let Ok(all) = env::var("LC_ALL") {
 | 
			
		||||
        if let Ok(t) = tag(all.as_ref()) {
 | 
			
		||||
            return Locale::from(t);
 | 
			
		||||
            return Some(Locale::from(t));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    // LANG is default
 | 
			
		||||
    let mut loc =
 | 
			
		||||
        if let Ok(lang) = get("LANG") {
 | 
			
		||||
        if let Ok(lang) = env::var("LANG") {
 | 
			
		||||
            Locale::from(tag_inv(lang.as_ref()))
 | 
			
		||||
        } else {
 | 
			
		||||
            Locale::invariant()
 | 
			
		||||
@ -501,7 +494,7 @@ fn unix_locale<'a, 'b, F, E>(get: F) -> Locale
 | 
			
		||||
        ("telephone",   "LC_TELEPHONE"),
 | 
			
		||||
        ("measurement", "LC_MEASUREMENT"),
 | 
			
		||||
    ].iter() {
 | 
			
		||||
        if let Ok(val) = get(var) {
 | 
			
		||||
        if let Ok(val) = env::var(var) {
 | 
			
		||||
            if let Ok(tag) = tag(val.as_ref())
 | 
			
		||||
            {
 | 
			
		||||
                loc.add_category(cat, &tag);
 | 
			
		||||
@ -509,7 +502,7 @@ fn unix_locale<'a, 'b, F, E>(get: F) -> Locale
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    // LANGUAGE defines fallbacks
 | 
			
		||||
    if let Ok(langs) = get("LANGUAGE") {
 | 
			
		||||
    if let Ok(langs) = env::var("LANGUAGE") {
 | 
			
		||||
        for i in langs.split(':') {
 | 
			
		||||
            if i != "" {
 | 
			
		||||
                if let Ok(tag) = tag(i) {
 | 
			
		||||
@ -518,44 +511,16 @@ fn unix_locale<'a, 'b, F, E>(get: F) -> Locale
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    loc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn env_locale() -> Locale {
 | 
			
		||||
    unix_locale(env::var)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn dbus_locale()
 | 
			
		||||
    -> std::result::Result<Locale, Box<dyn std::error::Error>> 
 | 
			
		||||
{
 | 
			
		||||
    let connection = Connection::get_private(dbus::BusType::Session)?;
 | 
			
		||||
    let property = connection.with_path(
 | 
			
		||||
        "org.freedesktop.locale1", "/org/freedesktop/locale1", 100
 | 
			
		||||
    );
 | 
			
		||||
    let locales: Vec<String>
 | 
			
		||||
        = property.get("org.freedesktop.locale1", "Locale")?;
 | 
			
		||||
    
 | 
			
		||||
    let val_pairs: Vec<(String, String)> = locales.into_iter().map(|s| {
 | 
			
		||||
        let mut splits = s.splitn(2, "=");
 | 
			
		||||
        (splits.next().unwrap().into(), splits.next().unwrap_or("").into())
 | 
			
		||||
    }).collect();
 | 
			
		||||
 | 
			
		||||
    Ok(unix_locale(|var| {
 | 
			
		||||
        match val_pairs.iter().find(|(name, _val)| name == &var) {
 | 
			
		||||
            Some((_name, val)) => Ok(val.clone()),
 | 
			
		||||
            None => Err(()),
 | 
			
		||||
        }
 | 
			
		||||
    }))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn system_locale() -> Locale {
 | 
			
		||||
    dbus_locale().unwrap_or_else(|_e| env_locale())
 | 
			
		||||
    if loc.as_ref() != "" {
 | 
			
		||||
        return Some(loc);
 | 
			
		||||
    } else {
 | 
			
		||||
        return None;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod test {
 | 
			
		||||
    use super::*;
 | 
			
		||||
    use super::LanguageRange;
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn unix_tags() {
 | 
			
		||||
 | 
			
		||||
@ -39,7 +39,6 @@ cc = meson.get_compiler('c')
 | 
			
		||||
 | 
			
		||||
deps = [
 | 
			
		||||
#  dependency('glib-2.0', version: '>=2.26.0'),
 | 
			
		||||
  dependency('dbus-1', version: '>=1.3'),
 | 
			
		||||
  dependency('gio-2.0', version: '>=2.26.0'),
 | 
			
		||||
  dependency('gtk+-3.0', version: '>=3.0'),
 | 
			
		||||
  dependency('libcroco-0.6'),
 | 
			
		||||
 | 
			
		||||
@ -110,11 +110,14 @@ pub fn show(window: EekGtkKeyboard, position: ::layout::c::Bounds) {
 | 
			
		||||
        .map(|(_kind, name)| name.as_str())
 | 
			
		||||
        .collect();
 | 
			
		||||
 | 
			
		||||
    let translations = resources::get_layout_names(system_locale()
 | 
			
		||||
        .tags_for("messages")
 | 
			
		||||
        .next().unwrap() // guaranteed to exist by locale_config
 | 
			
		||||
        .as_ref()
 | 
			
		||||
    );
 | 
			
		||||
    let translations = system_locale()
 | 
			
		||||
        .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()));
 | 
			
		||||
 | 
			
		||||
    // sorted collection of human and machine names
 | 
			
		||||
    let mut human_names: Vec<(&str, &str)> = match translations {
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user