Last active
August 20, 2024 00:33
-
-
Save Fuhrmann/4f9fbd61d945c822c6195f87605d4019 to your computer and use it in GitHub Desktop.
relm4 examples
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fn log_level_deser<'de, D>(deserializer: D) -> Result<LogLevel, D::Error> | |
where | |
D: Deserializer<'de>, | |
{ | |
let s = String::deserialize(deserializer)?; | |
match s.to_lowercase().as_str() { | |
"debug" => Ok(LogLevel::Debug), | |
"info" => Ok(LogLevel::Info), | |
"warn" => Ok(LogLevel::Warn), | |
"error" => Ok(LogLevel::Error), | |
"trace" => Ok(LogLevel::Trace), | |
_ => Err(serde::de::Error::custom( | |
"expected one of DEBUG, INFO, WARN, ERROR, TRACE", | |
)), | |
} | |
} | |
// Than in the desired field, use: | |
#[serde(deserialize_with = "log_level_deser")] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let listener = gtk::EventControllerScroll::builder() | |
.flags(gtk::EventControllerScrollFlags::HORIZONTAL) | |
.name("workspaces-scroll") | |
.build(); | |
listener.connect_scroll(|c, _, _| { | |
let event = c | |
.current_event() | |
.unwrap() | |
.downcast::<relm4::gtk::gdk::ScrollEvent>() | |
.unwrap(); | |
let direction = match event.direction() { | |
gtk::gdk::ScrollDirection::Up => { | |
println!("next workspace"); | |
} | |
gtk::gdk::ScrollDirection::Down => { | |
println!("previous workspace"); | |
} | |
_ => return relm4::gtk::glib::Propagation::Stop, | |
}; | |
//Hypr::move_to_workspace(Hypr::get_current_workspace_id() + 1); | |
relm4::gtk::glib::Propagation::Stop | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pub struct WindowActionGroup; | |
impl relm4::actions::ActionGroupName for WindowActionGroup { | |
const NAME: &'static str = "win"; | |
} | |
relm4::new_stateful_action!(pub CopyText, WindowActionGroup, "copy-text", i32, ()); | |
menu! { | |
author_menu: { | |
"Copy pubkey as hex" => CopyText(self.workspace.id), | |
"Copy pubkey as bech32" => CopyText(self.workspace.id), | |
}, | |
note_menu: { | |
section! { | |
"Copy event ID as hex" => CopyText(self.workspace.id), | |
"Copy event ID as bech32" => CopyText(self.workspace.id) | |
} | |
} | |
} | |
view! { | |
#[name(button)] | |
gtk::Button { | |
#[watch] | |
set_class_active: ("focused", self.workspace.has_focus), | |
set_can_focus: false, | |
connect_clicked => WorkspaceItemWidgetInput::WorkspaceClicked, | |
add_controller = gtk::GestureClick { | |
set_button: relm4::gtk::gdk::BUTTON_SECONDARY, | |
connect_released[sender, button] => move |controller, _, x, y| { | |
let popover = gtk::PopoverMenu::builder() | |
.position(gtk::PositionType::Bottom) | |
.autohide(true) | |
.menu_model(&author_menu) | |
.cascade_popdown(true) | |
.receives_default(true) | |
.has_arrow(false) | |
.focus_on_click(true) | |
.focusable(true) | |
// .hexpand(true) | |
//.pointing_to(>k::gdk::Rectangle::new(x as i32, y as i32, 1, 1)) | |
.build(); | |
popover.set_parent(&button); | |
popover.popup(); | |
sender.input(WorkspaceItemWidgetInput::WorkspaceRightClicked); | |
controller.set_state(relm4::gtk::EventSequenceState::Claimed); | |
} | |
}, | |
gtk::Label { | |
set_label: &self.workspace.name, | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment