From 903a6b351c0b12cf32a97e80960d5aa293ee0cc0 Mon Sep 17 00:00:00 2001 From: Sapphire Date: Fri, 6 Feb 2026 19:21:47 -0600 Subject: [PATCH] allow hotswitch between 12h and 24h clock for keyboard (#426) --- wayvr/src/assets/gui/keyboard.xml | 14 +++++++++---- wayvr/src/overlays/keyboard/builder.rs | 29 ++++++++++++++++++++++---- wayvr/src/overlays/keyboard/mod.rs | 3 +++ 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/wayvr/src/assets/gui/keyboard.xml b/wayvr/src/assets/gui/keyboard.xml index ee5b6e9..4d6fc32 100644 --- a/wayvr/src/assets/gui/keyboard.xml +++ b/wayvr/src/assets/gui/keyboard.xml @@ -192,6 +192,14 @@ + +
@@ -218,10 +226,8 @@ -
-
diff --git a/wayvr/src/overlays/keyboard/builder.rs b/wayvr/src/overlays/keyboard/builder.rs index 4b33046..874d851 100644 --- a/wayvr/src/overlays/keyboard/builder.rs +++ b/wayvr/src/overlays/keyboard/builder.rs @@ -19,6 +19,7 @@ use wgui::{ drawing::{self, Color}, event::{self, CallbackMetadata, EventAlterables, EventListenerKind}, layout::LayoutUpdateParams, + log::LogErr, parser::{Fetchable, ParseDocumentParams}, renderer_vk::util, taffy::{self, prelude::length}, @@ -284,14 +285,30 @@ pub(super) fn create_keyboard_panel( &doc_params, )?; - if elems_changed { - panel.process_custom_elems(app); - } - match event_data { OverlayEventData::SettingsChanged => { panel.state.alt_modifier = alt_modifier_to_key(app.session.config.keyboard_middle_click_mode); + + if app.session.config.clock_12h != panel.state.clock_12h { + panel.state.clock_12h = app.session.config.clock_12h; + + if let Ok(clock_root) = panel + .parser_state + .get_widget_id("clock_root") + .log_warn("keyboard.xml may be out of date") + { + panel.layout.remove_children(clock_root); + panel.parser_state.instantiate_template( + &doc_params, + "Clock", + &mut panel.layout, + clock_root, + Default::default(), + )?; + elems_changed = true; + } + } } OverlayEventData::CustomCommand { element, command } => { @@ -303,6 +320,10 @@ pub(super) fn create_keyboard_panel( _ => {} } + if elems_changed { + panel.process_custom_elems(app); + } + panel.layout.process_alterables(alterables)?; Ok(()) } diff --git a/wayvr/src/overlays/keyboard/mod.rs b/wayvr/src/overlays/keyboard/mod.rs index 2f69c3d..d5877ff 100644 --- a/wayvr/src/overlays/keyboard/mod.rs +++ b/wayvr/src/overlays/keyboard/mod.rs @@ -55,6 +55,7 @@ pub fn create_keyboard(app: &mut AppState, wayland: bool) -> anyhow::Result, overlay_list: OverlayList, set_list: SetList, + clock_12h: bool, } macro_rules! take_and_leave_default { @@ -343,6 +345,7 @@ impl KeyboardState { processes: take_and_leave_default!(&mut self.processes), overlay_list: OverlayList::default(), set_list: SetList::default(), + clock_12h: self.clock_12h, } } }