loleaflet/src/control/Control.LokDialog.js | 63 +++++++++++++++++------------ 1 file changed, 38 insertions(+), 25 deletions(-)
New commits: commit babc178eb1ca3f923c79fd55481ef0e2f13cb921 Author: gokaysatir <gokaysa...@collabora.com> AuthorDate: Wed Jul 15 14:01:33 2020 +0300 Commit: Henry Castro <hcas...@collabora.com> CommitDate: Wed Jul 15 16:47:46 2020 +0200 loleaflet: lokDialog children are mispositioned bug. Change-Id: Ib2d530d3e4d7f10abe8c34455cf632f509df62a7 Reviewed-on: https://gerrit.libreoffice.org/c/online/+/98829 Tested-by: Jenkins Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Henry Castro <hcas...@collabora.com> diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js index a9c16e98f..9fd9dc7ff 100644 --- a/loleaflet/src/control/Control.LokDialog.js +++ b/loleaflet/src/control/Control.LokDialog.js @@ -327,8 +327,7 @@ L.Control.LokDialog = L.Control.extend({ this._dialogs[parentId].childid = e.id; this._dialogs[parentId].childwidth = width; this._dialogs[parentId].childheight = height; - this._dialogs[parentId].childx = left; - this._dialogs[parentId].childy = top; + if (e.winType === 'tooltip') this._dialogs[parentId].childistooltip = true; else @@ -338,13 +337,12 @@ L.Control.LokDialog = L.Control.extend({ } } - // All other callbacks doen't make sense without an active dialog. + // All other callbacks don't make sense without an active dialog. if (!(this._isOpen(e.id) || this._getParentId(e.id))) { if (e.action == 'close' && window.mobileDialogId == e.id) { window.mobileDialogId = undefined; this._map.fire('closemobilewizard'); } - return; } @@ -1551,13 +1549,11 @@ L.Control.LokDialog = L.Control.extend({ // Make sure the child is not trimmed on the right. var width = this._dialogs[parentId].childwidth; - var left = this._dialogs[parentId].childx; - var dialogContainer = L.DomUtil.get(strId).parentNode; - if (left + width > dialogContainer.clientWidth) { - // Align the right of the child to the right of the parent. - left -= Math.max(0, (left + width) - dialogContainer.clientWidth); - this._dialogs[parentId].childx = left; - L.DomUtil.setStyle(canvas, 'left', left + 'px'); + var left = parseInt(canvas.style.left); + var leftPos = left + width; + if (leftPos > window.innerWidth) { + var newLeft = window.innerWidth - width - 20; + L.DomUtil.setStyle(canvas, 'left', newLeft + 'px'); } // The image is rendered per the HiDPI scale we used @@ -1673,27 +1669,44 @@ L.Control.LokDialog = L.Control.extend({ _createDialogChild: function(childId, parentId, top, left) { var strId = this._toStrId(parentId); - var dialogContainer = L.DomUtil.get(strId).parentNode; + var dialogContainer = L.DomUtil.get(strId); var floatingCanvas = L.DomUtil.create('canvas', 'lokdialogchild-canvas', dialogContainer); $(floatingCanvas).hide(); // Hide to avoid flickering while we set the dimensions. - // Since child windows are now top-level, their 'top' offset - // needs adjusting. If we are in a dialog, our top is from the - // dialog body, not the title bar, which is a separate div. - // This doesn't apply for context menus, which don't have titles. - var dialogTitle = $('.lokdialog_notitle'); - if (dialogTitle != null && dialogTitle.length == 0) { - var dialogTitleBar = $('.ui-dialog-titlebar'); - top += dialogTitleBar.outerHeight(); - } - floatingCanvas.id = strId + '-floating'; - L.DomUtil.setStyle(floatingCanvas, 'position', 'absolute'); - L.DomUtil.setStyle(floatingCanvas, 'left', (left - 1) + 'px'); // Align drop-down list with parent. - L.DomUtil.setStyle(floatingCanvas, 'top', top + 'px'); + L.DomUtil.setStyle(floatingCanvas, 'position', 'fixed'); + L.DomUtil.setStyle(floatingCanvas, 'z-index', '11'); L.DomUtil.setStyle(floatingCanvas, 'width', '0px'); L.DomUtil.setStyle(floatingCanvas, 'height', '0px'); + /* + Some notes: + * Sidebar windows' child positions are relative to their container (sidebar itself). + * Modal windows' child positions are relative to page borders. + * So this code adapts to it. + */ + var containerTop = dialogContainer.getBoundingClientRect().top + dialogContainer.ownerDocument.defaultView.pageYOffset; + var containerLeft = dialogContainer.getBoundingClientRect().left + dialogContainer.ownerDocument.defaultView.pageXOffset; + var grandParentID = dialogContainer.parentNode.id; + if (grandParentID.includes('sidebar-panel')) + { + // This is a sidebar. + L.DomUtil.setStyle(floatingCanvas, 'left', (containerLeft + left) + 'px'); + L.DomUtil.setStyle(floatingCanvas, 'top', (containerTop + top) + 'px'); + } + else if (grandParentID.includes('calc-inputbar')) { + // This is the calculator input bar. + L.DomUtil.setStyle(floatingCanvas, 'left', (containerLeft + left) + 'px'); + L.DomUtil.setStyle(floatingCanvas, 'top', (containerTop + top - 20) + 'px'); + } + else + { + // Add header height.. + var addition = 40; + L.DomUtil.setStyle(floatingCanvas, 'left', left + 'px'); + L.DomUtil.setStyle(floatingCanvas, 'top', (top + addition) + 'px'); + } + // attach events this._setupChildEvents(childId, floatingCanvas); }, _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits