diff --git a/src/data/loading.rs b/src/data/loading.rs index ceb524dd..30cbcc7f 100644 --- a/src/data/loading.rs +++ b/src/data/loading.rs @@ -61,7 +61,7 @@ pub mod c { }; let (kind, layout) = load_layout_data_with_fallback(&name, type_, variant, overlay_str); - let layout = ::layout::Layout::new(layout, kind); + let layout = ::layout::Layout::new(layout, kind, variant); Box::into_raw(Box::new(layout)) } } diff --git a/src/imservice.rs b/src/imservice.rs index ce6a036e..5c30da6c 100644 --- a/src/imservice.rs +++ b/src/imservice.rs @@ -233,7 +233,7 @@ bitflags!{ /// use rs::imservice::ContentPurpose; /// assert_eq!(ContentPurpose::Alpha as u32, 1); /// ``` -#[derive(Debug, Clone)] +#[derive(Debug, Copy, Clone)] pub enum ContentPurpose { Normal = 0, Alpha = 1, diff --git a/src/layout.h b/src/layout.h index 0ed8cd09..e50eac8f 100644 --- a/src/layout.h +++ b/src/layout.h @@ -33,6 +33,7 @@ struct transformation squeek_layout_calculate_transformation( struct squeek_layout *squeek_load_layout(const char *name, uint32_t type, uint32_t variant_type, const char *overlay_name); enum squeek_arrangement_kind squeek_layout_get_kind(const struct squeek_layout *); +uint32_t squeek_layout_get_purpose(const struct squeek_layout *); void squeek_layout_free(struct squeek_layout*); void squeek_layout_release(struct squeek_layout *layout, diff --git a/src/layout.rs b/src/layout.rs index 9025f3bd..14719dd0 100644 --- a/src/layout.rs +++ b/src/layout.rs @@ -32,6 +32,8 @@ use ::manager; use ::submission::{ Submission, SubmitData, Timestamp }; use ::util::find_max_double; +use ::imservice::ContentPurpose; + // Traits use std::borrow::Borrow; use ::logging::Warn; @@ -183,6 +185,13 @@ pub mod c { layout.kind.clone() as u32 } + #[no_mangle] + pub extern "C" + fn squeek_layout_get_purpose(layout: *const Layout) -> u32 { + let layout = unsafe { &*layout }; + layout.purpose.clone() as u32 + } + #[no_mangle] pub extern "C" fn squeek_layout_free(layout: *mut Layout) { @@ -627,6 +636,7 @@ pub enum LatchedState { pub struct Layout { pub margins: Margins, pub kind: ArrangementKind, + pub purpose: ContentPurpose, pub current_view: String, // If current view is latched, @@ -676,7 +686,7 @@ impl fmt::Display for NoSuchView { // The usage of &mut on Rc> doesn't mean anything special. // Cloning could also be used. impl Layout { - pub fn new(data: LayoutData, kind: ArrangementKind) -> Layout { + pub fn new(data: LayoutData, kind: ArrangementKind, purpose: ContentPurpose) -> Layout { Layout { kind, current_view: "base".to_owned(), @@ -685,6 +695,7 @@ impl Layout { keymaps: data.keymaps, pressed_keys: HashSet::new(), margins: data.margins, + purpose, } } @@ -1194,6 +1205,7 @@ mod test { "base".into() => (c::Point { x: 0.0, y: 0.0 }, view.clone()), "locked".into() => (c::Point { x: 0.0, y: 0.0 }, view), }, + purpose: ContentPurpose::Normal, }; // Basic cycle @@ -1270,7 +1282,8 @@ mod test { "locked".into() => (c::Point { x: 0.0, y: 0.0 }, view.clone()), "unlocked".into() => (c::Point { x: 0.0, y: 0.0 }, view), }, - }; + purpose: ContentPurpose::Normal, + }; layout.apply_view_transition(&switch); assert_eq!(&layout.current_view, "locked"); @@ -1336,7 +1349,8 @@ mod test { "locked".into() => (c::Point { x: 0.0, y: 0.0 }, view.clone()), "ĄĘ".into() => (c::Point { x: 0.0, y: 0.0 }, view), }, - }; + purpose: ContentPurpose::Normal, + }; // Latch twice, then Ąto-unlatch across 2 levels layout.apply_view_transition(&switch); @@ -1436,6 +1450,7 @@ mod test { views: hashmap! { String::new() => (c::Point { x: 0.0, y: 0.0 }, view), }, + purpose: ContentPurpose::Normal, }; assert_eq!( layout.calculate_inner_size(),