From fa6108ff226a2b3860735999ff9688947a7dcc3d Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Thu, 26 Aug 2021 20:51:57 -0700 Subject: [PATCH] Select current day when calendar opened --- src/time_button.rs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/time_button.rs b/src/time_button.rs index 28ef3eb2..27c27eea 100644 --- a/src/time_button.rs +++ b/src/time_button.rs @@ -10,6 +10,7 @@ use crate::mpris::MprisControls; #[derive(Default)] pub struct TimeButtonInner { + calendar: DerefCell, menu_button: DerefCell, } @@ -26,6 +27,10 @@ impl ObjectSubclass for TimeButtonInner { impl ObjectImpl for TimeButtonInner { fn constructed(&self, obj: &TimeButton) { + let calendar = cascade! { + gtk4::Calendar::new(); + }; + let menu_button = cascade! { gtk4::MenuButton::new(); ..set_parent(obj); @@ -35,13 +40,13 @@ impl ObjectImpl for TimeButtonInner { ..set_child(Some(&cascade! { gtk4::Box::new(gtk4::Orientation::Horizontal, 0); ..append(&MprisControls::new()); - ..append(&cascade! { - gtk4::Calendar::new(); - }); + ..append(&calendar); })); + ..connect_show(clone!(@strong obj => move |_| obj.opening())); })); }; + self.calendar.set(calendar); self.menu_button.set(menu_button); // TODO: better way to do this? @@ -76,6 +81,12 @@ impl TimeButton { TimeButtonInner::from_instance(self) } + fn opening(&self) { + let date = glib::DateTime::new_now(&glib::TimeZone::new_local()).unwrap(); + self.inner().calendar.clear_marks(); + self.inner().calendar.select_day(&date); + } + fn update_time(&self) { // TODO: Locale-based formatting? let time = chrono::Local::now();