When clicking the toolbar of the ComboGrid, the combobox loses focus,
and instantly hides the picker.

To prevent that, we keep track of the mousedown event on the toolbar
(which happily comes before the focusLeave event), and prevent the
focusLeave propagation in that case.

Then on mouseup, we focus the combobox again, so that the nexct
focusLeave can trigger again.

Signed-off-by: Dominik Csapak <d.csa...@proxmox.com>
---
 www/manager6/form/ComboBoxSetStoreNode.js | 30 +++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/www/manager6/form/ComboBoxSetStoreNode.js 
b/www/manager6/form/ComboBoxSetStoreNode.js
index a654636b7..a127af3a5 100644
--- a/www/manager6/form/ComboBoxSetStoreNode.js
+++ b/www/manager6/form/ComboBoxSetStoreNode.js
@@ -29,6 +29,30 @@ Ext.define('PVE.form.ComboBoxSetStoreNode', {
        me.fireEvent('nodechanged', value);
     },
 
+    tbarMouseDown: function() {
+       this.mousePressed = true;
+    },
+
+    tbarMouseUp: function() {
+       let me = this;
+       delete this.mousePressed;
+       if (me.focusLeft) {
+           me.focus();
+           delete me.focusLeft;
+       }
+    },
+
+    // conditionally prevent the focusLeave handler to continue, preventing 
collapsing of the picker
+    onFocusLeave: function() {
+       let me = this;
+       me.focusLeft = true;
+       if (!me.mousePressed) {
+           me.callParent(arguments);
+       }
+
+       return undefined;
+    },
+
     initComponent: function() {
        let me = this;
 
@@ -37,6 +61,12 @@ Ext.define('PVE.form.ComboBoxSetStoreNode', {
            Ext.apply(me.listConfig ?? {}, {
                tbar: {
                    xtype: 'toolbar',
+                   listeners: {
+                       mousedown: me.tbarMouseDown,
+                       mouseup: me.tbarMouseUp,
+                       element: 'el',
+                       scope: me,
+                   },
                    items: [
                        {
                            xtype: "pveStorageScanNodeSelector",
-- 
2.30.2



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to