static positioning to also set global

This commit is contained in:
galister
2025-12-17 16:58:13 +09:00
parent b28c402ddf
commit 90bce4c369
4 changed files with 19 additions and 7 deletions

View File

@@ -38,6 +38,7 @@ pub fn new_pos_tab_handler(
Box::new(|_common, state| { Box::new(|_common, state| {
let positioning = state.pos; let positioning = state.pos;
Box::new(move |app, owc| { Box::new(move |app, owc| {
owc.global = matches!(positioning, Positioning::Static);
let state = owc.active_state.as_mut().unwrap(); //want panic let state = owc.active_state.as_mut().unwrap(); //want panic
state.positioning = positioning; state.positioning = positioning;
window::save_transform(state, app); window::save_transform(state, app);

View File

@@ -20,7 +20,7 @@ use crate::{
BackendAttrib, BackendAttribValue, FrameMeta, OverlayBackend, OverlayEventData, BackendAttrib, BackendAttribValue, FrameMeta, OverlayBackend, OverlayEventData,
RenderResources, ShouldRender, RenderResources, ShouldRender,
}, },
window::OverlayWindowConfig, window::{OverlayCategory, OverlayWindowConfig},
}, },
}; };
use anyhow::Context; use anyhow::Context;
@@ -86,6 +86,7 @@ pub fn create_keyboard(app: &mut AppState, wayland: bool) -> anyhow::Result<Over
Ok(OverlayWindowConfig { Ok(OverlayWindowConfig {
name: KEYBOARD_NAME.into(), name: KEYBOARD_NAME.into(),
category: OverlayCategory::Keyboard,
default_state: OverlayWindowState { default_state: OverlayWindowState {
grabbable: true, grabbable: true,
positioning: Positioning::Anchored, positioning: Positioning::Anchored,

View File

@@ -410,7 +410,7 @@ impl<T> OverlayWindowManager<T> {
return; return;
}; };
if overlay.config.global { if matches!(overlay.config.category, OverlayCategory::Internal) {
// watch, anchor, toast, dashboard // watch, anchor, toast, dashboard
return; return;
} }
@@ -449,9 +449,12 @@ impl<T> OverlayWindowManager<T> {
}; };
let ret_val = self.overlays.remove(id); let ret_val = self.overlays.remove(id);
let internal = ret_val let internal = ret_val.as_ref().is_some_and(|o| {
.as_ref() matches!(
.is_some_and(|o| matches!(o.config.category, OverlayCategory::Internal)); o.config.category,
OverlayCategory::Internal | OverlayCategory::Keyboard
)
});
if !internal && let Err(e) = self.overlays_changed(app) { if !internal && let Err(e) = self.overlays_changed(app) {
log::error!("Error while removing overlay: {e:?}"); log::error!("Error while removing overlay: {e:?}");
@@ -502,7 +505,10 @@ impl<T> OverlayWindowManager<T> {
let name = overlay.config.name.clone(); let name = overlay.config.name.clone();
let global = overlay.config.global; let global = overlay.config.global;
let internal = matches!(overlay.config.category, OverlayCategory::Internal); let internal = matches!(
overlay.config.category,
OverlayCategory::Internal | OverlayCategory::Keyboard
);
let show_on_spawn = overlay.config.show_on_spawn; let show_on_spawn = overlay.config.show_on_spawn;
let oid = self.overlays.insert(overlay); let oid = self.overlays.insert(overlay);
@@ -603,7 +609,10 @@ impl<T> OverlayWindowManager<T> {
fn overlays_changed(&mut self, app: &mut AppState) -> anyhow::Result<()> { fn overlays_changed(&mut self, app: &mut AppState) -> anyhow::Result<()> {
let mut meta = Vec::with_capacity(self.overlays.len()); let mut meta = Vec::with_capacity(self.overlays.len());
for (id, data) in &self.overlays { for (id, data) in &self.overlays {
if matches!(data.config.category, OverlayCategory::Internal) { if matches!(
data.config.category,
OverlayCategory::Internal | OverlayCategory::Keyboard
) {
continue; continue;
} }
meta.push(OverlayMeta { meta.push(OverlayMeta {

View File

@@ -53,6 +53,7 @@ impl<T> OverlayWindowData<T> {
#[derive(Debug, Clone, Copy, IntegerId, PartialEq)] #[derive(Debug, Clone, Copy, IntegerId, PartialEq)]
pub enum OverlayCategory { pub enum OverlayCategory {
Internal, Internal,
Keyboard,
Panel, Panel,
Screen, Screen,
Mirror, Mirror,