diff options
author | Szymon Kłos <szymon.klos@collabora.com> | 2022-06-09 10:51:00 +0200 |
---|---|---|
committer | Szymon Kłos <eszkadev@gmail.com> | 2022-06-13 15:16:13 +0200 |
commit | a487b5d327592125b159ec85a28c30cd586e789f (patch) | |
tree | 8862feb8ac7773d5a52c5e9f669c215e91adf9b2 /browser | |
parent | cursor: hide current not all (diff) | |
download | online-a487b5d327592125b159ec85a28c30cd586e789f.tar.gz online-a487b5d327592125b159ec85a28c30cd586e789f.zip |
jsdialog: use correct element to close popup
For toolitems with dropdowns we should toggle the button.
Use correct parent so we don't use button from other component.
Later we send toggle event to properly close the popup on the server.
example: Calc sidebar, Underline popup
Before this patch when we clicked in outside the popup it dissapeared
but app was completly blocked.
Signed-off-by: Szymon Kłos <szymon.klos@collabora.com>
Change-Id: I124a41361df305931c66047a8799ce03393b67de
Diffstat (limited to 'browser')
-rw-r--r-- | browser/src/control/Control.JSDialog.js | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/browser/src/control/Control.JSDialog.js b/browser/src/control/Control.JSDialog.js index b19b5e834e..c0fa6cd358 100644 --- a/browser/src/control/Control.JSDialog.js +++ b/browser/src/control/Control.JSDialog.js @@ -68,6 +68,13 @@ L.Control.JSDialog = L.Control.extend({ var builder = this.dialogs[id].builder; if (sendCloseEvent) { + // try to toggle the dropdown first + if (clickToClose && L.DomUtil.hasClass(clickToClose, 'has-dropdown')) { + var dropdownArrow = clickToClose.querySelector('.arrowbackground'); + dropdownArrow.click(); + return; + } + if (clickToClose && L.DomUtil.hasClass(clickToClose, 'menubutton')) clickToClose.click(); else @@ -239,6 +246,8 @@ L.Control.JSDialog = L.Control.extend({ if (clickToCloseId && clickToCloseId.indexOf('.uno:') === 0) clickToCloseId = clickToCloseId.substr('.uno:'.length); + var popupParent = data.popupParent ? L.DomUtil.get(data.popupParent) : null; + var setupPosition = function(force) { if (isModalPopup && data.popupParent) { // in case of toolbox we want to create popup positioned by toolitem not toolbox @@ -324,13 +333,24 @@ L.Control.JSDialog = L.Control.extend({ console.error('cannot get focus for widget: "' + focusWidgetId + '"'); }; + var clickToCloseElement = null; + if (clickToCloseId && popupParent) { + clickToCloseElement = popupParent.querySelector('[id=\'' + clickToCloseId + '\']'); + // we avoid duplicated ids in unotoolbuttons - try with class + if (!clickToCloseElement) + clickToCloseElement = popupParent.querySelector('.uno' + clickToCloseId); + } else if (clickToCloseId) { + // fallback + clickToCloseElement = L.DomUtil.get(clickToCloseId); + } + this.dialogs[data.id] = { container: container, builder: builder, tabs: tabs, startX: posX, startY: posY, - clickToClose: clickToCloseId ? L.DomUtil.get(clickToCloseId) : null, + clickToClose: clickToCloseElement, overlay: overlay, isPopup: isModalPopup, invalidated: false, |