From 88e8eb7e9ca5c1ff16994cd8094a32a0db362e34 Mon Sep 17 00:00:00 2001 From: zadam Date: Mon, 11 May 2020 20:08:55 +0200 Subject: [PATCH] fixed context menu positioning when scaling is active --- src/public/app/desktop.js | 9 +++++--- src/public/app/services/app_context.js | 6 +++--- src/public/app/services/link.js | 30 +++++++++++++++----------- src/public/app/services/zoom.js | 20 +++++++++++------ 4 files changed, 40 insertions(+), 25 deletions(-) diff --git a/src/public/app/desktop.js b/src/public/app/desktop.js index 774cd3f2c..a40aef397 100644 --- a/src/public/app/desktop.js +++ b/src/public/app/desktop.js @@ -8,6 +8,7 @@ import contextMenu from "./services/context_menu.js"; import DesktopMainWindowLayout from "./layouts/desktop_main_window_layout.js"; import glob from "./services/glob.js"; import DesktopExtraWindowLayout from "./layouts/desktop_extra_window_layout.js"; +import zoomService from './services/zoom.js'; glob.setupGlobs(); @@ -133,9 +134,11 @@ if (utils.isElectron()) { return; } + const zoomLevel = zoomService.getCurrentZoom(); + contextMenu.show({ - x: params.x, - y: params.y, + x: params.x / zoomLevel, + y: params.y / zoomLevel, items, selectMenuItemHandler: ({command, spellingSuggestion}) => { if (command === 'replaceMisspelling') { @@ -144,4 +147,4 @@ if (utils.isElectron()) { } }); }); -} \ No newline at end of file +} diff --git a/src/public/app/services/app_context.js b/src/public/app/services/app_context.js index 9cdbfb955..238db11d3 100644 --- a/src/public/app/services/app_context.js +++ b/src/public/app/services/app_context.js @@ -4,7 +4,7 @@ import DialogCommandExecutor from "./dialog_command_executor.js"; import Entrypoints from "./entrypoints.js"; import options from "./options.js"; import utils from "./utils.js"; -import ZoomService from "./zoom.js"; +import zoomService from "./zoom.js"; import TabManager from "./tab_manager.js"; import treeService from "./tree.js"; import Component from "../widgets/component.js"; @@ -73,7 +73,7 @@ class AppContext extends Component { } if (utils.isElectron()) { - this.child(new ZoomService()); + this.child(zoomService); } this.triggerEvent('initialRenderComplete'); @@ -134,4 +134,4 @@ $(window).on('hashchange', function() { } }); -export default appContext; \ No newline at end of file +export default appContext; diff --git a/src/public/app/services/link.js b/src/public/app/services/link.js index f35d2912a..224e16dbe 100644 --- a/src/public/app/services/link.js +++ b/src/public/app/services/link.js @@ -81,24 +81,29 @@ function goToLink(e) { } else if (e.which === 1) { const activeTabContext = appContext.tabManager.getActiveTabContext(); - activeTabContext.setNote(notePath) + activeTabContext.setNote(notePath); } else { return false; } } else { - const address = $link.attr('href'); + if (e.which === 1) { + const address = $link.attr('href'); - if (address && address.startsWith('http')) { - window.open(address, '_blank'); + if (address && address.startsWith('http')) { + window.open(address, '_blank'); + } + } + else { + return false; } } return true; } -function newTabContextMenu(e) { +function linkContextMenu(e) { const $link = $(e.target).closest("a"); const notePath = getNotePathFromLink($link); @@ -113,7 +118,7 @@ function newTabContextMenu(e) { x: e.pageX, y: e.pageY, items: [ - {title: "Open note in new tab", command: "openNoteInNewTab", uiIcon: "arrow-up-right"}, + {title: "Open note in new tab", command: "openNoteInNewTab", uiIcon: "empty"}, {title: "Open note in new window", command: "openNoteInNewWindow", uiIcon: "window-open"} ], selectMenuItemHandler: ({command}) => { @@ -156,18 +161,19 @@ $(document).on('mousedown', '.note-detail-text a', function (e) { $(document).on('mousedown', '.note-detail-book a', goToLink); $(document).on('mousedown', '.note-detail-render a', goToLink); $(document).on('mousedown', '.note-detail-text a.reference-link', goToLink); -$(document).on('mousedown', 'note-detail-readonly-text a', goToLink); +$(document).on('mousedown', '.note-detail-readonly-text a', goToLink); $(document).on('mousedown', 'a.ck-link-actions__preview', goToLink); $(document).on('click', 'a.ck-link-actions__preview', e => { e.preventDefault(); e.stopPropagation(); }); -$(document).on('contextmenu', 'a.ck-link-actions__preview', newTabContextMenu); -$(document).on('contextmenu', '.note-detail-text a', newTabContextMenu); -$(document).on('contextmenu', "a[data-action='note']", newTabContextMenu); -$(document).on('contextmenu', ".note-detail-render a", newTabContextMenu); -$(document).on('contextmenu', ".note-paths-widget a", newTabContextMenu); +$(document).on('contextmenu', 'a.ck-link-actions__preview', linkContextMenu); +$(document).on('contextmenu', '.note-detail-text a', linkContextMenu); +$(document).on('contextmenu', '.note-detail-readonly-text a', linkContextMenu); +$(document).on('contextmenu', "a[data-action='note']", linkContextMenu); +$(document).on('contextmenu', ".note-detail-render a", linkContextMenu); +$(document).on('contextmenu', ".note-paths-widget a", linkContextMenu); export default { getNotePathFromUrl, diff --git a/src/public/app/services/zoom.js b/src/public/app/services/zoom.js index d94066a80..ad7faa08b 100644 --- a/src/public/app/services/zoom.js +++ b/src/public/app/services/zoom.js @@ -5,31 +5,33 @@ import utils from "../services/utils.js"; const MIN_ZOOM = 0.5; const MAX_ZOOM = 2.0; -export default class ZoomService extends Component { +class ZoomService extends Component { constructor() { super(); - this.setZoomFactor(options.getFloat('zoomFactor')); + options.initializedPromise.then(() => { + this.setZoomFactor(options.getFloat('zoomFactor')); + }); } setZoomFactor(zoomFactor) { zoomFactor = parseFloat(zoomFactor); - + const webFrame = utils.dynamicRequire('electron').webFrame; webFrame.setZoomFactor(zoomFactor); } - + async setZoomFactorAndSave(zoomFactor) { if (zoomFactor >= MIN_ZOOM && zoomFactor <= MAX_ZOOM) { this.setZoomFactor(zoomFactor); - + await options.save('zoomFactor', zoomFactor); } else { console.log(`Zoom factor ${zoomFactor} outside of the range, ignored.`); } } - + getCurrentZoom() { return utils.dynamicRequire('electron').webFrame.getZoomFactor(); } @@ -45,4 +47,8 @@ export default class ZoomService extends Component { setZoomFactorAndSaveEvent({zoomFactor}) { this.setZoomFactorAndSave(zoomFactor); } -} \ No newline at end of file +} + +const zoomService = new ZoomService(); + +export default zoomService;