fix: force per-workspace setting
This commit is contained in:
parent
1d6b5d7ec9
commit
42b4145626
1 changed files with 23 additions and 69 deletions
|
|
@ -32,7 +32,6 @@ pub struct Window {
|
||||||
timeline: Timeline,
|
timeline: Timeline,
|
||||||
config: CosmicCompConfig,
|
config: CosmicCompConfig,
|
||||||
config_helper: Config,
|
config_helper: Config,
|
||||||
autotile_behavior_model: segmented_button::SingleSelectModel,
|
|
||||||
new_workspace_behavior_model: segmented_button::SingleSelectModel,
|
new_workspace_behavior_model: segmented_button::SingleSelectModel,
|
||||||
new_workspace_entity: Entity,
|
new_workspace_entity: Entity,
|
||||||
/// may not match the config value if behavior is per-workspace
|
/// may not match the config value if behavior is per-workspace
|
||||||
|
|
@ -78,25 +77,17 @@ impl cosmic::Application for Window {
|
||||||
active_hint.value = core.system_theme().cosmic().active_hint as i32;
|
active_hint.value = core.system_theme().cosmic().active_hint as i32;
|
||||||
let config_helper =
|
let config_helper =
|
||||||
Config::new("com.system76.CosmicComp", CosmicCompConfig::VERSION).unwrap();
|
Config::new("com.system76.CosmicComp", CosmicCompConfig::VERSION).unwrap();
|
||||||
let config = CosmicCompConfig::get_entry(&config_helper).unwrap_or_else(|(errs, c)| {
|
let mut config = CosmicCompConfig::get_entry(&config_helper).unwrap_or_else(|(errs, c)| {
|
||||||
for err in errs {
|
for err in errs {
|
||||||
error!(?err, "Error loading config");
|
error!(?err, "Error loading config");
|
||||||
}
|
}
|
||||||
c
|
c
|
||||||
});
|
});
|
||||||
let mut autotile_behavior_model = SingleSelectModel::default();
|
|
||||||
let autotile_global_entity = autotile_behavior_model
|
// Global is removed in favor of per-workspace
|
||||||
.insert()
|
if let Err(err) = config.set_autotile_behavior(&config_helper, TileBehavior::PerWorkspace) {
|
||||||
.text(fl!("all-workspaces"))
|
error!(?err, "Failed to set autotile behavior to PerWorkspace");
|
||||||
.id();
|
}
|
||||||
let per = autotile_behavior_model
|
|
||||||
.insert()
|
|
||||||
.text(fl!("per-workspace"))
|
|
||||||
.id();
|
|
||||||
autotile_behavior_model.activate(match config.autotile_behavior {
|
|
||||||
TileBehavior::Global => autotile_global_entity,
|
|
||||||
TileBehavior::PerWorkspace => per,
|
|
||||||
});
|
|
||||||
|
|
||||||
let mut new_workspace_behavior_model = SingleSelectModel::default();
|
let mut new_workspace_behavior_model = SingleSelectModel::default();
|
||||||
let new_workspace_entity = new_workspace_behavior_model
|
let new_workspace_entity = new_workspace_behavior_model
|
||||||
|
|
@ -120,7 +111,6 @@ impl cosmic::Application for Window {
|
||||||
autotiled: config.autotile,
|
autotiled: config.autotile,
|
||||||
config,
|
config,
|
||||||
config_helper,
|
config_helper,
|
||||||
autotile_behavior_model,
|
|
||||||
new_workspace_behavior_model,
|
new_workspace_behavior_model,
|
||||||
new_workspace_entity,
|
new_workspace_entity,
|
||||||
workspace_tx: None,
|
workspace_tx: None,
|
||||||
|
|
@ -200,31 +190,17 @@ impl cosmic::Application for Window {
|
||||||
Message::ToggleTileWindows(chain, toggled) => {
|
Message::ToggleTileWindows(chain, toggled) => {
|
||||||
self.timeline.set_chain(chain).start();
|
self.timeline.set_chain(chain).start();
|
||||||
self.autotiled = toggled;
|
self.autotiled = toggled;
|
||||||
if matches!(self.config.autotile_behavior, TileBehavior::Global) {
|
|
||||||
self.config.autotile = toggled;
|
|
||||||
if toggled {
|
|
||||||
self.new_workspace_behavior_model.activate_position(0);
|
|
||||||
} else {
|
|
||||||
self.new_workspace_behavior_model.activate_position(1);
|
|
||||||
}
|
|
||||||
let helper = self.config_helper.clone();
|
|
||||||
thread::spawn(move || {
|
|
||||||
if let Err(err) = helper.set("autotile", toggled) {
|
|
||||||
error!(?err, "Failed to set autotile {toggled}");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
// set via protocol
|
|
||||||
if let Some(tx) = self.workspace_tx.as_ref() {
|
|
||||||
let state = if toggled {
|
|
||||||
TilingState::TilingEnabled
|
|
||||||
} else {
|
|
||||||
TilingState::FloatingOnly
|
|
||||||
};
|
|
||||||
|
|
||||||
if let Err(err) = tx.send(state) {
|
// set via protocol
|
||||||
error!("Failed to send the tiling state update. {err:?}")
|
if let Some(tx) = self.workspace_tx.as_ref() {
|
||||||
}
|
let state = if toggled {
|
||||||
|
TilingState::TilingEnabled
|
||||||
|
} else {
|
||||||
|
TilingState::FloatingOnly
|
||||||
|
};
|
||||||
|
|
||||||
|
if let Err(err) = tx.send(state) {
|
||||||
|
error!("Failed to send the tiling state update. {err:?}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -240,26 +216,11 @@ impl cosmic::Application for Window {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Message::MyConfigUpdate(c) => {
|
Message::MyConfigUpdate(c) => {
|
||||||
if matches!(c.autotile_behavior, TileBehavior::Global) {
|
if c.autotile != self.config.autotile {
|
||||||
if c.autotile != self.config.autotile {
|
self.new_workspace_behavior_model
|
||||||
if self.popup.is_some() {
|
.activate_position(if c.autotile { 0 } else { 1 });
|
||||||
self.timeline
|
|
||||||
.set_chain(if c.autotile {
|
|
||||||
cosmic_time::chain::Toggler::on(self.tile_windows.clone(), 1.0)
|
|
||||||
} else {
|
|
||||||
cosmic_time::chain::Toggler::off(self.tile_windows.clone(), 1.0)
|
|
||||||
})
|
|
||||||
.start();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
self.autotile_behavior_model.activate_position(0);
|
|
||||||
} else {
|
|
||||||
if c.autotile != self.config.autotile {
|
|
||||||
self.new_workspace_behavior_model
|
|
||||||
.activate_position(if c.autotile { 0 } else { 1 });
|
|
||||||
}
|
|
||||||
self.autotile_behavior_model.activate_position(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.active_hint != self.config.active_hint {
|
if c.active_hint != self.config.active_hint {
|
||||||
if self.popup.is_some() {
|
if self.popup.is_some() {
|
||||||
self.timeline
|
self.timeline
|
||||||
|
|
@ -300,21 +261,14 @@ impl cosmic::Application for Window {
|
||||||
|
|
||||||
fn view_window(&self, _id: Id) -> Element<Self::Message> {
|
fn view_window(&self, _id: Id) -> Element<Self::Message> {
|
||||||
let mut new_workspace_behavior_button =
|
let mut new_workspace_behavior_button =
|
||||||
segmented_control::horizontal(&self.new_workspace_behavior_model);
|
segmented_control::horizontal(&self.new_workspace_behavior_model)
|
||||||
if matches!(self.config.autotile_behavior, TileBehavior::PerWorkspace) {
|
.on_activate(Message::NewWorkspace);
|
||||||
new_workspace_behavior_button =
|
|
||||||
new_workspace_behavior_button.on_activate(Message::NewWorkspace);
|
|
||||||
}
|
|
||||||
let content_list = column![
|
let content_list = column![
|
||||||
padded_control(container(
|
padded_control(container(
|
||||||
anim!(
|
anim!(
|
||||||
self.tile_windows,
|
self.tile_windows,
|
||||||
&self.timeline,
|
&self.timeline,
|
||||||
if matches!(self.config.autotile_behavior, TileBehavior::Global) {
|
fl!("tile-current"),
|
||||||
fl!("tile-windows")
|
|
||||||
} else {
|
|
||||||
fl!("tile-current")
|
|
||||||
},
|
|
||||||
self.autotiled,
|
self.autotiled,
|
||||||
|chain, enable| { Message::ToggleTileWindows(chain, enable) },
|
|chain, enable| { Message::ToggleTileWindows(chain, enable) },
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue