aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes/DocumentView.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/nodes/DocumentView.tsx')
-rw-r--r--src/client/views/nodes/DocumentView.tsx24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx
index ada3de355..3e154aead 100644
--- a/src/client/views/nodes/DocumentView.tsx
+++ b/src/client/views/nodes/DocumentView.tsx
@@ -343,16 +343,18 @@ export class DocumentViewInternal extends DocComponent<FieldViewProps & Document
}, 'click ' + this.Document.title);
} else {
// onDragStart implies a button doc that we don't want to select when clicking. RootDocument & isTemplateForField implies we're clicking on part of a template instance and we want to select the whole template, not the part
- if ((this.layoutDoc.onDragStart || this._props.TemplateDataDocument) && !(e.ctrlKey || e.button > 0)) {
- stopPropagate = false; // don't stop propagation for field templates -- want the selection to propagate up to the root document of the template
+ if (this.layoutDoc.onDragStart && !(e.ctrlKey || e.button > 0)) {
+ stopPropagate = false;
}
preventDefault = false;
}
- const sendToBack = e.altKey;
- this._singleClickFunc =
- // prettier-ignore
- clickFunc ?? (() => (sendToBack ? documentView._props.bringToFront?.(this.Document, true) :
- this._props.select(e.ctrlKey||e.shiftKey, e.metaKey)));
+ const sendToBack = e.altKey ? () => documentView._props.bringToFront?.(this.Document, true) : undefined;
+ const selectFunc = () => {
+ // selecting a view that is part of a template proxies the selection back to the root of the template
+ const templateRoot = !(e.ctrlKey || e.button > 0) && this._props.docViewPath?.().reverse().find(dv => !dv._props.TemplateDataDocument); // prettier-ignore
+ (templateRoot || this._docView)?.select(e.ctrlKey || e.shiftKey, e.metaKey);
+ };
+ this._singleClickFunc = clickFunc ?? sendToBack ?? selectFunc;
const waitFordblclick = this._props.waitForDoubleClickToClick?.() ?? this.Document.waitForDoubleClickToClick;
if ((clickFunc && waitFordblclick !== 'never') || waitFordblclick === 'always') {
this._doubleClickTimeout && clearTimeout(this._doubleClickTimeout);
@@ -377,17 +379,15 @@ export class DocumentViewInternal extends DocComponent<FieldViewProps & Document
this._downX = e.clientX;
this._downY = e.clientY;
this._downTime = Date.now();
- if ((Doc.ActiveTool === InkTool.None || this._props.addDocTab === returnFalse) && !(this._props.TemplateDataDocument && !(e.ctrlKey || e.button > 0))) {
- // click events stop here if the document is active and no modes are overriding it
- // if this is part of a template, let the event go up to the template root unless right/ctrl clicking
+ // click events stop here if the document is active and no modes are overriding it
+ if (Doc.ActiveTool === InkTool.None || this._props.addDocTab === returnFalse) {
if ((this._props.isDocumentActive?.() || this._props.isContentActive?.()) &&
!SnappingManager.ExploreMode &&
!this.Document.ignoreClick &&
e.button === 0 &&
!Doc.IsInMyOverlay(this.layoutDoc)
) {
- e.stopPropagation();
- // don't preventDefault. Goldenlayout, PDF text selection and RTF text selection all need it to go though
+ e.stopPropagation(); // don't preventDefault. Goldenlayout, PDF text selection and RTF text selection all need it to go though
// listen to move events when document content isn't active or document is always draggable
if (!this.layoutDoc._lockedPosition && (!this.isContentActive() || BoolCast(this.layoutDoc._dragWhenActive, this._props.dragWhenActive))) {