state: Use dummy layout command
This commit is contained in:
13
src/main.rs
13
src/main.rs
@ -174,6 +174,18 @@ mod c {
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
if let Some(commands::SetLayout { description }) = msg.layout_selection {
|
||||
dbg!(description);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub mod commands {
|
||||
use crate::animation;
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct SetLayout {
|
||||
pub description: animation::Contents,
|
||||
}
|
||||
}
|
||||
|
||||
@ -184,4 +196,5 @@ pub struct Commands {
|
||||
pub panel_visibility: Option<panel::Command>,
|
||||
pub layout_hint_set: Option<state::InputMethodDetails>,
|
||||
pub dbus_visible_set: Option<bool>,
|
||||
pub layout_selection: Option<commands::SetLayout>,
|
||||
}
|
||||
|
||||
25
src/state.rs
25
src/state.rs
@ -9,6 +9,7 @@ use crate::animation;
|
||||
use crate::debug;
|
||||
use crate::imservice::{ ContentHint, ContentPurpose };
|
||||
use crate::layout::ArrangementKind;
|
||||
use crate::main;
|
||||
use crate::main::Commands;
|
||||
use crate::outputs;
|
||||
use crate::outputs::{Millimeter, OutputId, OutputState};
|
||||
@ -153,10 +154,34 @@ impl Outcome {
|
||||
animation::Outcome::Hidden => (Some(false), Some(panel::Command::Hide)),
|
||||
};
|
||||
|
||||
// Compare the old and new states as not to flood with updates,
|
||||
// which may look up in the file system.
|
||||
use animation::Outcome::*;
|
||||
let layout_selection = match &new_state.panel {
|
||||
Visible{ contents: new_contents, ..} => {
|
||||
let same
|
||||
= if let Visible { contents, .. } = &self.panel {
|
||||
contents == new_contents
|
||||
} else {
|
||||
false
|
||||
};
|
||||
|
||||
if !same {
|
||||
Some(main::commands::SetLayout {
|
||||
description: new_contents.clone()
|
||||
})
|
||||
} else {
|
||||
None
|
||||
}
|
||||
},
|
||||
animation::Outcome::Hidden => None,
|
||||
};
|
||||
|
||||
Commands {
|
||||
panel_visibility,
|
||||
layout_hint_set,
|
||||
dbus_visible_set,
|
||||
layout_selection,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user