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 panel_visibility: Option<panel::Command>,
|
||||||
pub layout_hint_set: Option<state::InputMethodDetails>,
|
pub layout_hint_set: Option<state::InputMethodDetails>,
|
||||||
pub dbus_visible_set: Option<bool>,
|
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::debug;
|
||||||
use crate::imservice::{ ContentHint, ContentPurpose };
|
use crate::imservice::{ ContentHint, ContentPurpose };
|
||||||
use crate::layout::ArrangementKind;
|
use crate::layout::ArrangementKind;
|
||||||
|
use crate::main;
|
||||||
use crate::main::Commands;
|
use crate::main::Commands;
|
||||||
use crate::outputs;
|
use crate::outputs;
|
||||||
use crate::outputs::{Millimeter, OutputId, OutputState};
|
use crate::outputs::{Millimeter, OutputId, OutputState};
|
||||||
@ -153,10 +154,34 @@ impl Outcome {
|
|||||||
animation::Outcome::Hidden => (Some(false), Some(panel::Command::Hide)),
|
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 {
|
Commands {
|
||||||
panel_visibility,
|
panel_visibility,
|
||||||
layout_hint_set,
|
layout_hint_set,
|
||||||
dbus_visible_set,
|
dbus_visible_set,
|
||||||
|
layout_selection,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user