From: Ferdinand Thiessen Date: Wed, 13 Dec 2023 15:28:07 +0000 (+0100) Subject: fix(files): Do not add drag and drop listeners when renaming a file X-Git-Tag: v29.0.0beta1~651^2~1 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=9dbaf7aa5b6e7bcb8219ce6db86c0e6b6f71e32b;p=nextcloud-server.git fix(files): Do not add drag and drop listeners when renaming a file Signed-off-by: Ferdinand Thiessen --- diff --git a/apps/files/src/components/FileEntry.vue b/apps/files/src/components/FileEntry.vue index e8d8d00d365..b89c5dcb3f4 100644 --- a/apps/files/src/components/FileEntry.vue +++ b/apps/files/src/components/FileEntry.vue @@ -27,12 +27,7 @@ :data-cy-files-list-row-name="source.basename" :draggable="canDrag" class="files-list__row" - @contextmenu="onRightClick" - @dragover="onDragOver" - @dragleave="onDragLeave" - @dragstart="onDragStart" - @dragend="onDragEnd" - @drop="onDrop"> + v-on="rowListeners"> @@ -110,7 +105,7 @@ import { showError } from '@nextcloud/dialogs' import { translate as t } from '@nextcloud/l10n' import { vOnClickOutside } from '@vueuse/components' import moment from '@nextcloud/moment' -import Vue from 'vue' +import Vue, { defineComponent } from 'vue' import { action as sidebarAction } from '../actions/sidebarAction.ts' import { getDragAndDropPreview } from '../utils/dragUtils.ts' @@ -132,7 +127,7 @@ import logger from '../logger.js' Vue.directive('onClickOutside', vOnClickOutside) -export default Vue.extend({ +export default defineComponent({ name: 'FileEntry', components: { @@ -194,6 +189,26 @@ export default Vue.extend({ }, computed: { + /** + * Conditionally add drag and drop listeners + * Do not add drag start and over listeners on renaming to allow to drag and drop text + */ + rowListeners() { + const conditionals = this.isRenaming + ? {} + : { + dragstart: this.onDragStart, + dragover: this.onDragOver, + } + + return { + ...conditionals, + contextmenu: this.onRightClick, + dragleave: this.onDragLeave, + dragend: this.onDragEnd, + drop: this.onDrop, + } + }, currentView(): View { return this.$navigation.active as View }, @@ -303,6 +318,10 @@ export default Vue.extend({ }, canDrag() { + if (this.isRenaming) { + return false + } + const canDrag = (node: Node): boolean => { return (node?.permissions & Permission.UPDATE) !== 0 } @@ -449,7 +468,12 @@ export default Vue.extend({ logger.debug('Drag ended') }, - async onDrop(event) { + async onDrop(event: DragEvent) { + // skip if native drop like text drag and drop from files names + if (!this.draggingFiles && !event.dataTransfer?.files?.length) { + return + } + event.preventDefault() event.stopPropagation() diff --git a/apps/files/src/components/FileEntry/FileEntryName.vue b/apps/files/src/components/FileEntry/FileEntryName.vue index 3848b3bb73d..6f31727fbc2 100644 --- a/apps/files/src/components/FileEntry/FileEntryName.vue +++ b/apps/files/src/components/FileEntry/FileEntryName.vue @@ -55,13 +55,15 @@