Merge branch 'Torbuntu-master-patch-58062' into 'master'

Make compatible with latest cargo deps

See merge request World/Phosh/squeekboard!527
This commit is contained in:
dcz
2022-01-30 17:47:57 +00:00
14 changed files with 196 additions and 74 deletions

View File

@ -72,6 +72,27 @@ build_deb:arm64:
- debuild -i -us -uc -b - debuild -i -us -uc -b
- cp ../*.deb . - cp ../*.deb .
build_deb:future:
image: debian:sid
tags:
- aarch64
stage: build
artifacts:
paths:
- '*.deb'
script:
- rm -f ../*.deb
- mv debian/control-newer debian/control
- apt-get -y build-dep .
- apt-get -y install devscripts
- REV=$(git log -1 --format=%h)
- VER=$(dpkg-parsechangelog -SVersion)
- DEBFULLNAME="Librem5 CI"
- EMAIL="librem5-builds@lists.community.puri.sm"
- dch -v"$VER+librem5ci$CI_PIPELINE_ID.$REV" "$MSG"
- debuild -i -us -uc -b
- cp ../*.deb .
test_lintian: test_lintian:
stage: test stage: test
needs: needs:

View File

@ -5,6 +5,9 @@ clap = { version = "2.33.*", default-features = false }
[dependencies.cairo-rs] [dependencies.cairo-rs]
version = "0.7.*" version = "0.7.*"
[dependencies.cairo-sys-rs]
version = "0.9"
[dependencies.gdk] [dependencies.gdk]
version = "0.11.*" version = "0.11.*"
@ -16,6 +19,14 @@ features = ["v2_44"]
version = "0.8.*" version = "0.8.*"
features = ["v2_44"] features = ["v2_44"]
[dependencies.glib-sys]
version = "*"
features = ["v2_44"]
[dependencies.gtk] [dependencies.gtk]
version = "0.7.*" version = "0.7.*"
features = ["v3_22"] features = ["v3_22"]
[dependencies.gtk-sys]
version = "0.9"
features = ["v3_22"]

View File

@ -1,21 +0,0 @@
# Dependencies which change based on build flags
bitflags = "1.0.*"
clap = { version = "2.32.*", default-features = false }
[dependencies.cairo-rs]
version = "0.5.*"
[dependencies.gdk]
version = "0.9.*"
[dependencies.gio]
version = "0.5.*"
features = ["v2_44"]
[dependencies.glib]
version = "0.6.*"
features = ["v2_44"]
[dependencies.gtk]
version = "0.5.*"
features = ["v3_22"]

33
Cargo.deps.newer Normal file
View File

@ -0,0 +1,33 @@
# Dependencies which change based on build flags
# For the newer-than-Byzantium config
bitflags = "1.3.*"
clap = { version = "2.33.*", default-features = false }
[dependencies.cairo-rs]
version = "0.14.*"
[dependencies.cairo-sys-rs]
version = "0.14.*"
[dependencies.gdk]
version = "0.14.*"
[dependencies.gio]
version = "0.14.*"
features = ["v2_58"]
[dependencies.glib]
version = "0.14.*"
features = ["v2_58"]
[dependencies.glib-sys]
version = "0.14.*"
features = ["v2_58"]
[dependencies.gtk]
version = "0.14.*"
features = ["v3_22"]
[dependencies.gtk-sys]
version = "0.14.*"
features = ["v3_22"]

View File

@ -17,22 +17,9 @@ name = "test_layout"
path = "@path@/examples/test_layout.rs" path = "@path@/examples/test_layout.rs"
[features] [features]
gio_v0_5 = [] glib_v0_14 = []
gtk_v0_5 = []
rustc_less_1_36 = []
# Dependencies which don't change based on build flags # Dependencies which don't change based on build flags
[dependencies.cairo-sys-rs]
version = "0.9"
[dependencies.glib-sys]
version = "*"
features = ["v2_44"]
[dependencies.gtk-sys]
version = "0.9"
features = ["v3_22"]
[dependencies] [dependencies]
maplit = "1.0.*" maplit = "1.0.*"
serde = { version = "1.0.*", features = ["derive"] } serde = { version = "1.0.*", features = ["derive"] }

58
debian/control-newer vendored Normal file
View File

@ -0,0 +1,58 @@
Source: squeekboard
Section: x11
Priority: optional
Maintainer: Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm>
Build-Depends:
cargo,
debhelper-compat (= 13),
meson (>=0.51.0),
ninja-build,
pkg-config,
libglib2.0-dev,
libgnome-desktop-3-dev,
libgtk-3-dev,
libfeedback-dev,
librust-bitflags-dev (>= 1.0),
librust-clap-dev (>= 2.32),
librust-gio+v2-58-dev,
librust-glib+v2-58-dev,
librust-glib-sys-dev,
librust-gtk+v3-22-dev (>= 0.5),
librust-gtk-sys-dev,
librust-maplit-1-dev (>= 1.0),
librust-serde-derive-1-dev (>= 1.0),
librust-serde-yaml-0.8-dev (>= 0.8),
librust-xkbcommon-0.4+wayland-dev (>= 0.4),
libwayland-dev (>= 1.16),
lsb-release,
python3,
python3-ruamel.yaml,
rustc,
wayland-protocols (>= 1.14),
Standards-Version: 4.1.3
Homepage: https://source.puri.sm/Librem5/squeekboard
Package: squeekboard
Architecture: linux-any
Depends:
# for the Adwaita-dark theme
gnome-themes-extra-data,
${shlibs:Depends},
${misc:Depends},
Breaks:
librem5-base (<< 24),
Description: On-screen keyboard for Wayland
Virtual keyboard supporting Wayland, built primarily for the Librem 5 phone.
Package: squeekboard-devel
Architecture: linux-any
Depends:
python3,
python3-gi,
${shlibs:Depends},
${misc:Depends},
Description: Resources for making Squeekboard layouts
Tools for creating and testing Squeekboard layouts:
.
* squeekboard-entry
* squeekboard-test-layout

8
debian/rules vendored
View File

@ -25,10 +25,10 @@ export RUSTFLAGS = --remap-path-prefix=$(CURDIR)=/remap-pwd $(xgot)
distrel := $(shell lsb_release --codename --short) distrel := $(shell lsb_release --codename --short)
ifneq (,$(filter $(distrel),buster amber)) ifneq (,$(filter $(distrel),sid))
legacy = true newer = true
else else
legacy = false newer = false
endif endif
%: %:
@ -38,6 +38,6 @@ endif
# causing Cargo to refuse to build with a crates.io copy # causing Cargo to refuse to build with a crates.io copy
override_dh_auto_configure: override_dh_auto_configure:
[ ! -f Cargo.lock ] || rm Cargo.lock [ ! -f Cargo.lock ] || rm Cargo.lock
dh_auto_configure -- -Dlegacy=$(legacy) dh_auto_configure -- -Dnewer=$(newer)
override_dh_autoreconf: override_dh_autoreconf:

View File

@ -99,9 +99,9 @@ cargo_toml_base = configure_file(
cargo_deps = files('Cargo.deps') cargo_deps = files('Cargo.deps')
if get_option('legacy') == true if get_option('newer') == true
cargo_build_flags += ['--features', 'gtk_v0_5,gio_v0_5,rustc_less_1_36'] cargo_build_flags += ['--features', 'glib_v0_14']
cargo_deps = files('Cargo.deps.legacy') cargo_deps = files('Cargo.deps.newer')
endif endif
cat = find_program('cat') cat = find_program('cat')

View File

@ -7,9 +7,9 @@ option('tests',
type: 'boolean', value: true, type: 'boolean', value: true,
description: 'Whether to compile unit tests') description: 'Whether to compile unit tests')
option('legacy', option('newer',
type: 'boolean', value: false, type: 'boolean', value: false,
description: 'Build with Deban Buster versions of dependencies') description: 'Build with dependencies newer than those of Byzantium')
option('strict', option('strict',
type: 'boolean', value: true, type: 'boolean', value: true,

View File

@ -10,7 +10,7 @@ use ::layout::c::{ Bounds, EekGtkKeyboard, Point };
use ::submission::c::Submission as CSubmission; use ::submission::c::Submission as CSubmission;
use glib::translate::FromGlibPtrNone; use glib::translate::FromGlibPtrNone;
use gtk::WidgetExt; use gtk::prelude::WidgetExt;
use std::collections::HashSet; use std::collections::HashSet;
use std::ffi::CStr; use std::ffi::CStr;

View File

@ -87,7 +87,7 @@ mod c {
let receiver = Rc::try_unwrap(receiver).expect("References still present"); let receiver = Rc::try_unwrap(receiver).expect("References still present");
let receiver = receiver.into_inner(); let receiver = receiver.into_inner();
let ctx = MainContext::default(); let ctx = MainContext::default();
ctx.acquire(); let _acqu = ctx.acquire();
receiver.attach( receiver.attach(
Some(&ctx), Some(&ctx),
move |msg| { move |msg| {
@ -95,6 +95,7 @@ mod c {
Continue(true) Continue(true)
}, },
); );
#[cfg(not(feature = "glib_v0_14"))]
ctx.release(); ctx.release();
} }

View File

@ -11,16 +11,11 @@ use ::manager;
use ::resources; use ::resources;
// Traits // Traits
use gio::ActionMapExt; use gio::prelude::ActionMapExt;
use gio::SettingsExt; use gio::prelude::SettingsExt;
#[cfg(feature = "gio_v0_5")]
use gio::SimpleActionExt;
use glib::translate::FromGlibPtrNone; use glib::translate::FromGlibPtrNone;
use glib::variant::ToVariant; use glib::variant::ToVariant;
#[cfg(not(feature = "gtk_v0_5"))]
use gtk::prelude::*; use gtk::prelude::*;
use gtk::PopoverExt;
use gtk::WidgetExt;
use ::logging::Warn; use ::logging::Warn;
mod c { mod c {
@ -110,8 +105,13 @@ mod variants {
fn get_settings(schema_name: &str) -> Option<gio::Settings> { fn get_settings(schema_name: &str) -> Option<gio::Settings> {
let mut error_handler = logging::Print{}; let mut error_handler = logging::Print{};
gio::SettingsSchemaSource::get_default()
.or_warn( #[cfg(feature = "glib_v0_14")]
let ss = gio::SettingsSchemaSource::default();
#[cfg(not(feature = "glib_v0_14"))]
let ss = gio::SettingsSchemaSource::get_default();
ss.or_warn(
&mut error_handler, &mut error_handler,
logging::Problem::Surprise, logging::Problem::Surprise,
"No gsettings schemas installed.", "No gsettings schemas installed.",
@ -130,7 +130,11 @@ fn get_settings(schema_name: &str) -> Option<gio::Settings> {
fn set_layout(kind: String, name: String) { fn set_layout(kind: String, name: String) {
let settings = get_settings("org.gnome.desktop.input-sources"); let settings = get_settings("org.gnome.desktop.input-sources");
if let Some(settings) = settings { if let Some(settings) = settings {
#[cfg(feature = "glib_v0_14")]
let inputs = settings.value("sources");
#[cfg(not(feature = "glib_v0_14"))]
let inputs = settings.get_value("sources").unwrap(); let inputs = settings.get_value("sources").unwrap();
let current = (kind.clone(), name.clone()); let current = (kind.clone(), name.clone());
let inputs = variants::get_tuples(inputs).into_iter() let inputs = variants::get_tuples(inputs).into_iter()
.filter(|t| t != &current); .filter(|t| t != &current);
@ -254,7 +258,11 @@ pub fn show(
let settings = get_settings("org.gnome.desktop.input-sources"); let settings = get_settings("org.gnome.desktop.input-sources");
let inputs = settings let inputs = settings
.map(|settings| { .map(|settings| {
#[cfg(feature = "glib_v0_14")]
let inputs = settings.value("sources");
#[cfg(not(feature = "glib_v0_14"))]
let inputs = settings.get_value("sources").unwrap(); let inputs = settings.get_value("sources").unwrap();
variants::get_tuples(inputs) variants::get_tuples(inputs)
}) })
.unwrap_or_else(|| Vec::new()); .unwrap_or_else(|| Vec::new());
@ -285,8 +293,18 @@ pub fn show(
} }
}); });
let builder = gtk::Builder::new_from_resource("/sm/puri/squeekboard/popover.ui"); let model: gio::Menu = {
let model: gio::Menu = builder.get_object("app-menu").unwrap(); #[cfg(feature = "glib_v0_14")]
{
let builder = gtk::Builder::from_resource("/sm/puri/squeekboard/popover.ui");
builder.object("app-menu").unwrap()
}
#[cfg(not(feature = "glib_v0_14"))]
{
let builder = gtk::Builder::new_from_resource("/sm/puri/squeekboard/popover.ui");
builder.get_object("app-menu").unwrap()
}
};
for (tr, l) in human_names.iter().rev() { for (tr, l) in human_names.iter().rev() {
let detailed_action = format!("layout::{}", l.get_name()); let detailed_action = format!("layout::{}", l.get_name());
@ -294,7 +312,11 @@ pub fn show(
model.prepend_item (&item); model.prepend_item (&item);
} }
#[cfg(feature = "glib_v0_14")]
let menu = gtk::Popover::from_model(Some(&window), &model);
#[cfg(not(feature = "glib_v0_14"))]
let menu = gtk::Popover::new_from_model(Some(&window), &model); let menu = gtk::Popover::new_from_model(Some(&window), &model);
menu.set_pointing_to(&gtk::Rectangle { menu.set_pointing_to(&gtk::Rectangle {
x: position.x.ceil() as i32, x: position.x.ceil() as i32,
y: position.y.ceil() as i32, y: position.y.ceil() as i32,

View File

@ -21,7 +21,7 @@
use std::env; use std::env;
use ::logging; use ::logging;
use glib::object::ObjectExt; use glib::prelude::ObjectExt;
use logging::Warn; use logging::Warn;
/// Gathers stuff defined in C or called by C /// Gathers stuff defined in C or called by C
@ -31,7 +31,7 @@ pub mod c {
use gtk; use gtk;
use gtk_sys; use gtk_sys;
use gtk::CssProviderExt; use gtk::prelude::CssProviderExt;
use glib::translate::ToGlibPtr; use glib::translate::ToGlibPtr;
/// Loads the layout style based on current theme /// Loads the layout style based on current theme
@ -40,8 +40,13 @@ pub mod c {
pub extern "C" pub extern "C"
fn squeek_load_style() -> *const gtk_sys::GtkCssProvider { fn squeek_load_style() -> *const gtk_sys::GtkCssProvider {
unsafe { gtk::set_initialized() }; unsafe { gtk::set_initialized() };
let theme = gtk::Settings::get_default()
.map(|settings| get_theme_name(&settings)); #[cfg(feature = "glib_v0_14")]
let theme = gtk::Settings::default();
#[cfg(not(feature = "glib_v0_14"))]
let theme = gtk::Settings::get_default();
let theme = theme.map(|settings| get_theme_name(&settings));
let css_name = path_from_theme(theme); let css_name = path_from_theme(theme);
@ -93,19 +98,31 @@ fn get_theme_name(settings: &gtk::Settings) -> GtkTheme {
e e
}).ok(); }).ok();
#[cfg(feature = "glib_v0_14")]
let prop = |s: &gtk::Settings, name| s.property(name);
#[cfg(not(feature = "glib_v0_14"))]
let prop = |s: &gtk::Settings, name| s.get_property(name);
#[cfg(feature = "glib_v0_14")]
fn check<T, E: std::fmt::Display>(v: Result<T, E>) -> Option<T> {
v.or_print(logging::Problem::Surprise, "Key not of expected type")
}
#[cfg(not(feature = "glib_v0_14"))]
fn check<T>(v: Option<T>) -> Option<T> { v }
match env_theme { match env_theme {
Some(theme) => theme, Some(theme) => theme,
None => GtkTheme { None => GtkTheme {
name: { name: {
settings.get_property("gtk-theme-name") prop(settings, "gtk-theme-name")
.or_print(logging::Problem::Surprise, "No theme name") .or_print(logging::Problem::Surprise, "No theme name")
.and_then(|value| value.get::<String>()) .and_then(|value| check(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") prop(settings, "gtk-application-prefer-dark-theme")
.or_print(logging::Problem::Surprise, "No settings key") .or_print(logging::Problem::Surprise, "No settings key")
.and_then(|value| value.get::<bool>()) .and_then(|value| check(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()),
false => None, false => None,

View File

@ -107,15 +107,8 @@ foreach layout : [
extra += ['allow_missing_return'] extra += ['allow_missing_return']
endif endif
# Older Cargo seens to be sensitive to something timeout = 30
# about the RUST_FLAGS env var, and rebuilds all tests when it's set,
# increasing test time by 2 orders of magnitude.
# Let it have its way.
if get_option('legacy') == true
timeout = 300
else
timeout = 30
endif
test( test(
'test_layout_' + layout, 'test_layout_' + layout,
cargo_script, cargo_script,