From 841cd9519f69c6ad72581f8d403050ccdef5206e Mon Sep 17 00:00:00 2001 From: Alexey Koshelev Date: Wed, 12 Nov 2025 14:22:56 +0300 Subject: [PATCH 1/7] [common] Fix bug 78267 --- apps/common/main/resources/less/shortcuts-dialog.less | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/apps/common/main/resources/less/shortcuts-dialog.less b/apps/common/main/resources/less/shortcuts-dialog.less index ec95597098..090284feb0 100644 --- a/apps/common/main/resources/less/shortcuts-dialog.less +++ b/apps/common/main/resources/less/shortcuts-dialog.less @@ -68,6 +68,8 @@ border: 1px solid @border-divider; box-shadow: 0 1px 0 0 @border-divider-ie; box-shadow: 0 1px 0 0 @border-divider; + color: @text-normal-ie; + color: @text-normal; } .action-keys-item-comma { display: flex; @@ -104,6 +106,15 @@ opacity: 1; } } + + &.selected { + button { + :not(:hover).icon { + background-position-x: -20px; + background-position-x: @button-small-active-icon-offset-x; + } + } + } } } From 1bfdd54e97b4e772a838f26acdd3a39883736492 Mon Sep 17 00:00:00 2001 From: Alexey Koshelev Date: Wed, 12 Nov 2025 16:13:27 +0300 Subject: [PATCH 2/7] [common] Add hint for locked shortcut in shortcut edit dialog --- apps/common/main/lib/view/ShortcutsDialog.js | 2 +- .../main/lib/view/ShortcutsEditDialog.js | 26 +++++++++++++------ .../main/resources/less/shortcuts-dialog.less | 7 +++++ apps/documenteditor/main/locale/en.json | 1 + 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/apps/common/main/lib/view/ShortcutsDialog.js b/apps/common/main/lib/view/ShortcutsDialog.js index bcad311326..1fe14c4a56 100644 --- a/apps/common/main/lib/view/ShortcutsDialog.js +++ b/apps/common/main/lib/view/ShortcutsDialog.js @@ -103,7 +103,7 @@ define([ '', '<% if (action.isLocked) { %>', '', '<% } else { %>', '' + ? ' ' : '' @@ -252,10 +250,21 @@ define([ placeHolder : me.txtInputPlaceholder, disabled : isLocked }); - const removeButton = new Common.UI.Button({ - el: $item.find('.remove-btn'), - }); - item.set({ keysInput: keysInput, removeBtn: removeButton }); + + let removeButton; + if(isLocked) { + $item.find('.lock-info-icon').tooltip({ + title: me.txtCantBeEdited, + placement: 'cursor', + zIndex : parseInt(me.$window.css('z-index')) + 10 + }); + } else { + removeButton = new Common.UI.Button({ + el: $item.find('.remove-btn') + }); + } + + item.set({ keysInput: keysInput, removeBtn: removeButton}); const $keysInput = $item.find('.keys-input input'); $keysInput.on('keydown', function(e) { @@ -480,7 +489,8 @@ define([ txtRestoreToDefault: 'Restore to default', txtTypeDesiredShortcut: 'Type desired shortcut', txtRestoreDescription: 'All shortcuts for action “%1” will be restored to deafult.', - txtRestoreContinue: 'Do you want to continue?' + txtRestoreContinue: 'Do you want to continue?', + txtCantBeEdited: 'This shortcut can’t be edited' }, Common.Views.ShortcutsEditDialog || {})) }); \ No newline at end of file diff --git a/apps/common/main/resources/less/shortcuts-dialog.less b/apps/common/main/resources/less/shortcuts-dialog.less index 090284feb0..97114cf059 100644 --- a/apps/common/main/resources/less/shortcuts-dialog.less +++ b/apps/common/main/resources/less/shortcuts-dialog.less @@ -158,6 +158,13 @@ flex: 1; .margin-right(8px); } + + .lock-info-icon { + width: @x-small-btn-icon-size-ie; + width: @x-small-btn-icon-size; + height: @x-small-btn-icon-size-ie; + height: @x-small-btn-icon-size; + } } .item:not(.first) { margin-top: 8px; diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index 549bc53fcd..43f1ff0a51 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -1197,6 +1197,7 @@ "Common.Views.ShortcutsEditDialog.txtRestoreToDefault": "Restore to default", "Common.Views.ShortcutsEditDialog.txtTitle": "Edit shortcut", "Common.Views.ShortcutsEditDialog.txtTypeDesiredShortcut": "Type desired shortcut", + "Common.Views.ShortcutsEditDialog.txtCantBeEdited": "This shortcut can’t be edited", "Common.Views.SignDialog.textBold": "Bold", "Common.Views.SignDialog.textCertificate": "Certificate", "Common.Views.SignDialog.textChange": "Change", From 8547091a9d0c5e5223a1bea6076fca28cd2a8cce Mon Sep 17 00:00:00 2001 From: Alexey Koshelev Date: Wed, 12 Nov 2025 18:00:42 +0300 Subject: [PATCH 3/7] [common] Fix lock when editing shortcuts --- .../main/lib/view/ShortcutsEditDialog.js | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/apps/common/main/lib/view/ShortcutsEditDialog.js b/apps/common/main/lib/view/ShortcutsEditDialog.js index c885f0eb70..ce919e2ecd 100644 --- a/apps/common/main/lib/view/ShortcutsEditDialog.js +++ b/apps/common/main/lib/view/ShortcutsEditDialog.js @@ -157,7 +157,7 @@ define([ }, /** - * Finds all actions that already have the given shortcut assigned. + * Finds all actions that currently use the specified shortcut and returns both the action and the shortcut. * * If `extraAction` is provided and its `extraAction.actionType` matches the current item, * the method will check `extraAction.shortcuts` instead of the original shortcuts. @@ -167,7 +167,7 @@ define([ * @param {Object} [extraAction] Optional object that can replace the shortcuts of a matching action. * @param {number} extraAction.actionType The type of the action to match. * @param {CAscShortcut[]} extraAction.shortcuts Custom list of shortcuts to check for this action. - * @returns {Object[]} Array of action objects that already use the given shortcut. + * @returns {Object[]} Array of objects containing `action` and the matching `shortcut`. */ _findAssignedActions: function(ascShortcut, extraAction) { const shortcutIndex = ascShortcut.asc_GetShortcutIndex(); @@ -184,17 +184,20 @@ define([ item.shortcuts = extraAction.shortcuts; } - const existsVisible = _.some(item.shortcuts, function(shortcut) { + const foundShortcut = _.find(item.shortcuts, function(shortcut) { return shortcut.ascShortcut.asc_GetShortcutIndex() == shortcutIndex && !shortcut.ascShortcut.asc_IsHidden(); }); - if (existsVisible) { - foundItems.push(item); + if (foundShortcut) { + foundItems.push({ + action: item.action, + shortcut: foundShortcut + }); } } - return _.map(foundItems, function(item) { return item.action; }); + return foundItems; }, /** @@ -387,19 +390,22 @@ define([ this.shortcutsCollection.each(function(item) { const ascShortcut = item.get('ascShortcut'); const assignedActionNames = []; - const assignedActions = me._findAssignedActions(ascShortcut, { + const assignedItem = me._findAssignedActions(ascShortcut, { actionType: me.options.action.type, shortcuts: me.shortcutsCollection.toJSON().slice(0, _.indexOf(me.shortcutsCollection.models, item)) }); const isDefaultShortcut = me._isDefaultShortcut(ascShortcut); const isDisabled = !isDefaultShortcut && - _.some(assignedActions, function(action) { return action.isLocked; }); + _.some(assignedItem, function(item) { + return item.action.isLocked || item.shortcut.ascShortcut.asc_IsLocked(); + }); isButtonDisabled = isButtonDisabled || isDisabled; - for (let i = 0; i < assignedActions.length; i++) { - const action = assignedActions[i]; - if(action.isLocked == isDisabled) { + for (let i = 0; i < assignedItem.length; i++) { + const action = assignedItem[i].action; + const ascShortcut = assignedItem[i].shortcut.ascShortcut; + if((action.isLocked || ascShortcut.asc_IsLocked()) == isDisabled) { assignedActionNames.push('“' + action.name + '”'); } } From bdf693a71578cad4510dc7d8fc959f38e633e7d1 Mon Sep 17 00:00:00 2001 From: Alexey Koshelev Date: Wed, 12 Nov 2025 19:34:02 +0300 Subject: [PATCH 4/7] [common] Fix focus for shortcut edit dialog --- apps/common/main/lib/view/ShortcutsEditDialog.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/apps/common/main/lib/view/ShortcutsEditDialog.js b/apps/common/main/lib/view/ShortcutsEditDialog.js index ce919e2ecd..1b90a7303a 100644 --- a/apps/common/main/lib/view/ShortcutsEditDialog.js +++ b/apps/common/main/lib/view/ShortcutsEditDialog.js @@ -103,7 +103,18 @@ define([ }, getDefaultFocusableComponent: function() { - return this.shortcutsCollection.at(0).get('keysInput'); + return this.getFirstFocusableComponent(); + }, + + getFirstFocusableComponent: function(right) { + const focusableItems = this.shortcutsCollection.filter(function(item) { + return item.get('removeBtn'); + }); + if(focusableItems.length > 0) { + return focusableItems[right ? focusableItems.length - 1 : 0].get('keysInput'); + } else { + return this.getFooterButtons()[0]; + } }, _setDefaults: function() { @@ -372,7 +383,7 @@ define([ if(me.shortcutsCollection.length == 0) { me.onAddShortcut(); } - me.$window.find('#shortcuts-list .item input').last().focus(); + me.getFirstFocusableComponent(true).focus(); }); }); this.fixHeight(true); From ffed19e4fbd11f1f86d87d7ea43d137ee40d44c9 Mon Sep 17 00:00:00 2001 From: Alexey Koshelev Date: Wed, 12 Nov 2025 20:37:28 +0300 Subject: [PATCH 5/7] For previous commit --- apps/common/main/lib/controller/Shortcuts.js | 4 +++ .../main/lib/view/ShortcutsEditDialog.js | 25 ++++++++++++------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/apps/common/main/lib/controller/Shortcuts.js b/apps/common/main/lib/controller/Shortcuts.js index 84b98b1a35..c6f31b9a11 100644 --- a/apps/common/main/lib/controller/Shortcuts.js +++ b/apps/common/main/lib/controller/Shortcuts.js @@ -594,6 +594,10 @@ define([ // weight = range for main key + “cost” of extra keys return keyIndex * 100 + extras; } + + if (first.ascShortcut.asc_IsLocked() && !second.ascShortcut.asc_IsLocked()) return -1; + if (!first.ascShortcut.asc_IsLocked() && second.ascShortcut.asc_IsLocked()) return 1; + let wFirst = getWeight(first.ascShortcut); let wSecond = getWeight(second.ascShortcut); diff --git a/apps/common/main/lib/view/ShortcutsEditDialog.js b/apps/common/main/lib/view/ShortcutsEditDialog.js index 1b90a7303a..8c056f8bf2 100644 --- a/apps/common/main/lib/view/ShortcutsEditDialog.js +++ b/apps/common/main/lib/view/ShortcutsEditDialog.js @@ -97,21 +97,19 @@ define([ getFocusedComponents: function() { const dynamicComponents = []; this.shortcutsCollection.each(function(record) { - dynamicComponents.push(record.get('keysInput'), record.get('removeBtn')); + if(record.get('removeBtn')) { + dynamicComponents.push(record.get('keysInput'), record.get('removeBtn')); + } }); return dynamicComponents.concat(this.getFooterButtons()); }, getDefaultFocusableComponent: function() { - return this.getFirstFocusableComponent(); - }, - - getFirstFocusableComponent: function(right) { - const focusableItems = this.shortcutsCollection.filter(function(item) { + const firstFocusableItem = this.shortcutsCollection.find(function(item) { return item.get('removeBtn'); }); - if(focusableItems.length > 0) { - return focusableItems[right ? focusableItems.length - 1 : 0].get('keysInput'); + if(firstFocusableItem) { + return firstFocusableItem.get('keysInput'); } else { return this.getFooterButtons()[0]; } @@ -379,11 +377,20 @@ define([ }); $item.find('.remove-btn').on('click', function() { + const removedIndex = me.shortcutsCollection.findIndex(function(record) { + return record == item; + }); me.shortcutsCollection.remove(item); if(me.shortcutsCollection.length == 0) { me.onAddShortcut(); } - me.getFirstFocusableComponent(true).focus(); + + let newFocusableIndex = removedIndex < me.shortcutsCollection.length ? removedIndex : removedIndex - 1; + if(me.shortcutsCollection.at(newFocusableIndex).get('removeBtn')) { + me.shortcutsCollection.at(newFocusableIndex).get('removeBtn').focus(); + } else { + me.getFooterButtons()[0].focus();; + } }); }); this.fixHeight(true); From 8407001da961cb8b910f72726e54f15f1d8d3d8e Mon Sep 17 00:00:00 2001 From: Konstantin Kireyev Date: Thu, 13 Nov 2025 02:02:03 +0500 Subject: [PATCH 6/7] fix bug 75998 --- apps/common/main/lib/view/RecentFiles.js | 2 +- .../main/resources/less/filemenu.less | 21 ++++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/apps/common/main/lib/view/RecentFiles.js b/apps/common/main/lib/view/RecentFiles.js index 37d7888cf2..47fc67cce1 100644 --- a/apps/common/main/lib/view/RecentFiles.js +++ b/apps/common/main/lib/view/RecentFiles.js @@ -81,7 +81,7 @@ define([ '
', '
', '
', - '<%= format %><% } else { %>blank<% } %>">', + ' 0) { %><%= format %><% } else { %>neutral<% } %>">', '
"img-format-<%=format %>"<% } else {%> "svg-file-recent"<%} %>>
', '
', '
', diff --git a/apps/pdfeditor/main/resources/less/filemenu.less b/apps/pdfeditor/main/resources/less/filemenu.less index 59b69c34d2..73ab020473 100644 --- a/apps/pdfeditor/main/resources/less/filemenu.less +++ b/apps/pdfeditor/main/resources/less/filemenu.less @@ -386,20 +386,21 @@ div { width: 100%; height: 100%; + + svg { + display: none; + width: 24px; + height: 30px; + + .pixel-ratio__2_5 & { + display: block; + } + } + div{ background: ~"url(@{common-image-const-path}/doc-formats/formats.png)"; background-size: 1200px 30px; - svg { - display: none; - width: 24px; - height: 30px; - - .pixel-ratio__2_5 & { - display: block; - } - } - &:not(.svg-file-recent) { .pixel-ratio__1_25 & { background-image: ~"url(@{common-image-const-path}/doc-formats/formats@1.25x.png)"; From 38fa280402029d324ac96b288f076ec0548e2eee Mon Sep 17 00:00:00 2001 From: Konstantin Kireyev Date: Thu, 13 Nov 2025 22:02:59 +0500 Subject: [PATCH 7/7] remove optional chain --- apps/common/main/lib/view/RecentFiles.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/common/main/lib/view/RecentFiles.js b/apps/common/main/lib/view/RecentFiles.js index 47fc67cce1..f535f80bfc 100644 --- a/apps/common/main/lib/view/RecentFiles.js +++ b/apps/common/main/lib/view/RecentFiles.js @@ -81,7 +81,7 @@ define([ '
', '
', '
', - ' 0) { %><%= format %><% } else { %>neutral<% } %>">', + ' 0) { %><%= format %><% } else { %>neutral<% } %>">', '
"img-format-<%=format %>"<% } else {%> "svg-file-recent"<%} %>>
', '
', '
',