summaryrefslogtreecommitdiffstats
path: root/browser
diff options
context:
space:
mode:
authorSzymon Kłos <szymon.klos@collabora.com>2022-06-09 10:51:00 +0200
committerSzymon Kłos <eszkadev@gmail.com>2022-06-13 15:16:13 +0200
commita487b5d327592125b159ec85a28c30cd586e789f (patch)
tree8862feb8ac7773d5a52c5e9f669c215e91adf9b2 /browser
parentcursor: hide current not all (diff)
downloadonline-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.js22
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,