Skip to content

Commit 16d4af9

Browse files
committed
fix: don't sync document state between tabs,
indicate modified document when changing document layout, fixes #1021
1 parent 0d98bc9 commit 16d4af9

File tree

3 files changed

+45
-11
lines changed

3 files changed

+45
-11
lines changed

crates/rnote-engine/src/engine/import.rs

+33-2
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,41 @@ impl Engine {
152152
self.penholder = engine_config.penholder;
153153
self.import_prefs = engine_config.import_prefs;
154154
self.export_prefs = engine_config.export_prefs;
155-
self.pen_sounds = engine_config.pen_sounds;
156155

157156
// Set the pen sounds to update the audioplayer
158-
self.set_pen_sounds(self.pen_sounds, data_dir);
157+
self.set_pen_sounds(engine_config.pen_sounds, data_dir);
158+
159+
widget_flags |= self
160+
.penholder
161+
.reinstall_pen_current_style(&mut EngineViewMut {
162+
tasks_tx: self.tasks_tx.clone(),
163+
pens_config: &mut self.pens_config,
164+
document: &mut self.document,
165+
store: &mut self.store,
166+
camera: &mut self.camera,
167+
audioplayer: &mut self.audioplayer,
168+
});
169+
widget_flags |= self.doc_resize_to_fit_content();
170+
widget_flags.redraw = true;
171+
widget_flags.refresh_ui = true;
172+
widget_flags
173+
}
174+
175+
/// Loads the config when syncing engine state between tabs.
176+
pub fn load_engine_config_sync_tab(
177+
&mut self,
178+
engine_config: EngineConfig,
179+
data_dir: Option<PathBuf>,
180+
) -> WidgetFlags {
181+
let mut widget_flags = WidgetFlags::default();
182+
183+
self.pens_config = engine_config.pens_config;
184+
self.penholder = engine_config.penholder;
185+
self.import_prefs = engine_config.import_prefs;
186+
self.export_prefs = engine_config.export_prefs;
187+
188+
// Set the pen sounds to update the audioplayer
189+
self.set_pen_sounds(engine_config.pen_sounds, data_dir);
159190

160191
widget_flags |= self
161192
.penholder

crates/rnote-ui/src/appwindow/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -827,7 +827,7 @@ impl RnAppWindow {
827827
let active_canvas_wrapper = active_tab.child().downcast::<RnCanvasWrapper>().unwrap();
828828
let active_canvas = active_canvas_wrapper.canvas();
829829

830-
let mut widget_flags = active_canvas.engine_mut().load_engine_config(
830+
let mut widget_flags = active_canvas.engine_mut().load_engine_config_sync_tab(
831831
prev_canvas.engine_ref().extract_engine_config(),
832832
crate::env::pkg_data_dir().ok(),
833833
);

crates/rnote-ui/src/settingspanel/mod.rs

+11-8
Original file line numberDiff line numberDiff line change
@@ -616,14 +616,17 @@ impl RnSettingsPanel {
616616
let document_layout = settings_panel.document_layout();
617617
let canvas = appwindow.active_tab_wrapper().canvas();
618618

619-
appwindow
620-
.main_header()
621-
.canvasmenu()
622-
.fixedsize_quickactions_box()
623-
.set_sensitive(document_layout == Layout::FixedSize);
624-
625-
let widget_flags = canvas.engine_mut().set_doc_layout(document_layout);
626-
appwindow.handle_widget_flags(widget_flags, &canvas);
619+
if canvas.engine_ref().document.layout != document_layout {
620+
appwindow
621+
.main_header()
622+
.canvasmenu()
623+
.fixedsize_quickactions_box()
624+
.set_sensitive(document_layout == Layout::FixedSize);
625+
626+
let mut widget_flags = canvas.engine_mut().set_doc_layout(document_layout);
627+
widget_flags.store_modified = true;
628+
appwindow.handle_widget_flags(widget_flags, &canvas);
629+
}
627630
}),
628631
);
629632

0 commit comments

Comments
 (0)