fix(leftpaneVisibility): Make leftpane visibility switch no longer depend on entitiesReloadedEvent

This commit is contained in:
SiriusXT 2025-05-20 14:33:01 +08:00
parent 501fab2736
commit 025c6a4e0e
4 changed files with 20 additions and 22 deletions

View File

@ -283,6 +283,9 @@ export type CommandMappings = {
type EventMappings = { type EventMappings = {
initialRenderComplete: {}; initialRenderComplete: {};
frocaReloaded: {}; frocaReloaded: {};
setLeftPaneVisibility: {
leftPaneVisible: boolean | null;
}
protectedSessionStarted: {}; protectedSessionStarted: {};
notesReloaded: { notesReloaded: {
noteIds: string[]; noteIds: string[];

View File

@ -78,15 +78,15 @@ export default class RootCommandExecutor extends Component {
} }
hideLeftPaneCommand() { hideLeftPaneCommand() {
options.save(`leftPaneVisible`, "false"); appContext.triggerEvent("setLeftPaneVisibility", { leftPaneVisible: false });
} }
showLeftPaneCommand() { showLeftPaneCommand() {
options.save(`leftPaneVisible`, "true"); appContext.triggerEvent("setLeftPaneVisibility", { leftPaneVisible: true });
} }
toggleLeftPaneCommand() { toggleLeftPaneCommand() {
options.toggle("leftPaneVisible"); appContext.triggerEvent("setLeftPaneVisibility", { leftPaneVisible: null });
} }
async showBackendLogCommand() { async showBackendLogCommand() {

View File

@ -35,13 +35,9 @@ export default class LeftPaneToggleWidget extends CommandButtonWidget {
super.refreshIcon(); super.refreshIcon();
splitService.setupLeftPaneResizer(this.currentLeftPaneVisible); splitService.setupLeftPaneResizer(this.currentLeftPaneVisible);
} }
entitiesReloadedEvent({ loadResults }: EventData<"entitiesReloaded">) { setLeftPaneVisibilityEvent({ leftPaneVisible }: EventData<"setLeftPaneVisibility">) {
if (loadResults.isOptionReloaded("leftPaneVisible") && document.hasFocus()) { this.currentLeftPaneVisible = leftPaneVisible ?? !this.currentLeftPaneVisible;
// options.is("leftPaneVisible") changed — it may or may not be the same as currentLeftPaneVisible, but as long as the window is focused, the left pane visibility should be toggled. this.refreshIcon();
// See PR description for detailed explanation of multi-window edge cases: https://github.com/TriliumNext/Notes/pull/1962
this.currentLeftPaneVisible = !this.currentLeftPaneVisible;
this.refreshIcon();
}
} }
} }

View File

@ -20,18 +20,17 @@ export default class LeftPaneContainer extends FlexContainer<Component> {
return super.isEnabled() && this.currentLeftPaneVisible; return super.isEnabled() && this.currentLeftPaneVisible;
} }
entitiesReloadedEvent({ loadResults }: EventData<"entitiesReloaded">) { setLeftPaneVisibilityEvent({ leftPaneVisible }: EventData<"setLeftPaneVisibility">) {
if (loadResults.isOptionReloaded("leftPaneVisible") && document.hasFocus()) { this.currentLeftPaneVisible = leftPaneVisible ?? !this.currentLeftPaneVisible;
// options.is("leftPaneVisible") changed — it may or may not be the same as currentLeftPaneVisible, but as long as the window is focused, the left pane visibility should be toggled. const visible = this.isEnabled();
this.currentLeftPaneVisible = !this.currentLeftPaneVisible; this.toggleInt(visible);
const visible = this.isEnabled();
this.toggleInt(visible);
if (visible) { if (visible) {
this.triggerEvent("focusTree", {}); this.triggerEvent("focusTree", {});
} else { } else {
this.triggerEvent("focusOnDetail", { ntxId: appContext.tabManager.getActiveContext()?.ntxId }); this.triggerEvent("focusOnDetail", { ntxId: appContext.tabManager.getActiveContext()?.ntxId });
}
} }
options.save("leftPaneVisible", this.currentLeftPaneVisible.toString());
} }
} }