Make compatible with latest cargo deps

This commit is contained in:
Tor
2022-01-30 17:47:57 +00:00
committed by dcz
parent dfe2c60646
commit 417fe35e91
14 changed files with 196 additions and 74 deletions

View File

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

View File

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

View File

@ -11,16 +11,11 @@ use ::manager;
use ::resources;
// Traits
use gio::ActionMapExt;
use gio::SettingsExt;
#[cfg(feature = "gio_v0_5")]
use gio::SimpleActionExt;
use gio::prelude::ActionMapExt;
use gio::prelude::SettingsExt;
use glib::translate::FromGlibPtrNone;
use glib::variant::ToVariant;
#[cfg(not(feature = "gtk_v0_5"))]
use gtk::prelude::*;
use gtk::PopoverExt;
use gtk::WidgetExt;
use ::logging::Warn;
mod c {
@ -110,8 +105,13 @@ mod variants {
fn get_settings(schema_name: &str) -> Option<gio::Settings> {
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,
logging::Problem::Surprise,
"No gsettings schemas installed.",
@ -130,7 +130,11 @@ fn get_settings(schema_name: &str) -> Option<gio::Settings> {
fn set_layout(kind: String, name: String) {
let settings = get_settings("org.gnome.desktop.input-sources");
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 current = (kind.clone(), name.clone());
let inputs = variants::get_tuples(inputs).into_iter()
.filter(|t| t != &current);
@ -254,7 +258,11 @@ pub fn show(
let settings = get_settings("org.gnome.desktop.input-sources");
let inputs = 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();
variants::get_tuples(inputs)
})
.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 = builder.get_object("app-menu").unwrap();
let model: gio::Menu = {
#[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() {
let detailed_action = format!("layout::{}", l.get_name());
@ -294,7 +312,11 @@ pub fn show(
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);
menu.set_pointing_to(&gtk::Rectangle {
x: position.x.ceil() as i32,
y: position.y.ceil() as i32,

View File

@ -21,7 +21,7 @@
use std::env;
use ::logging;
use glib::object::ObjectExt;
use glib::prelude::ObjectExt;
use logging::Warn;
/// Gathers stuff defined in C or called by C
@ -31,7 +31,7 @@ pub mod c {
use gtk;
use gtk_sys;
use gtk::CssProviderExt;
use gtk::prelude::CssProviderExt;
use glib::translate::ToGlibPtr;
/// Loads the layout style based on current theme
@ -40,8 +40,13 @@ pub mod c {
pub extern "C"
fn squeek_load_style() -> *const gtk_sys::GtkCssProvider {
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);
@ -93,19 +98,31 @@ fn get_theme_name(settings: &gtk::Settings) -> GtkTheme {
e
}).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 {
Some(theme) => theme,
None => GtkTheme {
name: {
settings.get_property("gtk-theme-name")
prop(settings, "gtk-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())
},
variant: {
settings.get_property("gtk-application-prefer-dark-theme")
prop(settings, "gtk-application-prefer-dark-theme")
.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 {
true => Some("dark".into()),
false => None,