aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/views/MainView.tsx1
-rw-r--r--src/client/views/nodes/WebBox.tsx30
2 files changed, 19 insertions, 12 deletions
diff --git a/src/client/views/MainView.tsx b/src/client/views/MainView.tsx
index 5bda9f6bf..d854f118f 100644
--- a/src/client/views/MainView.tsx
+++ b/src/client/views/MainView.tsx
@@ -214,6 +214,7 @@ export class MainView extends React.Component {
}
}
}, false);
+ document.oncontextmenu = () => false;
}
initAuthenticationRouters = async () => {
diff --git a/src/client/views/nodes/WebBox.tsx b/src/client/views/nodes/WebBox.tsx
index fe5070fa4..cce71329d 100644
--- a/src/client/views/nodes/WebBox.tsx
+++ b/src/client/views/nodes/WebBox.tsx
@@ -224,15 +224,20 @@ export class WebBox extends ViewBoxAnnotatableComponent<ViewBoxAnnotatableProps
}
// bcz: hack - iframe grabs all events which messes up how we handle contextMenus. So this super naively simulates the event stack to get the specific menu items and the doc view menu items.
- if (e.button === 2 && ContextMenu.Instance.getItems().length) {
- ContextMenu.Instance.displayMenu(e.pageX, e.pageY);
- }
- else {
- ContextMenu.Instance.closeMenu();
- if (e.button === 2) {
+ if (e.button === 2) {
+ e.preventDefault();
+ e.stopPropagation();
+ const where = this.props.ScreenToLocalTransform().inverse().transformPoint(e.pageX, e.pageY);
+ if (ContextMenu.Instance.getItems().length) {
+ ContextMenu.Instance.displayMenu(where[0], where[1]);
+ }
+ else {
+ ContextMenu.Instance.closeMenu();
this.specificContextMenu(e);
- this.props.docViewPath().lastElement().docView?.onContextMenu(undefined, e.pageX, e.pageY);
+ this.props.docViewPath().lastElement().docView?.onContextMenu(undefined, where[0], where[1]);
}
+ } else {
+ ContextMenu.Instance.closeMenu();
}
}
@@ -511,11 +516,12 @@ export class WebBox extends ViewBoxAnnotatableComponent<ViewBoxAnnotatableProps
@computed get annotationLayer() {
TraceMobx();
- return <div className="webBox-annotationLayer" style={{ height: Doc.NativeHeight(this.Document) || undefined }} ref={this._annotationLayer}>
- {this.inlineTextAnnotations.sort((a, b) => NumCast(a.y) - NumCast(b.y)).map(anno =>
- <Annotation {...this.props} fieldKey={this.annotationKey} showInfo={this.showInfo} dataDoc={this.dataDoc} anno={anno} key={`${anno[Id]}-annotation`} />)
- }
- </div>;
+ return !this.inlineTextAnnotations.length ? (null) :
+ <div className="webBox-annotationLayer" style={{ height: Doc.NativeHeight(this.Document) || undefined }} ref={this._annotationLayer}>
+ {this.inlineTextAnnotations.sort((a, b) => NumCast(a.y) - NumCast(b.y)).map(anno =>
+ <Annotation {...this.props} fieldKey={this.annotationKey} showInfo={this.showInfo} dataDoc={this.dataDoc} anno={anno} key={`${anno[Id]}-annotation`} />)
+ }
+ </div>;
}
@observable _showSidebar = false;