diff --git a/addons/web/static/src/webclient/webclient.js b/addons/web/static/src/webclient/webclient.js index 1603ed3a4c4..6c3662f8a0d 100644 --- a/addons/web/static/src/webclient/webclient.js +++ b/addons/web/static/src/webclient/webclient.js @@ -100,6 +100,7 @@ export class WebClient extends Component { // we do not want any other listener to execute. if ( ev.ctrlKey && + !ev.target.isContentEditable && ((ev.target instanceof HTMLAnchorElement && ev.target.href) || (ev.target instanceof HTMLElement && ev.target.closest("a[href]:not([href=''])"))) ) { diff --git a/addons/web_editor/static/src/js/wysiwyg/wysiwyg.js b/addons/web_editor/static/src/js/wysiwyg/wysiwyg.js index fd5e93eb1a3..d3abc556786 100644 --- a/addons/web_editor/static/src/js/wysiwyg/wysiwyg.js +++ b/addons/web_editor/static/src/js/wysiwyg/wysiwyg.js @@ -369,6 +369,9 @@ const Wysiwyg = Widget.extend({ && !$target.find('> [data-oe-model]').length && !$target[0].closest('.o_extra_menu_items') && $target[0].isContentEditable) { + if (ev.ctrlKey || ev.metaKey) { + window.open(ev.target.href, '_blank') + } this.linkPopover = $target.data('popover-widget-initialized'); if (!this.linkPopover) { // TODO this code is ugly maybe the mutex should be in the