core: layout: store availability of text insertion
This commit is contained in:
parent
c152dc8468
commit
c459405318
2 changed files with 74 additions and 2 deletions
|
|
@ -204,6 +204,12 @@ impl<D: Display, K: Keyboard> Button<D, K> {
|
|||
&self.modifiers
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub fn set_text_supported(&mut self, text_supp: bool)
|
||||
{
|
||||
self.layout.set_text_supported(text_supp)
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub fn update_keys_supported(&mut self)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ pub struct Part {
|
|||
val: KeyValue,
|
||||
|
||||
key_avail: bool,
|
||||
text_avail: bool,
|
||||
|
||||
presses: u32,
|
||||
}
|
||||
|
|
@ -298,6 +299,41 @@ impl Part {
|
|||
}
|
||||
}
|
||||
|
||||
fn keyvalue_has_text(val: &KeyValue) -> bool
|
||||
{
|
||||
match val {
|
||||
KeyValue(Keysym::BackSpace, _) => false,
|
||||
KeyValue(Keysym::Tab, _) => false,
|
||||
KeyValue(Keysym::Return, _) => false,
|
||||
KeyValue(Keysym::Escape, _) => false,
|
||||
KeyValue(Keysym::Home, _) => false,
|
||||
KeyValue(Keysym::Left, _) => false,
|
||||
KeyValue(Keysym::Up, _) => false,
|
||||
KeyValue(Keysym::Right, _) => false,
|
||||
KeyValue(Keysym::Down, _) => false,
|
||||
KeyValue(Keysym::Prior, _) => false,
|
||||
KeyValue(Keysym::Next, _) => false,
|
||||
KeyValue(Keysym::End, _) => false,
|
||||
KeyValue(Keysym::F1, _) => false,
|
||||
KeyValue(Keysym::F2, _) => false,
|
||||
KeyValue(Keysym::F3, _) => false,
|
||||
KeyValue(Keysym::F4, _) => false,
|
||||
KeyValue(Keysym::F5, _) => false,
|
||||
KeyValue(Keysym::F6, _) => false,
|
||||
KeyValue(Keysym::F7, _) => false,
|
||||
KeyValue(Keysym::F8, _) => false,
|
||||
KeyValue(Keysym::F9, _) => false,
|
||||
KeyValue(Keysym::F10, _) => false,
|
||||
KeyValue(Keysym::F11, _) => false,
|
||||
KeyValue(Keysym::F12, _) => false,
|
||||
KeyValue(Keysym::Delete, _) => false,
|
||||
|
||||
KeyValue(_, l) => l != "",
|
||||
|
||||
_ => true,
|
||||
}
|
||||
}
|
||||
|
||||
fn new(orig: KeyValue) -> Part
|
||||
{
|
||||
let val = Self::modify_no_fn(&orig);
|
||||
|
|
@ -307,6 +343,7 @@ impl Part {
|
|||
val,
|
||||
|
||||
key_avail: false,
|
||||
text_avail: false,
|
||||
|
||||
presses: 0,
|
||||
}
|
||||
|
|
@ -336,12 +373,23 @@ impl Part {
|
|||
self.presses
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub fn text_available(&self) -> bool
|
||||
{
|
||||
self.text_avail
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub fn key_available(&self) -> bool
|
||||
{
|
||||
self.key_avail
|
||||
}
|
||||
|
||||
fn set_text_supported(&mut self, text_supp: bool)
|
||||
{
|
||||
self.text_avail = text_supp && Self::keyvalue_has_text(&self.val);
|
||||
}
|
||||
|
||||
fn update_keys_supported<K: Keyboard>(&mut self, kbd: &K)
|
||||
{
|
||||
let key_supp = kbd.key_supported(self.val.0);
|
||||
|
|
@ -361,7 +409,8 @@ impl Part {
|
|||
|
||||
pub fn update_modifiers<K: Keyboard>(&mut self,
|
||||
kbd: &K,
|
||||
mod_state: &[ModState])
|
||||
mod_state: &[ModState],
|
||||
text_avail: bool)
|
||||
{
|
||||
let mut val = self.orig.clone();
|
||||
|
||||
|
|
@ -377,6 +426,7 @@ impl Part {
|
|||
|
||||
let key_supp = kbd.key_supported(self.val.0);
|
||||
self.key_avail = self.val.0 != Keysym::NoSymbol && key_supp;
|
||||
self.text_avail = text_avail && Self::keyvalue_has_text(&val);
|
||||
self.val = val;
|
||||
}
|
||||
|
||||
|
|
@ -432,6 +482,8 @@ pub struct Layout {
|
|||
height: f64,
|
||||
row_width: f64,
|
||||
in_row: u32,
|
||||
|
||||
text_supp: bool,
|
||||
}
|
||||
|
||||
const KEYSYMS: [(&str, Keysym, &str); 20] = [
|
||||
|
|
@ -574,6 +626,7 @@ impl Layout {
|
|||
height: 0.0,
|
||||
row_width: 0.0,
|
||||
in_row: 0,
|
||||
text_supp: false,
|
||||
};
|
||||
|
||||
let mut vec = Vec::new();
|
||||
|
|
@ -678,7 +731,20 @@ impl Layout {
|
|||
for row in self.rows.iter_mut() {
|
||||
for key in row.iter_mut() {
|
||||
for part in key.parts.iter_mut() {
|
||||
part.update_modifiers(kbd, mod_state);
|
||||
part.update_modifiers(kbd, mod_state, self.text_supp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_text_supported(&mut self, text_supp: bool)
|
||||
{
|
||||
self.text_supp = text_supp;
|
||||
|
||||
for row in self.rows.iter_mut() {
|
||||
for key in row.iter_mut() {
|
||||
for part in key.parts.iter_mut() {
|
||||
part.set_text_supported(text_supp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue