Properties: a new adjustment or fill layer brings Properties to the front (#4028) (#4079)

This commit is contained in:
Marco Arnulfo authored and GitHub committed 2026-10-12 18:47:59 -04:00
1 parent 95dbb01ad9
commit 40427f25dc
3 files changed
+40

No files matched your search

+10
View File
@@ -976,6 +976,16 @@ impl PhotocraftApp {
// as in Photoshop (#3369): clicking the mask thumbnail switches it to the mask.
self.ui.properties_layer = if creates_adjustment_or_fill { self.session.active().and_then(|st| st.active_layer).map(|l| l.0) } else { None };
}
if r.is_ok() && creates_adjustment_or_fill {
// Properties comes to the front, shown and expanded, so the new layer's settings can
// be edited at once, as in Photoshop (#4028). The layer is made whatever happens here.
if self.ui.docking.is_some() {
let _ = panel_docking::command(self, "window.panel.activate", &json!({"panel": "properties"}));
} else {
self.ui.dock_tabs.properties = 0;
dock::reveal(self, dock::Group::Properties);
}
}
if r.is_ok() && id == "select.toWorkPath" {
// Make Work Path selects the new work path in the Paths panel, as in Photoshop.
self.ui.selected_path = Some("work".into());
@@ -737,3 +737,22 @@ fn a_new_adjustment_or_fill_layer_shows_its_settings_until_the_mask_thumbnail_is
}
}
}
// #4028: with Adjustments showing in a collapsed Properties group, a new adjustment layer brings
// Properties to the front and expands it, as in Photoshop, so its settings can be edited at once.
#[test]
fn a_new_adjustment_layer_brings_properties_to_the_front() {
let mut s = photocraft_engine::Session::new();
s.execute("file.new", json!({"width": 200, "height": 100})).unwrap();
let mut h = harness(s, 0, 1.0, 290.0);
let ctx = h.ctx.clone();
let (req, _rx) = crate::control::ControlRequest::new("ui.set", json!({"dockTabs": {"properties": 1}}));
crate::control::handle(h.state_mut(), &ctx, &req);
h.run_steps(2);
assert!(h.state().ui.dock.is_collapsed(crate::dock::Group::Properties));
h.state_mut().run("layer.newAdjustmentLayer.curves", json!({})).unwrap();
h.run_steps(6);
assert_eq!(h.state().ui.dock_tabs.properties, 0, "Properties is the group's tab");
assert!(!h.state().ui.dock.is_collapsed(crate::dock::Group::Properties), "the group is expanded");
assert!(h.query_all_by_label("Reset to defaults").next().is_some(), "the Curves settings show");
}
+11
View File
@@ -504,6 +504,17 @@ fn explicit_reveal_activates_existing_tab_and_expands_custom_group() {
assert_eq!(app.ui.docking, before);
}
// #4028: in a custom workspace too, a new adjustment layer brings Properties to the front.
#[test]
fn a_new_adjustment_layer_activates_properties_in_a_custom_workspace() {
let mut app = app();
app.run("window.panel.activate", json!({"panel":"adjustments"})).unwrap();
assert!(panel_active(app.ui.docking.as_ref().unwrap(), "adjustments"));
app.run("file.new", json!({"width":64,"height":64})).unwrap();
app.run("layer.newAdjustmentLayer.curves", json!({})).unwrap();
assert!(panel_active(app.ui.docking.as_ref().unwrap(), "properties"));
}
#[test]
fn custom_group_commands_preserve_members_and_workspace_timeline() {
let mut app = app();