use crate::modules::{Module, ModuleInfo, ModuleUpdateEvent, ModuleWidget, WidgetContext}; use crate::popup::Popup; use chrono::{DateTime, Local}; use color_eyre::Result; use glib::Continue; use gtk::prelude::*; use gtk::{Align, Button, Calendar, Label, Orientation}; use serde::Deserialize; use tokio::spawn; use tokio::sync::mpsc; use tokio::time::sleep; #[derive(Debug, Deserialize, Clone)] pub struct ClockModule { /// Date/time format string. /// Default: `%d/%m/%Y %H:%M` /// /// Detail on available tokens can be found here: /// #[serde(default = "default_format")] pub(crate) format: String, } fn default_format() -> String { String::from("%d/%m/%Y %H:%M") } impl Module