Commit 59f16d6b authored by Alexander.Trofimov's avatar Alexander.Trofimov

fix bug 34575

parent daedd0ea
......@@ -314,23 +314,42 @@ var editor;
spreadsheet_api.prototype.saveCheck = function() {
return !(!this.canSave || this.isChartEditor || c_oAscAdvancedOptionsAction.None !== this.advancedOptionsAction || this.isLongAction());
};
spreadsheet_api.prototype.asc_Save = function (isAutoSave) {
spreadsheet_api.prototype.asc_Save = function (isAutoSave, isUndoRequest, isIdle) {
this.IsUserSave = !isAutoSave;
if (!this.saveCheck()) {
return false;
} else if (!(this.asc_isDocumentCanSave() || this.collaborativeEditing.haveOtherChanges() || this.canUnlockDocument)) {
}
if (!(this.asc_isDocumentCanSave() || this.collaborativeEditing.haveOtherChanges() || this.canUnlockDocument)) {
if (this.isForceSaveOnUserSave && this.IsUserSave) {
this.forceSave();
}
return false;
}
if (this.IsUserSave) {
this.sync_StartAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
var tmpHandlers;
if (isIdle) {
tmpHandlers = this.wbModel.handlers.handlers['asc_onError'];
this.wbModel.handlers.handlers['asc_onError'] = null;
}
/* Нужно закрыть редактор (до выставления флага canSave, т.к. мы должны успеть отправить
asc_onDocumentModifiedChanged для подписки на сборку) Баг http://bugzilla.onlyoffice.com/show_bug.cgi?id=28331 */
this.asc_closeCellEditor();
if (!this.asc_closeCellEditor()) {
if (isIdle) {
this.asc_closeCellEditor(true);
} else {
return false;
}
}
if (isIdle) {
this.wbModel.handlers.handlers['asc_onError'] = tmpHandlers;
}
if (this.IsUserSave) {
this.sync_StartAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
}
// Не даем пользователю сохранять, пока не закончится сохранение
this.canSave = false;
......@@ -2061,9 +2080,11 @@ var editor;
};
spreadsheet_api.prototype.asc_closeCellEditor = function (cancel) {
var result = true;
if (this.wb) {
this.wb.closeCellEditor(cancel);
result = this.wb.closeCellEditor(cancel);
}
return result;
};
......@@ -3054,14 +3075,15 @@ var editor;
}
};
spreadsheet_api.prototype._onUpdateDocumentCanSave = function() {
// Можно модифицировать это условие на более быстрое (менять самим состояние в аргументах, а не запрашивать каждый раз)
var tmp = History.Have_Changes() || (this.collaborativeEditing.getCollaborativeEditing() && 0 !== this.collaborativeEditing.getOwnLocksLength());
if (tmp !== this.isDocumentCanSave) {
this.isDocumentCanSave = tmp;
this.handlers.trigger('asc_onDocumentCanSaveChanged', this.isDocumentCanSave);
}
};
spreadsheet_api.prototype._onUpdateDocumentCanSave = function () {
// Можно модифицировать это условие на более быстрое (менять самим состояние в аргументах, а не запрашивать каждый раз)
var tmp = History.Have_Changes() || (this.collaborativeEditing.getCollaborativeEditing() &&
0 !== this.collaborativeEditing.getOwnLocksLength()) || this.asc_getCellEditMode();
if (tmp !== this.isDocumentCanSave) {
this.isDocumentCanSave = tmp;
this.handlers.trigger('asc_onDocumentCanSaveChanged', this.isDocumentCanSave);
}
};
spreadsheet_api.prototype._onCheckCommentRemoveLock = function(lockElem) {
var res = false;
......
......@@ -1913,14 +1913,16 @@
}
};
// Останавливаем ввод данных в редакторе ввода
WorkbookView.prototype.closeCellEditor = function(cancel) {
var ws = this.getWorksheet();
// Останавливаем ввод данных в редакторе ввода
if (ws.getCellEditMode() && !this.cellEditor.formulaIsOperator() /*&& !this.cellFormulaEnterWSOpen*/) {
this._onStopCellEditing(cancel);
}
};
// Останавливаем ввод данных в редакторе ввода
WorkbookView.prototype.closeCellEditor = function (cancel) {
var result = true;
var ws = this.getWorksheet();
// Останавливаем ввод данных в редакторе ввода
if (ws.getCellEditMode()) {
result = this._onStopCellEditing(cancel);
}
return result;
};
WorkbookView.prototype.restoreFocus = function() {
if (window["NATIVE_EDITOR_ENJINE"]) {
......@@ -2548,8 +2550,6 @@
ws.objectRender.controller.insertHyperlink(options);
}
} else {
// На всякий случай проверка (вдруг кто собирается вызвать...)
this.closeCellEditor();
ws.setSelectionInfo("hyperlink", options);
this.restoreFocus();
}
......
......@@ -649,7 +649,7 @@
extendSession = false;
}
if (!extendSession) {
if (t.asc_Save()) {
if (t.asc_Save(false, false, true)) {
//enter view mode because save async
t.setViewModeDisconnect();
t.disconnectOnSave = {code: code, reason: reason};
......
......@@ -1958,8 +1958,8 @@ background-repeat: no-repeat;\
};
asc_docs_api.prototype.saveCheck = function() {
return true === this.canSave && !this.isLongAction();
}
asc_docs_api.prototype.asc_Save = function(isAutoSave, isUndoRequest)
};
asc_docs_api.prototype.asc_Save = function(isAutoSave, isUndoRequest, isIdle)
{
var res = false;
this.IsUserSave = !isAutoSave;
......
......@@ -1939,8 +1939,8 @@ background-repeat: no-repeat;\
};
asc_docs_api.prototype.saveCheck = function() {
return true === this.canSave && !this.isLongAction();
}
asc_docs_api.prototype.asc_Save = function(isAutoSave, isUndoRequest)
};
asc_docs_api.prototype.asc_Save = function(isAutoSave, isUndoRequest, isIdle)
{
var res = false;
this.IsUserSave = !isAutoSave;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment