mirror of
https://github.com/YGGverse/Yoda.git
synced 2025-01-16 01:29:57 +00:00
43 lines
1.2 KiB
Rust
43 lines
1.2 KiB
Rust
// This helper created as the attempt to drop static names usage
|
|
// and replace them with objects (to follow encapsulation for children mods)
|
|
// @TODO find alternative implementation, if exist for GTK 4
|
|
|
|
use std::sync::Arc;
|
|
|
|
use gtk::{
|
|
gio::SimpleAction,
|
|
glib::{gformat, uuid_string_random, GString},
|
|
prelude::ActionExt,
|
|
};
|
|
|
|
pub struct Action {
|
|
group: GString,
|
|
simple: Arc<SimpleAction>,
|
|
}
|
|
|
|
impl Action {
|
|
// Construct
|
|
pub fn new(group: &str, is_enabled: bool) -> Self {
|
|
// Create random action name as no static values should be in use
|
|
let simple = Arc::new(SimpleAction::new(&uuid_string_random(), None));
|
|
simple.set_enabled(is_enabled);
|
|
|
|
// Assign action to the group
|
|
let group = GString::from(group);
|
|
|
|
// Return new Action
|
|
Self { group, simple }
|
|
}
|
|
|
|
// Getters
|
|
pub fn detailed_name(&self) -> GString {
|
|
gformat!("{}.{}", self.group, self.simple.name()) // @TODO find the way to ident parent group
|
|
// from SimpleAction object
|
|
}
|
|
|
|
// App mods work with simple and system-wide data types, let them take it
|
|
pub fn simple(&self) -> Arc<SimpleAction> {
|
|
self.simple.clone()
|
|
}
|
|
}
|